mirror of
https://github.com/kuhyx/WUT_Computer_Science.git
synced 2026-07-04 14:43:08 +02:00
chore: rename parameters wdwr
This commit is contained in:
parent
ec92fdb693
commit
fc0af17c60
BIN
Programming/WDWR/projekt/doc/graphics/ryzyko_dystrybuanta.png
Normal file
BIN
Programming/WDWR/projekt/doc/graphics/ryzyko_dystrybuanta.png
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 115 KiB |
BIN
Programming/WDWR/projekt/doc/graphics/ryzyko_zysk_wykres.png
Normal file
BIN
Programming/WDWR/projekt/doc/graphics/ryzyko_zysk_wykres.png
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 42 KiB |
BIN
Programming/WDWR/projekt/doc/graphics/zysk_dystrybuanta.png
Normal file
BIN
Programming/WDWR/projekt/doc/graphics/zysk_dystrybuanta.png
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 121 KiB |
Binary file not shown.
@ -1,5 +1,4 @@
|
|||||||
\documentclass[11pt,a4paper]{article}
|
\documentclass[11pt,a4paper]{article}
|
||||||
\usepackage[OT4]{polski}
|
|
||||||
\usepackage[utf8]{inputenc}
|
\usepackage[utf8]{inputenc}
|
||||||
\usepackage[inner=2.5cm,outer=2.5cm, tmargin=2.5cm,bmargin=2.5cm]{geometry}
|
\usepackage[inner=2.5cm,outer=2.5cm, tmargin=2.5cm,bmargin=2.5cm]{geometry}
|
||||||
\usepackage{amsmath}
|
\usepackage{amsmath}
|
||||||
@ -126,23 +125,23 @@ i macierzami, w nawiasach kwadratowych określono ich wymiary, odnosząc się do
|
|||||||
\hline
|
\hline
|
||||||
Nazwa parametru & Szczegółowy opis znaczenia \\
|
Nazwa parametru & Szczegółowy opis znaczenia \\
|
||||||
\hline
|
\hline
|
||||||
nMachType & Ilość typów maszyn (procesów) dostępnych w fabryce \\
|
numberOfMachineTypes & Ilość typów maszyn (procesów) dostępnych w fabryce \\
|
||||||
nMonth & Ilość miesięcy uwzględnionych w symulacji \\
|
numberOfMonths & Ilość miesięcy uwzględnionych w symulacji \\
|
||||||
nProdType & Ilość typów produktów \\
|
numberOfProductsTypes & Ilość typów produktów \\
|
||||||
nScenarios & Ilość scenariuszy wygenerowanych do symulacji \\
|
numberOfScenarios & Ilość scenariuszy wygenerowanych do symulacji \\
|
||||||
machines[nMachType] & Wektor typów maszyn (procesów)\\
|
machines[numberOfMachineTypes] & Wektor typów maszyn (procesów)\\
|
||||||
months[nMonth] & Wektor miesięcy symulacji\\
|
months[numberOfMonths] & Wektor miesięcy symulacji\\
|
||||||
products[nProdType] & Wektor typów produktów\\
|
products[numberOfProductsTypes] & Wektor typów produktów\\
|
||||||
machineCount[nMachType] & Wektor ilości maszyn danego typu\\
|
machineCount[numberOfMachineTypes] & Wektor ilości maszyn danego typu\\
|
||||||
prodTime[nMachType][nProdType] & macierz czasów produkcji danego produktu na danej maszynie \\
|
timeToProduce[numberOfMachineTypes][numberOfProductsTypes] & macierz czasów produkcji danego produktu na danej maszynie \\
|
||||||
maxInMonth[nMonth][nProdType] & macierz maksymalnej ilości produktów, jakie można sprzedać w danym miesiącu\\
|
maxProductsInMonth[numberOfMonths][numberOfProductsTypes] & macierz maksymalnej ilości produktów, jakie można sprzedać w danym miesiącu\\
|
||||||
nHours & Ilość godzin pracy fabryki w miesiącu\\
|
numberOfHoursInFactory & Ilość godzin pracy fabryki w miesiącu\\
|
||||||
mu[nProdType] & Wektor wartości oczekiwanych rozkładu t-Studenta do generacji scenariuszy\\
|
mu[numberOfProductsTypes] & Wektor wartości oczekiwanych rozkładu t-Studenta do generacji scenariuszy\\
|
||||||
sigma [nProdType][nProdType] & Macierz kowariancji dla rozkłady t-Studenta\\
|
sigma [numberOfProductsTypes][numberOfProductsTypes] & Macierz kowariancji dla rozkłady t-Studenta\\
|
||||||
sellProfit[nScenarios][nProdType] & Macierz wygenerowanych sceniariuszy dochodów ze sprzedaży produktów\\
|
sellProfit[numberOfScenarios][numberOfProductsTypes] & Macierz wygenerowanych sceniariuszy dochodów ze sprzedaży produktów\\
|
||||||
storageCost & Koszt trzymania jednej sztuki produktu w magazynie przez miesiąc \\
|
storageCost & Koszt trzymania jednej sztuki produktu w magazynie przez miesiąc \\
|
||||||
storageMax[nProdType] & Wektor maksymalnej pojemności magazynu dla każdego typu produktu \\
|
storageMax[numberOfProductsTypes] & Wektor maksymalnej pojemności magazynu dla każdego typu produktu \\
|
||||||
storageStart[nProdType] & Wektor ilości początkowej produktów w magazynie \\
|
storageStart[numberOfProductsTypes] & Wektor ilości początkowej produktów w magazynie \\
|
||||||
\hline
|
\hline
|
||||||
\end{tabular}
|
\end{tabular}
|
||||||
\end{table}
|
\end{table}
|
||||||
@ -157,12 +156,12 @@ Zmienne decyzyjne stanowią wartości kontrolowane przez podmiot podejmujący de
|
|||||||
\hline
|
\hline
|
||||||
Nazwa zmiennej & Szczegółowy opis znaczenia \\
|
Nazwa zmiennej & Szczegółowy opis znaczenia \\
|
||||||
\hline
|
\hline
|
||||||
produce[nMonth][nProdType] & Macierz zawierające ilości wytwarzanych sztuk danego typu produktu w danym miesiącu \\
|
produce[numberOfMonths][numberOfProductsTypes] & Macierz zawierające ilości wytwarzanych sztuk danego typu produktu w danym miesiącu \\
|
||||||
sell[nMonth][nProdType] & Macierz zawierająca ilości sprzedawanych sztuk danego typu produktu w danym miesiącu \\
|
sell[numberOfMonths][numberOfProductsTypes] & Macierz zawierająca ilości sprzedawanych sztuk danego typu produktu w danym miesiącu \\
|
||||||
stock[nMonth][nProdType] & Macierz zawierająca ilości sztuk danego typu produktu znajdujących się w magazynie w danym miesiącu \\
|
stock[numberOfMonths][numberOfProductsTypes] & Macierz zawierająca ilości sztuk danego typu produktu znajdujących się w magazynie w danym miesiącu \\
|
||||||
workTime[nMonth][nMachType][nProdType] & Macierz zawierająca czas pracy każdej maszyny dla każdego typu produktu w kazdym miesiącu \\
|
workTime[numberOfMonths][numberOfMachineTypes][numberOfProductsTypes] & Macierz zawierająca czas pracy każdej maszyny dla każdego typu produktu w kazdym miesiącu \\
|
||||||
if80prec[nMonth][nProdType] & Macierz zmiennych binarnych (1 jeśli sprzedaż danego produktu w danym miesiącu przekroczyła 80\% wartości maksymalnej, 0 - w przeciwnym wypadku)\\
|
if80prec[numberOfMonths][numberOfProductsTypes] & Macierz zmiennych binarnych (1 jeśli sprzedaż danego produktu w danym miesiącu przekroczyła 80\% wartości maksymalnej, 0 - w przeciwnym wypadku)\\
|
||||||
lowerProfit[nScenarios][nMonth][nProdType] & Macierz przechowująca kwoty, jaką należy odjąć od zysków z poszczególnych typów produktów w poszczególnych miesiącach, ze względu na przekroczenie 80\% pojemności rynku. Zmienna niezbędna do wyeliminowania obecności zmiennej binarnej w funkcji oceny\\
|
lowerProfit[numberOfScenarios][numberOfMonths][numberOfProductsTypes] & Macierz przechowująca kwoty, jaką należy odjąć od zysków z poszczególnych typów produktów w poszczególnych miesiącach, ze względu na przekroczenie 80\% pojemności rynku. Zmienna niezbędna do wyeliminowania obecności zmiennej binarnej w funkcji oceny\\
|
||||||
\hline
|
\hline
|
||||||
\end{tabular}
|
\end{tabular}
|
||||||
\end{table}
|
\end{table}
|
||||||
@ -198,37 +197,37 @@ Zmienne decyzyjne stanowią wartości kontrolowane przez podmiot podejmujący de
|
|||||||
p \in products}} lowerProfit[i][m][p] >=0
|
p \in products}} lowerProfit[i][m][p] >=0
|
||||||
\end{equation}
|
\end{equation}
|
||||||
|
|
||||||
\item Ograniczenie czasowe pracy maszyn - Każda maszyna może pracować maksymalnie \textit{nHours} godzin w miesiącu, zatem łączny czas pracy wszystkich maszyn danego typu nie może przekroczyć iloczynu liczby dostępnych maszyn tego typu i czasu \textit{nHours}.
|
\item Ograniczenie czasowe pracy maszyn - Każda maszyna może pracować maksymalnie \textit{numberOfHoursInFactory} godzin w miesiącu, zatem łączny czas pracy wszystkich maszyn danego typu nie może przekroczyć iloczynu liczby dostępnych maszyn tego typu i czasu \textit{numberOfHoursInFactory}.
|
||||||
\begin{equation}
|
\begin{equation}
|
||||||
\bigforall_{\substack{
|
\bigforall_{\substack{
|
||||||
m \in months\\
|
m \in months\\
|
||||||
mc \in machines}} \sum_{p \in products}
|
mc \in machines}} \sum_{p \in products}
|
||||||
(workTime[m][mc][p] <= machineCount[mc]*nHours)
|
(workTime[m][mc][p] <= machineCount[mc]*numberOfHoursInFactory)
|
||||||
\end{equation}
|
\end{equation}
|
||||||
\item Ograniczenie wiążące czas pracy maszyn z produkcją - czas wykorzystania określonego typu maszyny jest równy sumie iloczynów liczby wytworzonych jednostek każdego produktu i czasu potrzebnego na obróbkę jednej jednostki tego produktu na danej maszynie:
|
\item Ograniczenie wiążące czas pracy maszyn z produkcją - czas wykorzystania określonego typu maszyny jest równy sumie iloczynów liczby wytworzonych jednostek każdego produktu i czasu potrzebnego na obróbkę jednej jednostki tego produktu na danej maszynie:
|
||||||
\begin{equation}
|
\begin{equation}
|
||||||
\bigforall_{\substack{
|
\bigforall_{\substack{
|
||||||
m \in months\\
|
m \in months\\
|
||||||
mc \in machines\\
|
mc \in machines\\
|
||||||
p \in products}} workTime[m][mc][p] == produce[m][p]*prodTime[mc][p]
|
p \in products}} workTime[m][mc][p] == produce[m][p]*timeToProduce[mc][p]
|
||||||
\end{equation}
|
\end{equation}
|
||||||
\item Ograniczenie maksymalnej sprzedaży wynikające z pojemności rynku w danym miesiącu:
|
\item Ograniczenie maksymalnej sprzedaży wynikające z pojemności rynku w danym miesiącu:
|
||||||
\begin{equation}
|
\begin{equation}
|
||||||
\bigforall_{\substack{
|
\bigforall_{\substack{
|
||||||
m \in months\\
|
m \in months\\
|
||||||
p \in products}} sell[m][p] == maxInMonth[m][p]
|
p \in products}} sell[m][p] == maxProductsInMonth[m][p]
|
||||||
\end{equation}
|
\end{equation}
|
||||||
|
|
||||||
\item Warunki definiujące zmienną binarną przy przekroczeniu 80 procent chłonności rynku:
|
\item Warunki definiujące zmienną binarną przy przekroczeniu 80 procent chłonności rynku:
|
||||||
\begin{equation}
|
\begin{equation}
|
||||||
\bigforall_{\substack{
|
\bigforall_{\substack{
|
||||||
m \in months\\
|
m \in months\\
|
||||||
p \in products}} sell[m][p] <= 0.8*maxInMonth[m][p] + 1000000 * if80prec[m][p]
|
p \in products}} sell[m][p] <= 0.8*maxProductsInMonth[m][p] + 1000000 * if80prec[m][p]
|
||||||
\end{equation}
|
\end{equation}
|
||||||
\begin{equation}
|
\begin{equation}
|
||||||
\bigforall_{\substack{
|
\bigforall_{\substack{
|
||||||
m \in months\\
|
m \in months\\
|
||||||
p \in products}} sell[m][p] >= 0.8*maxInMonth[m][p] * if80prec[m][p]
|
p \in products}} sell[m][p] >= 0.8*maxProductsInMonth[m][p] * if80prec[m][p]
|
||||||
\end{equation}
|
\end{equation}
|
||||||
|
|
||||||
\item Ograniczenia linearyzujące oddziaływanie zmiennych binarnych na funkcję celu:
|
\item Ograniczenia linearyzujące oddziaływanie zmiennych binarnych na funkcję celu:
|
||||||
@ -305,19 +304,21 @@ Model zaimplementowano w środowisku IBM ILOG CPLEX Optimization Studio z wykorz
|
|||||||
\end{enumerate}
|
\end{enumerate}
|
||||||
|
|
||||||
\subsection{Rozwiązanie}
|
\subsection{Rozwiązanie}
|
||||||
Rozwiązanie optymalne modelu maksymalizacji wartości oczekiwanej zysku zostało wyznaczone przy użyciu solvera CPLEX. Maksymalna wartość oczekiwana zysku wynosi około 26023,63 zł. Optymalne wartości zmiennych decyzyjnych przedstawiają się następująco:
|
Rozwiązanie optymalne modelu maksymalizacji wartości oczekiwanej zysku zostało wyznaczone przy użyciu solvera CPLEX.
|
||||||
|
Maksymalna wartość oczekiwana zysku wynosi około 11036,12 zł.
|
||||||
|
Optymalne wartości zmiennych decyzyjnych przedstawiają się następująco:
|
||||||
\begin{displaymath}
|
\begin{displaymath}
|
||||||
\mathbf{sell} =
|
\mathbf{sell} =
|
||||||
\begin{pmatrix}
|
\begin{pmatrix}
|
||||||
320 & 0 & 160 & 240 \\
|
160 & 0 & 80 & 160 \\
|
||||||
700 & 320 & 500 & 0 \\
|
240 & 80 & 160 & 160 \\
|
||||||
0 & 800 & 600 & 320 \\
|
0 & 240 & 80 & 160 \\
|
||||||
\end{pmatrix},
|
\end{pmatrix},
|
||||||
\mathbf{if80prec} =
|
\mathbf{if80prec} =
|
||||||
\begin{pmatrix}
|
\begin{pmatrix}
|
||||||
0 & 1 & 0 & 0 \\
|
0 & 1 & 0 & 0 \\
|
||||||
1 & 0 & 1 & 1 \\
|
0 & 0 & 0 & 0 \\
|
||||||
1 & 1 & 1 & 0 \\
|
1 & 0 & 0 & 0 \\
|
||||||
\end{pmatrix},
|
\end{pmatrix},
|
||||||
\end{displaymath}
|
\end{displaymath}
|
||||||
\begin{displaymath}
|
\begin{displaymath}
|
||||||
@ -329,9 +330,9 @@ Rozwiązanie optymalne modelu maksymalizacji wartości oczekiwanej zysku został
|
|||||||
\end{pmatrix},
|
\end{pmatrix},
|
||||||
\mathbf{produce} =
|
\mathbf{produce} =
|
||||||
\begin{pmatrix}
|
\begin{pmatrix}
|
||||||
270 & 0 & 110 & 190 \\
|
110 & 0 & 30 & 110 \\
|
||||||
700 & 270 & 500 & 0 \\
|
240 & 30 & 160 & 160 \\
|
||||||
50 & 850 & 650 & 370 \\
|
50 & 290 & 130 & 210 \\
|
||||||
\end{pmatrix}
|
\end{pmatrix}
|
||||||
\end{displaymath}
|
\end{displaymath}
|
||||||
|
|
||||||
@ -339,29 +340,29 @@ Czasem pracy poszczególnych typów maszyn dla różnych typów produktów w ka
|
|||||||
\begin{displaymath}
|
\begin{displaymath}
|
||||||
\mathbf{workTime[1]} =
|
\mathbf{workTime[1]} =
|
||||||
\begin{pmatrix}
|
\begin{pmatrix}
|
||||||
108 & 0 & 0 & 0 \\
|
44 & 0 & 0 & 0 \\
|
||||||
54 & 0 & 0 & 114 \\
|
22 & 0 & 0 & 66 \\
|
||||||
27 & 0 & 77 & 0 \\
|
11 & 0 & 35 & 0 \\
|
||||||
16.2 & 0 & 0 & 9.5 \\
|
6.6 & 0 & 0 & 5.5 \\
|
||||||
0 & 0 & 2.2 & 0 \\
|
0 & 0 & 1 & 0 \\
|
||||||
\end{pmatrix},
|
\end{pmatrix},
|
||||||
\mathbf{workTime[2]} =
|
\mathbf{workTime[2]} =
|
||||||
\begin{pmatrix}
|
\begin{pmatrix}
|
||||||
280 & 162 & 0 & 0 \\
|
96 & 18 & 0 & 0 \\
|
||||||
140 & 27 & 0 & 0 \\
|
48 & 3 & 0 & 96 \\
|
||||||
70 & 0 & 350 & 0 \\
|
24 & 0 & 140 & 0 \\
|
||||||
42 & 10.8 & 0 & 0 \\
|
14.4 & 1.2 & 0 & 8 \\
|
||||||
0 & 13.5 & 10 & 0 \\
|
0 & 1.5 & 4 & 0 \\
|
||||||
\end{pmatrix},
|
\end{pmatrix},
|
||||||
\end{displaymath}
|
\end{displaymath}
|
||||||
\begin{displaymath}
|
\begin{displaymath}
|
||||||
\mathbf{workTime[3]} =
|
\mathbf{workTime[3]} =
|
||||||
\begin{pmatrix}
|
\begin{pmatrix}
|
||||||
20 & 510 & 0 & 0 \\
|
20 & 174 & 0 & 0 \\
|
||||||
10 & 85 & 0 & 222 \\
|
10 & 29 & 0 & 126 \\
|
||||||
5 & 0 & 455 & 0 \\
|
5 & 0 & 105 & 0 \\
|
||||||
3 & 34 & 0 & 18.5 \\
|
3 & 11.6 & 0 & 10.5 \\
|
||||||
0 & 42.5 & 13 & 0 \\
|
0 & 14.5 & 3 & 0 \\
|
||||||
\end{pmatrix}
|
\end{pmatrix}
|
||||||
\end{displaymath}
|
\end{displaymath}
|
||||||
|
|
||||||
@ -379,7 +380,7 @@ gdzie $r_{t'}(\mathbf{x})$ oznacza realizację zysku dla scenariusza $t'$, a $p_
|
|||||||
|
|
||||||
W kontekście przyjętych w projekcie oznaczeń, wyrażenie definiujące miarę ryzyka przyjmuje następującą postać:
|
W kontekście przyjętych w projekcie oznaczeń, wyrażenie definiujące miarę ryzyka przyjmuje następującą postać:
|
||||||
\begin{equation}
|
\begin{equation}
|
||||||
giniRisk = \frac{1}{2}\cdot\sum_{t1 \in scenarios}\sum_{t2 \in scenarios} \lvert profit[t1]-profit[t2] \rvert \cdot \frac{1}{nScenarios} \cdot \frac{1}{nScenarios}
|
giniRisk = \frac{1}{2}\cdot\sum_{t1 \in scenarios}\sum_{t2 \in scenarios} \lvert profit[t1]-profit[t2] \rvert \cdot \frac{1}{numberOfScenarios} \cdot \frac{1}{numberOfScenarios}
|
||||||
\end{equation}
|
\end{equation}
|
||||||
|
|
||||||
\subsection{Model preferencji}
|
\subsection{Model preferencji}
|
||||||
@ -396,7 +397,7 @@ minAvgProfit stanowi dodatkowy parametr modelu. Załączniki 5 i 6 zawierają pl
|
|||||||
Na rysunku \ref{fig:profit-risk} zaprezentowano rozwiązania efektywne modelu w przestrzeni ryzyko-zysk. Niebieskie trójkąty oznaczają rozwiązania efektywne dla różnych wartości wymaganego poziomu zysku. Uwzględniając ograniczenia obliczeniowe komputera, wygenerowano 52 równomiernie rozmieszczone rozwiązania, z których każde bazuje na 30 scenariuszach. Wprowadzono ograniczenie czasowe działania solvera dla pojedynczego rozwiązania na poziomie 5 minut. Całkowity czas obliczeń przekroczył 3 godziny. Załączniki 7 i 8 obejmują pliki parametrów oraz modelu wraz ze skryptem dla solvera CPLEX, które zostały wykorzystane do uzyskania rozwiązań. Kolorem żółtym wyróżniono rozwiązanie maksymalnego zysku oraz minimalnego ryzyka. Wartości odpowiadające tym rozwiązaniom przedstawiono w tabeli \ref{tab:min-max}.
|
Na rysunku \ref{fig:profit-risk} zaprezentowano rozwiązania efektywne modelu w przestrzeni ryzyko-zysk. Niebieskie trójkąty oznaczają rozwiązania efektywne dla różnych wartości wymaganego poziomu zysku. Uwzględniając ograniczenia obliczeniowe komputera, wygenerowano 52 równomiernie rozmieszczone rozwiązania, z których każde bazuje na 30 scenariuszach. Wprowadzono ograniczenie czasowe działania solvera dla pojedynczego rozwiązania na poziomie 5 minut. Całkowity czas obliczeń przekroczył 3 godziny. Załączniki 7 i 8 obejmują pliki parametrów oraz modelu wraz ze skryptem dla solvera CPLEX, które zostały wykorzystane do uzyskania rozwiązań. Kolorem żółtym wyróżniono rozwiązanie maksymalnego zysku oraz minimalnego ryzyka. Wartości odpowiadające tym rozwiązaniom przedstawiono w tabeli \ref{tab:min-max}.
|
||||||
\begin{figure}[ht!]
|
\begin{figure}[ht!]
|
||||||
\centering
|
\centering
|
||||||
%\includegraphics[width=0.8\textwidth]{graphics/results-minAvgProfit-marker}
|
\includegraphics[width=0.8\textwidth]{graphics/ryzyko_zysk_wykres.png}
|
||||||
\caption{Obraz zbioru rozwiązań efektywnych w przestrzeni ryzyko-zysk}
|
\caption{Obraz zbioru rozwiązań efektywnych w przestrzeni ryzyko-zysk}
|
||||||
\label{fig:profit-risk}
|
\label{fig:profit-risk}
|
||||||
\end{figure}
|
\end{figure}
|
||||||
@ -414,7 +415,7 @@ Na wykresie \ref{fig:profit-risk} żółtymi punktami wyznaczono rozwiązania ch
|
|||||||
\hline
|
\hline
|
||||||
& Miara zysku & Miara ryzyka \\
|
& Miara zysku & Miara ryzyka \\
|
||||||
\hline
|
\hline
|
||||||
Maksymalizacja zysku & 26553.9 zł & 796.113 zł \\
|
Maksymalizacja zysku & 9515.80 zł & 360.18 zł \\
|
||||||
Minimalizacja ryzyka & -600.00 zł & 0.0 zł \\
|
Minimalizacja ryzyka & -600.00 zł & 0.0 zł \\
|
||||||
\hline
|
\hline
|
||||||
|
|
||||||
@ -435,19 +436,24 @@ W celu analizy dominacji stochastycznej pierwszego rzędu (FSD) wybrano 3 rozwi
|
|||||||
\hline
|
\hline
|
||||||
& A & B & C \\
|
& A & B & C \\
|
||||||
\hline
|
\hline
|
||||||
Ograniczenie minimalnego zysku & 25488.1 zł & 26020.5 zł & 26552.9 zł\\
|
Ograniczenie minimalnego zysku & 8450.97 zł & 8983.38 zł & 9515.79 zł\\
|
||||||
Średni zysk & 25488.3 zł & 26020.6 zł & 26553.9 zł\\
|
Średni zysk & 8451.02 zł & 8983.40 zł & 9515.80 zł\\
|
||||||
Miara ryzyka & 755.133 zł & 774.872 zł & 796.113 zł\\
|
Miara ryzyka & 306.38 zł & 332.93 zł & 360.18 zł\\
|
||||||
\hline
|
\hline
|
||||||
\end{tabular}
|
\end{tabular}
|
||||||
\end{table}
|
\end{table}
|
||||||
|
|
||||||
|
|
||||||
W celu weryfikacji wzajemnej dominacji wybranych rozwiązań w sensie FSD przygotowano odwrotne dystrybuanty dla obu kryteriów. Rysunek \ref{fig:FSD-profit} ilustruje odwrotną dystrybuantę rozkładu średniego zysku między scenariuszami dla trzech wybranych rozwiązań efektywnych. Analiza wykresu wskazuje, że rozwiązanie C wykazuje dominację nad rozwiązaniami A i B w sensie FSD, co oznacza, że w każdym scenariuszu miara zysku dla decyzji C przewyższa odpowiednie wartości dla decyzji A i B. Ponadto rozwiązanie B dominuje rozwiązanie A w sensie FSD.
|
W celu weryfikacji wzajemnej dominacji wybranych rozwiązań w sensie FSD przygotowano odwrotne dystrybuanty
|
||||||
|
dla obu kryteriów. Rysunek \ref{fig:FSD-profit} ilustruje odwrotną dystrybuantę rozkładu średniego
|
||||||
|
zysku między scenariuszami dla trzech wybranych rozwiązań efektywnych. Analiza wykresu wskazuje,
|
||||||
|
że rozwiązanie C wykazuje dominację nad rozwiązaniami A i B w sensie FSD, co oznacza, że w
|
||||||
|
każdym scenariuszu miara zysku dla decyzji C przewyższa odpowiednie wartości dla decyzji A i B.
|
||||||
|
Ponadto rozwiązanie B dominuje rozwiązanie A w sensie FSD.
|
||||||
|
|
||||||
\begin{figure}[ht!]
|
\begin{figure}[ht!]
|
||||||
\centering
|
\centering
|
||||||
%\includegraphics[width=\textwidth]{graphics/results-FSD-profit}
|
\includegraphics[width=\textwidth]{graphics/zysk_dystrybuanta.png}
|
||||||
\caption{Odwrotna dystrybuanta rozkładu średniego zysku między scenariuszami}
|
\caption{Odwrotna dystrybuanta rozkładu średniego zysku między scenariuszami}
|
||||||
\label{fig:FSD-profit}
|
\label{fig:FSD-profit}
|
||||||
\end{figure}
|
\end{figure}
|
||||||
@ -456,34 +462,10 @@ Rysunek \ref{fig:FSD-risk} przedstawia odwrotną dystrybuantę rozkładu średni
|
|||||||
|
|
||||||
\begin{figure}[ht!]
|
\begin{figure}[ht!]
|
||||||
\centering
|
\centering
|
||||||
%\includegraphics[width=0.95\textwidth]{graphics/results-FSD-risk}
|
\includegraphics[width=\textwidth]{graphics/ryzyko_dystrybuanta.png}
|
||||||
\caption{Odwrotna dystrybuanta rozkładu średniej różnicy Giniego między scenariuszami}
|
\caption{Odwrotna dystrybuanta rozkładu średniej różnicy Giniego między scenariuszami}
|
||||||
\label{fig:FSD-risk}
|
\label{fig:FSD-risk}
|
||||||
\end{figure}
|
\end{figure}
|
||||||
|
|
||||||
|
|
||||||
\clearpage
|
|
||||||
%%% SPIS TABEL %%%
|
|
||||||
% \phantomsection
|
|
||||||
\addcontentsline{toc}{chapter}{\listtablename}
|
|
||||||
\listoftables
|
|
||||||
|
|
||||||
%%% SPIS ZAŁĄCZNIKÓW %%%
|
|
||||||
\addcontentsline{toc}{section}{Spis załączników}
|
|
||||||
\section*{Spis załączników}
|
|
||||||
\begin{enumerate}
|
|
||||||
\item t-Student.R - skrypt generujący wektory opisujące dochód ze sprzedaży produktów w poszczególnych scenariuszy,
|
|
||||||
\item wdwr17421-1.dat - plik definiujący parametry modelu jednokryterialnego,
|
|
||||||
\item wdwr17421-1.mod - plik implementujący model jednokryterialny,
|
|
||||||
\item wdwr17421-1.log - pełne wyniki działania solvera dla modelu jednokryterialnego,
|
|
||||||
\item wdwr17421-2.dat - plik definiujący parametry modelu dwukryterialnego,
|
|
||||||
\item wdwr17421-2.mod - plik implementujący model dwukryterialny,
|
|
||||||
\item wdwr17421-3.dat - plik definiujący parametry modelu dwukryterialnego,
|
|
||||||
\item wdwr17421-3.mod - plik implementujący model oraz skrypt do uzyskania obrazu rozwiązań w przestrzeni ryzyko-zysk,
|
|
||||||
\item wdwr17421-4.dat - plik definiujący parametry modelu,
|
|
||||||
\item wdwr17421-4.mod - plik implementujący model oraz skrypt do uzyskania danych do analizy dominacji FSD.
|
|
||||||
\end{enumerate}
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
\end{document}
|
\end{document}
|
||||||
51
Programming/WDWR/projekt/graph.py
Normal file
51
Programming/WDWR/projekt/graph.py
Normal file
@ -0,0 +1,51 @@
|
|||||||
|
import matplotlib.pyplot as plt
|
||||||
|
import pandas as pd
|
||||||
|
from io import StringIO
|
||||||
|
|
||||||
|
# Your data
|
||||||
|
data_str = """i;minAvgProfit;avgProfit;giniRisk;m1_prod_P1;m1_prod_P2;m1_prod_P3;m1_prod_P4;m2_prod_P1;m2_prod_P2;m2_prod_P3;m2_prod_P4;m3_prod_P1;m3_prod_P2;m3_prod_P3;m3_prod_P4;m1_stock_P1;m1_stock_P2;m1_stock_P3;m1_stock_P4;m2_stock_P1;m2_stock_P2;m2_stock_P3;m2_stock_P4;m3_stock_P1;m3_stock_P2;m3_stock_P3;m3_stock_P4
|
||||||
|
1;-600;-600;0;0;0;0;0;0;0;0;0;0;0;0;0;50;50;50;50;50;50;50;50;50;50;50;50
|
||||||
|
2;-67.59;-67.423334025;12.249866065;0;0;0;1;0;0;0;0;9;8;1;43;41;50;50;7;41;42;49;7;50;50;50;50
|
||||||
|
3;464.82;465.647226284;26.015138747;0;0;0;0;0;0;0;29;20;19;9;52;30;50;41;0;30;31;41;0;50;50;50;50
|
||||||
|
4;997.23;997.66185313;40.349353614;0;0;0;110;0;0;0;0;30;30;13;50;20;50;37;0;20;20;37;0;50;50;50;50
|
||||||
|
5;1529.64;1530.172175866;54.689711726;0;0;0;114;0;0;0;0;42;40;17;92;8;50;33;0;8;10;33;0;50;50;50;50
|
||||||
|
6;2062.05;2062.088549477;69.062913221;0;0;0;9;0;0;0;200;50;50;25;50;0;50;25;0;0;0;25;0;50;50;50;50
|
||||||
|
7;2594.46;2594.684714046;84.265583873;9;0;0;64;0;10;0;159;50;51;28;51;0;50;22;0;0;0;22;0;50;50;50;50
|
||||||
|
8;3126.87;3127.12427492;99.497458717;20;0;0;0;0;30;0;111;50;58;35;249;0;50;15;0;0;0;15;0;50;50;50;50
|
||||||
|
9;3659.28;3659.345897427;114.728718529;29;0;0;2;1;31;0;200;50;69;39;249;0;50;11;0;0;0;11;0;50;50;50;50
|
||||||
|
10;4191.69;4191.916591732;129.963670504;36;0;0;114;5;32;0;160;50;79;45;210;0;50;5;0;0;0;5;0;50;50;50;50
|
||||||
|
11;4724.1;4724.191045823;145.204545226;50;0;0;100;2;34;0;197;50;89;50;250;0;50;0;0;0;0;0;0;50;50;50;50
|
||||||
|
12;5256.51;5256.719240584;162.349562672;72;0;34;150;0;3;0;200;50;123;50;210;0;50;0;0;0;0;0;0;50;50;50;50
|
||||||
|
13;5788.92;5789.016098305;182.46075748;122;0;0;150;1;1;0;200;50;149;94;210;0;50;0;0;0;0;0;0;50;50;50;50
|
||||||
|
14;6321.33;6321.358645932;205.000585625;110;0;50;150;19;33;0;200;50;156;102;250;0;50;0;0;0;0;0;0;50;50;50;50
|
||||||
|
15;6853.74;6853.83219788;229.023498807;109;0;24;110;1;0;94;160;50;191;51;250;0;50;0;0;0;0;0;0;50;50;50;50
|
||||||
|
16;7386.15;7386.171785273;253.962965038;1;0;1;150;121;30;189;200;50;200;50;210;0;50;0;0;0;0;0;0;50;50;50;50
|
||||||
|
17;7918.56;7918.565798346;279.907638363;110;0;30;110;59;48;76;160;50;205;130;210;0;50;0;0;0;0;0;0;50;50;50;50
|
||||||
|
18;8450.97;8451.020747071;306.383357869;111;0;0;150;72;0;191;200;50;256;131;210;0;50;0;0;0;0;0;0;50;50;50;50
|
||||||
|
19;8983.38;8983.400103901;332.936696297;111;0;49;110;83;15;144;200;50;317;149;250;0;50;0;0;0;0;0;0;50;50;50;50
|
||||||
|
20;9515.79;9515.804890325;360.18213126;110;0;30;110;110;28;160;160;50;273;150;250;0;50;0;0;0;0;0;0;50;50;50;50"""
|
||||||
|
|
||||||
|
# Read the data
|
||||||
|
df = pd.read_csv(StringIO(data_str), sep=';')
|
||||||
|
|
||||||
|
# Create the scatter plot
|
||||||
|
plt.figure(figsize=(10, 6))
|
||||||
|
plt.scatter(df['avgProfit'], df['giniRisk'], alpha=0.7, s=50)
|
||||||
|
|
||||||
|
# Add labels and title
|
||||||
|
plt.xlabel('Przeciętny Zysk')
|
||||||
|
plt.ylabel('Ryzyko')
|
||||||
|
|
||||||
|
# Add grid for better readability
|
||||||
|
plt.grid(True, alpha=0.3)
|
||||||
|
|
||||||
|
# Format the plot
|
||||||
|
plt.tight_layout()
|
||||||
|
|
||||||
|
# Show the plot
|
||||||
|
plt.show()
|
||||||
|
|
||||||
|
# Print some basic statistics
|
||||||
|
print(f"Average Profit range: {df['avgProfit'].min():.2f} to {df['avgProfit'].max():.2f}")
|
||||||
|
print(f"Gini Risk range: {df['giniRisk'].min():.2f} to {df['giniRisk'].max():.2f}")
|
||||||
|
print(f"Number of data points: {len(df)}")
|
||||||
65
Programming/WDWR/projekt/graph2.py
Normal file
65
Programming/WDWR/projekt/graph2.py
Normal file
@ -0,0 +1,65 @@
|
|||||||
|
import matplotlib.pyplot as plt
|
||||||
|
import numpy as np
|
||||||
|
|
||||||
|
# Data for the three scenarios
|
||||||
|
scenario1_profits = [
|
||||||
|
8283.101223531, 8360.092861464, 8023.436774628, 7996.435353438, 8108.734620296,
|
||||||
|
8709.702668322, 9236.429507678, 8492.980846575, 8912.962073143, 8201.079841867,
|
||||||
|
7947.08574225, 8426.386242154, 8633.510288097, 7925.419317516, 8216.653093455,
|
||||||
|
8162.239336848, 10606.276724793, 7766.753696884, 8902.966530729, 8329.954853003,
|
||||||
|
8615.534725088, 9307.905933844, 8711.836200338, 7853.713101162, 8160.850707138,
|
||||||
|
8505.74747647, 7807.599624626, 8650.006339759, 7571.333855925, 9103.892851116
|
||||||
|
]
|
||||||
|
|
||||||
|
scenario2_profits = [
|
||||||
|
8779.880622914, 8905.098118171, 8457.038873118, 8476.337700492, 8611.662470696,
|
||||||
|
9284.604268643, 9787.525726881, 9033.316521658, 9469.444921654, 8726.555858861,
|
||||||
|
8437.173060618, 8935.043125766, 9172.334141304, 8425.564554151, 8725.52174345,
|
||||||
|
8672.538442695, 11321.501722433, 8233.9854963, 9465.167737138, 8841.407418574,
|
||||||
|
9162.816556878, 9946.670992861, 9281.411111594, 8349.695093959, 8671.731748701,
|
||||||
|
9074.152941559, 8296.712958538, 9208.592940681, 8041.287735389, 9707.228511359
|
||||||
|
]
|
||||||
|
|
||||||
|
scenario3_profits = [
|
||||||
|
9268.899026395, 9430.210649623, 8919.631184021, 8944.062758608, 9095.775246456,
|
||||||
|
9886.312580673, 10387.393647889, 9637.953603446, 10098.221535588, 9238.913391815,
|
||||||
|
8980.977156104, 9414.393022001, 9722.356857713, 8917.726783311, 9178.474614142,
|
||||||
|
9167.292074295, 12011.512542804, 8693.048121325, 10039.47692674, 9375.735645214,
|
||||||
|
9730.36014247, 10531.376234688, 9750.101324443, 8881.341453044, 9186.289888284,
|
||||||
|
9675.754350507, 8773.329747496, 9722.523537949, 8489.277170975, 10325.425491734
|
||||||
|
]
|
||||||
|
|
||||||
|
# Create figure with single plot
|
||||||
|
plt.figure(figsize=(12, 8))
|
||||||
|
|
||||||
|
# Sort the data for each scenario (descending order)
|
||||||
|
scenario1_sorted = sorted(scenario1_profits, reverse=True)
|
||||||
|
scenario2_sorted = sorted(scenario2_profits, reverse=True)
|
||||||
|
scenario3_sorted = sorted(scenario3_profits, reverse=True)
|
||||||
|
|
||||||
|
# Create y-axis values (cumulative distribution from 0 to 1)
|
||||||
|
num_points = len(scenario1_profits)
|
||||||
|
y_values = [i / num_points for i in range(1, num_points + 1)]
|
||||||
|
|
||||||
|
# Plot all three scenarios on the same graph
|
||||||
|
plt.plot(scenario1_sorted, y_values, 'b-o', label='Scenariusz 1', linewidth=2, markersize=4)
|
||||||
|
plt.plot(scenario2_sorted, y_values, 'g-s', label='Scenariusz 2', linewidth=2, markersize=4)
|
||||||
|
plt.plot(scenario3_sorted, y_values, 'r-^', label='Scenariusz 3', linewidth=2, markersize=4)
|
||||||
|
# Add labels and title
|
||||||
|
plt.xlabel('Przeciętny Zysk')
|
||||||
|
plt.ylabel('Odwrotna dystrybuanta')
|
||||||
|
plt.ylim(0, 1) # Set y-axis limits to cut off values outside 0-1 range
|
||||||
|
plt.grid(True, alpha=0.3)
|
||||||
|
plt.legend()
|
||||||
|
|
||||||
|
# Format the plot
|
||||||
|
plt.tight_layout()
|
||||||
|
|
||||||
|
# Show the plot
|
||||||
|
plt.show()
|
||||||
|
|
||||||
|
# Print statistics for each scenario
|
||||||
|
print("Scenario Statistics:")
|
||||||
|
print(f"Scenario 1 - Mean: {np.mean(scenario1_profits):.2f}, Std: {np.std(scenario1_profits):.2f}")
|
||||||
|
print(f"Scenario 2 - Mean: {np.mean(scenario2_profits):.2f}, Std: {np.std(scenario2_profits):.2f}")
|
||||||
|
print(f"Scenario 3 - Mean: {np.mean(scenario3_profits):.2f}, Std: {np.std(scenario3_profits):.2f}")
|
||||||
60
Programming/WDWR/projekt/graph3.py
Normal file
60
Programming/WDWR/projekt/graph3.py
Normal file
@ -0,0 +1,60 @@
|
|||||||
|
import matplotlib.pyplot as plt
|
||||||
|
import numpy as np
|
||||||
|
|
||||||
|
# Data for the three scenarios - Risk values
|
||||||
|
scenario1_risks = [
|
||||||
|
184.458, 195.09, 207.678, 278.26, 220.823, 181.042, 195.281, 199.255, 182.194, 181.295,
|
||||||
|
285.773, 185.306, 272.997, 288.405, 223.407, 213.341, 208.693, 354.01, 217.093, 301.892,
|
||||||
|
200.499, 637.424, 408.232, 308.314, 181.042, 470.693, 212.039, 184.694, 345.455, 205.291
|
||||||
|
]
|
||||||
|
|
||||||
|
scenario2_risks = [
|
||||||
|
403.784, 414.043, 408.225, 664.379, 413.447, 448.303, 513.763, 439.966, 403.784, 408.366,
|
||||||
|
773.926, 459.531, 537.056, 795.835, 542.569, 512.817, 471.741, 879.425, 441.46, 533.521,
|
||||||
|
659.742, 990.73, 842.758, 776.278, 404.787, 989.35, 481.833, 409.978, 795.275, 421.261
|
||||||
|
]
|
||||||
|
|
||||||
|
scenario3_risks = [
|
||||||
|
559.839, 576.633, 596.264, 942.092, 560.045, 679.026, 683.47, 627.607, 559.839, 562.478,
|
||||||
|
1245.41, 638.37, 675.366, 1132.8, 784.609, 686.634, 680.842, 1115.92, 572.793, 682.114,
|
||||||
|
914.647, 1211.67, 1051.95, 1104.87, 583.36, 1360.71, 743.425, 577.734, 1191.09, 581.791
|
||||||
|
]
|
||||||
|
|
||||||
|
# Create figure with single plot
|
||||||
|
plt.figure(figsize=(12, 8))
|
||||||
|
|
||||||
|
# Sort the data for each scenario (descending order)
|
||||||
|
scenario1_sorted = sorted(scenario1_risks, reverse=True)
|
||||||
|
scenario2_sorted = sorted(scenario2_risks, reverse=True)
|
||||||
|
scenario3_sorted = sorted(scenario3_risks, reverse=True)
|
||||||
|
|
||||||
|
# Create y-axis values (cumulative distribution from 0 to 1)
|
||||||
|
num_points = len(scenario1_risks)
|
||||||
|
y_values = [i / num_points for i in range(1, num_points + 1)]
|
||||||
|
|
||||||
|
# Plot all three scenarios on the same graph
|
||||||
|
plt.plot(scenario1_sorted, y_values, 'b-o', label='Scenariusz 1', linewidth=2, markersize=4)
|
||||||
|
plt.plot(scenario2_sorted, y_values, 'g-s', label='Scenariusz 2', linewidth=2, markersize=4)
|
||||||
|
plt.plot(scenario3_sorted, y_values, 'r-^', label='Scenariusz 3', linewidth=2, markersize=4)
|
||||||
|
|
||||||
|
# Add labels and title
|
||||||
|
plt.xlabel('Ryzyko')
|
||||||
|
plt.ylabel('Odwrotna dystrybuanta')
|
||||||
|
plt.ylim(0, 1) # Set y-axis limits to cut off values outside 0-1 range
|
||||||
|
plt.grid(True, alpha=0.3)
|
||||||
|
plt.legend()
|
||||||
|
|
||||||
|
# Format the plot
|
||||||
|
plt.tight_layout()
|
||||||
|
|
||||||
|
# Show the plot
|
||||||
|
plt.show()
|
||||||
|
|
||||||
|
# Print statistics for each scenario
|
||||||
|
print("Scenario Statistics:")
|
||||||
|
print(f"Scenario 1 - Mean: {np.mean(scenario1_risks):.2f}, "
|
||||||
|
f"Std: {np.std(scenario1_risks):.2f}")
|
||||||
|
print(f"Scenario 2 - Mean: {np.mean(scenario2_risks):.2f}, "
|
||||||
|
f"Std: {np.std(scenario2_risks):.2f}")
|
||||||
|
print(f"Scenario 3 - Mean: {np.mean(scenario3_risks):.2f}, "
|
||||||
|
f"Std: {np.std(scenario3_risks):.2f}")
|
||||||
@ -5,26 +5,26 @@
|
|||||||
*********************************************/
|
*********************************************/
|
||||||
|
|
||||||
/***************PARAMETRY********************/
|
/***************PARAMETRY********************/
|
||||||
nMachType = 5; //ilosc typow maszun
|
numberOfMachineTypes = 5; //ilosc typow maszun
|
||||||
nMonth = 3; //ilosc symulowanych miesiecy
|
numberOfMonths = 3; //ilosc symulowanych miesiecy
|
||||||
nProdType = 4; //ilosc typow produktow
|
numberOfProductsTypes = 4; //ilosc typow produktow
|
||||||
|
|
||||||
nHours = 384; //liczba godzin roboczych w miesiacu 2*8*24=384
|
numberOfHoursInFactory = 384; //liczba godzin roboczych w miesiacu 2*8*24=384
|
||||||
nScenarios = 1000; //ilosc scenariuszy w symulacji
|
numberOfScenarios = 1000; //ilosc scenariuszy w symulacji
|
||||||
|
|
||||||
// Ilosc maszyn poszczegolnych typow
|
// Ilosc maszyn poszczegolnych typow
|
||||||
machineCount = [4 2 3 1 1];
|
machineCount = [4 2 3 1 1];
|
||||||
|
|
||||||
// Koszty wykorzystania typow maszyn (wiersze)
|
// Koszty wykorzystania typow maszyn (wiersze)
|
||||||
//w wytwarzaniu poszczegolnych typow produktow (kolumny)
|
//w wytwarzaniu poszczegolnych typow produktow (kolumny)
|
||||||
prodTime = [[ 0.4 0.6 0 0]
|
timeToProduce = [[ 0.4 0.6 0 0]
|
||||||
[ 0.2 0.1 0 0.6]
|
[ 0.2 0.1 0 0.6]
|
||||||
[ 0.1 0 0.7 0]
|
[ 0.1 0 0.7 0]
|
||||||
[ 0.06 0.04 0 0.05]
|
[ 0.06 0.04 0 0.05]
|
||||||
[ 0 0.05 0.02 0]];
|
[ 0 0.05 0.02 0]];
|
||||||
|
|
||||||
// Pojemnosc rynku - typ produktu(kolumny) w miesiacu(wiersz)
|
// Pojemnosc rynku - typ produktu(kolumny) w miesiacu(wiersz)
|
||||||
maxInMonth = [[ 200 0 100 200]
|
maxProductsInMonth = [[ 200 0 100 200]
|
||||||
[ 300 100 200 200]
|
[ 300 100 200 200]
|
||||||
[ 0 300 100 200]];
|
[ 0 300 100 200]];
|
||||||
|
|
||||||
|
|||||||
@ -8,23 +8,23 @@
|
|||||||
//Paramatry zostaladniej opisane w pliku .dat oraz raporcie
|
//Paramatry zostaladniej opisane w pliku .dat oraz raporcie
|
||||||
|
|
||||||
// Parametry liczbowe
|
// Parametry liczbowe
|
||||||
int nMachType = ...;
|
int numberOfMachineTypes = ...;
|
||||||
int nMonth = ...;
|
int numberOfMonths = ...;
|
||||||
int nProdType = ...;
|
int numberOfProductsTypes = ...;
|
||||||
|
|
||||||
int nHours = ...;
|
int numberOfHoursInFactory = ...;
|
||||||
int nScenarios = ...;
|
int numberOfScenarios = ...;
|
||||||
|
|
||||||
// Utworzenie wektorow indeksujacych
|
// Utworzenie wektorow indeksujacych
|
||||||
{int} machines = asSet(1..nMachType);
|
{int} machines = asSet(1..numberOfMachineTypes);
|
||||||
{int} months = asSet(1..nMonth);
|
{int} months = asSet(1..numberOfMonths);
|
||||||
{int} products = asSet(1..nProdType);
|
{int} products = asSet(1..numberOfProductsTypes);
|
||||||
{int} scenarios = asSet(1..nScenarios);
|
{int} scenarios = asSet(1..numberOfScenarios);
|
||||||
|
|
||||||
//Parametry produkcji i sprzedazy
|
//Parametry produkcji i sprzedazy
|
||||||
int machineCount[machines] = ...;
|
int machineCount[machines] = ...;
|
||||||
float prodTime[machines][products] = ...;
|
float timeToProduce[machines][products] = ...;
|
||||||
int maxInMonth[months][products] = ...;
|
int maxProductsInMonth[months][products] = ...;
|
||||||
|
|
||||||
//Parametry magazynowania
|
//Parametry magazynowania
|
||||||
int storageMax[products] = ...;
|
int storageMax[products] = ...;
|
||||||
@ -58,7 +58,7 @@ dvar float lowerProfit[scenarios][months][products];
|
|||||||
dexpr float profit[i in scenarios] = sum(m in months, p in products)
|
dexpr float profit[i in scenarios] = sum(m in months, p in products)
|
||||||
(sell[m][p]*sellProfit[i][p]-lowerProfit[i][m][p]- stock[m][p]*storageCost);
|
(sell[m][p]*sellProfit[i][p]-lowerProfit[i][m][p]- stock[m][p]*storageCost);
|
||||||
// wartosc oczekiwana zysku policzona jako srednia
|
// wartosc oczekiwana zysku policzona jako srednia
|
||||||
dexpr float avgProfit = sum(i in scenarios)(profit[i])/nScenarios;
|
dexpr float avgProfit = sum(i in scenarios)(profit[i])/numberOfScenarios;
|
||||||
|
|
||||||
// funkcja celu
|
// funkcja celu
|
||||||
maximize avgProfit;
|
maximize avgProfit;
|
||||||
@ -75,20 +75,20 @@ subject to {
|
|||||||
}
|
}
|
||||||
// Ogranicznie czasu produkcji maszyn w miesiacu
|
// Ogranicznie czasu produkcji maszyn w miesiacu
|
||||||
forall(m in months, mc in machines) {
|
forall(m in months, mc in machines) {
|
||||||
sum(p in products) (workTime[m][mc][p]) <= (machineCount[mc]*nHours);
|
sum(p in products) (workTime[m][mc][p]) <= (machineCount[mc]*numberOfHoursInFactory);
|
||||||
}
|
}
|
||||||
// Ograniczenie definiujace wykorzystany czas pracy maszyn
|
// Ograniczenie definiujace wykorzystany czas pracy maszyn
|
||||||
forall(m in months, p in products, mc in machines) {
|
forall(m in months, p in products, mc in machines) {
|
||||||
workTime[m][mc][p] == produce[m][p]*prodTime[mc][p];
|
workTime[m][mc][p] == produce[m][p]*timeToProduce[mc][p];
|
||||||
}
|
}
|
||||||
// Ogranicznie maksymalnej pojemnosci rynku
|
// Ogranicznie maksymalnej pojemnosci rynku
|
||||||
forall(m in months, p in products) {
|
forall(m in months, p in products) {
|
||||||
sell[m][p] <= maxInMonth[m][p];
|
sell[m][p] <= maxProductsInMonth[m][p];
|
||||||
}
|
}
|
||||||
// Ogranicznie ustawiajace zmienna binarna po przekroczeniu 80 procent pojemnosci rynku
|
// Ogranicznie ustawiajace zmienna binarna po przekroczeniu 80 procent pojemnosci rynku
|
||||||
forall(m in months, p in products) {
|
forall(m in months, p in products) {
|
||||||
sell[m][p] <= 0.8*maxInMonth[m][p] + 1000000 * if80prec[m][p];
|
sell[m][p] <= 0.8*maxProductsInMonth[m][p] + 1000000 * if80prec[m][p];
|
||||||
sell[m][p] >= 0.8*maxInMonth[m][p] * if80prec[m][p];
|
sell[m][p] >= 0.8*maxProductsInMonth[m][p] * if80prec[m][p];
|
||||||
}
|
}
|
||||||
// Ograniczenia linearyzujace wplyw zmiennej binarnej na funkcje celu
|
// Ograniczenia linearyzujace wplyw zmiennej binarnej na funkcje celu
|
||||||
forall (i in scenarios,m in months, p in products) {
|
forall (i in scenarios,m in months, p in products) {
|
||||||
|
|||||||
@ -5,26 +5,26 @@
|
|||||||
*********************************************/
|
*********************************************/
|
||||||
|
|
||||||
/***************PARAMETRY********************/
|
/***************PARAMETRY********************/
|
||||||
nMachType = 5; //ilosc typow maszun
|
numberOfMachineTypes = 5; //ilosc typow maszun
|
||||||
nMonth = 3; //ilosc symulowanych miesiecy
|
numberOfMonths = 3; //ilosc symulowanych miesiecy
|
||||||
nProdType = 4; //ilosc typow produktow
|
numberOfProductsTypes = 4; //ilosc typow produktow
|
||||||
|
|
||||||
nHours = 384; //liczba godzin roboczych w miesiacu 2*8*24=384
|
numberOfHoursInFactory = 384; //liczba godzin roboczych w miesiacu 2*8*24=384
|
||||||
nScenarios = 30; //ilosc scenariuszy w symulacji
|
numberOfScenarios = 30; //ilosc scenariuszy w symulacji
|
||||||
|
|
||||||
// Ilosc maszyn poszczegolnych typow
|
// Ilosc maszyn poszczegolnych typow
|
||||||
machineCount = [4 2 3 1 1];
|
machineCount = [4 2 3 1 1];
|
||||||
|
|
||||||
// Koszty wykorzystania typow maszyn (wiersze)
|
// Koszty wykorzystania typow maszyn (wiersze)
|
||||||
//w wytwarzaniu poszczegolnych typow produktow (kolumny)
|
//w wytwarzaniu poszczegolnych typow produktow (kolumny)
|
||||||
prodTime = [[ 0.4 0.6 0 0]
|
timeToProduce = [[ 0.4 0.6 0 0]
|
||||||
[ 0.2 0.1 0 0.6]
|
[ 0.2 0.1 0 0.6]
|
||||||
[ 0.1 0 0.7 0]
|
[ 0.1 0 0.7 0]
|
||||||
[ 0.06 0.04 0 0.05]
|
[ 0.06 0.04 0 0.05]
|
||||||
[ 0 0.05 0.02 0]];
|
[ 0 0.05 0.02 0]];
|
||||||
|
|
||||||
// Pojemnosc rynku - typ produktu(kolumny) w miesiacu(wiersz)
|
// Pojemnosc rynku - typ produktu(kolumny) w miesiacu(wiersz)
|
||||||
maxInMonth = [[ 200 0 100 200]
|
maxProductsInMonth = [[ 200 0 100 200]
|
||||||
[ 300 100 200 200]
|
[ 300 100 200 200]
|
||||||
[ 0 300 100 200]];
|
[ 0 300 100 200]];
|
||||||
|
|
||||||
|
|||||||
@ -8,23 +8,23 @@
|
|||||||
//Paramatry zostaladniej opisane w pliku .dat oraz raporcie
|
//Paramatry zostaladniej opisane w pliku .dat oraz raporcie
|
||||||
|
|
||||||
// Parametry liczbowe
|
// Parametry liczbowe
|
||||||
int nMachType = ...;
|
int numberOfMachineTypes = ...;
|
||||||
int nMonth = ...;
|
int numberOfMonths = ...;
|
||||||
int nProdType = ...;
|
int numberOfProductsTypes = ...;
|
||||||
|
|
||||||
int nHours = ...;
|
int numberOfHoursInFactory = ...;
|
||||||
int nScenarios = ...;
|
int numberOfScenarios = ...;
|
||||||
|
|
||||||
// Utworzenie wektorow indeksujacych
|
// Utworzenie wektorow indeksujacych
|
||||||
{int} machines = asSet(1..nMachType);
|
{int} machines = asSet(1..numberOfMachineTypes);
|
||||||
{int} months = asSet(1..nMonth);
|
{int} months = asSet(1..numberOfMonths);
|
||||||
{int} products = asSet(1..nProdType);
|
{int} products = asSet(1..numberOfProductsTypes);
|
||||||
{int} scenarios = asSet(1..nScenarios);
|
{int} scenarios = asSet(1..numberOfScenarios);
|
||||||
|
|
||||||
//Parametry produkcji i sprzedazy
|
//Parametry produkcji i sprzedazy
|
||||||
int machineCount[machines] = ...;
|
int machineCount[machines] = ...;
|
||||||
float prodTime[machines][products] = ...;
|
float timeToProduce[machines][products] = ...;
|
||||||
int maxInMonth[months][products] = ...;
|
int maxProductsInMonth[months][products] = ...;
|
||||||
|
|
||||||
//Parametry magazynowania
|
//Parametry magazynowania
|
||||||
int storageMax[products] = ...;
|
int storageMax[products] = ...;
|
||||||
@ -59,11 +59,11 @@ dexpr float profit[i in scenarios] = sum(m in months, p in products)
|
|||||||
(sell[m][p]*sellProfit[i][p]-lowerProfit[i][m][p]- stock[m][p]*storageCost);
|
(sell[m][p]*sellProfit[i][p]-lowerProfit[i][m][p]- stock[m][p]*storageCost);
|
||||||
|
|
||||||
// wartosc oczekiwana zysku policzona jako srednia
|
// wartosc oczekiwana zysku policzona jako srednia
|
||||||
dexpr float avgProfit = sum(i in scenarios)(profit[i])/nScenarios;
|
dexpr float avgProfit = sum(i in scenarios)(profit[i])/numberOfScenarios;
|
||||||
|
|
||||||
// RYZYKO zdefiniowane srednia roznica Giniego
|
// RYZYKO zdefiniowane srednia roznica Giniego
|
||||||
dexpr float giniRisk = sum (t1 in scenarios, t2 in scenarios ) (
|
dexpr float giniRisk = sum (t1 in scenarios, t2 in scenarios ) (
|
||||||
0.5 * abs(profit[t1] - profit[t2]) * 1/nScenarios * 1/nScenarios
|
0.5 * abs(profit[t1] - profit[t2]) * 1/numberOfScenarios * 1/numberOfScenarios
|
||||||
);
|
);
|
||||||
|
|
||||||
// funkcja celu
|
// funkcja celu
|
||||||
@ -82,20 +82,20 @@ subject to {
|
|||||||
}
|
}
|
||||||
// Ogranicznie czasu produkcji maszyn w miesiacu
|
// Ogranicznie czasu produkcji maszyn w miesiacu
|
||||||
forall(m in months, mc in machines) {
|
forall(m in months, mc in machines) {
|
||||||
sum(p in products) (workTime[m][mc][p]) <= (machineCount[mc]*nHours);
|
sum(p in products) (workTime[m][mc][p]) <= (machineCount[mc]*numberOfHoursInFactory);
|
||||||
}
|
}
|
||||||
// Ograniczenie definiujace wykorzystany czas pracy maszyn
|
// Ograniczenie definiujace wykorzystany czas pracy maszyn
|
||||||
forall(m in months, p in products, mc in machines) {
|
forall(m in months, p in products, mc in machines) {
|
||||||
workTime[m][mc][p] == produce[m][p]*prodTime[mc][p];
|
workTime[m][mc][p] == produce[m][p]*timeToProduce[mc][p];
|
||||||
}
|
}
|
||||||
// Ogranicznie maksymalnej pojemnosci rynku
|
// Ogranicznie maksymalnej pojemnosci rynku
|
||||||
forall(m in months, p in products) {
|
forall(m in months, p in products) {
|
||||||
sell[m][p] <= maxInMonth[m][p];
|
sell[m][p] <= maxProductsInMonth[m][p];
|
||||||
}
|
}
|
||||||
// Ogranicznie ustawiajace zmienna binarna po przekroczeniu 80 procent pojemnosci rynku
|
// Ogranicznie ustawiajace zmienna binarna po przekroczeniu 80 procent pojemnosci rynku
|
||||||
forall(m in months, p in products) {
|
forall(m in months, p in products) {
|
||||||
sell[m][p] <= 0.8*maxInMonth[m][p] + 1000000 * if80prec[m][p];
|
sell[m][p] <= 0.8*maxProductsInMonth[m][p] + 1000000 * if80prec[m][p];
|
||||||
sell[m][p] >= 0.8*maxInMonth[m][p] * if80prec[m][p];
|
sell[m][p] >= 0.8*maxProductsInMonth[m][p] * if80prec[m][p];
|
||||||
}
|
}
|
||||||
// Ograniczenia linearyzujace wplyw zmiennej binarnej na funkcje celu
|
// Ograniczenia linearyzujace wplyw zmiennej binarnej na funkcje celu
|
||||||
forall (i in scenarios,m in months, p in products) {
|
forall (i in scenarios,m in months, p in products) {
|
||||||
|
|||||||
@ -5,26 +5,26 @@
|
|||||||
*********************************************/
|
*********************************************/
|
||||||
|
|
||||||
/***************PARAMETRY********************/
|
/***************PARAMETRY********************/
|
||||||
nMachType = 5; //ilosc typow maszun
|
numberOfMachineTypes = 5; //ilosc typow maszun
|
||||||
nMonth = 3; //ilosc symulowanych miesiecy
|
numberOfMonths = 3; //ilosc symulowanych miesiecy
|
||||||
nProdType = 4; //ilosc typow produktow
|
numberOfProductsTypes = 4; //ilosc typow produktow
|
||||||
|
|
||||||
nHours = 384; //liczba godzin roboczych w miesiacu 2*8*24=384
|
numberOfHoursInFactory = 384; //liczba godzin roboczych w miesiacu 2*8*24=384
|
||||||
nScenarios = 30; //ilosc scenariuszy w symulacji
|
numberOfScenarios = 30; //ilosc scenariuszy w symulacji
|
||||||
|
|
||||||
// Ilosc maszyn poszczegolnych typow
|
// Ilosc maszyn poszczegolnych typow
|
||||||
machineCount = [4 2 3 1 1];
|
machineCount = [4 2 3 1 1];
|
||||||
|
|
||||||
// Koszty wykorzystania typow maszyn (wiersze)
|
// Koszty wykorzystania typow maszyn (wiersze)
|
||||||
//w wytwarzaniu poszczegolnych typow produktow (kolumny)
|
//w wytwarzaniu poszczegolnych typow produktow (kolumny)
|
||||||
prodTime = [[ 0.4 0.6 0 0]
|
timeToProduce = [[ 0.4 0.6 0 0]
|
||||||
[ 0.2 0.1 0 0.6]
|
[ 0.2 0.1 0 0.6]
|
||||||
[ 0.1 0 0.7 0]
|
[ 0.1 0 0.7 0]
|
||||||
[ 0.06 0.04 0 0.05]
|
[ 0.06 0.04 0 0.05]
|
||||||
[ 0 0.05 0.02 0]];
|
[ 0 0.05 0.02 0]];
|
||||||
|
|
||||||
// Pojemnosc rynku - typ produktu(kolumny) w miesiacu(wiersz)
|
// Pojemnosc rynku - typ produktu(kolumny) w miesiacu(wiersz)
|
||||||
maxInMonth = [[ 200 0 100 200]
|
maxProductsInMonth = [[ 200 0 100 200]
|
||||||
[ 300 100 200 200]
|
[ 300 100 200 200]
|
||||||
[ 0 300 100 200]];
|
[ 0 300 100 200]];
|
||||||
|
|
||||||
|
|||||||
@ -8,23 +8,23 @@
|
|||||||
//Paramatry zostaladniej opisane w pliku .dat oraz raporcie
|
//Paramatry zostaladniej opisane w pliku .dat oraz raporcie
|
||||||
|
|
||||||
// Parametry liczbowe
|
// Parametry liczbowe
|
||||||
int nMachType = ...;
|
int numberOfMachineTypes = ...;
|
||||||
int nMonth = ...;
|
int numberOfMonths = ...;
|
||||||
int nProdType = ...;
|
int numberOfProductsTypes = ...;
|
||||||
|
|
||||||
int nHours = ...;
|
int numberOfHoursInFactory = ...;
|
||||||
int nScenarios = ...;
|
int numberOfScenarios = ...;
|
||||||
|
|
||||||
// Utworzenie wektorow indeksujacych
|
// Utworzenie wektorow indeksujacych
|
||||||
{int} machines = asSet(1..nMachType);
|
{int} machines = asSet(1..numberOfMachineTypes);
|
||||||
{int} months = asSet(1..nMonth);
|
{int} months = asSet(1..numberOfMonths);
|
||||||
{int} products = asSet(1..nProdType);
|
{int} products = asSet(1..numberOfProductsTypes);
|
||||||
{int} scenarios = asSet(1..nScenarios);
|
{int} scenarios = asSet(1..numberOfScenarios);
|
||||||
|
|
||||||
//Parametry produkcji i sprzedazy
|
//Parametry produkcji i sprzedazy
|
||||||
int machineCount[machines] = ...;
|
int machineCount[machines] = ...;
|
||||||
float prodTime[machines][products] = ...;
|
float timeToProduce[machines][products] = ...;
|
||||||
int maxInMonth[months][products] = ...;
|
int maxProductsInMonth[months][products] = ...;
|
||||||
|
|
||||||
//Parametry magazynowania
|
//Parametry magazynowania
|
||||||
int storageMax[products] = ...;
|
int storageMax[products] = ...;
|
||||||
@ -62,11 +62,11 @@ dexpr float profit[i in scenarios] = sum(m in months, p in products)
|
|||||||
(sell[m][p]*sellProfit[i][p]-lowerProfit[i][m][p]- stock[m][p]*storageCost);
|
(sell[m][p]*sellProfit[i][p]-lowerProfit[i][m][p]- stock[m][p]*storageCost);
|
||||||
|
|
||||||
// wartosc oczekiwana zysku policzona jako srednia
|
// wartosc oczekiwana zysku policzona jako srednia
|
||||||
dexpr float avgProfit = sum(i in scenarios)(profit[i])/nScenarios;
|
dexpr float avgProfit = sum(i in scenarios)(profit[i])/numberOfScenarios;
|
||||||
|
|
||||||
// RYZYKO zdefiniowane srednia roznica Giniego
|
// RYZYKO zdefiniowane srednia roznica Giniego
|
||||||
dexpr float giniRisk = sum (t1 in scenarios, t2 in scenarios ) (
|
dexpr float giniRisk = sum (t1 in scenarios, t2 in scenarios ) (
|
||||||
0.5 * abs(profit[t1] - profit[t2]) * 1/nScenarios * 1/nScenarios
|
0.5 * abs(profit[t1] - profit[t2]) * 1/numberOfScenarios * 1/numberOfScenarios
|
||||||
);
|
);
|
||||||
|
|
||||||
// funkcja celu
|
// funkcja celu
|
||||||
@ -85,20 +85,20 @@ subject to {
|
|||||||
}
|
}
|
||||||
// Ogranicznie czasu produkcji maszyn w miesiacu
|
// Ogranicznie czasu produkcji maszyn w miesiacu
|
||||||
forall(m in months, mc in machines) {
|
forall(m in months, mc in machines) {
|
||||||
sum(p in products) (workTime[m][mc][p]) <= (machineCount[mc]*nHours);
|
sum(p in products) (workTime[m][mc][p]) <= (machineCount[mc]*numberOfHoursInFactory);
|
||||||
}
|
}
|
||||||
// Ograniczenie definiujace wykorzystany czas pracy maszyn
|
// Ograniczenie definiujace wykorzystany czas pracy maszyn
|
||||||
forall(m in months, p in products, mc in machines) {
|
forall(m in months, p in products, mc in machines) {
|
||||||
workTime[m][mc][p] == produce[m][p]*prodTime[mc][p];
|
workTime[m][mc][p] == produce[m][p]*timeToProduce[mc][p];
|
||||||
}
|
}
|
||||||
// Ogranicznie maksymalnej pojemnosci rynku
|
// Ogranicznie maksymalnej pojemnosci rynku
|
||||||
forall(m in months, p in products) {
|
forall(m in months, p in products) {
|
||||||
sell[m][p] <= maxInMonth[m][p];
|
sell[m][p] <= maxProductsInMonth[m][p];
|
||||||
}
|
}
|
||||||
// Ogranicznie ustawiajace zmienna binarna po przekroczeniu 80 procent pojemnosci rynku
|
// Ogranicznie ustawiajace zmienna binarna po przekroczeniu 80 procent pojemnosci rynku
|
||||||
forall(m in months, p in products) {
|
forall(m in months, p in products) {
|
||||||
sell[m][p] <= 0.8*maxInMonth[m][p] + 1000000 * if80prec[m][p];
|
sell[m][p] <= 0.8*maxProductsInMonth[m][p] + 1000000 * if80prec[m][p];
|
||||||
sell[m][p] >= 0.8*maxInMonth[m][p] * if80prec[m][p];
|
sell[m][p] >= 0.8*maxProductsInMonth[m][p] * if80prec[m][p];
|
||||||
}
|
}
|
||||||
// Ograniczenia linearyzujace wplyw zmiennej binarnej na funkcje celu
|
// Ograniczenia linearyzujace wplyw zmiennej binarnej na funkcje celu
|
||||||
forall (i in scenarios,m in months, p in products) {
|
forall (i in scenarios,m in months, p in products) {
|
||||||
|
|||||||
@ -5,26 +5,26 @@
|
|||||||
*********************************************/
|
*********************************************/
|
||||||
|
|
||||||
/***************PARAMETRY********************/
|
/***************PARAMETRY********************/
|
||||||
nMachType = 5; //ilosc typow maszun
|
numberOfMachineTypes = 5; //ilosc typow maszun
|
||||||
nMonth = 3; //ilosc symulowanych miesiecy
|
numberOfMonths = 3; //ilosc symulowanych miesiecy
|
||||||
nProdType = 4; //ilosc typow produktow
|
numberOfProductsTypes = 4; //ilosc typow produktow
|
||||||
|
|
||||||
nHours = 384; //liczba godzin roboczych w miesiacu 2*8*24=384
|
numberOfHoursInFactory = 384; //liczba godzin roboczych w miesiacu 2*8*24=384
|
||||||
nScenarios = 30; //ilosc scenariuszy w symulacji
|
numberOfScenarios = 30; //ilosc scenariuszy w symulacji
|
||||||
|
|
||||||
// Ilosc maszyn poszczegolnych typow
|
// Ilosc maszyn poszczegolnych typow
|
||||||
machineCount = [4 2 3 1 1];
|
machineCount = [4 2 3 1 1];
|
||||||
|
|
||||||
// Koszty wykorzystania typow maszyn (wiersze)
|
// Koszty wykorzystania typow maszyn (wiersze)
|
||||||
//w wytwarzaniu poszczegolnych typow produktow (kolumny)
|
//w wytwarzaniu poszczegolnych typow produktow (kolumny)
|
||||||
prodTime = [[ 0.4 0.6 0 0]
|
timeToProduce = [[ 0.4 0.6 0 0]
|
||||||
[ 0.2 0.1 0 0.6]
|
[ 0.2 0.1 0 0.6]
|
||||||
[ 0.1 0 0.7 0]
|
[ 0.1 0 0.7 0]
|
||||||
[ 0.06 0.04 0 0.05]
|
[ 0.06 0.04 0 0.05]
|
||||||
[ 0 0.05 0.02 0]];
|
[ 0 0.05 0.02 0]];
|
||||||
|
|
||||||
// Pojemnosc rynku - typ produktu(kolumny) w miesiacu(wiersz)
|
// Pojemnosc rynku - typ produktu(kolumny) w miesiacu(wiersz)
|
||||||
maxInMonth = [[ 200 0 100 200]
|
maxProductsInMonth = [[ 200 0 100 200]
|
||||||
[ 300 100 200 200]
|
[ 300 100 200 200]
|
||||||
[ 0 300 100 200]];
|
[ 0 300 100 200]];
|
||||||
|
|
||||||
|
|||||||
@ -8,23 +8,23 @@
|
|||||||
//Paramatry zostaladniej opisane w pliku .dat oraz raporcie
|
//Paramatry zostaladniej opisane w pliku .dat oraz raporcie
|
||||||
|
|
||||||
// Parametry liczbowe
|
// Parametry liczbowe
|
||||||
int nMachType = ...;
|
int numberOfMachineTypes = ...;
|
||||||
int nMonth = ...;
|
int numberOfMonths = ...;
|
||||||
int nProdType = ...;
|
int numberOfProductsTypes = ...;
|
||||||
|
|
||||||
int nHours = ...;
|
int numberOfHoursInFactory = ...;
|
||||||
int nScenarios = ...;
|
int numberOfScenarios = ...;
|
||||||
|
|
||||||
// Utworzenie wektorow indeksujacych
|
// Utworzenie wektorow indeksujacych
|
||||||
{int} machines = asSet(1..nMachType);
|
{int} machines = asSet(1..numberOfMachineTypes);
|
||||||
{int} months = asSet(1..nMonth);
|
{int} months = asSet(1..numberOfMonths);
|
||||||
{int} products = asSet(1..nProdType);
|
{int} products = asSet(1..numberOfProductsTypes);
|
||||||
{int} scenarios = asSet(1..nScenarios);
|
{int} scenarios = asSet(1..numberOfScenarios);
|
||||||
|
|
||||||
//Parametry produkcji i sprzedazy
|
//Parametry produkcji i sprzedazy
|
||||||
int machineCount[machines] = ...;
|
int machineCount[machines] = ...;
|
||||||
float prodTime[machines][products] = ...;
|
float timeToProduce[machines][products] = ...;
|
||||||
int maxInMonth[months][products] = ...;
|
int maxProductsInMonth[months][products] = ...;
|
||||||
|
|
||||||
//Parametry magazynowania
|
//Parametry magazynowania
|
||||||
int storageMax[products] = ...;
|
int storageMax[products] = ...;
|
||||||
@ -62,16 +62,16 @@ dexpr float profit[i in scenarios] = sum(m in months, p in products)
|
|||||||
(sell[m][p]*sellProfit[i][p]-lowerProfit[i][m][p]- stock[m][p]*storageCost);
|
(sell[m][p]*sellProfit[i][p]-lowerProfit[i][m][p]- stock[m][p]*storageCost);
|
||||||
|
|
||||||
// wartosc oczekiwana zysku policzona jako srednia
|
// wartosc oczekiwana zysku policzona jako srednia
|
||||||
dexpr float avgProfit = sum(i in scenarios)(profit[i])/nScenarios;
|
dexpr float avgProfit = sum(i in scenarios)(profit[i])/numberOfScenarios;
|
||||||
|
|
||||||
// DODATKOWE OBLICZNIE RYZYKA DLA KAZDEGO SCENARIUSZA - POTRZEBNE DO ANALIZY FSD
|
// DODATKOWE OBLICZNIE RYZYKA DLA KAZDEGO SCENARIUSZA - POTRZEBNE DO ANALIZY FSD
|
||||||
dexpr float risk[i in scenarios] = sum (t in scenarios) (
|
dexpr float risk[i in scenarios] = sum (t in scenarios) (
|
||||||
0.5 * abs(profit[i] - profit[t]) * 1/nScenarios
|
0.5 * abs(profit[i] - profit[t]) * 1/numberOfScenarios
|
||||||
);
|
);
|
||||||
|
|
||||||
// RYZYKO zdefiniowane srednia roznica Giniego
|
// RYZYKO zdefiniowane srednia roznica Giniego
|
||||||
dexpr float giniRisk = sum (t1 in scenarios, t2 in scenarios ) (
|
dexpr float giniRisk = sum (t1 in scenarios, t2 in scenarios ) (
|
||||||
0.5 * abs(profit[t1] - profit[t2]) * 1/nScenarios * 1/nScenarios
|
0.5 * abs(profit[t1] - profit[t2]) * 1/numberOfScenarios * 1/numberOfScenarios
|
||||||
);
|
);
|
||||||
|
|
||||||
// funkcja celu
|
// funkcja celu
|
||||||
@ -90,20 +90,20 @@ subject to {
|
|||||||
}
|
}
|
||||||
// Ogranicznie czasu produkcji maszyn w miesiacu
|
// Ogranicznie czasu produkcji maszyn w miesiacu
|
||||||
forall(m in months, mc in machines) {
|
forall(m in months, mc in machines) {
|
||||||
sum(p in products) (workTime[m][mc][p]) <= (machineCount[mc]*nHours);
|
sum(p in products) (workTime[m][mc][p]) <= (machineCount[mc]*numberOfHoursInFactory);
|
||||||
}
|
}
|
||||||
// Ograniczenie definiujace wykorzystany czas pracy maszyn
|
// Ograniczenie definiujace wykorzystany czas pracy maszyn
|
||||||
forall(m in months, p in products, mc in machines) {
|
forall(m in months, p in products, mc in machines) {
|
||||||
workTime[m][mc][p] == produce[m][p]*prodTime[mc][p];
|
workTime[m][mc][p] == produce[m][p]*timeToProduce[mc][p];
|
||||||
}
|
}
|
||||||
// Ogranicznie maksymalnej pojemnosci rynku
|
// Ogranicznie maksymalnej pojemnosci rynku
|
||||||
forall(m in months, p in products) {
|
forall(m in months, p in products) {
|
||||||
sell[m][p] <= maxInMonth[m][p];
|
sell[m][p] <= maxProductsInMonth[m][p];
|
||||||
}
|
}
|
||||||
// Ogranicznie ustawiajace zmienna binarna po przekroczeniu 80 procent pojemnosci rynku
|
// Ogranicznie ustawiajace zmienna binarna po przekroczeniu 80 procent pojemnosci rynku
|
||||||
forall(m in months, p in products) {
|
forall(m in months, p in products) {
|
||||||
sell[m][p] <= 0.8*maxInMonth[m][p] + 1000000 * if80prec[m][p];
|
sell[m][p] <= 0.8*maxProductsInMonth[m][p] + 1000000 * if80prec[m][p];
|
||||||
sell[m][p] >= 0.8*maxInMonth[m][p] * if80prec[m][p];
|
sell[m][p] >= 0.8*maxProductsInMonth[m][p] * if80prec[m][p];
|
||||||
}
|
}
|
||||||
// Ograniczenia linearyzujace wplyw zmiennej binarnej na funkcje celu
|
// Ograniczenia linearyzujace wplyw zmiennej binarnej na funkcje celu
|
||||||
forall (i in scenarios,m in months, p in products) {
|
forall (i in scenarios,m in months, p in products) {
|
||||||
@ -165,14 +165,14 @@ main {
|
|||||||
|
|
||||||
i = 1;4
|
i = 1;4
|
||||||
fileProfit.writeln("avgProfit: ");
|
fileProfit.writeln("avgProfit: ");
|
||||||
while (i<=data.nScenarios) {
|
while (i<=data.numberOfScenarios) {
|
||||||
fileProfit.writeln(mod.profit[i]);
|
fileProfit.writeln(mod.profit[i]);
|
||||||
i++;
|
i++;
|
||||||
};
|
};
|
||||||
|
|
||||||
i = 1;
|
i = 1;
|
||||||
fileRisk.writeln("Risk: ");
|
fileRisk.writeln("Risk: ");
|
||||||
while (i<=data.nScenarios) {
|
while (i<=data.numberOfScenarios) {
|
||||||
fileRisk.writeln(mod.risk[i]);
|
fileRisk.writeln(mod.risk[i]);
|
||||||
i++;
|
i++;
|
||||||
};
|
};
|
||||||
@ -197,14 +197,14 @@ main {
|
|||||||
|
|
||||||
i = 1;
|
i = 1;
|
||||||
fileProfit.writeln("avgProfit: ");
|
fileProfit.writeln("avgProfit: ");
|
||||||
while (i<=data.nScenarios) {
|
while (i<=data.numberOfScenarios) {
|
||||||
fileProfit.writeln(mod.profit[i]);
|
fileProfit.writeln(mod.profit[i]);
|
||||||
i++;
|
i++;
|
||||||
};
|
};
|
||||||
|
|
||||||
i = 1;
|
i = 1;
|
||||||
fileRisk.writeln("Risk: ");
|
fileRisk.writeln("Risk: ");
|
||||||
while (i<=data.nScenarios) {
|
while (i<=data.numberOfScenarios) {
|
||||||
fileRisk.writeln(mod.risk[i]);
|
fileRisk.writeln(mod.risk[i]);
|
||||||
i++;
|
i++;
|
||||||
};
|
};
|
||||||
@ -228,14 +228,14 @@ main {
|
|||||||
|
|
||||||
i = 1;
|
i = 1;
|
||||||
fileProfit.writeln("avgProfit: ");
|
fileProfit.writeln("avgProfit: ");
|
||||||
while (i<=data.nScenarios) {
|
while (i<=data.numberOfScenarios) {
|
||||||
fileProfit.writeln(mod.profit[i]);
|
fileProfit.writeln(mod.profit[i]);
|
||||||
i++;
|
i++;
|
||||||
};
|
};
|
||||||
|
|
||||||
i = 1;
|
i = 1;
|
||||||
fileRisk.writeln("Risk: ");
|
fileRisk.writeln("Risk: ");
|
||||||
while (i<=data.nScenarios) {
|
while (i<=data.numberOfScenarios) {
|
||||||
fileRisk.writeln(mod.risk[i]);
|
fileRisk.writeln(mod.risk[i]);
|
||||||
i++;
|
i++;
|
||||||
};
|
};
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user