mirror of
https://github.com/kuhyx/WUT_Computer_Science.git
synced 2026-07-04 15:03: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}
|
||||
\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 zł \\
|
||||
Maksymalizacja zysku & 9515.80 zł & 360.18 zł \\
|
||||
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 zł\\
|
||||
Miara ryzyka & 755.133 zł & 774.872 zł & 796.113 zł\\
|
||||
Ograniczenie minimalnego zysku & 8450.97 zł & 8983.38 zł & 9515.79 zł\\
|
||||
Średni zysk & 8451.02 zł & 8983.40 zł & 9515.80 zł\\
|
||||
Miara ryzyka & 306.38 zł & 332.93 zł & 360.18 zł\\
|
||||
\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}
|
||||
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********************/
|
||||
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]];
|
||||
|
||||
|
||||
@ -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) {
|
||||
|
||||
@ -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]];
|
||||
|
||||
|
||||
@ -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) {
|
||||
|
||||
@ -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]];
|
||||
|
||||
|
||||
@ -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) {
|
||||
|
||||
@ -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]];
|
||||
|
||||
|
||||
@ -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++;
|
||||
};
|
||||
|
||||
Loading…
Reference in New Issue
Block a user