diff --git a/NotProgramming/DPZ/DPZ_RUDNICKI_ESEJ.pdf b/NotProgramming/DPZ/DPZ_RUDNICKI_ESEJ.pdf new file mode 100644 index 00000000..74fe3647 Binary files /dev/null and b/NotProgramming/DPZ/DPZ_RUDNICKI_ESEJ.pdf differ diff --git a/NotProgramming/DPZ/characters.sh b/NotProgramming/DPZ/characters.sh new file mode 100755 index 00000000..f9323c21 --- /dev/null +++ b/NotProgramming/DPZ/characters.sh @@ -0,0 +1,19 @@ +#!/bin/bash + +FILE="esej" +INTERVAL=2 # seconds between updates +PREV_COUNT=0 + +while true; do + pdflatex -interaction=nonstopmode $FILE.tex > /dev/null 2>&1 + CURRENT_COUNT=$(pdftotext $FILE.pdf - | wc -m) + + if [ "$CURRENT_COUNT" -ne "$PREV_COUNT" ]; then + clear + echo "Character count: $CURRENT_COUNT" + PREV_COUNT=$CURRENT_COUNT + fi + + sleep $INTERVAL +done + diff --git a/NotProgramming/DPZ/esej.pdf b/NotProgramming/DPZ/esej.pdf new file mode 100644 index 00000000..b226aa8e Binary files /dev/null and b/NotProgramming/DPZ/esej.pdf differ diff --git a/NotProgramming/DPZ/esej.tex b/NotProgramming/DPZ/esej.tex new file mode 100644 index 00000000..e4907e6e --- /dev/null +++ b/NotProgramming/DPZ/esej.tex @@ -0,0 +1,77 @@ +\documentclass{article}[12pt] +\usepackage[T1]{fontenc} +\usepackage[polish]{babel} +\usepackage[utf8]{inputenc} +\usepackage{graphicx} +\usepackage[table]{xcolor} +\usepackage{enumitem} +\usepackage{tabularx} + + + +\title{Doskonała Praca Zespołowa esej} +\author{Krzysztof Rudnicki, 307585} + +\begin{document} +\definecolor{lightgreen}{rgb}{0.9, 1, 0.9} +\definecolor{lightred}{rgb}{1, 0.9, 0.9} +\maketitle +\paragraph{Wstęp} +W ramach tego eseju opiszę działanie zespołu zajmującego się zarządzaniem Kołem Naukowym Twórców Gier Polygon (dalej KNTG Polygon lub Polygon), największym studenckim kołem twórców gier w Polsce, którego byłem przez rok wiceprezesem i przez rok prezesem. +\paragraph{Zespół} +KNTG Polygon jest zarządzany przez dwie grupy w hierarchii: niższą i liczniejszą, tak zwanych „magów”. oraz wyższą i mniej liczną, tak zwaną „kapitułą”, istnieje również specjalna grupa „emerytowanych” magów oraz członków kapituły - valhalla, pełniąca właściwie tylko funkcję doradczą średnio na Polygonie jest aktywnych około 20-25 magów oraz 5-7 członków kapituły +\paragraph{Role} +\begin{itemize} +\item Socjal Media - Ta osoba zajmuje się tworzeniem treści na media społecznościowe koła - facebook, discord, twitter itp. +\item „Ogarniacz” w dniu wykładu - co tydzień w środę, koło spotyka się na wykładzie, ta osoba jest odpowiedzialna za zdobycie karty do sali, przygotowanie sprzętu do prezentacji oraz zapowiadanie kolejnych wykładowców +\item Rezerwacja barów - Po wykładach Polygon udaje się na integrację w liczbie około 30-50 osób, zadaniem tej osoby jest znalezienie i zarezerwowanie baru na tyle osób +\item Załatwianie wykładów - Kontaktuje się z wykładowcami, szuka potencjalnych wykładowców, ustala terminy wykładów +\item Nadzór projektów mentorskich - Polygon organizuje projekty gdzie w ciągu jednego semestru w grupie losowych osób tworzy się grę, ta osoba zajmuje się przydzielaniem osób do grup i odpowiadaniem na ich potrzeby +\item Wolontariusz - Koło organizuje Game Jamy - imprezy podczas których w ciągu 1-3 dni tworzy się grę, podstawą udanej organizacji jest praca wolontariuszy, przenoszenie rzeczy z miejsca na miejsce, sprzątanie, rozdawanie koszulek, pilnowanie wejśc i reagowanie na potrzeby uczestników +\item Organizator - Zajmuje się przydzielaniem i nadzorowaniem wolontariuszy +\item Prezes - Najważniesza osoba w kole, zajmuje się nadzorowaniem całego koła i kontaktami z uczelnią +\end{itemize} +\begin{figure}[h] +\caption{Uproszczona struktura Polygonu} +\includegraphics[width=\textwidth]{polygon_org.drawio.png} +\end{figure} +\paragraph{Struktura} +Pomimo podziału na magów, kapitułę i prezesa, struktura Polygonu jest bardzo płaska, każdy, również zwykły członek może wyjść z dowolną propozycją i bardzo często może ją od razu realizować, maksymalizuje to kreatywność, kosztem produktywności +\paragraph{Rozwój zespołu} +Zespół magów i kapituły jest już rozwinięty i nowi członkowie dołączają do niego poprzez integrację z obecnymi magami i członkami kapituły, pozwala to na bardzo naturalne integrowanie zamiast tworzenia zupełnie nowego zespołu co semestr. +\paragraph{Cel} +Celem koła jest jego rozwój na wszystkich płaszczyznach, tworzenia większych wydarzeń, zapraszania bardziej prestiżowych wykładowców, zbierania więcej ludzi na wykłady, tworzenie lepszych projektów mentorskich, konkretny plan na dany semestr ustala Kapituła. +\paragraph{Normy zespołowe} +Członkowie Polygonu ubierają się w lużny sposób, typowy dla branży programistycznej, nie ma narzuconego stylu ubierania się, komunikacja odbywa się na równej, przyjacielskiej zasadzie (domyślnie przechodzi się na „Ty”), unikalną cechą Polygonu jest posługiwanie się przede wszystkim pseudonimami (podobnymi do "nicków" z gier), jedyną narzuconą regułą jest właśnie potrzeba posiadania pseudonimu. +\paragraph{Integracja} +Co tydzień w środę po wykładzie następuje integracja nazywana „Piwem”, pomimo swojej nazwy można w niej uczestniczyć również nie pijąc piwa, przez wielu uczestników uważana za najważniejszą część spotkania, niektórzy chodzą tylko na piwo, poza tym Polygon organizuje również ogniska i game jamy. W obrębie kapituły oraz magów organizuje się również regularne spotkania +\begin{table}[h] +\caption{Porównanie mocnych i słabych stron Polygonu} +\centering +\begin{tabularx}{\textwidth}{|X|X|} +\hline +\cellcolor{lightgreen}\textbf{Mocne} & \cellcolor{lightred}\textbf{Słabe} \\ \hline +\begin{itemize}[leftmargin=*] +\item Brak konkurencji wewnątrz zespołu +\item Pozycja lidera - Prezesa +\item Szczera komunikacja +\item Dostęp do informacji +\item Szacunek +\item Przyjazna atmosfera +\item Dobre normy zespołowe +\item Dobre, sprawdzone metody integracji +\end{itemize} & +\begin{itemize}[leftmargin=*] +\item Często mało konkretne cele +\item Często brak jasności w podziale ról +\item Brak jakichkolwiek kosztów wejścia +\item Pełny wolontariat, często prowadzący do wyboru innych priorytetów przez członków zespołu +\item Powolna wymiana na średnim szczeblu (magów) +\item Brak zastosowania jakichkolwiek metod heurestycznych +\item Brak badania ról zadaniowych poszczególnych członków +\end{itemize} \\ \hline +\end{tabularx} +\label{table:comparison} +\end{table} + +\end{document} \ No newline at end of file diff --git a/NotProgramming/DPZ/polygon_org b/NotProgramming/DPZ/polygon_org new file mode 100644 index 00000000..f8d976df --- /dev/null +++ b/NotProgramming/DPZ/polygon_org @@ -0,0 +1,31 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/NotProgramming/DPZ/polygon_org.drawio.png b/NotProgramming/DPZ/polygon_org.drawio.png new file mode 100644 index 00000000..dae17313 Binary files /dev/null and b/NotProgramming/DPZ/polygon_org.drawio.png differ diff --git a/NotProgramming/MOM/drugi_zbior_danych.dat b/NotProgramming/MOM/drugi_zbior_danych.dat new file mode 100644 index 00000000..7c34ab51 --- /dev/null +++ b/NotProgramming/MOM/drugi_zbior_danych.dat @@ -0,0 +1,43 @@ +data; + +set Samochody := s1, s2, s3, s4, s5, s6, s7; + +set Ladowarki := l1, l2, l3, l4; + +param E := +s1 l1 6 s1 l2 6 s1 l3 6 s1 l4 6 +s2 l1 6 s2 l2 6 s2 l3 6 s2 l4 6 +s3 l1 6 s3 l2 6 s3 l3 6 s3 l4 6 +s4 l1 6 s4 l2 6 s4 l3 6 s4 l4 6 +s5 l1 6 s5 l2 6 s5 l3 6 s5 l4 6 +s6 l1 6 s6 l2 6 s6 l3 6 s6 l4 6 +s7 l1 6 s7 l2 6 s7 l3 6 s7 l4 6 ; + +param D := +s1 l1 4 s1 l2 2 s1 l3 2 s1 l4 1 +s2 l1 6 s2 l2 3 s2 l3 3 s2 l4 1.5 +s3 l1 1 s3 l2 0.5 s3 l3 0.5 s3 l4 0.25 +s4 l1 8 s4 l2 4 s4 l3 4 s4 l4 2 +s5 l1 10 s5 l2 5 s5 l3 5 s5 l4 2.5 +s6 l1 18 s6 l2 9 s6 l3 9 s6 l4 4.5 +s7 l1 12 s7 l2 6 s7 l3 6 s7 l4 3; + +param O := +s1 10 +s2 10 +s3 12 +s4 14 +s5 12 +s6 12 +s7 10; + +param Z := +s1 25 +s2 25 +s3 50 +s4 100 +s5 25 +s6 50 +s7 100; + +end; \ No newline at end of file diff --git a/NotProgramming/MOM/implementacja_gold.mod b/NotProgramming/MOM/implementacja_gold.mod index e1fe0c08..99298f1b 100644 --- a/NotProgramming/MOM/implementacja_gold.mod +++ b/NotProgramming/MOM/implementacja_gold.mod @@ -4,122 +4,46 @@ set Ladowarki; # 2. Parametery # Najwczesniejszy mozliwy czas rozpoczecia ladowania samochodu s na ladowarce l -param E{s in Samochody, l in Ladowarki}; +param E{s in Samochody}; # Czas ladowania samochodu s na ladowarce l param D{s in Samochody, l in Ladowarki}; # Czas odjazdu samochodu s param O{s in Samochody}; -# Zysk z realizacji kursu przez samochd s +# Zysk z realizacji kursu przez samochod s param Z{s in Samochody}; # Zmienna decyzyjna -# zmienna okreslajaca godzine rozpoczecia ladowania samochodu s na ladowarce l -var u{s in Samochody, l in Ladowarki}, >= 0, <= 24; +# zmienna okreslajaca godzine rozpoczecia ladowania samochodu s +var u{s in Samochody}, >= 0, <= 24; # zmienna binarna okreslajaca czy kurs zostanie wykonany var y{s in Samochody}, binary; -# zmienna binarna okreslajaca czy samochd i jest ladowany po samochodzie j na ladowarce l -var v{i in Samochody, j in Samochody, l in Ladowarki}, binary; -# zmienna binarna okreslajaca czy samochd s jest ladowany jako pierwszy na ladowarce l -var p{s in Samochody, l in Ladowarki}, binary; -# zmienna binarna okreslajacy czy samochd s jest ladowany na ladowarce l +# zmienna binarna okreslajaca czy samochod i jest ladowany po samochodzie j na ladowarce l +var v{i in Samochody, j in Samochody}, binary; +# zmienna binarna okreslajacy czy samochod s jest ladowany na ladowarce l var k{s in Samochody, l in Ladowarki}, binary; -var z{i in Samochody, l in Ladowarki}, >= 0, <= 24; -var x{i in Samochody, j in Samochody, l in Ladowarki}, >= 0, <= 24; -var a{i in Samochody, l in Ladowarki}, >= 0, <= 24; -# a = (u[s, l] + D[s, l]) * k[s, l] # Funkcja celu maximize Q: sum {s in Samochody} y[s]*Z[s]; # Ograniczenia subject to - # Samochd nie moze rozpoczac swojego ladownia przed najwczesniejszym mozliwym czasie ladowania. - Ogr_1{s in Samochody, l in Ladowarki}: - u[s,l] >= E[s, l]; - # Samochd moze byc ladowany maksymalnie na jednej ladowarce - Ogr_2{s in Samochody}: - sum {l in Ladowarki} k[s, l] = y[s]; + # Samochod nie moze rozpoczac swojego ladownia przed najwczesniejszym mozliwym czasie ladowania. + Ogr_1{s in Samochody}: + u[s] >= E[s] * y[s]; + # Samochod moze byc ladowany maksymalnie na jednej ladowarce + Ogr_2{s in Samochody}: + sum {l in Ladowarki} k[s, l] = y[s]; # Ladowanie danego samochodu na danej ladowarce moze rozpoczac sie tylko po zakonczeniu poprzedniego ladowania. - Ogr_3{i in Samochody, j in Samochody, l in Ladowarki: (i != j)}: - z[i,l] >= x[i, j, l]; - # k[i, l] * u[i, l] >= [u[j, l] + D[j, l]) * v[i, j, l]) - Ogr_4{i in Samochody, l in Ladowarki}: - v[i, i, l] = 0; - # k[i, l] * u[i, l] >= [u[j, l] + D[j, l]) * v[i, j, l]) - # Samochd realizujacy dostawe musi ukonczyc ladowanie przed godzina odjazdu - Ogr_5{s in Samochody}: - sum {l in Ladowarki} a[s, l] <= O[s]; - # (u[s, l] + D[s, l]) * k[s, l] <= O[s]; - Ogr_6{j in Samochody}: - sum {i in Samochody, l in Ladowarki} v[i, j, l] <= 1; - Ogr_7{i in Samochody}: - sum {j in Samochody, l in Ladowarki} v[i, j, l] <= 1; - # Samochd musi byc albo ladowany jako pierwszy albo byc ktryms w kolejnosci ladowania albo nie byc w ogle ladowanym. - Ogr_8{j in Samochody, l in Ladowarki}: - p[j, l] + sum {i in Samochody} v[i, j, l] = k[j, l]; - # Samochd w danej kolejnosci, moze byc tylko raz na wszystkich ladowarkach - Ogr_9{l in Ladowarki}: - sum {s in Samochody} p[s, l] <= 1; - ### Linearyzacja z - Ogr_z1{i in Samochody, l in Ladowarki}: - z[i,l] <= 24*k[i,l]; - Ogr_z2{i in Samochody, l in Ladowarki}: - z[i,l] <= u[i,l]; - Ogr_z3{i in Samochody, j in Samochody, l in Ladowarki}: - z[i,l] >= u[i,l]-24*(1-k[i,l]); - ### Linearyzacja x - Ogr_x1{i in Samochody, j in Samochody, l in Ladowarki}: - x[i, j, l] <= 24*v[i, j, l]; - Ogr_x2{i in Samochody, j in Samochody, l in Ladowarki}: - x[i, j, l] <= (u[j,l] + D[j, l]); - Ogr_x3{i in Samochody, j in Samochody, l in Ladowarki}: - x[i, j, l] >= (u[j,l] + D[j, l])-24*(1-v[i, j, l]); - ### Linearyzacja a - Ogr_a1{s in Samochody, l in Ladowarki}: - a[s, l] <= 24*k[s, l]; - Ogr_a2{s in Samochody, l in Ladowarki}: - a[s, l] <= (u[s, l] + D[s, l]); - Ogr_a3{s in Samochody, l in Ladowarki}: - a[s, l] >= (u[s, l] + D[s, l]) - 24*(1-k[s, l]); - + Ogr_3{i in Samochody, j in Samochody, l in Ladowarki: i != j}: + u[i] + 24 * (1 - v[i, j]) >= (u[j] + D[j, l]) - 48 * (2 - k[j, l] - k[i, l]); + Ogr_4{i in Samochody, j in Samochody, l in Ladowarki: i != j}: + v[i, j] + v[j, i] >= k[i, l] + k[j, l] - 1; + # Samochod realizujacy dostawe musi ukonczyc ladowanie przed godzina odjazdu + Ogr_5{s in Samochody}: + u[s] + sum {l in Ladowarki} (D[s, l] * k[s, l]) <= O[s] * y[s]; + solve; display Q; -display {s in Samochody, l in Ladowarki: k[s, l] > 0}: u[s, l]; +display {s in Samochody, l in Ladowarki: k[s, l] > 0}: u[s]; display {s in Samochody}: y[s]; -display {i in Samochody, j in Samochody, l in Ladowarki: v[i, j, l] > 0}: v[i, j, l]; -display {s in Samochody, l in Ladowarki}: k[s, l]; - -data; - -set Samochody := s1, s2, s3, s4, s5; - -set Ladowarki := l1, l2, l3; - -param E := -s1 l1 0 s1 l2 0 s1 l3 0 -s2 l1 0 s2 l2 0 s2 l3 0 -s3 l1 0 s3 l2 0 s3 l3 0 -s4 l1 0 s4 l2 0 s4 l3 0 -s5 l1 2 s5 l2 2 s5 l3 2; - -param D := -s1 l1 4 s1 l2 4 s1 l3 8 -s2 l1 1 s2 l2 1 s2 l3 2 -s3 l1 5 s3 l2 5 s3 l3 10 -s4 l1 3 s4 l2 3 s4 l3 6 -s5 l1 6 s5 l2 6 s5 l3 12; - -param O := -s1 8 -s2 5 -s3 6 -s4 4 -s5 9; - -param Z := -s1 100 -s2 10 -s3 200 -s4 20 -s5 330; - -end; \ No newline at end of file +display {i in Samochody, j in Samochody: v[i, j] > 0}: v[i, j]; +display {s in Samochody, l in Ladowarki: k[s, l] > 0}: k[s, l]; \ No newline at end of file diff --git a/NotProgramming/MOM/implementacja3.mod b/NotProgramming/MOM/implementacja_model_podstawowy.mod similarity index 51% rename from NotProgramming/MOM/implementacja3.mod rename to NotProgramming/MOM/implementacja_model_podstawowy.mod index 9a47eebc..482a0c68 100644 --- a/NotProgramming/MOM/implementacja3.mod +++ b/NotProgramming/MOM/implementacja_model_podstawowy.mod @@ -9,7 +9,7 @@ param E{s in Samochody}; param D{s in Samochody, l in Ladowarki}; # Czas odjazdu samochodu s param O{s in Samochody}; -# Zysk z realizacji kursu przez samochd s +# Zysk z realizacji kursu przez samochod s param Z{s in Samochody}; # Zmienna decyzyjna @@ -17,80 +17,33 @@ param Z{s in Samochody}; var u{s in Samochody}, >= 0, <= 24; # zmienna binarna okreslajaca czy kurs zostanie wykonany var y{s in Samochody}, binary; -# zmienna binarna okreslajaca czy samochd i jest ladowany po samochodzie j na ladowarce l +# zmienna binarna okreslajaca czy samochod i jest ladowany po samochodzie j na ladowarce l var v{i in Samochody, j in Samochody}, binary; -# zmienna binarna okreslajacy czy samochd s jest ladowany na ladowarce l +# zmienna binarna okreslajacy czy samochod s jest ladowany na ladowarce l var k{s in Samochody, l in Ladowarki}, binary; # Funkcja celu maximize Q: sum {s in Samochody} y[s]*Z[s]; # Ograniczenia subject to - # Samochd nie moze rozpoczac swojego ladownia przed najwczesniejszym mozliwym czasie ladowania. + # Samochod nie moze rozpoczac swojego ladownia przed najwczesniejszym mozliwym czasie ladowania. Ogr_1{s in Samochody}: u[s] >= E[s] * y[s]; - # Samochd moze byc ladowany maksymalnie na jednej ladowarce + # Samochod moze byc ladowany maksymalnie na jednej ladowarce Ogr_2{s in Samochody}: sum {l in Ladowarki} k[s, l] = y[s]; # Ladowanie danego samochodu na danej ladowarce moze rozpoczac sie tylko po zakonczeniu poprzedniego ladowania. Ogr_3{i in Samochody, j in Samochody, l in Ladowarki: i != j}: - u[i] + 24 * (1 - v[i, j]) >= (u[j] + D[j, l] * v[i, j]); - # ??? + u[i] + 24 * (1 - v[i, j]) >= (u[j] + D[j, l] - 2 * 24 * (2 = k[j, l] - k[i, l]); Ogr_4{i in Samochody, j in Samochody, l in Ladowarki: i != j}: v[i, j] + v[j, i] >= k[i, l] + k[j, l] - 1; - # Samochd realizujacy dostawe musi ukonczyc ladowanie przed godzina odjazdu - Ogr_6{s in Samochody}: + # Samochod realizujacy dostawe musi ukonczyc ladowanie przed godzina odjazdu + Ogr_5{s in Samochody}: u[s] + sum {l in Ladowarki} (D[s, l] * k[s, l]) <= O[s] * y[s]; - # Ladowanie samochodu nie bedzie nastepowalo po ladowaniu dowolnego samochodu wiecej niz raz na danej ladowarce - #Ogr_7_temp{j in Samochody}: - # sum {i in Samochody} v[i, j] <= 1; - # Ladowanie samochodu nie bedzie poprzedzalo ladowania dowolnego samochodu wiecej niz raz na danej ladowarce - #Ogr_8_temp{i in Samochody}: - # sum {j in Samochody} v[i, j] <= 1; - Ogr_temp: - u['s4'] = 0; - Ogr_temp_2: - k['s4', 'l2'] = 1; solve; display Q; display {s in Samochody, l in Ladowarki: k[s, l] > 0}: u[s]; display {s in Samochody}: y[s]; display {i in Samochody, j in Samochody: v[i, j] > 0}: v[i, j]; -display {s in Samochody, l in Ladowarki: k[s, l] > 0}: k[s, l]; - -data; - -set Samochody := s1, s2, s3, s4, s5; - -set Ladowarki := l1, l2, l3; - -param E := -s1 0 -s2 0 -s3 0 -s4 0 -s5 2; - -param D := -s1 l1 4 s1 l2 4 s1 l3 8 -s2 l1 1 s2 l2 1 s2 l3 2 -s3 l1 5 s3 l2 5 s3 l3 10 -s4 l1 3 s4 l2 3 s4 l3 6 -s5 l1 6 s5 l2 6 s5 l3 12; - -param O := -s1 8 -s2 5 -s3 6 -s4 4 -s5 8; - -param Z := -s1 100 -s2 10 -s3 200 -s4 20 -s5 330; - -end; \ No newline at end of file +display {s in Samochody, l in Ladowarki: k[s, l] > 0}: k[s, l]; \ No newline at end of file diff --git a/NotProgramming/MOM/implementacja_model_rozszerzony.mod b/NotProgramming/MOM/implementacja_model_rozszerzony.mod new file mode 100644 index 00000000..71d8d2c1 --- /dev/null +++ b/NotProgramming/MOM/implementacja_model_rozszerzony.mod @@ -0,0 +1,50 @@ +#1. Zbiory +set Samochody; +set Ladowarki; +set Kwanty; # 1 kwant czasu - 15 min = 1/4 h + +# 2. Parametery +# Najwczesniejszy mozliwy czas rozpoczecia ladowania samochodu s na ladowarce l +param E{s in Samochody}; +# Czas ladowania samochodu s na ladowarce l +param D{s in Samochody, l in Ladowarki}; +# Czas odjazdu samochodu s +param O{s in Samochody}; +# Zysk z realizacji kursu przez samochód s +param Z{s in Samochody}; + +# Zmienna decyzyjna +# zmienna binarna okreslajaca czy kurs zostanie wykonany +var y{s in Samochody}, binary; +# zmienna binarna okreslajaca czy samochód i jest ladowany na ladowarce l w kwancie czasu k +var v{i in Samochody, l in Ladowarki, k in Kwanty}, binary; +# zmienna służąca do minimalizowania ogolnego czasu ladowania w symulacji (na wszystkich ladowarkach) +var z; +maximize Q: sum {s in Samochody} y[s]*Z[s] - test * 0.01; + +#3. Ograniczenia +subject to + # Samochód nie moze rozpoczac swojego ladownia przed najwczesniejszym mozliwym czasie ladowania. + Ogr_1{s in Samochody, l in Ladowarki, k in Kwanty}: # + v[s, l, k] * k >= E[s] * 4 * v[s, l, k]; + # Ladowanie danego samochodu na danej ladowarce moze rozpoczac sie tylko po zakonczeniu poprzedniego ladowania. + Ogr_2{s in Samochody, k in Kwanty}: + sum {l in Ladowarki} v[s, l, k] <=1; + # Ladowanie danego samochodu na danej ladowarce moze rozpoczac sie tylko po zakonczeniu poprzedniego ladowania. + Ogr_3{l in Ladowarki, k in Kwanty}: + sum {s in Samochody} v[s, l, k] <=1; + # Uzależnienie k od v + Ogr_4{s in Samochody}: + sum {l in Ladowarki, k in Kwanty} v[s, l, k] * 1/(D[s, l]*4) >= y[s]; + # Samochód realizujący dostawę musi ukończyć ładowanie przed godziną odjazdu + Ogr_5{s in Samochody, l in Ladowarki, k in Kwanty}: + v[s, l, k] * k <= (O[s]*4 -1) * y[s]; + # + Ogr_6{s in Samochody, l in Ladowarki, k in Kwanty}: + z >= v[s, l, k] * k; + +solve; +display Q; + +display {s in Samochody}: y[s]; +display {l in Ladowarki, s in Samochody, k in Kwanty}: v[s, l, k]; diff --git a/NotProgramming/MOM/pierwszy_zbior_danych.dat b/NotProgramming/MOM/pierwszy_zbior_danych.dat new file mode 100644 index 00000000..7ef73972 --- /dev/null +++ b/NotProgramming/MOM/pierwszy_zbior_danych.dat @@ -0,0 +1,35 @@ +data; + + set Samochody := s1, s2, s3, s4, s5; + + set Ladowarki := l1, l2, l3; + + param E := + s1 0 + s2 0 + s3 0 + s4 0 + s5 2; + + param D := + s1 l1 4 s1 l2 4 s1 l3 8 + s2 l1 1 s2 l2 1 s2 l3 2 + s3 l1 5 s3 l2 5 s3 l3 10 + s4 l1 3 s4 l2 3 s4 l3 6 + s5 l1 6 s5 l2 6 s5 l3 12; + + param O := + s1 8 + s2 5 + s3 6 + s4 4 + s5 9; + + param Z := + s1 100 + s2 10 + s3 200 + s4 20 + s5 330; + +end; \ No newline at end of file diff --git a/NotProgramming/MOM/report_three/model.py b/NotProgramming/MOM/report_three/model.py new file mode 100644 index 00000000..ae7d11e9 --- /dev/null +++ b/NotProgramming/MOM/report_three/model.py @@ -0,0 +1,96 @@ +import pulp +import matplotlib.pyplot as plt +import sys + +# Create a problem variable: +model = pulp.LpProblem("Optimal_Distribution", pulp.LpMinimize) +# Define providers (Factories and Warehouses) +factories = ['F1', 'F2'] +warehouses = ['M1', 'M2', 'M3', 'M4'] +providers = factories + warehouses # Combining both lists + +# Define customers +customers = ['K1', 'K2', 'K3', 'K4', 'K5', 'K6'] + +cost = { + 'F1': {'M1': 0.3, 'M2': 0.5, 'M3': 1.2, 'M4': 0.8, 'K1': 1.2, 'K2': 999, 'K3': 1.2, 'K4': 2.0, 'K5': 999, 'K6': 1.1}, + 'F2': {'M1': 999, 'M2': 0.4, 'M3': 0.5, 'M4': 0.3, 'K1': 1.8, 'K2': 999, 'K3': 999, 'K4': 999, 'K5': 999, 'K6': 999}, + 'M1': {'K1': 999, 'K2': 1.2, 'K3': 0.2, 'K4': 1.7, 'K5': 999, 'K6': 2.0}, + 'M2': {'K1': 1.4, 'K2': 0.3, 'K3': 1.8, 'K4': 1.3, 'K5': 0.5, 'K6': 999}, + 'M3': {'K1': 999, 'K2': 1.3, 'K3': 2.0, 'K4': 999, 'K5': 0.3, 'K6': 1.4}, + 'M4': {'K1': 999, 'K2': 999, 'K3': 0.4, 'K4': 2.0, 'K5': 0.5, 'K6': 1.6} +} + + +# Decision variables +x = pulp.LpVariable.dicts("x", [(i, j) for i in providers for j in customers], lowBound=0, cat='Integer') +y = pulp.LpVariable.dicts("y", [(i, k) for i in factories for k in warehouses], lowBound=0, cat='Integer') +# Objective function components +cost_distribution = pulp.lpSum([cost[i][j] * x[(i, j)] for i in providers for j in customers]) +cost_warehouse = pulp.lpSum([cost[i][k] * y[(i, k)] for i in factories for k in warehouses]) + +alpha = 0.5 +beta = 0.5 +# Binary variables for meeting preferences +P = pulp.LpVariable.dicts("P", [(i, j) for i in providers for j in customers], cat='Binary') +max_order = 60 +satisfaction_scores = {'K1': 50 / max_order, 'K2': 10 / max_order, 'K3': 40 / max_order, 'K4': 35 / max_order, 'K5': 60 / max_order, 'K6': 20 / max_order} +customer_preferences = {'K1': ['F2'], 'K2': ['M1'], 'K3': ['M2', 'M3'], 'K4': ['F1'], 'K5': [], 'K6': ['M3', 'M4']} +# Satisfaction component +satisfaction_component = pulp.lpSum([satisfaction_scores[j] * P[(i, j)] for i in providers for j in customers]) + +# Define objective +model += alpha * (cost_distribution + cost_warehouse) - beta * satisfaction_component +# Factory production capacity constraints +factory_capacity = {'F1': 150, 'F2': 200} +warehouse_capacity = {'M1': 70, 'M2': 50 , 'M3': 100, 'M4': 40 } +customer_demand = {'K1': 50, 'K2': 10, 'K3': 40, 'K4': 35, 'K5': 60, 'K6': 20} +for i in factories: + model += pulp.lpSum([x[(i, j)] for j in customers] + [y[(i, k)] for k in warehouses]) <= factory_capacity[i] + +# Warehouse handling capacity constraints +for k in warehouses: + model += pulp.lpSum([x[(k, j)] for j in customers]) <= warehouse_capacity[k] + +# Customer demand fulfillment constraints +for j in customers: + model += pulp.lpSum([x[(i, j)] for i in providers]) == customer_demand[j] + +# Other constraints like preferences can be added similarly +# Solve the problem +# Output results +for v in model.variables(): + print(v.name, "=", v.varValue) + +# Assuming definitions of the model as previously discussed +cost_results = [] +satisfaction_results = [] + +# Varying alpha and beta +for alpha in range(10): + beta = 10 - alpha + sys.float_info.epsilon + alpha /= 10.0 + beta /= 10.0 + + # Update objective function + model.objective = alpha * cost_distribution - beta * satisfaction_component + + # Solve the model + model.solve() + print(alpha) + + # Record the results + + # Record the results + total_cost = pulp.value(cost_distribution) + total_satisfaction = pulp.value(satisfaction_component) + cost_results.append(total_cost) + satisfaction_results.append(total_satisfaction) + +print(cost_results, satisfaction_results) +# Plotting the results +plt.plot(cost_results, satisfaction_results, marker='o') +plt.xlabel('Total Cost') +plt.ylabel('Customer Satisfaction') +plt.title('Trade-off between Cost and Customer Satisfaction') +plt.show() \ No newline at end of file diff --git a/NotProgramming/MOM/report_three/report_three.pdf b/NotProgramming/MOM/report_three/report_three.pdf new file mode 100644 index 00000000..ba85bbc0 Binary files /dev/null and b/NotProgramming/MOM/report_three/report_three.pdf differ diff --git a/NotProgramming/MOM/report_three/report_three.tex b/NotProgramming/MOM/report_three/report_three.tex new file mode 100644 index 00000000..ab2080db --- /dev/null +++ b/NotProgramming/MOM/report_three/report_three.tex @@ -0,0 +1,198 @@ +\documentclass[12pt]{article} +\usepackage[T1]{fontenc} +\usepackage[polish]{babel} +\usepackage[utf8]{inputenc} +\usepackage{hyperref} +\usepackage{listings} +\title{Modelowanie Matematyczne, Projekt 3, Dane nr 1.6} +\author{Krzysztof Rudnicki, 307585} +\setcounter{section}{-1} +\begin{document} +\maketitle +\section{Wstęp} +2 Fabryki, F1, F2 \\ +4 Magazyny, M1, M2, M3, M4 \\ +6 Klientów, K1, K2, K3, K4, K5, K6 \\ +\paragraph{Koszty dystrybucji towaru} + +\begin{center} + \begin{tabular}{ | c | c | c | c | c | c | c | } + \hline + zaopatruje & F1 & F2 & M1 & M2 & M3 & M4 \\ + \hline + Magazyny & & & & & & \\ + \hline + M1 & 0.3 & - & & & & \\ + \hline + M2 & 0.5 & 0.4 & & & & \\ + \hline + M3 & 1.2 & 0.5 & & & & \\ + \hline + M4 & 0.8 & 0.3 & & & & \\ + \hline + Klientów & & & & & & \\ + \hline + K1 & 1.2 & 1.8 & - & 1.4 & - & - \\ + \hline + K2 & - & - & 1.2 & 0.3 & 1.3 & - \\ + \hline + K3 & 1.2 & - & 0.2 & 1.8 & 2.0 & 0.4 \\ + \hline + K4 & 2.0 & - & 1.7 & 1.3 & - & 2.0 \\ + \hline + K5 & - & - & - & 0.5 & 0.3 & 0.5 \\ + \hline + K6 & 1.1 & - & 2.0 & - & 1.4 & 1.5 \\ + \hline + \end{tabular} + \end{center} +\section{Model Dwukryterialny} +\paragraph{Zbiory} +\begin{itemize} + \item $i, k \in F$ - Fabryki + \item $i, l \in M$ - Magazyny + \item $j \in K$ - Klienci +\end{itemize} +\paragraph{Parametery} +\begin{itemize} + \item $C_{i, j}$ - Koszty transportu dóbr z punktów $i$ (fabryka lub magazyn) do klienta $j$ + \item $C_{k, l}$ - Koszty transportu dóbr z fabryki $i$ do magazynu $k$ + \item $P_{i, j}$ - Binarnie określa czy preferencja klienta zostąła spełniona (1) czy nie (0) + \item $S_j$ - Poziom satysfakcji klienta $j$ + \item $D_j$ - Zapotrzebowanie klienta $j$ +\end{itemize} +\paragraph{Zmienne decyzyjne} +\begin{itemize} + \item $x_{i,j}$ - Liczba dóbr (w tys. ton) przetransportowana z punktu $i$ (fabryka lub magazyn) do klienta $j$ + \item $y_{k, l}$ - Liczba dóbr (w tys. ton) przetransportowana z fabryki $k$ do magazynu $l$ +\end{itemize} +\paragraph{Funkcja celu} +\begin{enumerate} + \item Minimalizacja kosztów dystrybucji \\ + \[ Min(\sum_{i, j} C_{i, j} * x_{i, j} + \sum{i, k} C_{i, k} * y_{i, k}) \] + \item Maksymalizacja satysfakcja klienta \\ + W celu maksymalizacji satysfakcji klienta policzymy ile z dostaw do klientów odbyło się z preferencyjnych źródeł \\ + \[ Max(\sum_{j} S_j * P_{i,j} * x_{i, j}) \] +\end{enumerate} +\paragraph{Ograniczenia} +Miesięczne możliwości produkcyjne fabryk +\begin{equation} + \sum_j x_{F1, j} + \sum_k y_{F1, k} \leq 150 +\end{equation} +\begin{equation} + \sum_j x_{F2, j} + \sum_k y_{F2, k} \leq 200 +\end{equation} +Miesięczna ilośc obsługiwanego towaru przez magazyny +\begin{equation} + \sum_j x_{M1, j} \leq 70 +\end{equation} +\begin{equation} + \sum_j x_{M2, j} \leq 50 +\end{equation} +\begin{equation} + \sum_j x_{M3, j} \leq 100 +\end{equation} +\begin{equation} + \sum_j x_{M4, j} \leq 40 +\end{equation} +Spełnienie preferencji klienta +\begin{equation} + \sum_i x_{i, j} = D_j +\end{equation} +Wartości niezerowe +\begin{equation} + x_{i, j}, y_{i, k} \geq 0 +\end{equation} + +\section{Implementacja} +Do implementacji użyty został python z biblioteką pulp \href{https://coin-or.github.io/pulp/index.html}{https://coin-or.github.io/pulp/index.html} \\ +Dzięki temu wykorzystujemy zarówno łatwość pythona jak i możliwości używania różnych solverów (CBC, GLPK, CPLEX, Gurobi...) przez pulpa \\ +\begin{lstlisting}[language=Python, caption={Import bilbioteki pulp}] + import pulp +\end{lstlisting} +\begin{lstlisting}[language=Python, caption={Iniicjalizacja modelu}] + model = pulp.LpProblem("Optimal_Distribution", pulp.LpMinimize) +\end{lstlisting} + +\begin{lstlisting}[language=Python, caption={Zmienne decyzyjne}] + x = + pulp.LpVariable.dicts("x", + [(i, j) for i in punkty for j in klienci], + lowBound=0, + cat='Integer') + y + pulp.LpVariable.dicts("y", + [(i, k) for i in fabryki for k in magazyny], + lowBound=0, + cat='Integer') +\end{lstlisting} + +\begin{lstlisting}[language=Python, caption={Funkcje celu}] + # Objective function components + koszt_dystrybucji = + pulp.lpSum( + [cost[i][j] * x[(i, j)] for i in punkty for j in klienci] + ) + koszt_magazynowania = + pulp.lpSum( + [cost[i][k] * y[(i, k)] for i in fabryki for k in magazyny] + ) + + # Define objective + model += + alpha + * (koszt_dystrybucji + koszt_magazynowania) + - beta * poziom_satysfakcji +\end{lstlisting} + +\begin{lstlisting}[language=Python, caption={Ograniczenia}] +for i in fabryki: + model += + pulp.lpSum([x[(i, j)] for j in klienci] + + [y[(i, k)] for k in magazyny]) + <= mozliwosci_fabryki[i] +for k in magazyny: + model += + pulp.lpSum([x[(k, j)] for j in klienci]) + <= mozliwosci_magazynu[k] +for j in klienci: + model += + pulp.lpSum([x[(i, j)] for i in punkty]) == wymagania_klienta[j] +\end{lstlisting} + +\begin{lstlisting}[language=Python, caption={Rozwiązanie problemu}] + model.solve() +\end{lstlisting} +\ + +\begin{lstlisting}[language=Python, caption={Przedstawienie wyników}] +for v in model.variables(): + print(v.name, "=", v.varValue) +\end{lstlisting} + +\section{Rozwiązanie efektywne} +Aby zdefiniować rozwiązanie efektywne sprawdzamy sumaryczy obu funkcji celu dla wartości $\alpha$ i $beta$ od 1 do 10 \\ +w tym celu napisany został kod który modyfikuje wartości $\alpha$ i $\beta$ w pętli + +\begin{lstlisting}[language=Python, caption={Wyznaczanie alpha i beta}] + +# Varying alpha and beta +for alpha in range(0, 11): + beta = 10 - alpha + alpha /= 10.0 + beta /= 10.0 + + # Update objective function + model.objective = alpha * cost_distribution - beta * satisfaction_component + + # Solve the model + model.solve() + + # Record the results + total_cost = value(cost_distribution) + total_satisfaction = value(satisfaction_component) + cost_results.append(total_cost) + satisfaction_results.append(total_satisfaction) +\end{lstlisting} + + \end{document} \ No newline at end of file diff --git a/NotProgramming/MOM/report_two/model.py b/NotProgramming/MOM/report_two/model.py new file mode 100644 index 00000000..e69de29b diff --git a/Programming/ZPOB/projekt_kod/1167777432942678046.txt b/Programming/ZPOB/projekt_kod/1167777432942678046.txt new file mode 100644 index 00000000..8da7d473 --- /dev/null +++ b/Programming/ZPOB/projekt_kod/1167777432942678046.txt @@ -0,0 +1,47 @@ +# Model szeregowania zada� podzielnych na m procesorach r�wnoleg�ych +# Faza I +#====================================================================== + +set Procesory; +set Zadania; +#set ZadaniaSpec; +#====================================================================== +param Czas_wyk{Procesory, Zadania} >= 0; + + # Wymiar tabeli i kolumna z której bÄ™dziemy czytać wartoÅ›ci + table T_Czas_wyk IN "CSV" "Czas_wyk.csv": + [Procesor, Zadanie], Czas_wyk~Czas_wyk; + +#====================================================================== +var Tmax >= 0; + +var t{Procesory, Zadania}>=0; +#====================================================================== + +minimize FC_Czas_obslugi: + Tmax; + +#====================================================================== +subject to + + Ogr_Praca_procesora{l in Procesory}: + sum {i in Zadania} t[l,i]<=Tmax; + + Ogr_Obsluga_zadania{i in Zadania}:# i not in ZadaniaSpec}: + sum{l in Procesory} t[l,i]<=Tmax; + + Ogr_Rozdzial_zadan{i in Zadania}:#i not in ZadaniaSpec}: + sum{l in Procesory} (t[l,i]/Czas_wyk[l,i])=1; + + +solve; + #printf ";;;;%s;%s\n", 'Data', time2str(gmtime()+2*3600,'%F %H:%M') >> "FazaIout.csv"; + #printf ";;%s;%3.1f", 'Tmin', Tmax >> "FazaIout.csv"; + + printf "Procesor,Zadanie,t" >> "FazaIout.csv"; + for {l in Procesory, i in Zadania} { + printf "\n%s,%s,%3.1f", l, i, round(t[l,i],3)>> "FazaIout.csv"; + } + display{l in Procesory, i in Zadania: t[l,i]>0}: l, i, round(t[l,i],3); +#====================================================================== +end; \ No newline at end of file diff --git a/Programming/ZPOB/projekt_kod/1167777666842238976.txt b/Programming/ZPOB/projekt_kod/1167777666842238976.txt new file mode 100644 index 00000000..ec5a7879 --- /dev/null +++ b/Programming/ZPOB/projekt_kod/1167777666842238976.txt @@ -0,0 +1,44 @@ +#====================================================================== + +set Procesory; +set Zadania; +#set ZadaniaSpec; +#====================================================================== +param Czas_wyk{Procesory, Zadania} >= 0; + + table T_Czas_wyk IN "CSV" "Czas_wyk.csv": + [Procesor, Zadanie], Czas_wyk~Czas_wyk; + +#====================================================================== +var Tmax >= 0; + +var t{Procesory, Zadania}>=0; +#====================================================================== + +minimize FC_Czas_obslugi: + Tmax; + +#====================================================================== +subject to + + Ogr_Praca_procesora{l in Procesory}: + sum {i in Zadania} t[l,i]<=Tmax; + + Ogr_Obsluga_zadania{i in Zadania}:# i not in ZadaniaSpec}: + sum{l in Procesory} t[l,i]<=Tmax; + + Ogr_Rozdzial_zadan{i in Zadania}:#i not in ZadaniaSpec}: + sum{l in Procesory} (t[l,i]/Czas_wyk[l,i])=1; + + +solve; + #printf ";;;;%s;%s\n", 'Data', time2str(gmtime()+2*3600,'%F %H:%M') >> "FazaIout.csv"; + #printf ";;%s;%3.1f\n", 'Tmin', Tmax >> "FazaIout.csv"; + + printf "Procesor,Zadanie,t" >> "FazaIout.csv"; + for {l in Procesory, i in Zadania} { + printf "\n%s,%s,%3.1f", l, i, round(t[l,i],3)>> "FazaIout.csv"; + } + display{l in Procesory, i in Zadania: t[l,i]>0}: l, i, round(t[l,i],3); +#====================================================================== +end; \ No newline at end of file diff --git a/Programming/ZPOB/projekt_kod/1167779905715589201.txt b/Programming/ZPOB/projekt_kod/1167779905715589201.txt new file mode 100644 index 00000000..2a0c9e50 --- /dev/null +++ b/Programming/ZPOB/projekt_kod/1167779905715589201.txt @@ -0,0 +1,14 @@ +data; + + set Procesory := ProcA ProcB ProcC; + set Zadania := z1 z2 z3 z4 z5 z6; + #set ZadaniaSpec := z3 z5; + + # Define 2D array time[Procesory, Zadania] + param time := + ProcA z1 5 ProcA z2 7 ProcA z3 9 ProcA z4 2 ProcA z5 4 ProcA z6 1 + ProcB z1 3 ProcB z2 6 ProcB z3 1 ProcB z4 8 ProcB z5 2 ProcB z6 3 + ProcC z1 4 ProcC z2 5 ProcC z3 6 ProcC z4 7 ProcC z5 3 ProcC z6 2 + ; + +end; \ No newline at end of file diff --git a/Programming/ZPOB/projekt_kod/1167780534441750588.txt b/Programming/ZPOB/projekt_kod/1167780534441750588.txt new file mode 100644 index 00000000..47f731a4 --- /dev/null +++ b/Programming/ZPOB/projekt_kod/1167780534441750588.txt @@ -0,0 +1,14 @@ +data; + + set Procesory := ProcA ProcB ProcC; + set Zadania := z1 z2 z3 z4 z5 z6; + #set ZadaniaSpec := z3 z5; + + # Define 2D array time[Procesory, Zadania] + param Pracownik := + ProcA z1 2 ProcA z2 2 ProcA z3 2 ProcA z4 1 ProcA z5 1 ProcA z6 2 + ProcB z1 1 ProcB z2 1 ProcB z3 2 ProcB z4 2 ProcB z5 2 ProcB z6 1 + ProcC z1 2 ProcC z2 2 ProcC z3 3 ProcC z4 2 ProcC z5 1 ProcC z6 2 + ; + +end; \ No newline at end of file diff --git a/Programming/ZPOB/projekt_kod/1167782041409048676.txt b/Programming/ZPOB/projekt_kod/1167782041409048676.txt new file mode 100644 index 00000000..920e1589 --- /dev/null +++ b/Programming/ZPOB/projekt_kod/1167782041409048676.txt @@ -0,0 +1,8 @@ +param Pracownik{Procesory, Zadania} >=0; +param Pracownik : ProcA ProcB ProcC:= + z1 2 1 2 + z2 2 1 2 + z3 2 2 3 + z4 1 2 2 + z5 1 2 1 + z6 2 1 2; \ No newline at end of file diff --git a/Programming/ZPOB/projekt_kod/1167782823411855462.txt b/Programming/ZPOB/projekt_kod/1167782823411855462.txt new file mode 100644 index 00000000..12787518 --- /dev/null +++ b/Programming/ZPOB/projekt_kod/1167782823411855462.txt @@ -0,0 +1,18 @@ +set ORIG; +set DEST; + +param LINKS{ORIG, DEST} default 0; + +for {i in ORIG, j in DEST} printf "LINKS[%s,%s] = %g \n",i,j,LINKS[i,j]; + +data; + +set ORIG := GARY CLEV PITT; +set DEST := FRA DET LAN WIN STL FRE LAF; + + +param LINKS : FRA DET LAN WIN STL FRE LAF := + GARY 1 2 3 4 5 6 . + CLEV . 2 . 4 . 6 . + PITT 1 2 3 4 5 6 7; +end; \ No newline at end of file diff --git a/Programming/ZPOB/projekt_kod/1180913384280051732.txt b/Programming/ZPOB/projekt_kod/1180913384280051732.txt new file mode 100644 index 00000000..f435ce68 --- /dev/null +++ b/Programming/ZPOB/projekt_kod/1180913384280051732.txt @@ -0,0 +1,43 @@ +# 1. Zbiory +set Samochody; +set Ladowarki; + +# 2. Parametery +# Najwczesniejszy mozliwy czas rozpoczecia ladowania samochodu s na ladowarce l +param E{s in Samochody, l in Ladowarki}; +# Czas ladowania samochodu s na ladowarce l +param D{s in Samochody, l in Ladowarki}; +# Czas odjazdu samochodu s +param O{s in Samochody}; +# Zysk z realizacji kursu przez samochód s +param Z{s in Samochody}; + +# Zmienna decyzyjna +# zmienna okreslajaca godzine rozpoczecia ladowania samochodu s na ladowarce l +var u{s in Samochody, l in Ladowarki}, >= 0 and <= 24; +# zmienna binarna okreslajaca czy kurs zostanie wykonany +var y{s in Samochody}, binary; +# zmienna binarna okreslajaca czy samochód i jest ladowany po samochodzie j na ladowarce l +var v{i in Samochody, j in Samochody, l in Ladowarki}, binary; +# zmienna binarna okreslajaca czy samochód s jest ladowany jako pierwszy na ladowarce l +var p{s in Samochody, l in Ladowarki}, binary; +# zmienna binarna okreslajacy czy samochód s jest ladowany na ladowarce l +var k{s in Samochody, l in Ladowarki}, binary; + +# Funkcja celu +maximize Q: sum {s in Samochody} y[s]*Z[s]; + +# Ograniczenia +subject to + # Samochód nie moze rozpoczac swojego ladownia przed najwczesniejszym mozliwym czasie ladowania. + Ogr_1{s in Samochody, l in Ladowarki}: + u[s,l] >= E[s, l]; + # Samochód moze byc ladowany maksymalnie na jednej ladowarce + Ogr_2{s in Samochody, l in Ladowarki}: + sum {l in Ladowarki} k[s, l] == y[s] + Ogr_3{n in Budynki}: + sum {i in Budynki} f[n,i] <= sum {j in BudynkiNaStart} f[j,n]; + +solve; +display {i in Budynki, j in Budynki: f[i,j] > 0}: f[i,j]; +display: Q; \ No newline at end of file diff --git a/Programming/ZPOB/projekt_kod/1180913901228003368.txt b/Programming/ZPOB/projekt_kod/1180913901228003368.txt new file mode 100644 index 00000000..8a2c20db --- /dev/null +++ b/Programming/ZPOB/projekt_kod/1180913901228003368.txt @@ -0,0 +1,40 @@ +data; + +set Samochody := s1, s2, s3, s4, s5; + +set Ladowarki := l1, l2, l3; + +param E{s in Samochody, l in Ladowarki}; +param D{s in Samochody, l in Ladowarki}; +param O{s in Samochody}; +param Z{s in Samochody}; + +param E := +s1 l1 0 s1 l2 0 s1 l3 0 +s2 l1 0 s2 l2 0 s2 l3 0 +s3 l1 0 s3 l2 0 s3 l3 0 +s4 l1 0 s4 l2 0 s4 l3 0 +s5 l1 2 s5 l2 2 s5 l3 2; + +param D := +s1 l1 4 s1 l2 4 s1 l3 8 +s2 l1 1 s2 l2 1 s2 l3 2 +s3 l1 5 s3 l2 5 s3 l3 10 +s4 l1 3 s4 l2 3 s4 l3 6 +s5 l1 6 s5 l2 6 s5 l3 12; + +param O := +s1 8 +s2 5 +s3 6 +s4 4 +s5 9; + +param Z := +s1 100 +s2 10 +s3 200 +s4 20 +s5 330; + +end; \ No newline at end of file diff --git a/Programming/ZPOB/projekt_kod/kod_dane.txt b/Programming/ZPOB/projekt_kod/kod_dane.txt new file mode 100644 index 00000000..0724efd1 --- /dev/null +++ b/Programming/ZPOB/projekt_kod/kod_dane.txt @@ -0,0 +1,26 @@ + Przeszukać: + 1. Leon [x] -> znazłem naszego gitlaba xdd + https://gitlab-stud.elka.pw.edu.pl/wsienkie/zbop_2023z_ladowarki_elektryczne.git + 2. Google Drive [x] + 3. Teams [x] + 4. Discord + +Discord archiwa: +https://discord.com/channels/@me/1158794290080788600/1180913384280051732 [pierwszy kod projektowy] +https://discord.com/channels/@me/1158794290080788600/1180913901228003368 [pierwsze dane] + + +Model matematyczny I (podstawowy) + Kod: + + Dane: + +Model rozszerzony + Kod: + + Dane: + +Model 2-fazowy + Kod: + + Dane: \ No newline at end of file