mirror of
https://github.com/kuhyx/WUT_Computer_Science.git
synced 2026-07-04 11:23:17 +02:00
feat: working on implementation3 mom
This commit is contained in:
parent
003c013ef0
commit
8806e6adf8
BIN
NotProgramming/DPZ/DPZ_RUDNICKI_ESEJ.pdf
Normal file
BIN
NotProgramming/DPZ/DPZ_RUDNICKI_ESEJ.pdf
Normal file
Binary file not shown.
19
NotProgramming/DPZ/characters.sh
Executable file
19
NotProgramming/DPZ/characters.sh
Executable file
@ -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
|
||||
|
||||
BIN
NotProgramming/DPZ/esej.pdf
Normal file
BIN
NotProgramming/DPZ/esej.pdf
Normal file
Binary file not shown.
77
NotProgramming/DPZ/esej.tex
Normal file
77
NotProgramming/DPZ/esej.tex
Normal file
@ -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}
|
||||
31
NotProgramming/DPZ/polygon_org
Normal file
31
NotProgramming/DPZ/polygon_org
Normal file
@ -0,0 +1,31 @@
|
||||
<mxfile host="app.diagrams.net" modified="2024-01-15T18:34:01.630Z" agent="Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/117.0.0.0 Safari/537.36" etag="xj5fHrKVoOuyaQVJKMTq" version="22.1.17" type="device">
|
||||
<diagram id="prtHgNgQTEPvFCAcTncT" name="Page-1">
|
||||
<mxGraphModel dx="1434" dy="830" grid="1" gridSize="10" guides="1" tooltips="1" connect="1" arrows="1" fold="1" page="1" pageScale="1" pageWidth="827" pageHeight="1169" math="0" shadow="0">
|
||||
<root>
|
||||
<mxCell id="0" />
|
||||
<mxCell id="1" parent="0" />
|
||||
<mxCell id="H9RlH3mpdmWu4w8tDecj-2" value="Członek" style="rounded=1;whiteSpace=wrap;html=1;fontSize=16;" vertex="1" parent="1">
|
||||
<mxGeometry x="414" y="330" width="120" height="60" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="H9RlH3mpdmWu4w8tDecj-8" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;fontSize=16;" edge="1" parent="1" source="H9RlH3mpdmWu4w8tDecj-3" target="H9RlH3mpdmWu4w8tDecj-2">
|
||||
<mxGeometry relative="1" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="H9RlH3mpdmWu4w8tDecj-3" value="Mag" style="rounded=1;whiteSpace=wrap;html=1;fontSize=16;" vertex="1" parent="1">
|
||||
<mxGeometry x="414" y="240" width="120" height="60" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="H9RlH3mpdmWu4w8tDecj-7" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;fontSize=16;" edge="1" parent="1" source="H9RlH3mpdmWu4w8tDecj-4" target="H9RlH3mpdmWu4w8tDecj-3">
|
||||
<mxGeometry relative="1" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="H9RlH3mpdmWu4w8tDecj-4" value="Kapituła" style="rounded=1;whiteSpace=wrap;html=1;fontSize=16;" vertex="1" parent="1">
|
||||
<mxGeometry x="414" y="150" width="120" height="60" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="H9RlH3mpdmWu4w8tDecj-6" value="Prezes" style="rounded=1;whiteSpace=wrap;html=1;fontSize=16;" vertex="1" parent="1">
|
||||
<mxGeometry x="434" y="130" width="80" height="40" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="H9RlH3mpdmWu4w8tDecj-9" value="Valhalla" style="rounded=1;whiteSpace=wrap;html=1;dashed=1;fontSize=16;" vertex="1" parent="1">
|
||||
<mxGeometry x="260" y="240" width="120" height="60" as="geometry" />
|
||||
</mxCell>
|
||||
</root>
|
||||
</mxGraphModel>
|
||||
</diagram>
|
||||
</mxfile>
|
||||
BIN
NotProgramming/DPZ/polygon_org.drawio.png
Normal file
BIN
NotProgramming/DPZ/polygon_org.drawio.png
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 15 KiB |
43
NotProgramming/MOM/drugi_zbior_danych.dat
Normal file
43
NotProgramming/MOM/drugi_zbior_danych.dat
Normal file
@ -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;
|
||||
@ -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;
|
||||
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];
|
||||
@ -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 samochód 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 samochód 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 samochód 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
|
||||
# Samochód 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];
|
||||
# Samochód 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;
|
||||
# Samochód 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;
|
||||
display {s in Samochody, l in Ladowarki: k[s, l] > 0}: k[s, l];
|
||||
50
NotProgramming/MOM/implementacja_model_rozszerzony.mod
Normal file
50
NotProgramming/MOM/implementacja_model_rozszerzony.mod
Normal file
@ -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];
|
||||
35
NotProgramming/MOM/pierwszy_zbior_danych.dat
Normal file
35
NotProgramming/MOM/pierwszy_zbior_danych.dat
Normal file
@ -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;
|
||||
96
NotProgramming/MOM/report_three/model.py
Normal file
96
NotProgramming/MOM/report_three/model.py
Normal file
@ -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()
|
||||
BIN
NotProgramming/MOM/report_three/report_three.pdf
Normal file
BIN
NotProgramming/MOM/report_three/report_three.pdf
Normal file
Binary file not shown.
198
NotProgramming/MOM/report_three/report_three.tex
Normal file
198
NotProgramming/MOM/report_three/report_three.tex
Normal file
@ -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}
|
||||
0
NotProgramming/MOM/report_two/model.py
Normal file
0
NotProgramming/MOM/report_two/model.py
Normal file
47
Programming/ZPOB/projekt_kod/1167777432942678046.txt
Normal file
47
Programming/ZPOB/projekt_kod/1167777432942678046.txt
Normal file
@ -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;
|
||||
44
Programming/ZPOB/projekt_kod/1167777666842238976.txt
Normal file
44
Programming/ZPOB/projekt_kod/1167777666842238976.txt
Normal file
@ -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;
|
||||
14
Programming/ZPOB/projekt_kod/1167779905715589201.txt
Normal file
14
Programming/ZPOB/projekt_kod/1167779905715589201.txt
Normal file
@ -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;
|
||||
14
Programming/ZPOB/projekt_kod/1167780534441750588.txt
Normal file
14
Programming/ZPOB/projekt_kod/1167780534441750588.txt
Normal file
@ -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;
|
||||
8
Programming/ZPOB/projekt_kod/1167782041409048676.txt
Normal file
8
Programming/ZPOB/projekt_kod/1167782041409048676.txt
Normal file
@ -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;
|
||||
18
Programming/ZPOB/projekt_kod/1167782823411855462.txt
Normal file
18
Programming/ZPOB/projekt_kod/1167782823411855462.txt
Normal file
@ -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;
|
||||
43
Programming/ZPOB/projekt_kod/1180913384280051732.txt
Normal file
43
Programming/ZPOB/projekt_kod/1180913384280051732.txt
Normal file
@ -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;
|
||||
40
Programming/ZPOB/projekt_kod/1180913901228003368.txt
Normal file
40
Programming/ZPOB/projekt_kod/1180913901228003368.txt
Normal file
@ -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;
|
||||
26
Programming/ZPOB/projekt_kod/kod_dane.txt
Normal file
26
Programming/ZPOB/projekt_kod/kod_dane.txt
Normal file
@ -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:
|
||||
Loading…
Reference in New Issue
Block a user