chore: rename parameters wdwr

This commit is contained in:
Krzysztof kuhy Rudnicki 2025-05-24 23:22:59 +02:00
parent ec92fdb693
commit fc0af17c60
16 changed files with 350 additions and 192 deletions

Binary file not shown.

After

Width:  |  Height:  |  Size: 115 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 42 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 121 KiB

View File

@ -1,5 +1,4 @@
\documentclass[11pt,a4paper]{article}
\usepackage[OT4]{polski}
\usepackage[utf8]{inputenc}
\usepackage[inner=2.5cm,outer=2.5cm, tmargin=2.5cm,bmargin=2.5cm]{geometry}
\usepackage{amsmath}
@ -126,23 +125,23 @@ i macierzami, w nawiasach kwadratowych określono ich wymiary, odnosząc się do
\hline
Nazwa parametru & Szczegółowy opis znaczenia \\
\hline
nMachType & Ilość typów maszyn (procesów) dostępnych w fabryce \\
nMonth & Ilość miesięcy uwzględnionych w symulacji \\
nProdType & Ilość typów produktów \\
nScenarios & Ilość scenariuszy wygenerowanych do symulacji \\
machines[nMachType] & Wektor typów maszyn (procesów)\\
months[nMonth] & Wektor miesięcy symulacji\\
products[nProdType] & Wektor typów produktów\\
machineCount[nMachType] & Wektor ilości maszyn danego typu\\
prodTime[nMachType][nProdType] & 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\\
nHours & Ilość godzin pracy fabryki w miesiącu\\
mu[nProdType] & Wektor wartości oczekiwanych rozkładu t-Studenta do generacji scenariuszy\\
sigma [nProdType][nProdType] & Macierz kowariancji dla rozkłady t-Studenta\\
sellProfit[nScenarios][nProdType] & Macierz wygenerowanych sceniariuszy dochodów ze sprzedaży produktów\\
numberOfMachineTypes & Ilość typów maszyn (procesów) dostępnych w fabryce \\
numberOfMonths & Ilość miesięcy uwzględnionych w symulacji \\
numberOfProductsTypes & Ilość typów produktów \\
numberOfScenarios & Ilość scenariuszy wygenerowanych do symulacji \\
machines[numberOfMachineTypes] & Wektor typów maszyn (procesów)\\
months[numberOfMonths] & Wektor miesięcy symulacji\\
products[numberOfProductsTypes] & Wektor typów produktów\\
machineCount[numberOfMachineTypes] & Wektor ilości maszyn danego typu\\
timeToProduce[numberOfMachineTypes][numberOfProductsTypes] & macierz czasów produkcji danego produktu na danej maszynie \\
maxProductsInMonth[numberOfMonths][numberOfProductsTypes] & macierz maksymalnej ilości produktów, jakie można sprzedać w danym miesiącu\\
numberOfHoursInFactory & Ilość godzin pracy fabryki w miesiącu\\
mu[numberOfProductsTypes] & Wektor wartości oczekiwanych rozkładu t-Studenta do generacji scenariuszy\\
sigma [numberOfProductsTypes][numberOfProductsTypes] & Macierz kowariancji dla rozkłady t-Studenta\\
sellProfit[numberOfScenarios][numberOfProductsTypes] & Macierz wygenerowanych sceniariuszy dochodów ze sprzedaży produktów\\
storageCost & Koszt trzymania jednej sztuki produktu w magazynie przez miesiąc \\
storageMax[nProdType] & Wektor maksymalnej pojemności magazynu dla każdego typu produktu \\
storageStart[nProdType] & Wektor ilości początkowej produktów w magazynie \\
storageMax[numberOfProductsTypes] & Wektor maksymalnej pojemności magazynu dla każdego typu produktu \\
storageStart[numberOfProductsTypes] & Wektor ilości początkowej produktów w magazynie \\
\hline
\end{tabular}
\end{table}
@ -157,12 +156,12 @@ Zmienne decyzyjne stanowią wartości kontrolowane przez podmiot podejmujący de
\hline
Nazwa zmiennej & Szczegółowy opis znaczenia \\
\hline
produce[nMonth][nProdType] & 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 \\
stock[nMonth][nProdType] & 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 \\
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)\\
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\\
produce[numberOfMonths][numberOfProductsTypes] & Macierz zawierające ilości wytwarzanych 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[numberOfMonths][numberOfProductsTypes] & Macierz zawierająca ilości sztuk danego typu produktu znajdujących się w magazynie w danym miesiącu \\
workTime[numberOfMonths][numberOfMachineTypes][numberOfProductsTypes] & Macierz zawierająca czas pracy każdej maszyny dla każdego typu produktu w kazdym miesiącu \\
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[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
\end{tabular}
\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
\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}
\bigforall_{\substack{
m \in months\\
mc \in machines}} \sum_{p \in products}
(workTime[m][mc][p] <= machineCount[mc]*nHours)
(workTime[m][mc][p] <= machineCount[mc]*numberOfHoursInFactory)
\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:
\begin{equation}
\bigforall_{\substack{
m \in months\\
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}
\item Ograniczenie maksymalnej sprzedaży wynikające z pojemności rynku w danym miesiącu:
\begin{equation}
\bigforall_{\substack{
m \in months\\
p \in products}} sell[m][p] == maxInMonth[m][p]
p \in products}} sell[m][p] == maxProductsInMonth[m][p]
\end{equation}
\item Warunki definiujące zmienną binarną przy przekroczeniu 80 procent chłonności rynku:
\begin{equation}
\bigforall_{\substack{
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}
\begin{equation}
\bigforall_{\substack{
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}
\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}
\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}
\mathbf{sell} =
\begin{pmatrix}
320 & 0 & 160 & 240 \\
700 & 320 & 500 & 0 \\
0 & 800 & 600 & 320 \\
160 & 0 & 80 & 160 \\
240 & 80 & 160 & 160 \\
0 & 240 & 80 & 160 \\
\end{pmatrix},
\mathbf{if80prec} =
\begin{pmatrix}
0 & 1 & 0 & 0 \\
1 & 0 & 1 & 1 \\
1 & 1 & 1 & 0 \\
0 & 0 & 0 & 0 \\
1 & 0 & 0 & 0 \\
\end{pmatrix},
\end{displaymath}
\begin{displaymath}
@ -329,9 +330,9 @@ Rozwiązanie optymalne modelu maksymalizacji wartości oczekiwanej zysku został
\end{pmatrix},
\mathbf{produce} =
\begin{pmatrix}
270 & 0 & 110 & 190 \\
700 & 270 & 500 & 0 \\
50 & 850 & 650 & 370 \\
110 & 0 & 30 & 110 \\
240 & 30 & 160 & 160 \\
50 & 290 & 130 & 210 \\
\end{pmatrix}
\end{displaymath}
@ -339,29 +340,29 @@ Czasem pracy poszczególnych typów maszyn dla różnych typów produktów w ka
\begin{displaymath}
\mathbf{workTime[1]} =
\begin{pmatrix}
108 & 0 & 0 & 0 \\
54 & 0 & 0 & 114 \\
27 & 0 & 77 & 0 \\
16.2 & 0 & 0 & 9.5 \\
0 & 0 & 2.2 & 0 \\
44 & 0 & 0 & 0 \\
22 & 0 & 0 & 66 \\
11 & 0 & 35 & 0 \\
6.6 & 0 & 0 & 5.5 \\
0 & 0 & 1 & 0 \\
\end{pmatrix},
\mathbf{workTime[2]} =
\begin{pmatrix}
280 & 162 & 0 & 0 \\
140 & 27 & 0 & 0 \\
70 & 0 & 350 & 0 \\
42 & 10.8 & 0 & 0 \\
0 & 13.5 & 10 & 0 \\
96 & 18 & 0 & 0 \\
48 & 3 & 0 & 96 \\
24 & 0 & 140 & 0 \\
14.4 & 1.2 & 0 & 8 \\
0 & 1.5 & 4 & 0 \\
\end{pmatrix},
\end{displaymath}
\begin{displaymath}
\mathbf{workTime[3]} =
\begin{pmatrix}
20 & 510 & 0 & 0 \\
10 & 85 & 0 & 222 \\
5 & 0 & 455 & 0 \\
3 & 34 & 0 & 18.5 \\
0 & 42.5 & 13 & 0 \\
20 & 174 & 0 & 0 \\
10 & 29 & 0 & 126 \\
5 & 0 & 105 & 0 \\
3 & 11.6 & 0 & 10.5 \\
0 & 14.5 & 3 & 0 \\
\end{pmatrix}
\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ć:
\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}
\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}.
\begin{figure}[ht!]
\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}
\label{fig:profit-risk}
\end{figure}
@ -414,7 +415,7 @@ Na wykresie \ref{fig:profit-risk} żółtymi punktami wyznaczono rozwiązania ch
\hline
& Miara zysku & Miara ryzyka \\
\hline
Maksymalizacja zysku & 26553.9 zł & 796.113\\
Maksymalizacja zysku & 9515.80 zł & 360.18\\
Minimalizacja ryzyka & -600.00 zł & 0.0 zł \\
\hline
@ -435,19 +436,24 @@ W celu analizy dominacji stochastycznej pierwszego rzędu (FSD) wybrano 3 rozwi
\hline
& A & B & C \\
\hline
Ograniczenie minimalnego zysku & 25488.1 zł & 26020.5 zł & 26552.9 zł\\
Średni zysk & 25488.3 zł & 26020.6 zł & 26553.9\\
Miara ryzyka & 755.133 zł & 774.872 zł & 796.113\\
Ograniczenie minimalnego zysku & 8450.97 zł & 8983.38 zł & 9515.79 zł\\
Średni zysk & 8451.02 zł & 8983.40 zł & 9515.80\\
Miara ryzyka & 306.38 zł & 332.93 zł & 360.18\\
\hline
\end{tabular}
\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!]
\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}
\label{fig:FSD-profit}
\end{figure}
@ -456,34 +462,10 @@ Rysunek \ref{fig:FSD-risk} przedstawia odwrotną dystrybuantę rozkładu średni
\begin{figure}[ht!]
\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}
\label{fig:FSD-risk}
\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}

View 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)}")

View 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}")

View 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}")

View File

@ -5,26 +5,26 @@
*********************************************/
/***************PARAMETRY********************/
nMachType = 5; //ilosc typow maszun
nMonth = 3; //ilosc symulowanych miesiecy
nProdType = 4; //ilosc typow produktow
numberOfMachineTypes = 5; //ilosc typow maszun
numberOfMonths = 3; //ilosc symulowanych miesiecy
numberOfProductsTypes = 4; //ilosc typow produktow
nHours = 384; //liczba godzin roboczych w miesiacu 2*8*24=384
nScenarios = 1000; //ilosc scenariuszy w symulacji
numberOfHoursInFactory = 384; //liczba godzin roboczych w miesiacu 2*8*24=384
numberOfScenarios = 1000; //ilosc scenariuszy w symulacji
// Ilosc maszyn poszczegolnych typow
machineCount = [4 2 3 1 1];
// Koszty wykorzystania typow maszyn (wiersze)
//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.1 0 0.7 0]
[ 0.06 0.04 0 0.05]
[ 0 0.05 0.02 0]];
// Pojemnosc rynku - typ produktu(kolumny) w miesiacu(wiersz)
maxInMonth = [[ 200 0 100 200]
maxProductsInMonth = [[ 200 0 100 200]
[ 300 100 200 200]
[ 0 300 100 200]];

View File

@ -8,23 +8,23 @@
//Paramatry zostaladniej opisane w pliku .dat oraz raporcie
// Parametry liczbowe
int nMachType = ...;
int nMonth = ...;
int nProdType = ...;
int numberOfMachineTypes = ...;
int numberOfMonths = ...;
int numberOfProductsTypes = ...;
int nHours = ...;
int nScenarios = ...;
int numberOfHoursInFactory = ...;
int numberOfScenarios = ...;
// Utworzenie wektorow indeksujacych
{int} machines = asSet(1..nMachType);
{int} months = asSet(1..nMonth);
{int} products = asSet(1..nProdType);
{int} scenarios = asSet(1..nScenarios);
{int} machines = asSet(1..numberOfMachineTypes);
{int} months = asSet(1..numberOfMonths);
{int} products = asSet(1..numberOfProductsTypes);
{int} scenarios = asSet(1..numberOfScenarios);
//Parametry produkcji i sprzedazy
int machineCount[machines] = ...;
float prodTime[machines][products] = ...;
int maxInMonth[months][products] = ...;
float timeToProduce[machines][products] = ...;
int maxProductsInMonth[months][products] = ...;
//Parametry magazynowania
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)
(sell[m][p]*sellProfit[i][p]-lowerProfit[i][m][p]- stock[m][p]*storageCost);
// 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
maximize avgProfit;
@ -75,20 +75,20 @@ subject to {
}
// Ogranicznie czasu produkcji maszyn w miesiacu
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
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
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
forall(m in months, p in products) {
sell[m][p] <= 0.8*maxInMonth[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] + 1000000 * if80prec[m][p];
sell[m][p] >= 0.8*maxProductsInMonth[m][p] * if80prec[m][p];
}
// Ograniczenia linearyzujace wplyw zmiennej binarnej na funkcje celu
forall (i in scenarios,m in months, p in products) {

View File

@ -5,26 +5,26 @@
*********************************************/
/***************PARAMETRY********************/
nMachType = 5; //ilosc typow maszun
nMonth = 3; //ilosc symulowanych miesiecy
nProdType = 4; //ilosc typow produktow
numberOfMachineTypes = 5; //ilosc typow maszun
numberOfMonths = 3; //ilosc symulowanych miesiecy
numberOfProductsTypes = 4; //ilosc typow produktow
nHours = 384; //liczba godzin roboczych w miesiacu 2*8*24=384
nScenarios = 30; //ilosc scenariuszy w symulacji
numberOfHoursInFactory = 384; //liczba godzin roboczych w miesiacu 2*8*24=384
numberOfScenarios = 30; //ilosc scenariuszy w symulacji
// Ilosc maszyn poszczegolnych typow
machineCount = [4 2 3 1 1];
// Koszty wykorzystania typow maszyn (wiersze)
//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.1 0 0.7 0]
[ 0.06 0.04 0 0.05]
[ 0 0.05 0.02 0]];
// Pojemnosc rynku - typ produktu(kolumny) w miesiacu(wiersz)
maxInMonth = [[ 200 0 100 200]
maxProductsInMonth = [[ 200 0 100 200]
[ 300 100 200 200]
[ 0 300 100 200]];

View File

@ -8,23 +8,23 @@
//Paramatry zostaladniej opisane w pliku .dat oraz raporcie
// Parametry liczbowe
int nMachType = ...;
int nMonth = ...;
int nProdType = ...;
int numberOfMachineTypes = ...;
int numberOfMonths = ...;
int numberOfProductsTypes = ...;
int nHours = ...;
int nScenarios = ...;
int numberOfHoursInFactory = ...;
int numberOfScenarios = ...;
// Utworzenie wektorow indeksujacych
{int} machines = asSet(1..nMachType);
{int} months = asSet(1..nMonth);
{int} products = asSet(1..nProdType);
{int} scenarios = asSet(1..nScenarios);
{int} machines = asSet(1..numberOfMachineTypes);
{int} months = asSet(1..numberOfMonths);
{int} products = asSet(1..numberOfProductsTypes);
{int} scenarios = asSet(1..numberOfScenarios);
//Parametry produkcji i sprzedazy
int machineCount[machines] = ...;
float prodTime[machines][products] = ...;
int maxInMonth[months][products] = ...;
float timeToProduce[machines][products] = ...;
int maxProductsInMonth[months][products] = ...;
//Parametry magazynowania
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);
// 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
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
@ -82,20 +82,20 @@ subject to {
}
// Ogranicznie czasu produkcji maszyn w miesiacu
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
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
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
forall(m in months, p in products) {
sell[m][p] <= 0.8*maxInMonth[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] + 1000000 * if80prec[m][p];
sell[m][p] >= 0.8*maxProductsInMonth[m][p] * if80prec[m][p];
}
// Ograniczenia linearyzujace wplyw zmiennej binarnej na funkcje celu
forall (i in scenarios,m in months, p in products) {

View File

@ -5,26 +5,26 @@
*********************************************/
/***************PARAMETRY********************/
nMachType = 5; //ilosc typow maszun
nMonth = 3; //ilosc symulowanych miesiecy
nProdType = 4; //ilosc typow produktow
numberOfMachineTypes = 5; //ilosc typow maszun
numberOfMonths = 3; //ilosc symulowanych miesiecy
numberOfProductsTypes = 4; //ilosc typow produktow
nHours = 384; //liczba godzin roboczych w miesiacu 2*8*24=384
nScenarios = 30; //ilosc scenariuszy w symulacji
numberOfHoursInFactory = 384; //liczba godzin roboczych w miesiacu 2*8*24=384
numberOfScenarios = 30; //ilosc scenariuszy w symulacji
// Ilosc maszyn poszczegolnych typow
machineCount = [4 2 3 1 1];
// Koszty wykorzystania typow maszyn (wiersze)
//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.1 0 0.7 0]
[ 0.06 0.04 0 0.05]
[ 0 0.05 0.02 0]];
// Pojemnosc rynku - typ produktu(kolumny) w miesiacu(wiersz)
maxInMonth = [[ 200 0 100 200]
maxProductsInMonth = [[ 200 0 100 200]
[ 300 100 200 200]
[ 0 300 100 200]];

View File

@ -8,23 +8,23 @@
//Paramatry zostaladniej opisane w pliku .dat oraz raporcie
// Parametry liczbowe
int nMachType = ...;
int nMonth = ...;
int nProdType = ...;
int numberOfMachineTypes = ...;
int numberOfMonths = ...;
int numberOfProductsTypes = ...;
int nHours = ...;
int nScenarios = ...;
int numberOfHoursInFactory = ...;
int numberOfScenarios = ...;
// Utworzenie wektorow indeksujacych
{int} machines = asSet(1..nMachType);
{int} months = asSet(1..nMonth);
{int} products = asSet(1..nProdType);
{int} scenarios = asSet(1..nScenarios);
{int} machines = asSet(1..numberOfMachineTypes);
{int} months = asSet(1..numberOfMonths);
{int} products = asSet(1..numberOfProductsTypes);
{int} scenarios = asSet(1..numberOfScenarios);
//Parametry produkcji i sprzedazy
int machineCount[machines] = ...;
float prodTime[machines][products] = ...;
int maxInMonth[months][products] = ...;
float timeToProduce[machines][products] = ...;
int maxProductsInMonth[months][products] = ...;
//Parametry magazynowania
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);
// 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
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
@ -85,20 +85,20 @@ subject to {
}
// Ogranicznie czasu produkcji maszyn w miesiacu
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
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
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
forall(m in months, p in products) {
sell[m][p] <= 0.8*maxInMonth[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] + 1000000 * if80prec[m][p];
sell[m][p] >= 0.8*maxProductsInMonth[m][p] * if80prec[m][p];
}
// Ograniczenia linearyzujace wplyw zmiennej binarnej na funkcje celu
forall (i in scenarios,m in months, p in products) {

View File

@ -5,26 +5,26 @@
*********************************************/
/***************PARAMETRY********************/
nMachType = 5; //ilosc typow maszun
nMonth = 3; //ilosc symulowanych miesiecy
nProdType = 4; //ilosc typow produktow
numberOfMachineTypes = 5; //ilosc typow maszun
numberOfMonths = 3; //ilosc symulowanych miesiecy
numberOfProductsTypes = 4; //ilosc typow produktow
nHours = 384; //liczba godzin roboczych w miesiacu 2*8*24=384
nScenarios = 30; //ilosc scenariuszy w symulacji
numberOfHoursInFactory = 384; //liczba godzin roboczych w miesiacu 2*8*24=384
numberOfScenarios = 30; //ilosc scenariuszy w symulacji
// Ilosc maszyn poszczegolnych typow
machineCount = [4 2 3 1 1];
// Koszty wykorzystania typow maszyn (wiersze)
//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.1 0 0.7 0]
[ 0.06 0.04 0 0.05]
[ 0 0.05 0.02 0]];
// Pojemnosc rynku - typ produktu(kolumny) w miesiacu(wiersz)
maxInMonth = [[ 200 0 100 200]
maxProductsInMonth = [[ 200 0 100 200]
[ 300 100 200 200]
[ 0 300 100 200]];

View File

@ -8,23 +8,23 @@
//Paramatry zostaladniej opisane w pliku .dat oraz raporcie
// Parametry liczbowe
int nMachType = ...;
int nMonth = ...;
int nProdType = ...;
int numberOfMachineTypes = ...;
int numberOfMonths = ...;
int numberOfProductsTypes = ...;
int nHours = ...;
int nScenarios = ...;
int numberOfHoursInFactory = ...;
int numberOfScenarios = ...;
// Utworzenie wektorow indeksujacych
{int} machines = asSet(1..nMachType);
{int} months = asSet(1..nMonth);
{int} products = asSet(1..nProdType);
{int} scenarios = asSet(1..nScenarios);
{int} machines = asSet(1..numberOfMachineTypes);
{int} months = asSet(1..numberOfMonths);
{int} products = asSet(1..numberOfProductsTypes);
{int} scenarios = asSet(1..numberOfScenarios);
//Parametry produkcji i sprzedazy
int machineCount[machines] = ...;
float prodTime[machines][products] = ...;
int maxInMonth[months][products] = ...;
float timeToProduce[machines][products] = ...;
int maxProductsInMonth[months][products] = ...;
//Parametry magazynowania
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);
// 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
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
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
@ -90,20 +90,20 @@ subject to {
}
// Ogranicznie czasu produkcji maszyn w miesiacu
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
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
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
forall(m in months, p in products) {
sell[m][p] <= 0.8*maxInMonth[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] + 1000000 * if80prec[m][p];
sell[m][p] >= 0.8*maxProductsInMonth[m][p] * if80prec[m][p];
}
// Ograniczenia linearyzujace wplyw zmiennej binarnej na funkcje celu
forall (i in scenarios,m in months, p in products) {
@ -165,14 +165,14 @@ main {
i = 1;4
fileProfit.writeln("avgProfit: ");
while (i<=data.nScenarios) {
while (i<=data.numberOfScenarios) {
fileProfit.writeln(mod.profit[i]);
i++;
};
i = 1;
fileRisk.writeln("Risk: ");
while (i<=data.nScenarios) {
while (i<=data.numberOfScenarios) {
fileRisk.writeln(mod.risk[i]);
i++;
};
@ -197,14 +197,14 @@ main {
i = 1;
fileProfit.writeln("avgProfit: ");
while (i<=data.nScenarios) {
while (i<=data.numberOfScenarios) {
fileProfit.writeln(mod.profit[i]);
i++;
};
i = 1;
fileRisk.writeln("Risk: ");
while (i<=data.nScenarios) {
while (i<=data.numberOfScenarios) {
fileRisk.writeln(mod.risk[i]);
i++;
};
@ -228,14 +228,14 @@ main {
i = 1;
fileProfit.writeln("avgProfit: ");
while (i<=data.nScenarios) {
while (i<=data.numberOfScenarios) {
fileProfit.writeln(mod.profit[i]);
i++;
};
i = 1;
fileRisk.writeln("Risk: ");
while (i<=data.nScenarios) {
while (i<=data.numberOfScenarios) {
fileRisk.writeln(mod.risk[i]);
i++;
};