mirror of
https://github.com/kuhyx/WUT_Computer_Science.git
synced 2026-07-04 15:43:16 +02:00
chore: better wdwr project source
This commit is contained in:
parent
b49b5e3592
commit
27a602f994
@ -1,4 +0,0 @@
|
||||
8.50944172786882
|
||||
8.47100593224391
|
||||
8.1319049712769
|
||||
6.39446520538826
|
||||
@ -1,36 +0,0 @@
|
||||
library(tmvtnorm)
|
||||
|
||||
# t-Stutdet parameters
|
||||
Mu = c(9, 8, 7, 6)
|
||||
Sigma = matrix(c(16, -2, -1, -3,
|
||||
-2, 9, -4, -1,
|
||||
-1, -4, 4, 1,
|
||||
-3, -1, 1, 1),
|
||||
nrow=4, ncol=4)
|
||||
lower_bound = 5
|
||||
upper_bound = 12
|
||||
|
||||
# Generate scenarios
|
||||
data <- rtmvt(n=10000, mean=Mu, sigma=Sigma, df=5, lower=rep(lower_bound, 4), upper=rep(upper_bound, 4))
|
||||
write.table(format(data, digits=15, drop0trailing=F), "data10000.txt", quote=F, sep="\t", eol="\n\t", col.names = F, row.names = T)
|
||||
mean <- colMeans(data)
|
||||
|
||||
E <- function(idx, Mu, Sigma, v, alfa, beta) {
|
||||
mu = Mu[idx]
|
||||
sigma = Sigma[idx, idx]
|
||||
a = (alfa - mu)/sigma
|
||||
b = (beta - mu)/sigma
|
||||
nom = gamma((v-1)/2) *
|
||||
((v+a^2)^(-1*(v-1)/2) -
|
||||
(v+b^2)^(-1*(v-1)/2)) *
|
||||
v^(v/2)
|
||||
den = 2 * (pt(b, v) - pt(a, v)) * gamma(v/2) * gamma(1/2)
|
||||
return (mu + sigma*(nom/den))
|
||||
}
|
||||
|
||||
ER1 <- E(1, Mu, Sigma, 5, 5, 12)
|
||||
ER2 <- E(2, Mu, Sigma, 5, 5, 12)
|
||||
ER3 <- E(3, Mu, Sigma, 5, 5, 12)
|
||||
ER4 <- E(4, Mu, Sigma, 5, 5, 12)
|
||||
ER <- c(ER1, ER2, ER3, ER4)
|
||||
write.table(ER, "ER.txt", sep="\t", col.names=F, row.names=F)
|
||||
File diff suppressed because it is too large
Load Diff
@ -1,127 +0,0 @@
|
||||
###########################################################
|
||||
# WDWR 18042 #
|
||||
# Planowanie produkcj w warunkach ryzyka. #
|
||||
# MODEL #
|
||||
# Autor: Krzysztof Rudnicki #
|
||||
###########################################################
|
||||
|
||||
##########
|
||||
# Zbiory #
|
||||
##########
|
||||
# Produkty
|
||||
set PRODUCTS = {"P1", "P2", "P3", "P4"};
|
||||
# Narzedzia
|
||||
set TOOLS;
|
||||
# Miesiace
|
||||
set MONTHS ordered;
|
||||
# Scenariusze
|
||||
param scenarioCount = 10000;
|
||||
set SCENARIOS = {0..scenarioCount};
|
||||
|
||||
#############
|
||||
# Parametry #
|
||||
#############
|
||||
|
||||
# Liczba kazdego z narzedzi
|
||||
param toolCount {TOOLS} >= 1;
|
||||
|
||||
# Dochody ze sprzedazy [pln/szt]
|
||||
param expectedProfitPerUnit {PRODUCTS} >= 0;
|
||||
|
||||
# Scenarios
|
||||
param scenarioProfitPerUnit {SCENARIOS, PRODUCTS};
|
||||
|
||||
# Czasy produkcji [godz]
|
||||
param toolTimePerUnit {TOOLS, PRODUCTS} >= 0;
|
||||
|
||||
# Ograniczenia rynkowe liczby sprzedawanych produktow [szt]
|
||||
param salesMarketLimit {MONTHS, PRODUCTS} >= 0;
|
||||
|
||||
# Ograniczeine liczby magazynowanych produktow [szt]
|
||||
param storageLimit {PRODUCTS} >= 0;
|
||||
|
||||
# Koszt magazynowania produktow [pln/szt per msc]
|
||||
param storageUnitCost >= 0;
|
||||
|
||||
# Aktualny stan magazynowy [szt]
|
||||
param startingStorage {PRODUCTS} >= 0;
|
||||
|
||||
# Pozadany stan magazynowy na koniec symulacji [szt]
|
||||
param desiredEndStorage {PRODUCTS} >= 0;
|
||||
|
||||
# Liczba dni roboczych w miesiacu [d]
|
||||
param daysPerMonth >= 1;
|
||||
|
||||
# Liczba zmian w ciagu jednego dnia roboczego
|
||||
param shiftsPerDay >= 1;
|
||||
|
||||
# Dlugosc zmiany [godz]
|
||||
param hoursPerShift >= 1;
|
||||
|
||||
# Liczba roboczogodzin w miesi<EFBFBD>cu [godz]
|
||||
param workHoursPerMonth = daysPerMonth*shiftsPerDay*hoursPerShift;
|
||||
|
||||
###########
|
||||
# Zmienne #
|
||||
###########
|
||||
# Produkcja produktow
|
||||
var produced {MONTHS, PRODUCTS} >= 0 integer;
|
||||
|
||||
# Sprzedaz produktow w danym miesiacu
|
||||
var sold {MONTHS,PRODUCTS} >= 0 integer;
|
||||
var totalSold {p in PRODUCTS} = sum {m in MONTHS} sold[m, p];
|
||||
|
||||
# Iloosc produktow przekazanych do magazynu w danym miesiacu
|
||||
var stored {m in MONTHS, p in PRODUCTS} = produced[m, p] - sold[m, p];
|
||||
|
||||
# Stan magazynowy na koniec danego miesiaca
|
||||
var storage {m in MONTHS, p in PRODUCTS} =
|
||||
startingStorage[p] + sum {m2 in MONTHS: ord(m2) <= ord(m)} stored[m2, p];
|
||||
|
||||
# Czas pracy narzedzi w danym miesi<EFBFBD>cu
|
||||
var availableToolTime {t in TOOLS} =
|
||||
toolCount[t]*workHoursPerMonth;
|
||||
var usedToolTime {m in MONTHS, t in TOOLS} =
|
||||
sum {p in PRODUCTS} produced[m,p]*toolTimePerUnit[t,p];
|
||||
|
||||
# Koszt magazynowania
|
||||
var monthlyStorageCost {m in MONTHS} =
|
||||
(sum {p in PRODUCTS} storage[m, p])*storageUnitCost;
|
||||
var totalStorageCost = sum {m in MONTHS} monthlyStorageCost[m];
|
||||
|
||||
# Zysk dla warto<EFBFBD>ci oczekiwanej
|
||||
var expectedSalesProfit =
|
||||
sum {p in PRODUCTS} totalSold[p]*expectedProfitPerUnit[p];
|
||||
var expectedNetProfit =
|
||||
expectedSalesProfit - totalStorageCost;
|
||||
|
||||
|
||||
#######################
|
||||
# Ograniczenia modelu #
|
||||
#######################
|
||||
|
||||
# Ograniczenie rynkowe sprzedazy produktow
|
||||
subject to SalesMarketLimit {m in MONTHS, p in PRODUCTS}:
|
||||
sold[m, p] <= salesMarketLimit[m, p];
|
||||
# Ograniczenie magazynowe sprzedazy produktow
|
||||
subject to SalesLimit1 {p in PRODUCTS}:
|
||||
sold[first(MONTHS), p] <= produced[first(MONTHS), p];
|
||||
subject to SalesLimit2 {m in MONTHS, p in PRODUCTS: m != first(MONTHS)}:
|
||||
sold[m, p] <= produced [m, p] + storage[m, p];
|
||||
# Powiazanie sprzedazy produktu P4 ze sprzedaza produktow P1 i P2
|
||||
subject to P4SalesConstraint {m in MONTHS}:
|
||||
sold[m, "P4"] >= sold[m, "P1"] + sold[m, "P2"];
|
||||
# Ograniczenie pojemno<EFBFBD>ci magazynowej
|
||||
subject to StorageLimit {m in MONTHS, p in PRODUCTS}:
|
||||
storage[m, p] <= storageLimit[p];
|
||||
# Ograniczenie na po<EFBFBD><EFBFBD>dany stan magazynowy na koniec marca
|
||||
subject to DesiredStorage {p in PRODUCTS}:
|
||||
storage[last(MONTHS), p] >= desiredEndStorage[p];
|
||||
#Ograniczenie czasu pracy narzedzi w miesiacu
|
||||
subject to ToolWorkTime {m in MONTHS, t in TOOLS}:
|
||||
usedToolTime[m, t] <= availableToolTime[t];
|
||||
|
||||
################
|
||||
# Funkcje celu #
|
||||
################
|
||||
maximize Profit: expectedNetProfit;
|
||||
@ -1,27 +0,0 @@
|
||||
###########################################################
|
||||
# WDWR 18042 #
|
||||
# Planowanie produkcj w warunkach ryzyka. #
|
||||
# SKRYPT URUCHAMIAJACY - Metoda punktu odniesienia #
|
||||
# Autor: Krzysztof Rudnicki #
|
||||
###########################################################
|
||||
|
||||
#######################
|
||||
# Konfiguracja modelu #
|
||||
#######################
|
||||
model WDWR1.mod;
|
||||
data WDWR1.dat;
|
||||
option solver cplex;
|
||||
|
||||
#############################
|
||||
# Model jednokryterialny #
|
||||
#############################
|
||||
printf "\n#################################################\n";
|
||||
printf "### Maximize profit for expected profit value ###\n";
|
||||
printf "#################################################\n";
|
||||
objective Profit;
|
||||
solve;
|
||||
|
||||
display produced;
|
||||
display sold;
|
||||
display stored;
|
||||
printf "Profit: %f\n", Profit;
|
||||
File diff suppressed because it is too large
Load Diff
@ -1,201 +0,0 @@
|
||||
###########################################################
|
||||
# WDWR 18042 #
|
||||
# Planowanie produkcj w warunkach ryzyka. #
|
||||
# MODEL #
|
||||
# Autor: Krzysztof Rudnicki #
|
||||
###########################################################
|
||||
|
||||
##########
|
||||
# Zbiory #
|
||||
##########
|
||||
# Produkty
|
||||
set PRODUCTS = {"P1", "P2", "P3", "P4"};
|
||||
# Narzedzia
|
||||
set TOOLS;
|
||||
# Miesiace
|
||||
set MONTHS ordered;
|
||||
# Scenariusze
|
||||
param scenarioCount;
|
||||
set SCENARIOS = {1..scenarioCount};
|
||||
|
||||
#############
|
||||
# Parametry #
|
||||
#############
|
||||
|
||||
# Liczba kazdego z narzedzi
|
||||
param toolCount {TOOLS} >= 1;
|
||||
|
||||
# Dochody ze sprzedazy [pln/szt]
|
||||
param expectedProfitPerUnit {PRODUCTS} >= 0;
|
||||
|
||||
# Scenarios
|
||||
param scenarioProfitPerUnit {SCENARIOS, PRODUCTS};
|
||||
|
||||
# Czasy produkcji [godz]
|
||||
param toolTimePerUnit {TOOLS, PRODUCTS} >= 0;
|
||||
|
||||
# Ograniczenia rynkowe liczby sprzedawanych produktow [szt]
|
||||
param salesMarketLimit {MONTHS, PRODUCTS} >= 0;
|
||||
|
||||
# Ograniczeine liczby magazynowanych produktow [szt]
|
||||
param storageLimit {PRODUCTS} >= 0;
|
||||
|
||||
# Koszt magazynowania produktow [pln/szt per msc]
|
||||
param storageUnitCost >= 0;
|
||||
|
||||
# Aktualny stan magazynowy [szt]
|
||||
param startingStorage {PRODUCTS} >= 0;
|
||||
|
||||
# Pozadany stan magazynowy na koniec symulacji [szt]
|
||||
param desiredEndStorage {PRODUCTS} >= 0;
|
||||
|
||||
# Liczba dni roboczych w miesiacu [d]
|
||||
param daysPerMonth >= 1;
|
||||
|
||||
# Liczba zmian w ciagu jednego dnia roboczego
|
||||
param shiftsPerDay >= 1;
|
||||
|
||||
# Dlugosc zmiany [godz]
|
||||
param hoursPerShift >= 1;
|
||||
|
||||
# Liczba roboczogodzin w miesi<EFBFBD>cu [godz]
|
||||
param workHoursPerMonth = daysPerMonth*shiftsPerDay*hoursPerShift;
|
||||
|
||||
# Czas pracy narzedzi w danym miesi<EFBFBD>cu
|
||||
param availableToolTime {t in TOOLS} = toolCount[t]*workHoursPerMonth;
|
||||
|
||||
###########
|
||||
# Zmienne #
|
||||
###########
|
||||
# Produkcja produktow
|
||||
var produced {MONTHS, PRODUCTS} >= 0 integer;
|
||||
|
||||
# Sprzedaz produktow w danym miesiacu
|
||||
var sold {MONTHS,PRODUCTS} >= 0 integer;
|
||||
var totalSold {p in PRODUCTS} = sum {m in MONTHS} sold[m, p];
|
||||
|
||||
# Iloosc produktow przekazanych do magazynu w danym miesiacu
|
||||
var stored {m in MONTHS, p in PRODUCTS} = produced[m, p] - sold[m, p];
|
||||
|
||||
# Stan magazynowy na koniec danego miesiaca
|
||||
var storage {m in MONTHS, p in PRODUCTS} =
|
||||
startingStorage[p] + sum {m2 in MONTHS: ord(m2) <= ord(m)} stored[m2, p];
|
||||
|
||||
# Wykorzystany czas pracy
|
||||
var usedToolTime {m in MONTHS, t in TOOLS} =
|
||||
sum {p in PRODUCTS} produced[m,p]*toolTimePerUnit[t,p];
|
||||
|
||||
# Koszt magazynowania
|
||||
var monthlyStorageCost {m in MONTHS} =
|
||||
(sum {p in PRODUCTS} storage[m, p])*storageUnitCost;
|
||||
var totalStorageCost = sum {m in MONTHS} monthlyStorageCost[m];
|
||||
|
||||
# Zysk dla warto<EFBFBD>ci oczekiwanej
|
||||
var expectedSalesProfit =
|
||||
sum {p in PRODUCTS} totalSold[p]*expectedProfitPerUnit[p];
|
||||
var expectedNetProfit =
|
||||
expectedSalesProfit - totalStorageCost;
|
||||
|
||||
# Zysk w danym scenariuszu
|
||||
var scenarioSalesProfit {s in SCENARIOS} =
|
||||
sum {p in PRODUCTS} totalSold[p]*scenarioProfitPerUnit[s, p];
|
||||
var scenarioNetProfit {s in SCENARIOS} =
|
||||
scenarioSalesProfit[s] - totalStorageCost;
|
||||
|
||||
# Odchylenie jako miara ryzyka - zlinearyzowana wartosc bezwzgledna
|
||||
var deviation {s in SCENARIOS} =
|
||||
expectedNetProfit - scenarioNetProfit[s];
|
||||
var P {SCENARIOS} >= 0;
|
||||
var Q {SCENARIOS} >= 0;
|
||||
subject to deviationLimit {s1 in SCENARIOS, s2 in SCENARIOS}:
|
||||
deviation[s1]-deviation[s2]+P[s1]-Q[s2] = 0;
|
||||
|
||||
#var maxDeviation = max {s in SCENARIOS} deviation[s];
|
||||
var maxDeviation;
|
||||
# Linearyzacja maksymalnego odchylenia jako miary ryzyka
|
||||
param M = 10000;
|
||||
var Z {SCENARIOS} binary;
|
||||
subject to mdLimit {s in SCENARIOS}:
|
||||
maxDeviation >= deviation[s];
|
||||
subject to mdWhere {s in SCENARIOS}:
|
||||
maxDeviation <= deviation[s] + M*(1-Z[s]);
|
||||
subject to mdOS:
|
||||
sum{s in SCENARIOS} Z[s] = 1;
|
||||
|
||||
# Aliasy dla ocenianych warto<EFBFBD>ci
|
||||
var profit = expectedNetProfit;
|
||||
var risk = maxDeviation;
|
||||
|
||||
#######################
|
||||
# Ograniczenia modelu #
|
||||
#######################
|
||||
|
||||
# Ograniczenie rynkowe sprzedazy produktow
|
||||
subject to SalesMarketLimit {m in MONTHS, p in PRODUCTS}:
|
||||
sold[m, p] <= salesMarketLimit[m, p];
|
||||
# Ograniczenie magazynowe sprzedazy produktow
|
||||
subject to SalesLimit1 {p in PRODUCTS}:
|
||||
sold[first(MONTHS), p] <= produced[first(MONTHS), p];
|
||||
subject to SalesLimit2 {m in MONTHS, p in PRODUCTS: m != first(MONTHS)}:
|
||||
sold[m, p] <= produced [m, p] + storage[m, p];
|
||||
# Powiazanie sprzedazy produktu P4 ze sprzedaza produktow P1 i P2
|
||||
subject to P4SalesConstraint {m in MONTHS}:
|
||||
sold[m, "P4"] >= sold[m, "P1"] + sold[m, "P2"];
|
||||
# Ograniczenie pojemno<EFBFBD>ci magazynowej
|
||||
subject to StorageLimit {m in MONTHS, p in PRODUCTS}:
|
||||
storage[m, p] <= storageLimit[p];
|
||||
# Ograniczenie na po<EFBFBD><EFBFBD>dany stan magazynowy na koniec marca
|
||||
subject to DesiredStorage {p in PRODUCTS}:
|
||||
storage[last(MONTHS), p] >= desiredEndStorage[p];
|
||||
#Ograniczenie czasu pracy narzedzi w miesiacu
|
||||
subject to ToolWorkTime {m in MONTHS, t in TOOLS}:
|
||||
usedToolTime[m, t] <= availableToolTime[t];
|
||||
|
||||
#############################
|
||||
# Metoda punktu odniesienia #
|
||||
#############################
|
||||
# Skladniki wektora oceny
|
||||
set RATED = {"PROFIT", "RISK"};
|
||||
# Wektor oceny
|
||||
var value {r in RATED} =
|
||||
if r == "PROFIT" then profit
|
||||
else if r == "RISK" then risk;
|
||||
# Wektor aspiracji
|
||||
param aspiration {RATED};
|
||||
# Warto<EFBFBD>ci utopii i nadiru
|
||||
param utopia {RATED};
|
||||
param nadir {RATED};
|
||||
# Wspolczynniki normalizujace
|
||||
param lambda {r in RATED} =
|
||||
1 / (utopia[r]-nadir[r]);
|
||||
# Wspolczynnik skladnika regularyzacyjnego
|
||||
param epsilon;
|
||||
# Wspolczynnik pomniejszenia warto<EFBFBD>ci ocen ponad poziomem aspiracji
|
||||
param beta;
|
||||
# Indywidualne funkcje osiagniec
|
||||
var individualRating {RATED};
|
||||
# Zmienna pomocnicza metody punktu odniesienia
|
||||
var v;
|
||||
# Skalaryzujaca funkcja osiagniecia
|
||||
var rating = v + epsilon * (sum {r in RATED} individualRating[r]);
|
||||
# Odleglo<EFBFBD>c od punktu odniesienia
|
||||
var distance {r in RATED} = value[r]-aspiration[r];
|
||||
# Znormalizowana odleglo<EFBFBD>c od punktu odniesienia
|
||||
var normalizedDistance {r in RATED} = lambda[r]*distance[r];
|
||||
# Ograniczenia zmiennej v przez indywidualne funkcje osiagniec
|
||||
subject to VSubject {r in RATED}:
|
||||
v <= individualRating[r];
|
||||
# Ograniczenia indywidualnych funkcji osiagniec
|
||||
subject to IndividualRatingSubjectBeta {r in RATED}:
|
||||
individualRating[r] <= beta*normalizedDistance[r];
|
||||
subject to IndividualRatingSubject {r in RATED}:
|
||||
individualRating[r] <= normalizedDistance[r];
|
||||
|
||||
################
|
||||
# Funkcje celu #
|
||||
################
|
||||
minimize MinimizeProfit: profit;
|
||||
maximize MaximizeProfit: profit;
|
||||
minimize MinimizeRisk: risk;
|
||||
maximize MaximizeRisk: risk;
|
||||
maximize RPM: rating;
|
||||
@ -1,50 +0,0 @@
|
||||
###########################################################
|
||||
# WDWR 18042 #
|
||||
# Planowanie produkcj w warunkach ryzyka. #
|
||||
# SKRYPT URUCHAMIAJACY - Metoda punktu odniesienia #
|
||||
# Autor: Krzysztof Rudnicki #
|
||||
###########################################################
|
||||
|
||||
#######################
|
||||
# Konfiguracja modelu #
|
||||
#######################
|
||||
model WDWR2.mod;
|
||||
data WDWR2_trunc.dat;
|
||||
option solver cplex;
|
||||
|
||||
#############################
|
||||
# Metoda punktu odniesienia #
|
||||
#############################
|
||||
printf "\n######################################\n";
|
||||
printf "### RPM solution space calculation ###\n";
|
||||
printf "######################################\n";
|
||||
objective RPM;
|
||||
|
||||
param steps = 10;
|
||||
param stepSize {r in RATED} = (utopia[r] - nadir[r]) / (steps-1);
|
||||
param iteration;
|
||||
param iterationCount = steps*steps;
|
||||
set RESULTS = {1..iterationCount};
|
||||
set VALUES = {"PROFIT", "RISK", "RPM"};
|
||||
param result {RESULTS, VALUES};
|
||||
|
||||
for {i in 0..steps-1} {
|
||||
for {j in 0..steps-1} {
|
||||
let iteration := 1 + steps*i + j;
|
||||
let aspiration["PROFIT"] := nadir["PROFIT"] + i * stepSize["PROFIT"];
|
||||
let aspiration["RISK"] := nadir["RISK"] + j * stepSize["RISK"];
|
||||
printf "### %d: Solving model for aspirations: %f, %f\n",
|
||||
iteration, aspiration["PROFIT"], aspiration["RISK"];
|
||||
solve;
|
||||
let result[iteration, "PROFIT"] := profit;
|
||||
let result[iteration, "RISK"] := risk;
|
||||
let result[iteration, "RPM"] := RPM;
|
||||
printf "Profit: %f\n", profit;
|
||||
printf "Risk: %f\n", risk;
|
||||
printf "RPM: %f\n", RPM;
|
||||
}
|
||||
}
|
||||
|
||||
display result;
|
||||
|
||||
printf { r in RESULTS } "%f\t%f\t%f\n", result[r,"PROFIT"], result[r, "RISK"], result[r,"RPM"] > ./result.csv ;
|
||||
@ -1,154 +0,0 @@
|
||||
###########################################################
|
||||
# WDWR 18042 #
|
||||
# Planowanie produkcj w warunkach ryzyka. #
|
||||
# DANE #
|
||||
# Autor: Krzysztof Rudnicki #
|
||||
###########################################################
|
||||
|
||||
# Narzedzia
|
||||
set TOOLS := GRINDER VDRILL HDRILL MILLER LATHE;
|
||||
|
||||
# Miesiace
|
||||
set MONTHS := JAN FEB MAR;
|
||||
|
||||
# Licza narzedzi
|
||||
param toolCount :=
|
||||
GRINDER 4
|
||||
VDRILL 2
|
||||
HDRILL 3
|
||||
MILLER 1
|
||||
LATHE 1
|
||||
;
|
||||
|
||||
# Czasy produkcji h
|
||||
param toolTimePerUnit:
|
||||
P1 P2 P3 P4 :=
|
||||
GRINDER 0.4 0.6 0 0
|
||||
VDRILL 0.2 0.1 0 0.6
|
||||
HDRILL 0.1 0 0.7 0
|
||||
MILLER 0.06 0.04 0 0.05
|
||||
LATHE 0 0.05 0.02 0
|
||||
;
|
||||
|
||||
# Ograniczenia rynkowe liczby sprzedawanych produktow pcs
|
||||
param salesMarketLimit:
|
||||
P1 P2 P3 P4 :=
|
||||
JAN 200 0 100 200
|
||||
FEB 300 100 200 200
|
||||
MAR 0 300 100 200
|
||||
;
|
||||
|
||||
# Ograniczeine liczby magazynowanych produktow pcs
|
||||
param storageLimit :=
|
||||
P1 200
|
||||
P2 200
|
||||
P3 200
|
||||
P4 200
|
||||
;
|
||||
|
||||
# Koszt magazynowania produktow pln/pcs per month
|
||||
param storageUnitCost := 1;
|
||||
|
||||
# Aktualny stan magazynowy pcs
|
||||
param startingStorage :=
|
||||
P1 0
|
||||
P2 0
|
||||
P3 0
|
||||
P4 0
|
||||
;
|
||||
|
||||
# Poz<6F>dany stan magazynowy na koniec marca pcs
|
||||
param desiredEndStorage :=
|
||||
P1 50
|
||||
P2 50
|
||||
P3 50
|
||||
P4 50
|
||||
;
|
||||
|
||||
# Liczba dni roboczych w miesiacu d
|
||||
param daysPerMonth := 24;
|
||||
|
||||
# Liczba zmian w ciagu jednego dnia roboczego
|
||||
param shiftsPerDay := 2;
|
||||
|
||||
# Dlugosc zmiany h
|
||||
param hoursPerShift := 8;
|
||||
|
||||
# Zyski warto<74><6F> oczekiwana
|
||||
param expectedProfitPerUnit :=
|
||||
P1 8.50944172786882
|
||||
P2 8.47100593224391
|
||||
P3 8.1319049712769
|
||||
P4 6.39446520538826
|
||||
;
|
||||
|
||||
# Metoda punktu odniesienia
|
||||
param epsilon = 0.000025;
|
||||
|
||||
param beta = 0.001;
|
||||
|
||||
param utopia :=
|
||||
PROFIT 11987
|
||||
RISK 0
|
||||
;
|
||||
|
||||
param nadir :=
|
||||
PROFIT -2400
|
||||
RISK 2815
|
||||
;
|
||||
|
||||
# Scenariusze
|
||||
param scenarioCount := 50;
|
||||
param scenarioProfitPerUnit:
|
||||
P1 P2 P3 P4 :=
|
||||
1 6.78312108289149 5.79640238361981 10.05787433056357 6.57331416435723
|
||||
2 6.99738290528301 9.01490464757196 5.08481517735633 6.42703739335277
|
||||
3 5.16730304787176 7.52317923266688 10.72313438657665 7.22667916959417
|
||||
4 8.52274093276464 11.38240217987188 6.13080610568167 6.43883854824552
|
||||
5 6.50428131735901 6.61788006135640 7.86111017073128 6.96225068464523
|
||||
6 5.73487133076911 9.16374087573468 5.52557377604414 6.34042770048443
|
||||
7 7.57821826531473 5.53212159376577 9.44747152703083 7.92080735281354
|
||||
8 8.46351060213176 6.67108340536348 7.96447972290298 6.74037823409959
|
||||
9 10.60705431897493 6.29351506828248 8.08238578885269 6.64513805083938
|
||||
10 5.49788635095338 8.01657169352075 8.50721094756387 6.32347360999400
|
||||
11 9.98722514505514 8.89045419912165 7.40638427340367 6.19123907839219
|
||||
12 7.73547221322455 11.39341677791569 7.08591860802534 6.65287015880773
|
||||
13 8.00244141512299 7.46013718525416 9.07534043801771 7.01972409076348
|
||||
14 10.01757296285428 11.16631823758034 5.36427432741987 5.93803320930752
|
||||
15 8.73982030016946 7.22788862315047 7.52123044637611 6.30583102048732
|
||||
16 6.74830998356361 5.16961378121024 9.83052665533391 6.97518295642799
|
||||
17 5.79891835909540 7.62305645016980 7.28259746189341 6.58122366239758
|
||||
18 5.01746785364914 5.37120611569365 11.37580509674048 7.45754618734148
|
||||
19 8.84615981059243 10.36884740288172 5.51512168506823 5.14746695259905
|
||||
20 10.27832406220036 6.26817737098193 6.75980452880535 6.00071122161820
|
||||
21 9.15464079326701 9.22511946737560 8.59742728186919 5.85941844163078
|
||||
22 7.41070715265531 9.03326860943882 9.51105396612463 5.95705526059528
|
||||
23 9.41688054404721 5.48792302160852 8.05314441506622 6.33167522079485
|
||||
24 7.99636302963949 8.45127363831087 6.80178566896807 6.40796549415317
|
||||
25 8.77607512859202 9.06083514509964 6.14324653925151 5.73196891114116
|
||||
26 6.15756683330483 5.81155622391928 8.95298231122791 7.75631798464974
|
||||
27 8.71820952681711 6.75933713868641 6.20173677287384 5.94931057772569
|
||||
28 7.50988798239200 8.40250942598753 7.59076793688675 6.83115118367424
|
||||
29 11.46519479939599 5.34788729417893 7.49642151003498 5.09135446750897
|
||||
30 9.24470379243678 7.86407386582905 6.91504065225354 5.66423375179536
|
||||
31 10.11059443261933 5.19726478862852 7.17323727021490 5.35589059533840
|
||||
32 8.52798709174698 9.92750815054074 7.11656712470230 5.52054849939254
|
||||
33 10.96107079994176 7.10910792528864 5.70378349251154 5.17164984043314
|
||||
34 7.06917204470777 7.93024674036222 7.04742602521247 6.02267636557175
|
||||
35 8.48134255283988 5.85227829193417 5.36851422694765 6.58963142694151
|
||||
36 10.79598232218280 6.78064186807628 6.45254214496221 6.01773663687229
|
||||
37 9.31085304521786 7.24038452979960 7.11927599287817 5.94495349693440
|
||||
38 11.73162984938600 8.89170449659670 7.24145427728390 5.50727529989226
|
||||
39 9.95614904957837 8.24343617183020 6.08421773053824 5.59097741826648
|
||||
40 10.84398291202468 5.62144717550252 8.73978776370006 5.90011906694585
|
||||
41 9.66329756207950 8.71563915673125 8.57471405154024 6.25399915313449
|
||||
42 11.75197973817904 9.62791703809340 6.15087294856069 5.12525411655807
|
||||
43 10.21024933655283 5.45043424512963 7.70802205088631 6.26487953122650
|
||||
44 7.00126415308046 9.52080591709321 6.34678934922762 5.78571635562224
|
||||
45 10.95808951943000 5.38346727815726 6.12050483571891 7.52568971146160
|
||||
46 7.24407146573199 10.74100159223745 7.79352388695434 5.86675126000469
|
||||
47 11.09420218544564 7.58722148021949 10.11955301735720 5.87263773263194
|
||||
48 6.56196505922266 8.86557049389506 6.68759866488725 6.54786762414447
|
||||
49 6.36408747696432 9.90697341186375 8.67549323089252 7.10602003316923
|
||||
50 5.25413960261441 9.86316602732531 6.97502397729463 5.79670081684910
|
||||
;
|
||||
@ -1,53 +0,0 @@
|
||||
###########################################################
|
||||
# WDWR 18042 #
|
||||
# Planowanie produkcj w warunkach ryzyka. #
|
||||
# SKRYPT URUCHAMIAJACY #
|
||||
# Autor: Krzysztof Rudnicki #
|
||||
###########################################################
|
||||
|
||||
#######################
|
||||
# Konfiguracja modelu #
|
||||
#######################
|
||||
model WDWR2.mod;
|
||||
data WDWR2.dat;
|
||||
option solver cplex;
|
||||
|
||||
###########################################################
|
||||
# Rozwiazania optymalne dla wyznaczenia granic zmienno<6E>ci #
|
||||
# tj wektorow utopii i nadiru #
|
||||
###########################################################
|
||||
# Minimalny zysk
|
||||
printf "\n#########################\n";
|
||||
printf "### Minimizing profit ###\n";
|
||||
printf "#########################\n";
|
||||
objective MinimizeProfit;
|
||||
solve;
|
||||
printf "Profit: %f\n", profit;
|
||||
printf "Risk: %f\n", risk;
|
||||
|
||||
# Maksymalny koszt
|
||||
printf "\n#########################\n";
|
||||
printf "### Maximizing profit ###\n";
|
||||
printf "#########################\n";
|
||||
objective MaximizeProfit;
|
||||
solve;
|
||||
printf "Profit: %f\n", profit;
|
||||
printf "Risk: %f\n", risk;
|
||||
|
||||
# Minimalny poziom zanieczyszcze<7A>
|
||||
printf "\n#######################\n";
|
||||
printf "### Minimizing risk ###\n";
|
||||
printf "#######################\n";
|
||||
objective MinimizeRisk;
|
||||
solve;
|
||||
printf "Profit: %f\n", profit;
|
||||
printf "Risk: %f\n", risk;
|
||||
|
||||
# Maksymalny poziom zanieczyszcze<7A>
|
||||
printf "\n########################\n";
|
||||
printf "### Maximizing risk k###\n";
|
||||
printf "########################\n";
|
||||
objective MaximizeRisk;
|
||||
solve;
|
||||
printf "Profit: %f\n", profit;
|
||||
printf "Risk: %f\n", risk;
|
||||
File diff suppressed because it is too large
Load Diff
@ -1,771 +0,0 @@
|
||||
## **Politechnika Warszawska Instytut Automatyki i Informatyki Stosowanej**
|
||||
|
||||
**Sprawozdanie z projektu na przedmiot Wspomaganie Decyzji w Warunkach Ryzyka**
|
||||
|
||||
Krzysztof Rudnicki 307585
|
||||
|
||||
|
||||
## **Spis treści**
|
||||
|
||||
| 1 | Treść zadania | 2 |
|
||||
|---|----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|----------------------------|
|
||||
| 2 | Jednokryterialny model wyboru w warunkach ryzyka z wartością oczekiwaną jako miarą<br>zysku<br>2.1<br>Zbiory indeksowe<br>.<br>2.2<br>Parametry<br>2.3<br>Zmienne<br>2.4<br>Ograniczenia<br>.<br>2.5<br>Funkcja celu | 3<br>3<br>3<br>4<br>4<br>4 |
|
||||
| 3 | Dwukryterialny model zysku i ryzyka z wartoscią oczekiwaną jako miarą zysku i od<br>chyleniem maksymalnym jako miarą ryzyka<br>3.1<br>Zbiory indeksowe<br>.<br>3.2<br>Parametry<br>3.3<br>Zmienne<br>3.4<br>Ograniczenia<br>.<br>3.5<br>Metoda punktu odniesienia<br>. | 5<br>5<br>5<br>5<br>5<br>6 |
|
||||
| 4 | Wyznaczenie parametrów zadania z rozkładu t-Studenta | 6 |
|
||||
| 5 | Model dla programu AMPL<br>5.1<br>Plik z modelem (.mod)<br>5.2<br>Plik z danymi (.dat)<br>5.3<br>Skrypty uruchomieniowe (.run) | 8<br>8<br>11<br>14 |
|
||||
| 6 | Rozwiązanie zadania optymalizacji<br>6.1<br>Wyniki dla modelu jednokryterialnego<br>.<br>6.2<br>Wyniki dla modelu dwukryterialnego<br>6.2.1<br>Obraz zbioru rozwiązań efektywnych w przestrzeni ryzyko-zysk<br>.<br>6.2.2<br>Analiza relacji dominacji stochastycznej dla trzech wybranych rozwiązań efek<br>tywnych | 16<br>16<br>19<br>19<br>21 |
|
||||
|
||||
|
||||
## **WDWR 18402**
|
||||
|
||||
Rozważamy następujące zagadnienie planowania produkcji:
|
||||
|
||||
• Przedsiębiorstwo wytwarza 4 produkty P1,. . . ,P4 na następujących maszynach: 4 szlifierkach, 2 wiertarkach pionowych, 3 wiertarkach poziomych, 1 frezarce i 1 tokarce. Wymagane czasy produkcji 1 sztuki produktu (w godzinach) w danym procesie obróbki zostały przedstawione w poniższej tabeli:
|
||||
|
||||
| | P1 | P2 | P3 | P4 |
|
||||
|-------------------|------|------|------|------|
|
||||
| Szlifowanie | 0,4 | 0,6 | — | — |
|
||||
| Wiercenie pionowe | 0,2 | 0,1 | — | 0,6 |
|
||||
| Wiercenie poziome | 0,1 | — | 0,7 | — |
|
||||
| Frezowanie | 0,06 | 0,04 | — | 0,05 |
|
||||
| Toczenie | — | 0,05 | 0,02 | — |
|
||||
|
||||
• Dochody ze sprzedaży produktów (w zł/sztukę) określają składowe wektora losowego **R** = (*R*1*, . . . , R*4) *T* . Wektor losowy **R** opisuje 4-wymiarowy rozkład *t*-Studenta z 5 stopniami swobody, którego wartości składowych zostały zawężone do przedziału [5; 12]. Parametry *µ* oraz **Σ** niezawężonego rozkładu *t*-Studenta są następujące:
|
||||
|
||||
$$
|
||||
\mu = \begin{pmatrix} 9 \\ 8 \\ 7 \\ 6 \end{pmatrix}, \qquad \Sigma = \begin{pmatrix} 16 & -2 & -1 & -3 \\ -2 & 9 & -4 & -1 \\ -1 & -4 & 4 & 1 \\ -3 & -1 & 1 & 1 \end{pmatrix}.
|
||||
$$
|
||||
|
||||
• Istnieją ograniczenia rynkowe na liczbę sprzedawanych produktów w danym miesiącu:
|
||||
|
||||
| | P1 | P2 | P3 | P4 |
|
||||
|---------|-----|-----|-----|-----|
|
||||
| Styczeń | 200 | 0 | 100 | 200 |
|
||||
| Luty | 300 | 100 | 200 | 200 |
|
||||
| Marzec | 0 | 300 | 100 | 200 |
|
||||
|
||||
- Jeżeli w danym miesiącu jest sprzedawany produkt P1 lub P2, to musi być również sprzedawany produkt P4 w ilości nie mniejszej niż suma sprzedawanych produktów P1 i P2.
|
||||
- Istnieje możliwość składowania do 200 sztuk każdego produktu w danym czasie w cenie 1 zł/sztukę za miesiąc. Aktualnie firma nie posiada żadnych zapasów, ale jest pożądane mieć po 50 sztuk każdego produktu pod koniec marca.
|
||||
- Przedsiębiorstwo pracuje 6 dni w tygodniu w systemie dwóch zmian. Każda zmiana trwa 8 godzin. Można założyć, że każdy miesiąc składa się z 24 dni roboczych.
|
||||
- 1. Zaproponować jednokryterialny model wyboru w warunkach ryzyka z wartością oczekiwaną jako miarą zysku. Wyznaczyć rozwiązanie optymalne.
|
||||
- 2. Jako rozszerzenie powyższego zaproponować dwukryterialny model zysku i ryzyka z wartością oczekiwaną jako miarą zysku i odchyleniem maksymalnym jako miarą ryzyka. Dla decyzji **x** *∈ Q* odchylenie maksymalne jest definiowane jako *D*(**x**) = max*t*=1*,...,T |µ*(**x**) *− rt*(**x**)*|*, gdzie *µ*(**x**) oznacza wartość oczekiwaną, *rt*(**x**) realizację dla scenariusza *t*.
|
||||
- a. Wyznaczyć obraz zbioru rozwiązań efektywnych w przestrzeni ryzyko–zysk.
|
||||
- b. Wskazać rozwiązania efektywne minimalnego ryzyka i maksymalnego zysku. Jakie odpowiadają im wartości w przestrzeni ryzyko–zysk?
|
||||
- c. Wybrać trzy dowolne rozwiązania efektywne. Sprawdzić czy zachodzi pomiędzy nimi relacja dominacji stochastycznej pierwszego rzędu. Wyniki skomentować, odnieść do ogólnego przypadku.
|
||||
|
||||
|
||||
## **2 Jednokryterialny model wyboru w warunkach ryzyka z wartością oczekiwaną jako miarą zysku**
|
||||
|
||||
W celu rozwiązania postawionego zadania dokonano sformułowania modelu programowania liniowego całkowitoliczbowego. Poniżej przedstawiono zapis matematyczny modelu.
|
||||
|
||||
## **2.1 Zbiory indeksowe**
|
||||
|
||||
| Zbiór | Opis |
|
||||
|-------------------|------------------------------------------------------|
|
||||
| P =<br>P1, , P4 | Zbiór wytwarzanych produktów |
|
||||
| T =<br>T1, , T5 | Zbiór typów narzędzi wykorzystywanych przy produkcji |
|
||||
| M =<br>M1, M2, M3 | Zbiór kolejnych miesięcy produkcji |
|
||||
|
||||
## **2.2 Parametry**
|
||||
|
||||
| Parametr | Opis |
|
||||
|----------------------------|-----------------------------------------------------------------------|
|
||||
| tct | Liczba narzędzi typu t [szt] |
|
||||
| eppup | Oczekiwany zysk ze sprzedaży jednej sztuki produktu<br>p [zł] |
|
||||
| ttputp | Czas wykorzystania maszyny typu<br>t przy produkcji jednej sztuki pro |
|
||||
| | duktu<br>p [godz] |
|
||||
| smlmp | Limit sprzedaży produktu<br>p w miesiącu<br>m [szt] |
|
||||
| stlp | Limit pojemności magazynu na produkt<br>p [szt] |
|
||||
| stcpu | Koszt magazynowania jednej sztuki dowolnego produktu [zł] |
|
||||
| st0p | Początkowy stan magazynowy produktu<br>p [szt] |
|
||||
| dstp | Porządany końcowy stan magazynowy produktu<br>p [szt] |
|
||||
| dpm | Liczba dni roboczych w każdym miesiącu [d] |
|
||||
| spd | Liczba zmian w każdym dniu roboczym [j] |
|
||||
| whps | Liczba godzin roboczych w ciągu każdej zmiany [godz] |
|
||||
| whpm =<br>dpm · spd · hps | Liczba godzin roboczych w ciągu każdego miesiąca [godz] |
|
||||
| =<br>attt<br>tct<br>∗ whpm | Dostępna liczba godzin roboczych maszyn typu<br>t w ciągu każdego |
|
||||
| | miesiąca [godz] |
|
||||
|
||||
|
||||
## **2.3 Zmienne**
|
||||
|
||||
| Zmienna | Opis |
|
||||
|----------------------------------------------------|--------------------------------------------------------------------|
|
||||
| pmp | Liczba sztuk produktu<br>p wyprodukowanych w miesiącu<br>m [szt] |
|
||||
| smp | Liczba sztuk produktu<br>p sprzedanych w miesiącu<br>m [szt] |
|
||||
| X<br>=<br>tsp<br>smp | Całkowita liczba sprzedanych sztuk produktu<br>p |
|
||||
| m∈M | |
|
||||
| =<br>stdmp<br>pmp<br>− smp | Liczba sztuk produktu<br>p zmagazynowanych w miesiącu<br>m [szt] |
|
||||
| Xm<br>=<br>st0p<br>+<br>stgmp<br>stdm2p<br>m2=1 | Stan magazynowy produktu<br>p na koniec miesiąca<br>m [szt] |
|
||||
| X<br>uttmt<br>=<br>pmp<br>∗ ttputp<br>p∈P | Wykorzystanie czasu pracy maszyny typu<br>t w miesiącu<br>m [godz] |
|
||||
| X<br>X<br>tstc =<br>stcpu ·<br>stgmp<br>m∈M<br>p∈P | Całkowity koszt wykorzystania magazynów [zł] |
|
||||
| ep = (X<br>tsp<br>· eppup)<br>− tstc | Wartość zysku całkowitego dla wartości oczekiwanych zysku ze |
|
||||
| p∈P | sprzedaży produktów [zł] |
|
||||
|
||||
## **2.4 Ograniczenia**
|
||||
|
||||
Ograniczenie rynkowe sprzedawanych produktów:
|
||||
|
||||
*<sup>s</sup>mp* <sup>6</sup> *smlmp, <sup>∀</sup><sup>m</sup> <sup>∈</sup> M, <sup>∀</sup><sup>p</sup> <sup>∈</sup> <sup>P</sup>*
|
||||
|
||||
Ograniczenie sprzedaży produktów w pierszym miesiącu:
|
||||
|
||||
$$s\_{1p} \leqslant p\_{1p}, \quad \forall p \in P$$
|
||||
|
||||
Ograniczenie sprzedaży produktów w kolejnych miesiącach:
|
||||
|
||||
$$s\_{mp} \leqslant p\_{mp} + stg\_{mp}, \quad \forall m \in M \backslash \{1\}$$
|
||||
|
||||
Ograniczenie na powiązanie sprzedaży produktu 4 ze sprzedażą produktów 1 i 2:
|
||||
|
||||
*<sup>s</sup>m*<sup>4</sup> <sup>&</sup>gt; *<sup>s</sup>m*<sup>1</sup> <sup>+</sup> *<sup>s</sup>m*2*, <sup>∀</sup><sup>m</sup> <sup>∈</sup> <sup>M</sup>*
|
||||
|
||||
Ograniczenie pojemności magazynów:
|
||||
|
||||
$$stg\_{mp} \leqslant stl\_p, \quad \forall p \in P$$
|
||||
|
||||
Ograniczenie na pożądany stan magazynowy na koniec miesiąca 3:
|
||||
|
||||
$$stg\_{3p} \geqslant dst\_p, \quad \forall p \in P$$
|
||||
|
||||
Ograniczenie wykorzystania czasu pracy narzędzi w danym miesiącu:
|
||||
|
||||
*uttmt* 6 *att<sup>t</sup> , ∀t ∈ T, ∀m ∈ M*
|
||||
|
||||
## **2.5 Funkcja celu**
|
||||
|
||||
Jako funkcję celu przyjęto maksymalizację wartości oczekiwanej zysku: *maximize ep*
|
||||
|
||||
|
||||
# **3 Dwukryterialny model zysku i ryzyka z wartoscią oczekiwaną jako miarą zysku i odchyleniem maksymalnym jako miarą ryzyka**
|
||||
|
||||
Model ten został zrealizowany jako rozszerzenie modelu jednokryterialnego o dodatkowe zbiory, parametry, zmienne, ograniczenia i nową funkcję celu.
|
||||
|
||||
#### **3.1 Zbiory indeksowe**
|
||||
|
||||
| Zbiór | Opis |
|
||||
|--------------------|--------------------------------------------------------|
|
||||
| S =<br>S1, , S1000 | Zbiór scenariuszy wygenerowanych z rozkładu t-Studenta |
|
||||
|
||||
### **3.2 Parametry**
|
||||
|
||||
| Parametr | Opis |
|
||||
|----------|-----------------------------------------------------------------------|
|
||||
| sppups | Zysk ze sprzedaży jednej sztuki produktu<br>p w scenariuszu<br>s [zł] |
|
||||
|
||||
### **3.3 Zmienne**
|
||||
|
||||
| Zmienna | Opis |
|
||||
|-------------------------------------------|------------------------------------------------------------------------|
|
||||
| = (X<br>· sppups)<br>sps<br>tsp<br>− tstc | Wartość zysku całkowitego dla scenariusza<br>s zysku ze sprzedaży |
|
||||
| p∈P | produktów [zł] |
|
||||
| devs<br>=<br> ep − sps | Odchylenie zysku w danym scenariuszu [zł]. Jako, że funkcja |
|
||||
| | wartości bezwzględnej jest nieliniowa zmienna została poddana |
|
||||
| | linearyzacji z użyciem zmiennych<br>ldevs,<br>Ps,<br>Qs |
|
||||
| =<br>ldevs<br>ep − sps | Zmienna pomocnicza wykorzystana w linearyzacji odchylenia |
|
||||
| | zysku w scenariuszu<br>s |
|
||||
| Ps | Zmienna pomocnicza wykorzystana w linearyzacji zmiennejk |
|
||||
| | devs |
|
||||
| Qs | Zmienna pomocnicza wykorzystana w linearyzacji zmiennej<br>devs |
|
||||
| mdev = maxs∈S<br>devs | Maksymalne odchylenie zysu [zł]. Jako, że funkcja max jest nie |
|
||||
| | liniowa, zmienna została poddana linearyzacji z użyciem zmien |
|
||||
| | nych<br>M,<br>Zs |
|
||||
| M | Zmienna<br>pomocnicza<br>wykorzystana<br>w<br>linearyzacji<br>zmiennej |
|
||||
| | mdev |
|
||||
| Zs | Zmienna<br>pomocnicza<br>binarna<br>wykorzystana<br>w<br>linearyzacji |
|
||||
| | zmiennej<br>mdev |
|
||||
| r =<br>mdev | Miara ryzyka, równa maksymalnemu odchyleniu zysku |
|
||||
|
||||
## **3.4 Ograniczenia**
|
||||
|
||||
Ograniczenie związane z linearyzacją zmiennej *devs*:
|
||||
|
||||
$$lde v\_{s1} - lde v\_{s2} + P\_{s1} - Q\_{s2} = 0, \quad \forall s\_1, s\_2 \in S$$
|
||||
|
||||
Ograniczenie związane z linearyzację zmiennej *mdev*:
|
||||
|
||||
|
||||
$$mdev \geqslant dev\_s, \quad \forall s \in S$$
|
||||
|
||||
$$mdev \leqslant dev\_s + M(1 - Z\_s), \quad \forall s \in S$$
|
||||
|
||||
$$\sum\_{s \in S} Z\_s = 1$$
|
||||
|
||||
## **3.5 Metoda punktu odniesienia**
|
||||
|
||||
Jako model preferencji dla modelu dwukryterialnego została wybrana metoda punktu odniesienia. Wprowadza ona zestaw dodatkowych parametrów i zmiennych:
|
||||
|
||||
| Parametr | Opis |
|
||||
|-----------|---------------------------------------------------------------------------------|
|
||||
| aspep | Poziom aspiracji oczekiwanego zysku |
|
||||
| aspr | Poziom aspiracji ryzyka |
|
||||
| λep, λr | Współczynniki normalizujące, odpowiednio dla zysku i ryzyka. Ze względu na ogól |
|
||||
| | ne sformułowanie metody punktu odniesienia jako problemu maksymalizacji,<br>λep |
|
||||
| | przyjmie wartość dodatnią, a<br>ujemną.<br>λr |
|
||||
| β | Współczynnik pomniejszający wartość ocen wykraczających powyżej poziomu aspi |
|
||||
| | racji |
|
||||
| ε | Współczynnik składnika regularyzacyjnego |
|
||||
| Zmienne | Opis |
|
||||
| ocep, ocr | Wartości indywidualnych funkcji osiągnięć dla zysku i ryzyka |
|
||||
| v | Zmienna pomocnicza metody punktu odniesienia |
|
||||
|
||||
Ograniczenia zmiennej *v* przez wartości indywidualnych funkcji osiągnięć:
|
||||
|
||||
*v* 6 *ocep* oraz *v* 6 *oc<sup>r</sup>*
|
||||
|
||||
Ograniczenia indywidualnych funkcji osiągnięć:
|
||||
|
||||
$$oc\_r \leqslant \lambda\_r (r - asp\_r)$$
|
||||
|
||||
$$oc\_r \leqslant \beta \lambda\_r (r - asp\_r)$$
|
||||
|
||||
$$oc\_{ep} \leqslant \lambda\_p (ep - asp\_{ep})$$
|
||||
|
||||
$$oc\_{ep} \leqslant \beta \lambda\_p (ep - asp\_{ep})$$
|
||||
|
||||
Funkcja celu metody punktu odniesienia w postaci dla programowania liniowego:
|
||||
|
||||
$$\max \quad v + \varepsilon (oc\_{ep} + oc\_r)$$
|
||||
|
||||
## **4 Wyznaczenie parametrów zadania z rozkładu t-Studenta**
|
||||
|
||||
W celu wyznaczenia wartości oczekiwanej wektora *R* (odpowiadającą parametrowi modelu *eppup*) wykorzystano następującą zależność:
|
||||
|
||||
$$E(R) = \mu + \sigma \cdot \frac{\Gamma(\frac{\nu - 1}{2})((\nu + a^2)^{-\frac{\nu - 1}{2}} - (\nu + b^2)^{\frac{\nu - 1}{2}})\nu^{\frac{\nu}{2}}}{2(F\_{\nu}(b) - F\_{\nu}(a))\Gamma(\frac{\nu}{2})\Gamma(\frac{1}{2})}$$
|
||||
|
||||
gdzie:
|
||||
|
||||
|
||||
- *µ* wartość oczekiwana dla *R*,
|
||||
- Γ funkcja gamma Eulera,
|
||||
- *ν* liczba stopni swobody,
|
||||
- *F* dystrybuanta standardowego rozkładu t-Studenta *t*(0*,* 1; *ν*) z *ν* stopniami swobody,
|
||||
- *a* = *α−µ σ* , gdzie *α* to lewy kraniec przedziału,
|
||||
- *b* = *β−µ σ* , gdzie *β*to prawy kraniec przedziału.
|
||||
|
||||
Otrzymano wartości:
|
||||
|
||||
*E*(*R*) *<sup>T</sup>* = [8*.*5094*,* 8*.*4710*,* 8*.*1319*,* 6*.*3944]
|
||||
|
||||
Do obliczenia wartości oczekiwanej oraz wyznaczenia scenariuszy wykorzystano skrypt napisany w języku *R*. Wygenerowano 1000 scenariuszy testowtych. Użyty skrypt przedstawia Listing 1.
|
||||
|
||||
Listing 1: Skrypt w języku *R* do obliczania wartości oczekiwanej wektora *R* i generowania scenariuszy z rozkładu t-Studenta.
|
||||
|
||||
```
|
||||
1 library ( tmvtnorm )
|
||||
2
|
||||
3 # t- Stutdet parameters
|
||||
4 Mu = c(9 , 8 , 7 , 6)
|
||||
5 Sigma = matrix (c(16 , -2 , -1 , -3 ,
|
||||
6 -2 , 9 , -4 , -1 ,
|
||||
7 -1 , -4 , 4 , 1 ,
|
||||
8 -3 , -1 , 1 , 1) ,
|
||||
9 nrow =4 , ncol =4)
|
||||
10 lower _ bound = 5
|
||||
11 upper _ bound = 12
|
||||
12
|
||||
13 # Generate scenarios
|
||||
14 data <- rtmvt ( n =10000 , mean = mu , sigma = sigma , df =5 , lower =rep ( lower _←-
|
||||
bound , 4) , upper =rep ( upper _bound , 4) )
|
||||
15 write . table ( format (data , digits =15 , drop0trailing = F ) , " data10000 .txt"←-
|
||||
, quote =F , sep ="\t", eol ="\n\t", col . names = F , row . names = T )
|
||||
16 mean <- colMeans ( data )
|
||||
17
|
||||
18 E <- function ( idx , Mu , Sigma , v , alfa , beta ) {
|
||||
19 mu = Mu [ idx ]
|
||||
20 sigma = Sigma [ idx , idx ]
|
||||
21 a = ( alfa - mu )/ sigma
|
||||
22 b = ( beta - mu )/ sigma
|
||||
23 nom = gamma (( v -1)/2) *
|
||||
24 (( v + a ^2) ^( -1*(v -1) /2) -
|
||||
25 ( v + b ^2) ^( -1*(v -1)/2) ) *
|
||||
26 v ^( v/2)
|
||||
27 den = 2 * (pt(b , v ) - pt(a , v ) ) * gamma ( v/2) * gamma (1/2)
|
||||
28 return ( mu + sigma *( nom /den ) )
|
||||
29 }
|
||||
30
|
||||
31 ER1 <- E (1 , Mu , Sigma , 5 , 5 , 12)
|
||||
32 ER2 <- E (2 , Mu , Sigma , 5 , 5 , 12)
|
||||
33 ER3 <- E (3 , Mu , Sigma , 5 , 5 , 12)
|
||||
34 ER4 <- E (4 , Mu , Sigma , 5 , 5 , 12)
|
||||
```
|
||||
|
||||
|
||||
```
|
||||
45
|
||||
46 # Aktualny stan magazynowy [szt]
|
||||
47 param startingStorage { PRODUCTS } >= 0;
|
||||
48
|
||||
49 # Pozadany stan magazynowy na koniec symulacji [szt]
|
||||
50 param desiredEndStorage { PRODUCTS } >= 0;
|
||||
51
|
||||
52 # Liczba dni roboczych w miesiacu [d]
|
||||
53 param daysPerMonth >= 1;
|
||||
54
|
||||
55 # Liczba zmian w ciagu jednego dnia roboczego
|
||||
56 param shiftsPerDay >= 1;
|
||||
57
|
||||
58 # Dlugosc zmiany [ godz ]
|
||||
59 param hoursPerShift >= 1;
|
||||
60
|
||||
61 # Liczba roboczogodzin w miesiacu [ godz ]
|
||||
62 param workHoursPerMonth = daysPerMonth * shiftsPerDay * hoursPerShift ;
|
||||
63
|
||||
64 # Czas pracy narzedzi w danym miesiacu
|
||||
65 param availableToolTime { t in TOOLS } = toolCount [ t ]* workHoursPerMonth←-
|
||||
;
|
||||
66
|
||||
67 # ##########
|
||||
68 # Zmienne #
|
||||
69 # ##########
|
||||
70 # Produkcja produktow
|
||||
71 var produced { MONTHS , PRODUCTS } >= 0 integer ;
|
||||
72
|
||||
73 # Sprzedaz produktow w danym miesiacu
|
||||
74 var sold { MONTHS , PRODUCTS } >= 0 integer ;
|
||||
75 var totalSold { p in PRODUCTS } = sum { m in MONTHS } sold [m , p ];
|
||||
76
|
||||
77 # Ilosc produktow przekazanych do magazynu w danym miesiacu
|
||||
78 var stored { m in MONTHS , p in PRODUCTS } = produced [m , p ] - sold [m , p←-
|
||||
];
|
||||
79
|
||||
80 # Stan magazynowy na koniec danego miesiaca
|
||||
81 var storage { m in MONTHS , p in PRODUCTS } =
|
||||
82 startingStorage [ p ] + sum { m2 in MONTHS : ord( m2 ) <= ord( m ) } ←-
|
||||
stored [ m2 , p ];
|
||||
83
|
||||
84 # Wykorzystany czas pracy
|
||||
85 var usedToolTime { m in MONTHS , t in TOOLS } =
|
||||
86 sum { p in PRODUCTS } produced [m , p ]* toolTimePerUnit [t , p ];
|
||||
87
|
||||
88 # Koszt magazynowania
|
||||
89 var monthlyStorageCost { m in MONTHS } =
|
||||
90 (sum { p in PRODUCTS } storage [m , p ]) * storageUnitCost ;
|
||||
91 var totalStorageCost = sum { m in MONTHS } monthlyStorageCost [ m ];
|
||||
92
|
||||
93 # Zysk dla wartosci oczekiwanej
|
||||
94 var expectedSalesProfit =
|
||||
95 sum { p in PRODUCTS } totalSold [ p ]* expectedProfitPerUnit [ p ];
|
||||
96 var expectedNetProfit =
|
||||
97 expectedSalesProfit - totalStorageCost ;
|
||||
```
|
||||
|
||||
|
||||
```
|
||||
98
|
||||
99 # Zysk w danym scenariuszu
|
||||
100 var scenarioSalesProfit { s in SCENARIOS } =
|
||||
101 sum { p in PRODUCTS } totalSold [ p ]* scenarioProfitPerUnit [s , p ];
|
||||
102 var scenarioNetProfit { s in SCENARIOS } =
|
||||
103 scenarioSalesProfit [ s ] - totalStorageCost ;
|
||||
104
|
||||
105 # Odchylenie jako miara ryzyka - zlinearyzowana wartosc bezwzgledna
|
||||
106 var deviation { s in SCENARIOS } =
|
||||
107 expectedNetProfit - scenarioNetProfit [ s ];
|
||||
108 var P { SCENARIOS } >= 0;
|
||||
109 var Q { SCENARIOS } >= 0;
|
||||
110 subject to deviationLimit { s1 in SCENARIOS , s2 in SCENARIOS }:
|
||||
111 deviation [ s1 ] - deviation [ s2 ]+ P [ s1 ] - Q [ s2 ] = 0;
|
||||
112
|
||||
113 #var maxDeviation = max {s in SCENARIOS } deviation [s];
|
||||
114 var maxDeviation ;
|
||||
115 # Linearyzacja maksymalnego odchylenia jako miary ryzyka
|
||||
116 param M = 10000;
|
||||
117 var Z { SCENARIOS } binary ;
|
||||
118 subject to mdLimit { s in SCENARIOS }:
|
||||
119 maxDeviation >= deviation [ s ];
|
||||
120 subject to mdWhere { s in SCENARIOS }:
|
||||
121 maxDeviation <= deviation [ s ] + M *(1 - Z [ s ]) ;
|
||||
122 subject to mdOS :
|
||||
123 sum { s in SCENARIOS } Z [ s ] = 1;
|
||||
124
|
||||
125 # Aliasy dla ocenianych wartosci
|
||||
126 var profit = expectedNetProfit ;
|
||||
127 var risk = maxDeviation ;
|
||||
128
|
||||
129 # ######################
|
||||
130 # Ograniczenia modelu #
|
||||
131 # ######################
|
||||
132
|
||||
133 # Ograniczenie rynkowe sprzedazy produktow
|
||||
134 subject to SalesMarketLimit { m in MONTHS , p in PRODUCTS }:
|
||||
135 sold [m , p ] <= salesMarketLimit [m , p ];
|
||||
136 # Ograniczenie magazynowe sprzedazy produktow
|
||||
137 subject to SalesLimit1 { p in PRODUCTS }:
|
||||
138 sold [ first ( MONTHS ) , p ] <= produced [ first ( MONTHS ) , p ];
|
||||
139 subject to SalesLimit2 { m in MONTHS , p in PRODUCTS : m != first ( MONTHS←-
|
||||
) }:
|
||||
140 sold [m , p ] <= produced [m , p ] + storage [m , p ];
|
||||
141 # Powiazanie sprzedazy produktu P4 ze sprzedaza produktow P1 i P2
|
||||
142 subject to P4SalesConstraint { m in MONTHS }:
|
||||
143 sold [m , "P4"] >= sold [m , "P1"] + sold [m , "P2"];
|
||||
144 # Ograniczenie pojemnosci magazynowej
|
||||
145 subject to StorageLimit { m in MONTHS , p in PRODUCTS }:
|
||||
146 storage [m , p ] <= storageLimit [ p ];
|
||||
147 # Ograniczenie na pozadany stan magazynowy na koniec marca
|
||||
148 subject to DesiredStorage { p in PRODUCTS }:
|
||||
149 storage [ last ( MONTHS ) , p ] >= desiredEndStorage [ p ];
|
||||
150 # Ograniczenie czasu pracy narzedzi w miesiacu
|
||||
151 subject to ToolWorkTime { m in MONTHS , t in TOOLS }:
|
||||
152 usedToolTime [m , t ] <= availableToolTime [ t ];
|
||||
```
|
||||
|
||||
|
||||
```
|
||||
153
|
||||
154 # ############################
|
||||
155 # Metoda punktu odniesienia #
|
||||
156 # ############################
|
||||
157 # Skladniki wektora oceny
|
||||
158 set RATED = {" PROFIT ", " RISK "};
|
||||
159 # Wektor oceny
|
||||
160 var value { r in RATED } =
|
||||
161 if r == " PROFIT " then profit
|
||||
162 else if r == " RISK " then risk ;
|
||||
163 # Wektor aspiracji
|
||||
164 param aspiration { RATED };
|
||||
165 # Wartosci utopii i nadiru
|
||||
166 param utopia { RATED };
|
||||
167 param nadir { RATED };
|
||||
168 # Wspolczynniki normalizujace
|
||||
169 param lambda { r in RATED } =
|
||||
170 1 / ( utopia [r] - nadir [r]);
|
||||
171 # Wspolczynnik skladnika regularyzacyjnego
|
||||
172 param epsilon ;
|
||||
173 # Wspolczynnik pomniejszenia wartosci ocen ponad poziomem aspiracji
|
||||
174 param beta ;
|
||||
175 # Indywidualne funkcje osiagniec
|
||||
176 var individualRating { RATED };
|
||||
177 # Zmienna pomocnicza metody punktu odniesienia
|
||||
178 var v;
|
||||
179 # Skalaryzujaca funkcja osiagniecia
|
||||
180 var rating = v + epsilon * (sum {r in RATED } individualRating [r]);
|
||||
181 # Odleglosc od punktu odniesienia
|
||||
182 var distance {r in RATED } = value [r] - aspiration [r];
|
||||
183 # Znormalizowana odleglosc od punktu odniesienia
|
||||
184 var normalizedDistance {r in RATED } = lambda [r]* distance [r];
|
||||
185 # Ograniczenia zmiennej v przez indywidualne funkcje osiagniec
|
||||
186 subject to VSubject {r in RATED }:
|
||||
187 v <= individualRating [r];
|
||||
188 # Ograniczenia indywidualnych funkcji osiagniec
|
||||
189 subject to IndividualRatingSubjectBeta {r in RATED }:
|
||||
190 individualRating [r] <= beta * normalizedDistance [r];
|
||||
191 subject to IndividualRatingSubject {r in RATED }:
|
||||
192 individualRating [r] <= normalizedDistance [r];
|
||||
193
|
||||
194 ################
|
||||
195 # Funkcje celu #
|
||||
196 ################
|
||||
197 minimize MinimizeProfit : profit ;
|
||||
198 maximize MaximizeProfit : profit ;
|
||||
199 minimize MinimizeRisk : risk ;
|
||||
200 maximize MaximizeRisk : risk ;
|
||||
201 maximize RPM: rating ;
|
||||
```
|
||||
**5.2 Plik z danymi (**.dat**)**
|
||||
|
||||
|
||||
```
|
||||
załączniku.
|
||||
1 # ##########################################################
|
||||
2 # WDWR 18042 #
|
||||
3 # Planowanie produkcj w warunkach ryzyka. #
|
||||
4 # DANE #
|
||||
5 # Autor : Jan Kumor #
|
||||
6 # ##########################################################
|
||||
7
|
||||
8 # Narzedzia
|
||||
9 set TOOLS := GRINDER VDRILL HDRILL MILLER LATHE ;
|
||||
10
|
||||
11 # Miesiace
|
||||
12 set MONTHS := JAN FEB MAR ;
|
||||
13
|
||||
14 # Liczba narzedzi
|
||||
15 param toolCount :=
|
||||
16 GRINDER 4
|
||||
17 VDRILL 2
|
||||
18 HDRILL 3
|
||||
19 MILLER 1
|
||||
20 LATHE 1
|
||||
21 ;
|
||||
22
|
||||
23 # Czasy produkcji h
|
||||
24 param toolTimePerUnit :
|
||||
25 P1 P2 P3←-
|
||||
P4 :=
|
||||
26 GRINDER 0 .4 0 .6 0 ←-
|
||||
0
|
||||
27 VDRILL 0 .2 0 .1 0 ←-
|
||||
0 .6
|
||||
28 HDRILL 0 .1 0 0 .7 ←-
|
||||
0
|
||||
29 MILLER 0 .06 0 .04 0 0 .05
|
||||
30 LATHE 0 0 .05 0 .02 0
|
||||
31 ;
|
||||
32
|
||||
33 # Ograniczenia rynkowe liczby sprzedawanych produktow pcs
|
||||
34 param salesMarketLimit :
|
||||
35 P1 P2 P3 ←-
|
||||
P4 :=
|
||||
36 JAN 200 0 100 ←-
|
||||
200
|
||||
37 FEB 300 100 200 ←-
|
||||
200
|
||||
38 MAR 0 300 100 ←-
|
||||
200
|
||||
39 ;
|
||||
40
|
||||
41 # Ograniczeine liczby magazynowanych produktow pcs
|
||||
42 param storageLimit :=
|
||||
43 P1 200
|
||||
44 P2 200
|
||||
45 P3 200
|
||||
46 P4 200
|
||||
```
|
||||
Listing 3: Dane dla modelu AMPL - pominięto scenariusze, pełny zestaw danych dostępny w
|
||||
|
||||
|
||||
```
|
||||
47 ;
|
||||
48
|
||||
49 # Koszt magazynowania produktow pln/pcs per month
|
||||
50 param storageUnitCost := 1;
|
||||
51
|
||||
52 # Aktualny stan magazynowy pcs
|
||||
53 param startingStorage :=
|
||||
54 P1 0
|
||||
55 P2 0
|
||||
56 P3 0
|
||||
57 P4 0
|
||||
58 ;
|
||||
59
|
||||
60 # Pozadany stan magazynowy na koniec marca pcs
|
||||
61 param desiredEndStorage :=
|
||||
62 P1 50
|
||||
63 P2 50
|
||||
64 P3 50
|
||||
65 P4 50
|
||||
66 ;
|
||||
67
|
||||
68 # Liczba dni roboczych w miesiacu d
|
||||
69 param daysPerMonth := 24;
|
||||
70
|
||||
71 # Liczba zmian w ciagu jednego dnia roboczego
|
||||
72 param shiftsPerDay := 2;
|
||||
73
|
||||
74 # Dlugosc zmiany h
|
||||
75 param hoursPerShift := 8;
|
||||
76
|
||||
77 # Zyski wartosc oczekiwana
|
||||
78 param expectedProfitPerUnit :=
|
||||
79 P1 8 .50944172786882
|
||||
80 P2 8 .47100593224391
|
||||
81 P3 8 .1319049712769
|
||||
82 P4 6 .39446520538826
|
||||
83 ;
|
||||
84
|
||||
85 # Metoda punktu odniesienia
|
||||
86 param epsilon = 0 .000025 ;
|
||||
87
|
||||
88 param beta = 0 .001 ;
|
||||
89
|
||||
90 param utopia :=
|
||||
91 PROFIT 11987
|
||||
92 RISK 1000
|
||||
93 ;
|
||||
94
|
||||
95 param nadir :=
|
||||
96 PROFIT -2400
|
||||
97 RISK 2815
|
||||
98 ;
|
||||
99
|
||||
100 param aspiration :=
|
||||
101 PROFIT 10000
|
||||
102 RISK 0
|
||||
```
|
||||
|
||||
|
||||
*smp* oraz wartość wyznaczonego rozwiązania optymalnego:
|
||||
|
||||
*ep* = 11987*.*42[*z*]
|
||||
|
||||
Listing 7: Wynik działania skryptu wyznaczającego rozwiązanie optymalne modelu jednokryterialnego.
|
||||
|
||||
| 1 | | | # ################################################ | | | | | | | | | | | | |
|
||||
|----|------------------------------------------------------------------------|------------------------------------|----------------------------------------------------|---------|--|---------|--|------------|--|--|-----------|--------------|--|--|--|
|
||||
| 2 | ###<br>Maximize<br>profit<br>for<br>expected<br>profit<br>value<br>### | | | | | | | | | | | | | | |
|
||||
| 3 | # ################################################ | | | | | | | | | | | | | | |
|
||||
| 4 | CPLEX | | 12 .8.0.0 : | optimal | | integer | | solution ; | | | objective | 11987 .41899 | | | |
|
||||
| 5 | | 11<br>MIP<br>simplex<br>iterations | | | | | | | | | | | | | |
|
||||
| 6 | | 0<br>branch -and - bound<br>nodes | | | | | | | | | | | | | |
|
||||
| 7 | | produced | := | | | | | | | | | | | | |
|
||||
| 8 | JAN | P1 | 200 | | | | | | | | | | | | |
|
||||
| 9 | JAN | P2 | 0 | | | | | | | | | | | | |
|
||||
| 10 | JAN | P3 | 100 | | | | | | | | | | | | |
|
||||
| 11 | JAN | P4 | 200 | | | | | | | | | | | | |
|
||||
| 12 | FEB | P1 | 200 | | | | | | | | | | | | |
|
||||
| 13 | FEB | P2 | 0 | | | | | | | | | | | | |
|
||||
| 14 | FEB | P3 | 200 | | | | | | | | | | | | |
|
||||
| 15 | FEB | P4 | 200 | | | | | | | | | | | | |
|
||||
| 16 | MAR | P1 | 50 | | | | | | | | | | | | |
|
||||
| 17 | MAR | P2 | 250 | | | | | | | | | | | | |
|
||||
| 18 | MAR | P3 | 150 | | | | | | | | | | | | |
|
||||
| 19 | MAR | P4 | 250 | | | | | | | | | | | | |
|
||||
| 20 | ; | | | | | | | | | | | | | | |
|
||||
| 21 | | | | | | | | | | | | | | | |
|
||||
| 22 | sold | := | | | | | | | | | | | | | |
|
||||
| 23 | JAN | P1 | 200 | | | | | | | | | | | | |
|
||||
| 24 | JAN | P2 | 0 | | | | | | | | | | | | |
|
||||
| 25 | JAN | P3 | 100 | | | | | | | | | | | | |
|
||||
| 26 | JAN | P4 | 200 | | | | | | | | | | | | |
|
||||
| 27 | FEB | P1 | 200 | | | | | | | | | | | | |
|
||||
| 28 | FEB | P2 | 0 | | | | | | | | | | | | |
|
||||
| 29 | FEB | P3 | 200 | | | | | | | | | | | | |
|
||||
| 30 | FEB | P4 | 200 | | | | | | | | | | | | |
|
||||
| 31 | MAR | P1 | 0 | | | | | | | | | | | | |
|
||||
| 32 | MAR | P2 | 200 | | | | | | | | | | | | |
|
||||
| 33 | MAR | P3 | 100 | | | | | | | | | | | | |
|
||||
| 34 | MAR | P4 | 200 | | | | | | | | | | | | |
|
||||
| 35 | ; | | | | | | | | | | | | | | |
|
||||
| 36 | | | | | | | | | | | | | | | |
|
||||
| 37 | stored | := | | | | | | | | | | | | | |
|
||||
| 38 | JAN | P1 | 0 | | | | | | | | | | | | |
|
||||
| 39 | JAN | P2 | 0 | | | | | | | | | | | | |
|
||||
| 40 | JAN | P3 | 0 | | | | | | | | | | | | |
|
||||
| 41 | JAN | P4 | 0 | | | | | | | | | | | | |
|
||||
| 42 | FEB | P1 | 0 | | | | | | | | | | | | |
|
||||
| 43 | FEB | P2 | 0 | | | | | | | | | | | | |
|
||||
| 44 | FEB | P3 | 0 | | | | | | | | | | | | |
|
||||
| 45 | FEB | P4 | 0 | | | | | | | | | | | | |
|
||||
| 46 | MAR | P1 | 50 | | | | | | | | | | | | |
|
||||
| 47 | MAR | P2 | 50 | | | | | | | | | | | | |
|
||||
| 48 | MAR | P3 | 50 | | | | | | | | | | | | |
|
||||
| 49 | MAR | P4 | 50 | | | | | | | | | | | | |
|
||||
|
||||
|
||||
52 Profit: 11987.418989
|
||||
|
||||
|
||||

|
||||
|
||||
<span id="page-0-1"></span>Rysunek 1: Obraz zbioru rozwiązań efektywnych w przestrzeni ryzyko-zysk
|
||||
|
||||
## **6.2 Wyniki dla modelu dwukryterialnego**
|
||||
|
||||
## **6.2.1 Obraz zbioru rozwiązań efektywnych w przestrzeni ryzyko-zysk**
|
||||
|
||||
Obraz zbioru rozwiązań efektywnch w przestrzeni ryzyko-zysk został uzyskany poprzez rozwiązanie zadania metody punktu odniesienia dla różnych wartości aspiracji dla zysku oraz ryzyka. Do wykonania obliczeń posłużono się skryptem przedstawionym na [Listing 7.](#page--1-0) Obliczenia przeprowadzono ustalając poziomy aspiracji w wyznaczonych granicach zmienności zysku i ryzyka (wektory nadiru i utopii wyznaczone w kolejnej sekcji). Dla każdego poziomu aspiracji wykorzystano po 10 równoodległych wartości znajdujących się w przedziałach definiowanych przez wektory nadiru i utopii.
|
||||
|
||||
Ze względu na duży rozmiar zadania, a przez długi czas obliczeń przy 1000 scenariuszach, zdecydowano się ograniczyć ich liczbę do 50. Niestety nie jest to liczba wystarczająca do przeprowadzenia dokładnych obliczeń, jednak uzyskane wyniki powinny być wystarczające do przedstawienia działania metody.
|
||||
|
||||
Fragment wyników działania skryptu obliczeniowego przedstawia [Listing 8.](#page-0-0) Obraz zbioru rozwiązań efektywnych w przestrzeni ryzyko-zysk pokazuje [Rysunek 1.](#page-0-1)
|
||||
|
||||
<span id="page-0-0"></span>Listing 8: Skrypt obliczający wartości do wyznaczenia obrazu zbioru rozwiązań efektywnych w przestrzeni ryzyko-zysk. Pełne wyniki dostępne w załączniku.
|
||||
|
||||
```
|
||||
1 ### 39: Solving model for aspirations : 2395 .666667 , 312 .777778
|
||||
2 CPLEX 12 .8.0.0 : optimal integer solution within mipgap or absmipgap ; ←-
|
||||
objective 5 .427722957e -07
|
||||
3 39 MIP simplex iterations
|
||||
4 0 branch -and - bound nodes
|
||||
5 absmipgap = 7 .81092e -07 , relmipgap = 1 .43881
|
||||
```
|
||||
|
||||
|
||||
```
|
||||
6 Profit : 2417 .827519
|
||||
7 Risk : 311 .250020
|
||||
8 RPM : 0 .000001
|
||||
9 ### 40: Solving model for aspirations : 2395 .666667 , 0 .000000
|
||||
10 CPLEX 12 .8.0.0 :
|
||||
11 < BREAK > ( cplex )
|
||||
12 CPLEX solution status 13 with fixed integers :
|
||||
13 aborted in phase II
|
||||
14 aborted , integer solution exists ; objective -0 .06697476417
|
||||
15 116486 MIP simplex iterations
|
||||
16 103313 branch -and - bound nodes
|
||||
17 absmipgap = 6 .93933e -05 , relmipgap = 0 .00103611
|
||||
18 Profit : 1432 .148909
|
||||
19 Risk : 188 .510726
|
||||
20 RPM : -0 .066975
|
||||
```
|
||||
Rozwiązania efektywne minimalnego ryzyka i maksymalnego zysku
|
||||
|
||||
Rozwiązania efektywne dla minimalnego ryzyka i maksymalnego zysku wyznaczono wykorzystując skrypt przedstawiony na listingu [Listing 4.](#page--1-0) Na podstwaie wyników jego działania, które przedstawia [Listing 9](#page-0-0) można podać następujące rozwiązania:
|
||||
|
||||
- Minimalne ryzyko: *ep* = *−*1000, przy *r* = 0,
|
||||
- Maksymalny zysk: *ep* = 11987, przy *r* = 2569
|
||||
|
||||
Dodatkowo poza zakresem zadania wyznaczonon pozostałe elementy potrzebne do wyznaczenia wektorów nadiru i utopii:
|
||||
|
||||
- Maksymalne ryzyko: *ep* = 9193, przy *r* = 2815,
|
||||
- Minimalny zysk: *ep* = *−*2400*.*00, przy *r* = 0*.*00
|
||||
|
||||
```
|
||||
Wektor nadiru: (−2400, 2815)
|
||||
```
|
||||
Wektor utopii: (0*,* 11987)
|
||||
|
||||
Listing 9: Skrypt wyznaczający rozwiązania optymalne modelu dwukryterialnego.
|
||||
|
||||
```
|
||||
1 # ########################
|
||||
2 ### Minimizing profit ###
|
||||
3 # ########################
|
||||
4 CPLEX 12 .8.0.0 : optimal integer solution ; objective -2400
|
||||
5 7 MIP simplex iterations
|
||||
6 0 branch -and - bound nodes
|
||||
7 Profit : -2400
|
||||
8 Risk : 0
|
||||
9
|
||||
10 # ########################
|
||||
11 ### Maximizing profit ###
|
||||
12 # ########################
|
||||
13 CPLEX 12 .8.0.0 : optimal integer solution ; objective 11987 .41899
|
||||
14 32 MIP simplex iterations
|
||||
15 0 branch -and - bound nodes
|
||||
16 Profit : 11987
|
||||
17 Risk : 2569
|
||||
18
|
||||
```
|
||||
|
||||
|
||||
```
|
||||
19 # ######################
|
||||
20 ### Minimizing risk ###
|
||||
21 # ######################
|
||||
22 CPLEX 12 .8.0.0 : optimal integer solution ; objective 0
|
||||
23 0 MIP simplex iterations
|
||||
24 0 branch -and - bound nodes
|
||||
25 Profit : -1000
|
||||
26 Risk : 0
|
||||
27
|
||||
28 # #######################
|
||||
29 ### Maximizing risk k###
|
||||
30 # #######################
|
||||
31 CPLEX 12 .8.0.0 : optimal integer solution ; objective 2815 .995263
|
||||
32 21837 MIP simplex iterations
|
||||
33 705 branch -and - bound nodes
|
||||
34 Profit : 9193
|
||||
35 Risk : 2815
|
||||
```
|
||||
## **6.2.2 Analiza relacji dominacji stochastycznej dla trzech wybranych rozwiązań efektywnych**
|
||||
|
||||
Do analizy wybrano następujące scenariusze:
|
||||
|
||||
- 1. Maksymalny zysk *ep* = 11987*.*42,
|
||||
- 2. Poziomy aspiracji *aspep* = 8789*.*89 oraz *asp<sup>r</sup>* = 1876*.*67,
|
||||
- 3. Poziomy aspiracji *aspep* = 10388*.*44 oraz *asp<sup>r</sup>* = 938*.*33.
|
||||
|
||||
Dane do analizy zostały wygenerowane w trakcie przeprowadzania obliczeń do poprzednich podpunktów i są dostępne w załącznikach.
|
||||
|
||||
Dystrybuanty zysku przedstawia [Rysunek 2.](#page--1-0)
|
||||
|
||||
Na podstawie wykresów możemy stwierdzić, że rozwiązanie dla scenariusza z maksymalnym zyskiem dominuje w sensie FSD pozostałe rozwiązania. Dodatkowo widzimy, że rozwiązanie ze scenariusza 3 dominuje w sensie FSD rozwiązanie scenariusza 2.
|
||||
|
||||
|
||||

|
||||
|
||||
Rysunek 2: Wykres dystrybuant zysku dla poszczególnych rozwiązań
|
||||
|
||||
|
||||
Binary file not shown.
@ -1,921 +0,0 @@
|
||||
\documentclass[12pt]{article}
|
||||
\usepackage[utf8]{inputenc}
|
||||
\usepackage[polish]{babel}
|
||||
\usepackage{amsmath,amssymb}
|
||||
\usepackage{graphicx}
|
||||
\usepackage{booktabs}
|
||||
\usepackage{hyperref}
|
||||
\usepackage{longtable}
|
||||
\usepackage{enumitem}
|
||||
|
||||
\title{WDWR, sprawozdanie}
|
||||
\author{Krzysztof Rudnicki, 307585}
|
||||
\date{\today}
|
||||
|
||||
\begin{document}
|
||||
|
||||
\maketitle
|
||||
|
||||
\section*{Spis treści}
|
||||
\begin{longtable}{|c|l|c|}
|
||||
\hline
|
||||
1 & Treść zadania & 2 \\
|
||||
\hline
|
||||
2 & Jednokryterialny model wyboru w warunkach ryzyka z wartością oczekiwaną jako miarą & 3 \\
|
||||
& zysku & \\
|
||||
& 2.1 Zbiory indeksowe & 3 \\
|
||||
& 2.2 Parametry & 3 \\
|
||||
& 2.3 Zmienne & 4 \\
|
||||
& 2.4 Ograniczenia & 4 \\
|
||||
& 2.5 Funkcja celu & 4 \\
|
||||
\hline
|
||||
3 & Dwukryterialny model zysku i ryzyka z wartoscią oczekiwaną jako miarą zysku i od & 5 \\
|
||||
& chyleniem maksymalnym jako miarą ryzyka & \\
|
||||
& 3.1 Zbiory indeksowe & 5 \\
|
||||
& 3.2 Parametry & 5 \\
|
||||
& 3.3 Zmienne & 5 \\
|
||||
& 3.4 Ograniczenia & 5 \\
|
||||
& 3.5 Metoda punktu odniesienia & 6 \\
|
||||
\hline
|
||||
4 & Wyznaczenie parametrów zadania z rozkładu t-Studenta & 6 \\
|
||||
\hline
|
||||
5 & Model dla programu AMPL & 8 \\
|
||||
& 5.1 Plik z modelem (.mod) & 8 \\
|
||||
& 5.2 Plik z danymi (.dat) & 11 \\
|
||||
& 5.3 Skrypty uruchomieniowe (.run) & 14 \\
|
||||
\hline
|
||||
6 & Rozwiązanie zadania optymalizacji & 16 \\
|
||||
& 6.1 Wyniki dla modelu jednokryterialnego & 16 \\
|
||||
& 6.2 Wyniki dla modelu dwukryterialnego & 19 \\
|
||||
& 6.2.1 Obraz zbioru rozwiązań efektywnych w przestrzeni ryzyko-zysk & 19 \\
|
||||
& 6.2.2 Analiza relacji dominacji stochastycznej dla trzech wybranych rozwiązań efek & 21 \\
|
||||
& tywnych & \\
|
||||
\hline
|
||||
\end{longtable}
|
||||
|
||||
\section*{WDWR 18402}
|
||||
|
||||
Rozważamy następujące zagadnienie planowania produkcji:
|
||||
|
||||
\begin{itemize}
|
||||
\item Przedsiębiorstwo wytwarza 4 produkty P1, \ldots, P4 na następujących maszynach: 4 szlifierkach, 2 wiertarkach pionowych, 3 wiertarkach poziomych, 1 frezarce i 1 tokarce. Wymagane czasy produkcji 1 sztuki produktu (w godzinach) w danym procesie obróbki zostały przedstawione w poniższej tabeli:
|
||||
\end{itemize}
|
||||
|
||||
\begin{table}[h!]
|
||||
\centering
|
||||
\begin{tabular}{|l|c|c|c|c|}
|
||||
\hline
|
||||
& P1 & P2 & P3 & P4 \\
|
||||
\hline
|
||||
Szlifowanie & 0,4 & 0,6 & — & — \\
|
||||
\hline
|
||||
Wiercenie pionowe & 0,2 & 0,1 & — & 0,6 \\
|
||||
\hline
|
||||
Wiercenie poziome & 0,1 & — & 0,7 & — \\
|
||||
\hline
|
||||
Frezowanie & 0,06 & 0,04 & — & 0,05 \\
|
||||
\hline
|
||||
Toczenie & — & 0,05 & 0,02 & — \\
|
||||
\hline
|
||||
\end{tabular}
|
||||
\end{table}
|
||||
|
||||
\begin{itemize}
|
||||
\item Dochody ze sprzedaży produktów (w zł/sztukę) określają składowe wektora losowego \textbf{R} = ($R_1, \ldots, R_4$)$^T$. Wektor losowy \textbf{R} opisuje 4-wymiarowy rozkład $t$-Studenta z 5 stopniami swobody, którego wartości składowych zostały zawężone do przedziału [5; 12]. Parametry $\mu$ oraz $\mathbf{\Sigma}$ niezawężonego rozkładu $t$-Studenta są następujące:
|
||||
|
||||
$$
|
||||
\mu = \begin{pmatrix} 9 \\ 8 \\ 7 \\ 6 \end{pmatrix}, \qquad \Sigma = \begin{pmatrix} 16 & -2 & -1 & -3 \\ -2 & 9 & -4 & -1 \\ -1 & -4 & 4 & 1 \\ -3 & -1 & 1 & 1 \end{pmatrix}.
|
||||
$$
|
||||
\end{itemize}
|
||||
|
||||
\begin{itemize}
|
||||
\item Istnieją ograniczenia rynkowe na liczbę sprzedawanych produktów w danym miesiącu:
|
||||
\end{itemize}
|
||||
|
||||
\begin{table}[h!]
|
||||
\centering
|
||||
\begin{tabular}{|l|c|c|c|c|}
|
||||
\hline
|
||||
& P1 & P2 & P3 & P4 \\
|
||||
\hline
|
||||
Styczeń & 200 & 0 & 100 & 200 \\
|
||||
\hline
|
||||
Luty & 300 & 100 & 200 & 200 \\
|
||||
\hline
|
||||
Marzec & 0 & 300 & 100 & 200 \\
|
||||
\hline
|
||||
\end{tabular}
|
||||
\end{table}
|
||||
|
||||
\begin{itemize}
|
||||
\item Jeżeli w danym miesiącu jest sprzedawany produkt P1 lub P2, to musi być również sprzedawany produkt P4 w ilości nie mniejszej niż suma sprzedawanych produktów P1 i P2.
|
||||
\item Istnieje możliwość składowania do 200 sztuk każdego produktu w danym czasie w cenie 1 zł/sztukę za miesiąc. Aktualnie firma nie posiada żadnych zapasów, ale jest pożądane mieć po 50 sztuk każdego produktu pod koniec marca.
|
||||
\item Przedsiębiorstwo pracuje 6 dni w tygodniu w systemie dwóch zmian. Każda zmiana trwa 8 godzin. Można założyć, że każdy miesiąc składa się z 24 dni roboczych.
|
||||
\item 1. Zaproponować jednokryterialny model wyboru w warunkach ryzyka z wartością oczekiwaną jako miarą zysku. Wyznaczyć rozwiązanie optymalne.
|
||||
\item 2. Jako rozszerzenie powyższego zaproponować dwukryterialny model zysku i ryzyka z wartością oczekiwaną jako miarą zysku i odchyleniem maksymalnym jako miarą ryzyka. Dla decyzji $\mathbf{x} \in Q$ odchylenie maksymalne jest definiowane jako $D(\mathbf{x}) = \max_{t=1,...,T} |\mu(\mathbf{x}) - r_t(\mathbf{x})|$, gdzie $\mu(\mathbf{x})$ oznacza wartość oczekiwaną, $r_t(\mathbf{x})$ realizację dla scenariusza $t$.
|
||||
\begin{itemize}
|
||||
\item a. Wyznaczyć obraz zbioru rozwiązań efektywnych w przestrzeni ryzyko–zysk.
|
||||
\item b. Wskazać rozwiązania efektywne minimalnego ryzyka i maksymalnego zysku. Jakie odpowiadają im wartości w przestrzeni ryzyko–zysk?
|
||||
\item c. Wybrać trzy dowolne rozwiązania efektywne. Sprawdzić czy zachodzi pomiędzy nimi relacja dominacji stochastycznej pierwszego rzędu. Wyniki skomentować, odnieść do ogólnego przypadku.
|
||||
\end{itemize}
|
||||
\end{itemize}
|
||||
|
||||
\section{Jednokryterialny model wyboru w warunkach ryzyka z wartością oczekiwaną jako miarą zysku}
|
||||
|
||||
W celu rozwiązania postawionego zadania dokonano sformułowania modelu programowania liniowego całkowitoliczbowego. Poniżej przedstawiono zapis matematyczny modelu.
|
||||
|
||||
\subsection{Zbiory indeksowe}
|
||||
|
||||
\begin{table}[h!]
|
||||
\centering
|
||||
\begin{tabular}{|l|l|}
|
||||
\hline
|
||||
Zbiór & Opis \\
|
||||
\hline
|
||||
P = P1, \ldots, P4 & Zbiór wytwarzanych produktów \\
|
||||
\hline
|
||||
T = T1, \ldots, T5 & Zbiór typów narzędzi wykorzystywanych przy produkcji \\
|
||||
\hline
|
||||
M = M1, M2, M3 & Zbiór kolejnych miesięcy produkcji \\
|
||||
\hline
|
||||
\end{tabular}
|
||||
\end{table}
|
||||
|
||||
\subsection{Parametry}
|
||||
|
||||
\begin{table}[h!]
|
||||
\centering
|
||||
\begin{tabular}{|l|p{10cm}|}
|
||||
\hline
|
||||
Parametr & Opis \\
|
||||
\hline
|
||||
$tc_t$ & Liczba narzędzi typu t [szt] \\
|
||||
\hline
|
||||
$eppu_p$ & Oczekiwany zysk ze sprzedaży jednej sztuki produktu $p$ [zł] \\
|
||||
\hline
|
||||
$ttpu_{tp}$ & Czas wykorzystania maszyny typu $t$ przy produkcji jednej sztuki produktu $p$ [godz] \\
|
||||
\hline
|
||||
$smlm_p$ & Limit sprzedaży produktu $p$ w miesiącu $m$ [szt] \\
|
||||
\hline
|
||||
$stl_p$ & Limit pojemności magazynu na produkt $p$ [szt] \\
|
||||
\hline
|
||||
$stcp_u$ & Koszt magazynowania jednej sztuki dowolnego produktu [zł] \\
|
||||
\hline
|
||||
$st0_p$ & Początkowy stan magazynowy produktu $p$ [szt] \\
|
||||
\hline
|
||||
$dst_p$ & Porządany końcowy stan magazynowy produktu $p$ [szt] \\
|
||||
\hline
|
||||
$dp_m$ & Liczba dni roboczych w każdym miesiącu [d] \\
|
||||
\hline
|
||||
$sp_d$ & Liczba zmian w każdym dniu roboczym [j] \\
|
||||
\hline
|
||||
$whp_s$ & Liczba godzin roboczych w ciągu każdej zmiany [godz] \\
|
||||
\hline
|
||||
$whp_m = dp_m \cdot sp_d \cdot hp_s$ & Liczba godzin roboczych w ciągu każdego miesiąca [godz] \\
|
||||
\hline
|
||||
$att_t = tc_t \cdot whp_m$ & Dostępna liczba godzin roboczych maszyn typu $t$ w ciągu każdego miesiąca [godz] \\
|
||||
\hline
|
||||
\end{tabular}
|
||||
\end{table}
|
||||
|
||||
\subsection{Zmienne}
|
||||
|
||||
\begin{table}[h!]
|
||||
\centering
|
||||
\begin{tabular}{|l|p{10cm}|}
|
||||
\hline
|
||||
Zmienna & Opis \\
|
||||
\hline
|
||||
$p_{mp}$ & Liczba sztuk produktu $p$ wyprodukowanych w miesiącu $m$ [szt] \\
|
||||
\hline
|
||||
$s_{mp}$ & Liczba sztuk produktu $p$ sprzedanych w miesiącu $m$ [szt] \\
|
||||
\hline
|
||||
$ts_p = \sum_{m \in M} s_{mp}$ & Całkowita liczba sprzedanych sztuk produktu $p$ \\
|
||||
\hline
|
||||
$std_{mp} = p_{mp} - s_{mp}$ & Liczba sztuk produktu $p$ zmagazynowanych w miesiącu $m$ [szt] \\
|
||||
\hline
|
||||
$stg_{mp} = st0_p + \sum_{m2=1}^{m} std_{m2p}$ & Stan magazynowy produktu $p$ na koniec miesiąca $m$ [szt] \\
|
||||
\hline
|
||||
$uttm_t = \sum_{p \in P} p_{mp} \cdot ttpu_{tp}$ & Wykorzystanie czasu pracy maszyny typu $t$ w miesiącu $m$ [godz] \\
|
||||
\hline
|
||||
$tstc = stcp_u \cdot \sum_{m \in M} \sum_{p \in P} stg_{mp}$ & Całkowity koszt wykorzystania magazynów [zł] \\
|
||||
\hline
|
||||
$ep = \sum_{p \in P} (ts_p \cdot eppu_p) - tstc$ & Wartość zysku całkowitego dla wartości oczekiwanych zysku ze sprzedaży produktów [zł] \\
|
||||
\hline
|
||||
\end{tabular}
|
||||
\end{table}
|
||||
|
||||
\subsection{Ograniczenia}
|
||||
|
||||
Ograniczenie rynkowe sprzedawanych produktów:
|
||||
|
||||
$s_{mp} \leq smlm_p, \quad \forall m \in M, \forall p \in P$
|
||||
|
||||
Ograniczenie sprzedaży produktów w pierszym miesiącu:
|
||||
|
||||
$$s_{1p} \leqslant p_{1p}, \quad \forall p \in P$$
|
||||
|
||||
Ograniczenie sprzedaży produktów w kolejnych miesiącach:
|
||||
|
||||
$$s_{mp} \leqslant p_{mp} + stg_{mp}, \quad \forall m \in M \backslash \{1\}$$
|
||||
|
||||
Ograniczenie na powiązanie sprzedaży produktu 4 ze sprzedażą produktów 1 i 2:
|
||||
|
||||
$s_{m4} > s_{m1} + s_{m2}, \quad \forall m \in M$
|
||||
|
||||
Ograniczenie pojemności magazynów:
|
||||
|
||||
$$stg_{mp} \leqslant stl_p, \quad \forall p \in P$$
|
||||
|
||||
Ograniczenie na pożądany stan magazynowy na koniec miesiąca 3:
|
||||
|
||||
$$stg_{3p} \geqslant dst_p, \quad \forall p \in P$$
|
||||
|
||||
Ograniczenie wykorzystania czasu pracy narzędzi w danym miesiącu:
|
||||
|
||||
$uttm_t \leq att_t, \quad \forall t \in T, \forall m \in M$
|
||||
|
||||
\subsection{Funkcja celu}
|
||||
|
||||
Jako funkcję celu przyjęto maksymalizację wartości oczekiwanej zysku: $maximize \; ep$
|
||||
|
||||
\section{Dwukryterialny model zysku i ryzyka z wartoscią oczekiwaną jako miarą zysku i odchyleniem maksymalnym jako miarą ryzyka}
|
||||
|
||||
Model ten został zrealizowany jako rozszerzenie modelu jednokryterialnego o dodatkowe zbiory, parametry, zmienne, ograniczenia i nową funkcję celu.
|
||||
|
||||
\subsection{Zbiory indeksowe}
|
||||
|
||||
\begin{table}[h!]
|
||||
\centering
|
||||
\begin{tabular}{|l|l|}
|
||||
\hline
|
||||
Zbiór & Opis \\
|
||||
\hline
|
||||
S = S1, \ldots, S1000 & Zbiór scenariuszy wygenerowanych z rozkładu t-Studenta \\
|
||||
\hline
|
||||
\end{tabular}
|
||||
\end{table}
|
||||
|
||||
\subsection{Parametry}
|
||||
|
||||
\begin{table}[h!]
|
||||
\centering
|
||||
\begin{tabular}{|l|l|}
|
||||
\hline
|
||||
Parametr & Opis \\
|
||||
\hline
|
||||
$sppu_{ps}$ & Zysk ze sprzedaży jednej sztuki produktu $p$ w scenariuszu $s$ [zł] \\
|
||||
\hline
|
||||
\end{tabular}
|
||||
\end{table}
|
||||
|
||||
\subsection{Zmienne}
|
||||
|
||||
\begin{table}[h!]
|
||||
\centering
|
||||
\begin{tabular}{|l|p{10cm}|}
|
||||
\hline
|
||||
Zmienna & Opis \\
|
||||
\hline
|
||||
$sp_s = \sum_{p \in P} (ts_p \cdot sppu_{ps}) - tstc$ & Wartość zysku całkowitego dla scenariusza $s$ zysku ze sprzedaży produktów [zł] \\
|
||||
\hline
|
||||
$dev_s = ep - sp_s$ & Odchylenie zysku w danym scenariuszu [zł]. Jako, że funkcja wartości bezwzględnej jest nieliniowa zmienna została poddana linearyzacji z użyciem zmiennych $ldev_s$, $P_s$, $Q_s$ \\
|
||||
\hline
|
||||
$ldev_s = ep - sp_s$ & Zmienna pomocnicza wykorzystana w linearyzacji odchylenia zysku w scenariuszu $s$ \\
|
||||
\hline
|
||||
$P_s$ & Zmienna pomocnicza wykorzystana w linearyzacji zmiennejk $dev_s$ \\
|
||||
\hline
|
||||
$Q_s$ & Zmienna pomocnicza wykorzystana w linearyzacji zmiennej $dev_s$ \\
|
||||
\hline
|
||||
$mdev = \max_{s \in S} dev_s$ & Maksymalne odchylenie zysu [zł]. Jako, że funkcja max jest nie liniowa, zmienna została poddana linearyzacji z użyciem zmiennych $M$, $Z_s$ \\
|
||||
\hline
|
||||
$M$ & Zmienna pomocnicza wykorzystana w linearyzacji zmiennej $mdev$ \\
|
||||
\hline
|
||||
$Z_s$ & Zmienna pomocnicza binarna wykorzystana w linearyzacji zmiennej $mdev$ \\
|
||||
\hline
|
||||
$r = mdev$ & Miara ryzyka, równa maksymalnemu odchyleniu zysku \\
|
||||
\hline
|
||||
\end{tabular}
|
||||
\end{table}
|
||||
|
||||
\subsection{Ograniczenia}
|
||||
|
||||
Ograniczenie związane z linearyzacją zmiennej $dev_s$:
|
||||
|
||||
$$lde v_{s1} - lde v_{s2} + P_{s1} - Q_{s2} = 0, \quad \forall s_1, s_2 \in S$$
|
||||
|
||||
Ograniczenie związane z linearyzację zmiennej $mdev$:
|
||||
|
||||
$$mdev \geqslant dev_s, \quad \forall s \in S$$
|
||||
|
||||
$$mdev \leqslant dev_s + M(1 - Z_s), \quad \forall s \in S$$
|
||||
|
||||
$$\sum_{s \in S} Z_s = 1$$
|
||||
|
||||
\subsection{Metoda punktu odniesienia}
|
||||
|
||||
Jako model preferencji dla modelu dwukryterialnego została wybrana metoda punktu odniesienia. Wprowadza ona zestaw dodatkowych parametrów i zmiennych:
|
||||
|
||||
\begin{table}[h!]
|
||||
\centering
|
||||
\begin{tabular}{|l|p{10cm}|}
|
||||
\hline
|
||||
Parametr & Opis \\
|
||||
\hline
|
||||
$asp_{ep}$ & Poziom aspiracji oczekiwanego zysku \\
|
||||
\hline
|
||||
$asp_r$ & Poziom aspiracji ryzyka \\
|
||||
\hline
|
||||
$\lambda_{ep}$, $\lambda_r$ & Współczynniki normalizujące, odpowiednio dla zysku i ryzyka. Ze względu na ogólne sformułowanie metody punktu odniesienia jako problemu maksymalizacji, $\lambda_{ep}$ przyjmie wartość dodatnią, a $\lambda_r$ ujemną. \\
|
||||
\hline
|
||||
$\beta$ & Współczynnik pomniejszający wartość ocen wykraczających powyżej poziomu aspiracji \\
|
||||
\hline
|
||||
$\varepsilon$ & Współczynnik składnika regularyzacyjnego \\
|
||||
\hline
|
||||
\end{tabular}
|
||||
|
||||
\begin{tabular}{|l|l|}
|
||||
\hline
|
||||
Zmienne & Opis \\
|
||||
\hline
|
||||
$oc_{ep}$, $oc_r$ & Wartości indywidualnych funkcji osiągnięć dla zysku i ryzyka \\
|
||||
\hline
|
||||
$v$ & Zmienna pomocnicza metody punktu odniesienia \\
|
||||
\hline
|
||||
\end{tabular}
|
||||
\end{table}
|
||||
|
||||
Ograniczenia zmiennej $v$ przez wartości indywidualnych funkcji osiągnięć:
|
||||
|
||||
$v \leq oc_{ep}$ oraz $v \leq oc_r$
|
||||
|
||||
Ograniczenia indywidualnych funkcji osiągnięć:
|
||||
|
||||
$$oc_r \leqslant \lambda_r (r - asp_r)$$
|
||||
|
||||
$$oc_r \leqslant \beta \lambda_r (r - asp_r)$$
|
||||
|
||||
$$oc_{ep} \leqslant \lambda_p (ep - asp_{ep})$$
|
||||
|
||||
$$oc_{ep} \leqslant \beta \lambda_p (ep - asp_{ep})$$
|
||||
|
||||
Funkcja celu metody punktu odniesienia w postaci dla programowania liniowego:
|
||||
|
||||
$$\max \quad v + \varepsilon (oc_{ep} + oc_r)$$
|
||||
|
||||
\section{Wyznaczenie parametrów zadania z rozkładu t-Studenta}
|
||||
|
||||
W celu wyznaczenia wartości oczekiwanej wektora $R$ (odpowiadającą parametrowi modelu $eppu_p$) wykorzystano następującą zależność:
|
||||
|
||||
$$E(R) = \mu + \sigma \cdot \frac{\Gamma(\frac{\nu - 1}{2})((\nu + a^2)^{-\frac{\nu - 1}{2}} - (\nu + b^2)^{\frac{\nu - 1}{2}})\nu^{\frac{\nu}{2}}}{2(F_{\nu}(b) - F_{\nu}(a))\Gamma(\frac{\nu}{2})\Gamma(\frac{1}{2})}$$
|
||||
|
||||
gdzie:
|
||||
|
||||
\begin{itemize}
|
||||
\item $\mu$ wartość oczekiwana dla $R$,
|
||||
\item $\Gamma$ funkcja gamma Eulera,
|
||||
\item $\nu$ liczba stopni swobody,
|
||||
\item $F$ dystrybuanta standardowego rozkładu t-Studenta $t(0, 1; \nu)$ z $\nu$ stopniami swobody,
|
||||
\item $a = \frac{\alpha-\mu}{\sigma}$, gdzie $\alpha$ to lewy kraniec przedziału,
|
||||
\item $b = \frac{\beta-\mu}{\sigma}$, gdzie $\beta$ to prawy kraniec przedziału.
|
||||
\end{itemize}
|
||||
|
||||
Otrzymano wartości:
|
||||
|
||||
$E(R)^T = [8.5094, 8.4710, 8.1319, 6.3944]$
|
||||
|
||||
Do obliczenia wartości oczekiwanej oraz wyznaczenia scenariuszy wykorzystano skrypt napisany w języku $R$. Wygenerowano 1000 scenariuszy testowtych. Użyty skrypt przedstawia Listing 1.
|
||||
|
||||
Listing 1: Skrypt w języku $R$ do obliczania wartości oczekiwanej wektora $R$ i generowania scenariuszy z rozkładu t-Studenta.
|
||||
|
||||
\begin{verbatim}
|
||||
1 library ( tmvtnorm )
|
||||
2
|
||||
3 # t- Stutdet parameters
|
||||
4 Mu = c(9 , 8 , 7 , 6)
|
||||
5 Sigma = matrix (c(16 , -2 , -1 , -3 ,
|
||||
6 -2 , 9 , -4 , -1 ,
|
||||
7 -1 , -4 , 4 , 1 ,
|
||||
8 -3 , -1 , 1 , 1) ,
|
||||
9 nrow =4 , ncol =4)
|
||||
10 lower _ bound = 5
|
||||
11 upper _ bound = 12
|
||||
12
|
||||
13 # Generate scenarios
|
||||
14 data <- rtmvt ( n =10000 , mean = mu , sigma = sigma , df =5 , lower =rep ( lower _←-
|
||||
bound , 4) , upper =rep ( upper _bound , 4) )
|
||||
15 write . table ( format (data , digits =15 , drop0trailing = F ) , " data10000 .txt"←-
|
||||
, quote =F , sep ="\t", eol ="\n\t", col . names = F , row . names = T )
|
||||
16 mean <- colMeans ( data )
|
||||
17
|
||||
18 E <- function ( idx , Mu , Sigma , v , alfa , beta ) {
|
||||
19 mu = Mu [ idx ]
|
||||
20 sigma = Sigma [ idx , idx ]
|
||||
21 a = ( alfa - mu )/ sigma
|
||||
22 b = ( beta - mu )/ sigma
|
||||
23 nom = gamma (( v -1)/2) *
|
||||
24 (( v + a ^2) ^( -1*(v -1) /2) -
|
||||
25 ( v + b ^2) ^( -1*(v -1)/2) ) *
|
||||
26 v ^( v/2)
|
||||
27 den = 2 * (pt(b , v ) - pt(a , v ) ) * gamma ( v/2) * gamma (1/2)
|
||||
28 return ( mu + sigma *( nom /den ) )
|
||||
29 }
|
||||
30
|
||||
31 ER1 <- E (1 , Mu , Sigma , 5 , 5 , 12)
|
||||
32 ER2 <- E (2 , Mu , Sigma , 5 , 5 , 12)
|
||||
33 ER3 <- E (3 , Mu , Sigma , 5 , 5 , 12)
|
||||
34 ER4 <- E (4 , Mu , Sigma , 5 , 5 , 12)
|
||||
\end{verbatim}
|
||||
|
||||
\begin{verbatim}
|
||||
45
|
||||
46 # Aktualny stan magazynowy [szt]
|
||||
47 param startingStorage { PRODUCTS } >= 0;
|
||||
48
|
||||
49 # Pozadany stan magazynowy na koniec symulacji [szt]
|
||||
50 param desiredEndStorage { PRODUCTS } >= 0;
|
||||
51
|
||||
52 # Liczba dni roboczych w miesiacu [d]
|
||||
53 param daysPerMonth >= 1;
|
||||
54
|
||||
55 # Liczba zmian w ciagu jednego dnia roboczego
|
||||
56 param shiftsPerDay >= 1;
|
||||
57
|
||||
58 # Dlugosc zmiany [ godz ]
|
||||
59 param hoursPerShift >= 1;
|
||||
60
|
||||
61 # Liczba roboczogodzin w miesiacu [ godz ]
|
||||
62 param workHoursPerMonth = daysPerMonth * shiftsPerDay * hoursPerShift ;
|
||||
63
|
||||
64 # Czas pracy narzedzi w danym miesiacu
|
||||
65 param availableToolTime { t in TOOLS } = toolCount [ t ]* workHoursPerMonth←-
|
||||
;
|
||||
66
|
||||
67 # ##########
|
||||
68 # Zmienne #
|
||||
69 # ##########
|
||||
70 # Produkcja produktow
|
||||
71 var produced { MONTHS , PRODUCTS } >= 0 integer ;
|
||||
72
|
||||
73 # Sprzedaz produktow w danym miesiacu
|
||||
74 var sold { MONTHS , PRODUCTS } >= 0 integer ;
|
||||
75 var totalSold { p in PRODUCTS } = sum { m in MONTHS } sold [m , p ];
|
||||
76
|
||||
77 # Ilosc produktow przekazanych do magazynu w danym miesiacu
|
||||
78 var stored { m in MONTHS , p in PRODUCTS } = produced [m , p ] - sold [m , p←-
|
||||
];
|
||||
79
|
||||
80 # Stan magazynowy na koniec danego miesiaca
|
||||
81 var storage { m in MONTHS , p in PRODUCTS } =
|
||||
82 startingStorage [ p ] + sum { m2 in MONTHS : ord( m2 ) <= ord( m ) } ←-
|
||||
stored [ m2 , p ];
|
||||
83
|
||||
84 # Wykorzystany czas pracy
|
||||
85 var usedToolTime { m in MONTHS , t in TOOLS } =
|
||||
86 sum { p in PRODUCTS } produced [m , p ]* toolTimePerUnit [t , p ];
|
||||
87
|
||||
88 # Koszt magazynowania
|
||||
89 var monthlyStorageCost { m in MONTHS } =
|
||||
90 (sum { p in PRODUCTS } storage [m , p ]) * storageUnitCost ;
|
||||
91 var totalStorageCost = sum { m in MONTHS } monthlyStorageCost [ m ];
|
||||
92
|
||||
93 # Zysk dla wartosci oczekiwanej
|
||||
94 var expectedSalesProfit =
|
||||
95 sum { p in PRODUCTS } totalSold [ p ]* expectedProfitPerUnit [ p ];
|
||||
96 var expectedNetProfit =
|
||||
97 expectedSalesProfit - totalStorageCost ;
|
||||
\end{verbatim}
|
||||
|
||||
\begin{verbatim}
|
||||
98
|
||||
99 # Zysk w danym scenariuszu
|
||||
100 var scenarioSalesProfit { s in SCENARIOS } =
|
||||
101 sum { p in PRODUCTS } totalSold [ p ]* scenarioProfitPerUnit [s , p ];
|
||||
102 var scenarioNetProfit { s in SCENARIOS } =
|
||||
103 scenarioSalesProfit [ s ] - totalStorageCost ;
|
||||
104
|
||||
105 # Odchylenie jako miara ryzyka - zlinearyzowana wartosc bezwzgledna
|
||||
106 var deviation { s in SCENARIOS } =
|
||||
107 expectedNetProfit - scenarioNetProfit [ s ];
|
||||
108 var P { SCENARIOS } >= 0;
|
||||
109 var Q { SCENARIOS } >= 0;
|
||||
110 subject to deviationLimit { s1 in SCENARIOS , s2 in SCENARIOS }:
|
||||
111 deviation [ s1 ] - deviation [ s2 ]+ P [ s1 ] - Q [ s2 ] = 0;
|
||||
112
|
||||
113 #var maxDeviation = max {s in SCENARIOS } deviation [s];
|
||||
114 var maxDeviation ;
|
||||
115 # Linearyzacja maksymalnego odchylenia jako miary ryzyka
|
||||
116 param M = 10000;
|
||||
117 var Z { SCENARIOS } binary ;
|
||||
118 subject to mdLimit { s in SCENARIOS }:
|
||||
119 maxDeviation >= deviation [ s ];
|
||||
120 subject to mdWhere { s in SCENARIOS }:
|
||||
121 maxDeviation <= deviation [ s ] + M *(1 - Z [ s ]) ;
|
||||
122 subject to mdOS :
|
||||
123 sum { s in SCENARIOS } Z [ s ] = 1;
|
||||
124
|
||||
125 # Aliasy dla ocenianych wartosci
|
||||
126 var profit = expectedNetProfit ;
|
||||
127 var risk = maxDeviation ;
|
||||
128
|
||||
129 # ######################
|
||||
130 # Ograniczenia modelu #
|
||||
131 # ######################
|
||||
132
|
||||
133 # Ograniczenie rynkowe sprzedazy produktow
|
||||
134 subject to SalesMarketLimit { m in MONTHS , p in PRODUCTS }:
|
||||
135 sold [m , p ] <= salesMarketLimit [m , p ];
|
||||
136 # Ograniczenie magazynowe sprzedazy produktow
|
||||
137 subject to SalesLimit1 { p in PRODUCTS }:
|
||||
138 sold [ first ( MONTHS ) , p ] <= produced [ first ( MONTHS ) , p ];
|
||||
139 subject to SalesLimit2 { m in MONTHS , p in PRODUCTS : m != first ( MONTHS←-
|
||||
) }:
|
||||
140 sold [m , p ] <= produced [m , p ] + storage [m , p ];
|
||||
141 # Powiazanie sprzedazy produktu P4 ze sprzedaza produktow P1 i P2
|
||||
142 subject to P4SalesConstraint { m in MONTHS }:
|
||||
143 sold [m , "P4"] >= sold [m , "P1"] + sold [m , "P2"];
|
||||
144 # Ograniczenie pojemnosci magazynowej
|
||||
145 subject to StorageLimit { m in MONTHS , p in PRODUCTS }:
|
||||
146 storage [m , p ] <= storageLimit [ p ];
|
||||
147 # Ograniczenie na pozadany stan magazynowy na koniec marca
|
||||
148 subject to DesiredStorage { p in PRODUCTS }:
|
||||
149 storage [ last ( MONTHS ) , p ] >= desiredEndStorage [ p ];
|
||||
150 # Ograniczenie czasu pracy narzedzi w miesiacu
|
||||
151 subject to ToolWorkTime { m in MONTHS , t in TOOLS }:
|
||||
152 usedToolTime [m , t ] <= availableToolTime [ t ];
|
||||
\end{verbatim}
|
||||
|
||||
\begin{verbatim}
|
||||
153
|
||||
154 # ############################
|
||||
155 # Metoda punktu odniesienia #
|
||||
156 # ############################
|
||||
157 # Skladniki wektora oceny
|
||||
158 set RATED = {" PROFIT ", " RISK "};
|
||||
159 # Wektor oceny
|
||||
160 var value { r in RATED } =
|
||||
161 if r == " PROFIT " then profit
|
||||
162 else if r == " RISK " then risk ;
|
||||
163 # Wektor aspiracji
|
||||
164 param aspiration { RATED };
|
||||
165 # Wartosci utopii i nadiru
|
||||
166 param utopia { RATED };
|
||||
167 param nadir { RATED };
|
||||
168 # Wspolczynniki normalizujace
|
||||
169 param lambda { r in RATED } =
|
||||
170 1 / ( utopia [r] - nadir [r]);
|
||||
171 # Wspolczynnik skladnika regularyzacyjnego
|
||||
172 param epsilon ;
|
||||
173 # Wspolczynnik pomniejszenia wartosci ocen ponad poziomem aspiracji
|
||||
174 param beta ;
|
||||
175 # Indywidualne funkcje osiagniec
|
||||
176 var individualRating { RATED };
|
||||
177 # Zmienna pomocnicza metody punktu odniesienia
|
||||
178 var v;
|
||||
179 # Skalaryzujaca funkcja osiagniecia
|
||||
180 var rating = v + epsilon * (sum {r in RATED } individualRating [r]);
|
||||
181 # Odleglosc od punktu odniesienia
|
||||
182 var distance {r in RATED } = value [r] - aspiration [r];
|
||||
183 # Znormalizowana odleglosc od punktu odniesienia
|
||||
184 var normalizedDistance {r in RATED } = lambda [r]* distance [r];
|
||||
185 # Ograniczenia zmiennej v przez indywidualne funkcje osiagniec
|
||||
186 subject to VSubject {r in RATED }:
|
||||
187 v <= individualRating [r];
|
||||
188 # Ograniczenia indywidualnych funkcji osiagniec
|
||||
189 subject to IndividualRatingSubjectBeta {r in RATED }:
|
||||
190 individualRating [r] <= beta * normalizedDistance [r];
|
||||
191 subject to IndividualRatingSubject {r in RATED }:
|
||||
192 individualRating [r] <= normalizedDistance [r];
|
||||
193
|
||||
194 ################
|
||||
195 # Funkcje celu #
|
||||
196 ################
|
||||
197 minimize MinimizeProfit : profit ;
|
||||
198 maximize MaximizeProfit : profit ;
|
||||
199 minimize MinimizeRisk : risk ;
|
||||
200 maximize MaximizeRisk : risk ;
|
||||
201 maximize RPM: rating ;
|
||||
\end{verbatim}
|
||||
|
||||
\section{Model dla programu AMPL}
|
||||
|
||||
\subsection{Plik z modelem (.mod)}
|
||||
|
||||
\subsection{Plik z danymi (.dat)}
|
||||
|
||||
Listing 3: Dane dla modelu AMPL - pominięto scenariusze, pełny zestaw danych dostępny w załączniku.
|
||||
|
||||
\begin{verbatim}
|
||||
1 # ##########################################################
|
||||
2 # WDWR 18042 #
|
||||
3 # Planowanie produkcj w warunkach ryzyka. #
|
||||
4 # DANE #
|
||||
5 # Autor : Krzysztof Rudnicki #
|
||||
6 # ##########################################################
|
||||
7
|
||||
8 # Narzedzia
|
||||
9 set TOOLS := GRINDER VDRILL HDRILL MILLER LATHE ;
|
||||
10
|
||||
11 # Miesiace
|
||||
12 set MONTHS := JAN FEB MAR ;
|
||||
13
|
||||
14 # Liczba narzedzi
|
||||
15 param toolCount :=
|
||||
16 GRINDER 4
|
||||
17 VDRILL 2
|
||||
18 HDRILL 3
|
||||
19 MILLER 1
|
||||
20 LATHE 1
|
||||
21 ;
|
||||
22
|
||||
23 # Czasy produkcji h
|
||||
24 param toolTimePerUnit :
|
||||
25 P1 P2 P3←-
|
||||
P4 :=
|
||||
26 GRINDER 0 .4 0 .6 0 ←-
|
||||
0
|
||||
27 VDRILL 0 .2 0 .1 0 ←-
|
||||
0 .6
|
||||
28 HDRILL 0 .1 0 0 .7 ←-
|
||||
0
|
||||
29 MILLER 0 .06 0 .04 0 0 .05
|
||||
30 LATHE 0 0 .05 0 .02 0
|
||||
31 ;
|
||||
32
|
||||
33 # Ograniczenia rynkowe liczby sprzedawanych produktow pcs
|
||||
34 param salesMarketLimit :
|
||||
35 P1 P2 P3 ←-
|
||||
P4 :=
|
||||
36 JAN 200 0 100 ←-
|
||||
200
|
||||
37 FEB 300 100 200 ←-
|
||||
200
|
||||
38 MAR 0 300 100 ←-
|
||||
200
|
||||
39 ;
|
||||
40
|
||||
41 # Ograniczeine liczby magazynowanych produktow pcs
|
||||
42 param storageLimit :=
|
||||
43 P1 200
|
||||
44 P2 200
|
||||
45 P3 200
|
||||
46 P4 200
|
||||
\end{verbatim}
|
||||
|
||||
\begin{verbatim}
|
||||
47 ;
|
||||
48
|
||||
49 # Koszt magazynowania produktow pln/pcs per month
|
||||
50 param storageUnitCost := 1;
|
||||
51
|
||||
52 # Aktualny stan magazynowy pcs
|
||||
53 param startingStorage :=
|
||||
54 P1 0
|
||||
55 P2 0
|
||||
56 P3 0
|
||||
57 P4 0
|
||||
58 ;
|
||||
59
|
||||
60 # Pozadany stan magazynowy na koniec marca pcs
|
||||
61 param desiredEndStorage :=
|
||||
62 P1 50
|
||||
63 P2 50
|
||||
64 P3 50
|
||||
65 P4 50
|
||||
66 ;
|
||||
67
|
||||
68 # Liczba dni roboczych w miesiacu d
|
||||
69 param daysPerMonth := 24;
|
||||
70
|
||||
71 # Liczba zmian w ciagu jednego dnia roboczego
|
||||
72 param shiftsPerDay := 2;
|
||||
73
|
||||
74 # Dlugosc zmiany h
|
||||
75 param hoursPerShift := 8;
|
||||
76
|
||||
77 # Zyski wartosc oczekiwana
|
||||
78 param expectedProfitPerUnit :=
|
||||
79 P1 8 .50944172786882
|
||||
80 P2 8 .47100593224391
|
||||
81 P3 8 .1319049712769
|
||||
82 P4 6 .39446520538826
|
||||
83 ;
|
||||
84
|
||||
85 # Metoda punktu odniesienia
|
||||
86 param epsilon = 0 .000025 ;
|
||||
87
|
||||
88 param beta = 0 .001 ;
|
||||
89
|
||||
90 param utopia :=
|
||||
91 PROFIT 11987
|
||||
92 RISK 1000
|
||||
93 ;
|
||||
94
|
||||
95 param nadir :=
|
||||
96 PROFIT -2400
|
||||
97 RISK 2815
|
||||
98 ;
|
||||
99
|
||||
100 param aspiration :=
|
||||
101 PROFIT 10000
|
||||
102 RISK 0
|
||||
\end{verbatim}
|
||||
|
||||
\subsection{Skrypty uruchomieniowe (.run)}
|
||||
|
||||
\section{Rozwiązanie zadania optymalizacji}
|
||||
|
||||
\subsection{Wyniki dla modelu jednokryterialnego}
|
||||
|
||||
$s_{mp}$ oraz wartość wyznaczonego rozwiązania optymalnego:
|
||||
|
||||
$ep = 11987.42[z]$
|
||||
|
||||
Listing 7: Wynik działania skryptu wyznaczającego rozwiązanie optymalne modelu jednokryterialnego.
|
||||
|
||||
\begin{verbatim}
|
||||
1 # ################################################
|
||||
2 ###Maximize profit for expected profit value ###
|
||||
3 # ################################################
|
||||
4 CPLEX 12 .8.0.0 : optimal integer solution ; objective 11987 .41899
|
||||
5 11MIP simplex iterations
|
||||
6 0branch -and - bound nodes
|
||||
7 produced :=
|
||||
8 JAN P1 200
|
||||
9 JAN P2 0
|
||||
10 JAN P3 100
|
||||
11 JAN P4 200
|
||||
12 FEB P1 200
|
||||
13 FEB P2 0
|
||||
14 FEB P3 200
|
||||
15 FEB P4 200
|
||||
16 MAR P1 50
|
||||
17 MAR P2 250
|
||||
18 MAR P3 150
|
||||
19 MAR P4 250
|
||||
20 ;
|
||||
21
|
||||
22 sold :=
|
||||
23 JAN P1 200
|
||||
24 JAN P2 0
|
||||
25 JAN P3 100
|
||||
26 JAN P4 200
|
||||
27 FEB P1 200
|
||||
28 FEB P2 0
|
||||
29 FEB P3 200
|
||||
30 FEB P4 200
|
||||
31 MAR P1 0
|
||||
32 MAR P2 200
|
||||
33 MAR P3 100
|
||||
34 MAR P4 200
|
||||
35 ;
|
||||
36
|
||||
37 stored :=
|
||||
38 JAN P1 0
|
||||
39 JAN P2 0
|
||||
40 JAN P3 0
|
||||
41 JAN P4 0
|
||||
42 FEB P1 0
|
||||
43 FEB P2 0
|
||||
44 FEB P3 0
|
||||
45 FEB P4 0
|
||||
46 MAR P1 50
|
||||
47 MAR P2 50
|
||||
48 MAR P3 50
|
||||
49 MAR P4 50
|
||||
\end{verbatim}
|
||||
|
||||
52 Profit: 11987.418989
|
||||
|
||||
\begin{figure}[h!]
|
||||
\centering
|
||||
%\includegraphics[width=\linewidth]{_page_0_Figure_0.jpeg}
|
||||
\caption{Obraz zbioru rozwiązań efektywnych w przestrzeni ryzyko-zysk}
|
||||
\label{fig:solutions}
|
||||
\end{figure}
|
||||
|
||||
\subsection{Wyniki dla modelu dwukryterialnego}
|
||||
|
||||
\subsubsection{Obraz zbioru rozwiązań efektywnych w przestrzeni ryzyko-zysk}
|
||||
|
||||
Obraz zbioru rozwiązań efektywnch w przestrzeni ryzyko-zysk został uzyskany poprzez rozwiązanie zadania metody punktu odniesienia dla różnych wartości aspiracji dla zysku oraz ryzyka. Do wykonania obliczeń posłużono się skryptem przedstawionym na Listing 7. Obliczenia przeprowadzono ustalając poziomy aspiracji w wyznaczonych granicach zmienności zysku i ryzyka (wektory nadiru i utopii wyznaczone w kolejnej sekcji). Dla każdego poziomu aspiracji wykorzystano po 10 równoodległych wartości znajdujących się w przedziałach definiowanych przez wektory nadiru i utopii.
|
||||
|
||||
Ze względu na duży rozmiar zadania, a przez długi czas obliczeń przy 1000 scenariuszach, zdecydowano się ograniczyć ich liczbę do 50. Niestety nie jest to liczba wystarczająca do przeprowadzenia dokładnych obliczeń, jednak uzyskane wyniki powinny być wystarczające do przedstawienia działania metody.
|
||||
|
||||
Fragment wyników działania skryptu obliczeniowego przedstawia Listing 8. Obraz zbioru rozwiązań efektywnych w przestrzeni ryzyko-zysk pokazuje Rysunek 1.
|
||||
|
||||
Listing 8: Skrypt obliczający wartości do wyznaczenia obrazu zbioru rozwiązań efektywnych w przestrzeni ryzyko-zysk. Pełne wyniki dostępne w załączniku.
|
||||
|
||||
\begin{verbatim}
|
||||
1 ### 39: Solving model for aspirations : 2395 .666667 , 312 .777778
|
||||
2 CPLEX 12 .8.0.0 : optimal integer solution within mipgap or absmipgap ; ←-
|
||||
objective 5 .427722957e -07
|
||||
3 39 MIP simplex iterations
|
||||
4 0 branch -and - bound nodes
|
||||
5 absmipgap = 7 .81092e -07 , relmipgap = 1 .43881
|
||||
\end{verbatim}
|
||||
|
||||
\begin{verbatim}
|
||||
6 Profit : 2417 .827519
|
||||
7 Risk : 311 .250020
|
||||
8 RPM : 0 .000001
|
||||
9 ### 40: Solving model for aspirations : 2395 .666667 , 0 .000000
|
||||
10 CPLEX 12 .8.0.0 :
|
||||
11 < BREAK > ( cplex )
|
||||
12 CPLEX solution status 13 with fixed integers :
|
||||
13 aborted in phase II
|
||||
14 aborted , integer solution exists ; objective -0 .06697476417
|
||||
15 116486 MIP simplex iterations
|
||||
16 103313 branch -and - bound nodes
|
||||
17 absmipgap = 6 .93933e -05 , relmipgap = 0 .00103611
|
||||
18 Profit : 1432 .148909
|
||||
19 Risk : 188 .510726
|
||||
20 RPM : -0 .066975
|
||||
\end{verbatim}
|
||||
|
||||
Rozwiązania efektywne minimalnego ryzyka i maksymalnego zysku
|
||||
|
||||
Rozwiązania efektywne dla minimalnego ryzyka i maksymalnego zysku wyznaczono wykorzystując skrypt przedstawiony na listingu Listing 4. Na podstwaie wyników jego działania, które przedstawia Listing 9 można podać następujące rozwiązania:
|
||||
|
||||
\begin{itemize}
|
||||
\item Minimalne ryzyko: $ep = -1000$, przy $r = 0$,
|
||||
\item Maksymalny zysk: $ep = 11987$, przy $r = 2569$
|
||||
\end{itemize}
|
||||
|
||||
Dodatkowo poza zakresem zadania wyznaczonon pozostałe elementy potrzebne do wyznaczenia wektorów nadiru i utopii:
|
||||
|
||||
\begin{itemize}
|
||||
\item Maksymalne ryzyko: $ep = 9193$, przy $r = 2815$,
|
||||
\item Minimalny zysk: $ep = -2400.00$, przy $r = 0.00$
|
||||
\end{itemize}
|
||||
|
||||
$$\text{Wektor nadiru: } (-2400, 2815)$$
|
||||
|
||||
Wektor utopii: $(0, 11987)$
|
||||
|
||||
Listing 9: Skrypt wyznaczający rozwiązania optymalne modelu dwukryterialnego.
|
||||
|
||||
\begin{verbatim}
|
||||
1 # ########################
|
||||
2 ### Minimizing profit ###
|
||||
3 # ########################
|
||||
4 CPLEX 12 .8.0.0 : optimal integer solution ; objective -2400
|
||||
5 7 MIP simplex iterations
|
||||
6 0 branch -and - bound nodes
|
||||
7 Profit : -2400
|
||||
8 Risk : 0
|
||||
9
|
||||
10 # ########################
|
||||
11 ### Maximizing profit ###
|
||||
12 # ########################
|
||||
13 CPLEX 12 .8.0.0 : optimal integer solution ; objective 11987 .41899
|
||||
14 32 MIP simplex iterations
|
||||
15 0 branch -and - bound nodes
|
||||
16 Profit : 11987
|
||||
17 Risk : 2569
|
||||
18
|
||||
\end{verbatim}
|
||||
|
||||
\begin{verbatim}
|
||||
19 # ######################
|
||||
20 ### Minimizing risk ###
|
||||
21 # ######################
|
||||
22 CPLEX 12 .8.0.0 : optimal integer solution ; objective 0
|
||||
23 0 MIP simplex iterations
|
||||
24 0 branch -and - bound nodes
|
||||
25 Profit : -1000
|
||||
26 Risk : 0
|
||||
27
|
||||
28 # #######################
|
||||
29 ### Maximizing risk k###
|
||||
30 # #######################
|
||||
31 CPLEX 12 .8.0.0 : optimal integer solution ; objective 2815 .995263
|
||||
32 21837 MIP simplex iterations
|
||||
33 705 branch -and - bound nodes
|
||||
34 Profit : 9193
|
||||
35 Risk : 2815
|
||||
\end{verbatim}
|
||||
|
||||
\subsubsection{Analiza relacji dominacji stochastycznej dla trzech wybranych rozwiązań efektywnych}
|
||||
|
||||
Do analizy wybrano następujące scenariusze:
|
||||
|
||||
\begin{enumerate}
|
||||
\item Maksymalny zysk $ep = 11987.42$,
|
||||
\item Poziomy aspiracji $aspep = 8789.89$ oraz $asp^r = 1876.67$,
|
||||
\item Poziomy aspiracji $aspep = 10388.44$ oraz $asp^r = 938.33$.
|
||||
\end{enumerate}
|
||||
|
||||
Dane do analizy zostały wygenerowane w trakcie przeprowadzania obliczeń do poprzednich podpunktów i są dostępne w załącznikach.
|
||||
|
||||
Dystrybuanty zysku przedstawia Rysunek 2.
|
||||
|
||||
Na podstawie wykresów możemy stwierdzić, że rozwiązanie dla scenariusza z maksymalnym zyskiem dominuje w sensie FSD pozostałe rozwiązania. Dodatkowo widzimy, że rozwiązanie ze scenariusza 3 dominuje w sensie FSD rozwiązanie scenariusza 2.
|
||||
|
||||
\begin{figure}[h!]
|
||||
\centering
|
||||
%\includegraphics[width=\linewidth]{_page_0_Figure_0.jpeg}
|
||||
\caption{Wykres dystrybuant zysku dla poszczególnych rozwiązań}
|
||||
\end{figure}
|
||||
|
||||
\end{document}
|
||||
@ -1,7 +0,0 @@
|
||||
Ocenione na 80/100
|
||||
|
||||
Uwagi:
|
||||
- brak wstępu teoretycznego
|
||||
- brak udowodnienia, że można użyć wartości oczekiwanej w zadaniu 1-wszym - E(R) = E(R1) + E(R2)
|
||||
- błąd na wykresie z obrazem rozwiązań - pojawiają się rozwiązania zdominowane! - może sugerować błąd w implementacji
|
||||
- brak odniesienia do przypadku ogólnego i omówienia wyninku w badaniu dominacji stohastycznej
|
||||
252
Programming/WDWR/projekt/eiti-wdwr/.gitignore
vendored
Normal file
252
Programming/WDWR/projekt/eiti-wdwr/.gitignore
vendored
Normal file
@ -0,0 +1,252 @@
|
||||
/materials/
|
||||
|
||||
## CPLEX Studio ####################################################################
|
||||
*.oplproject
|
||||
*.project
|
||||
*.log
|
||||
|
||||
## R programming ####################################################################
|
||||
|
||||
# History files
|
||||
.Rhistory
|
||||
.Rapp.history
|
||||
|
||||
# Session Data files
|
||||
.RData
|
||||
|
||||
# Example code in package build process
|
||||
*-Ex.R
|
||||
|
||||
# Output files from R CMD build
|
||||
/*.tar.gz
|
||||
|
||||
# Output files from R CMD check
|
||||
/*.Rcheck/
|
||||
|
||||
# RStudio files
|
||||
.Rproj.user/
|
||||
|
||||
# knitr and R markdown default cache directories
|
||||
/*_cache/
|
||||
/cache/
|
||||
|
||||
# Temporary files created by R markdown
|
||||
*.utf8.md
|
||||
*.knit.md
|
||||
|
||||
## LATEX ##############################################################################
|
||||
/docs/LATEX/raport.pdf
|
||||
|
||||
## Core latex/pdflatex auxiliary files:
|
||||
*.aux
|
||||
*.lof
|
||||
*.log
|
||||
*.lot
|
||||
*.fls
|
||||
*.out
|
||||
*.toc
|
||||
*.fmt
|
||||
*.fot
|
||||
*.cb
|
||||
*.cb2
|
||||
|
||||
## Intermediate documents:
|
||||
*.dvi
|
||||
*-converted-to.*
|
||||
|
||||
## Bibliography auxiliary files (bibtex/biblatex/biber):
|
||||
*.bbl
|
||||
*.bcf
|
||||
*.blg
|
||||
*-blx.aux
|
||||
*-blx.bib
|
||||
*.run.xml
|
||||
|
||||
## Build tool auxiliary files:
|
||||
*.fdb_latexmk
|
||||
*.synctex
|
||||
*.synctex(busy)
|
||||
*.synctex.gz
|
||||
*.synctex.gz(busy)
|
||||
*.pdfsync
|
||||
|
||||
## Auxiliary and intermediate files from other packages:
|
||||
# algorithms
|
||||
*.alg
|
||||
*.loa
|
||||
|
||||
# achemso
|
||||
acs-*.bib
|
||||
|
||||
# amsthm
|
||||
*.thm
|
||||
|
||||
# beamer
|
||||
*.nav
|
||||
*.pre
|
||||
*.snm
|
||||
*.vrb
|
||||
|
||||
# changes
|
||||
*.soc
|
||||
|
||||
# cprotect
|
||||
*.cpt
|
||||
|
||||
# elsarticle (documentclass of Elsevier journals)
|
||||
*.spl
|
||||
|
||||
# endnotes
|
||||
*.ent
|
||||
|
||||
# fixme
|
||||
*.lox
|
||||
|
||||
# feynmf/feynmp
|
||||
*.mf
|
||||
*.mp
|
||||
*.t[1-9]
|
||||
*.t[1-9][0-9]
|
||||
*.tfm
|
||||
|
||||
#(r)(e)ledmac/(r)(e)ledpar
|
||||
*.end
|
||||
*.?end
|
||||
*.[1-9]
|
||||
*.[1-9][0-9]
|
||||
*.[1-9][0-9][0-9]
|
||||
*.[1-9]R
|
||||
*.[1-9][0-9]R
|
||||
*.[1-9][0-9][0-9]R
|
||||
*.eledsec[1-9]
|
||||
*.eledsec[1-9]R
|
||||
*.eledsec[1-9][0-9]
|
||||
*.eledsec[1-9][0-9]R
|
||||
*.eledsec[1-9][0-9][0-9]
|
||||
*.eledsec[1-9][0-9][0-9]R
|
||||
|
||||
# glossaries
|
||||
*.acn
|
||||
*.acr
|
||||
*.glg
|
||||
*.glo
|
||||
*.gls
|
||||
*.glsdefs
|
||||
|
||||
# gnuplottex
|
||||
*-gnuplottex-*
|
||||
|
||||
# gregoriotex
|
||||
*.gaux
|
||||
*.gtex
|
||||
|
||||
# hyperref
|
||||
*.brf
|
||||
|
||||
# knitr
|
||||
*-concordance.tex
|
||||
# TODO Comment the next line if you want to keep your tikz graphics files
|
||||
*.tikz
|
||||
*-tikzDictionary
|
||||
|
||||
# listings
|
||||
*.lol
|
||||
|
||||
# makeidx
|
||||
*.idx
|
||||
*.ilg
|
||||
*.ind
|
||||
*.ist
|
||||
|
||||
# minitoc
|
||||
*.maf
|
||||
*.mlf
|
||||
*.mlt
|
||||
*.mtc[0-9]*
|
||||
*.slf[0-9]*
|
||||
*.slt[0-9]*
|
||||
*.stc[0-9]*
|
||||
|
||||
# minted
|
||||
_minted*
|
||||
*.pyg
|
||||
|
||||
# morewrites
|
||||
*.mw
|
||||
|
||||
# nomencl
|
||||
*.nlo
|
||||
|
||||
# pax
|
||||
*.pax
|
||||
|
||||
# pdfpcnotes
|
||||
*.pdfpc
|
||||
|
||||
# sagetex
|
||||
*.sagetex.sage
|
||||
*.sagetex.py
|
||||
*.sagetex.scmd
|
||||
|
||||
# scrwfile
|
||||
*.wrt
|
||||
|
||||
# sympy
|
||||
*.sout
|
||||
*.sympy
|
||||
sympy-plots-for-*.tex/
|
||||
|
||||
# pdfcomment
|
||||
*.upa
|
||||
*.upb
|
||||
|
||||
# pythontex
|
||||
*.pytxcode
|
||||
pythontex-files-*/
|
||||
|
||||
# thmtools
|
||||
*.loe
|
||||
|
||||
# TikZ & PGF
|
||||
*.dpth
|
||||
*.md5
|
||||
*.auxlock
|
||||
|
||||
# todonotes
|
||||
*.tdo
|
||||
|
||||
# easy-todo
|
||||
*.lod
|
||||
|
||||
# xindy
|
||||
*.xdy
|
||||
|
||||
# xypic precompiled matrices
|
||||
*.xyc
|
||||
|
||||
# endfloat
|
||||
*.ttt
|
||||
*.fff
|
||||
|
||||
# Latexian
|
||||
TSWLatexianTemp*
|
||||
|
||||
## Editors:
|
||||
# WinEdt
|
||||
*.bak
|
||||
*.sav
|
||||
|
||||
# Texpad
|
||||
.texpadtmp
|
||||
|
||||
# Kile
|
||||
*.backup
|
||||
|
||||
# KBibTeX
|
||||
*~[0-9]*
|
||||
|
||||
# auto folder when using emacs and auctex
|
||||
/auto/*
|
||||
|
||||
# expex forward references with \gathertags
|
||||
*-tags.tex
|
||||
1001
Programming/WDWR/projekt/eiti-wdwr/R/scenarios.txt
Normal file
1001
Programming/WDWR/projekt/eiti-wdwr/R/scenarios.txt
Normal file
File diff suppressed because it is too large
Load Diff
18
Programming/WDWR/projekt/eiti-wdwr/R/t-student.R
Normal file
18
Programming/WDWR/projekt/eiti-wdwr/R/t-student.R
Normal file
@ -0,0 +1,18 @@
|
||||
library(MASS) # mvrnorm()
|
||||
mu <- c(9, 8, 7, 6); # expected values
|
||||
sigma <- matrix(c(16,-2,-1,-3,-2,9,-4,-1,-1,-4,4,1,-3,-1,1,1), 4); # covariance matrix
|
||||
nu <- 4; # degrees of freedom
|
||||
n <- 10000; # number of scenarios
|
||||
y <- t(t(mvrnorm(n, rep(0, length(mu)), sigma) * sqrt(nu / rchisq(n, nu))) + mu)
|
||||
|
||||
y <- y[y[,1]>=5,]
|
||||
y <- y[y[,2]>=5,]
|
||||
y <- y[y[,3]>=5,]
|
||||
y <- y[y[,4]>=5,]
|
||||
y <- y[y[,1]<=12,]
|
||||
y <- y[y[,2]<=12,]
|
||||
y <- y[y[,3]<=12,]
|
||||
y <- y[y[,4]<=12,]
|
||||
y <- y[1:1000,]
|
||||
|
||||
write.table(y, "scenarios.txt", sep=" ", eol="]\n[", row.names = FALSE, col.names=FALSE)
|
||||
2
Programming/WDWR/projekt/eiti-wdwr/README.md
Normal file
2
Programming/WDWR/projekt/eiti-wdwr/README.md
Normal file
@ -0,0 +1,2 @@
|
||||
# eiti-wdwr
|
||||
WDWR
|
||||
@ -0,0 +1,53 @@
|
||||
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.59000000000003;-67.19889931518434;9.26551;1;0;0;0;0;1;0;0;10;8;6;34;40;50;44;16;40;42;44;16;50;50;50;50
|
||||
3;464.82;465.107;19.0047;0;0;0;1;0;0;0;0;23;20;14;64;27;50;36;0;27;30;36;0;50;50;50;50
|
||||
4;997.23;997.357;29.4848;0;0;0;43;0;0;0;0;36;30;23;57;15;50;27;0;14;20;27;0;50;50;50;50
|
||||
5;1529.64;1530.25;39.9669;0;0;0;85;0;0;0;0;47;42;31;52;3;50;19;0;3;8;19;0;50;50;50;50
|
||||
6;2062.05;2062.08;50.8849;3;0;0;120;7;2;0;0;50;51;42;51;0;50;8;0;0;0;8;0;50;50;50;50
|
||||
7;2594.46;2594.52;62.1001;0;0;0;162;24;13;0;0;50;51;49;50;0;50;1;0;0;0;1;0;50;50;50;50
|
||||
8;3126.87;3127.18;73.5215;36;0;2;246;2;24;0;0;50;51;50;73;0;50;0;0;0;0;0;0;50;50;50;50
|
||||
9;3659.28;3659.63;85.1089;44;0;8;248;8;32;1;0;50;53;50;116;0;50;0;0;0;0;0;0;50;50;50;50
|
||||
10;4191.69;4192.2;96.6978;15;0;17;244;51;0;0;0;50;97;50;160;0;50;0;0;0;0;0;0;50;50;50;50
|
||||
11;4724.1;4724.19;108.275;79;0;0;77;0;57;24;0;50;52;52;374;0;50;0;0;0;0;0;0;50;50;50;50
|
||||
12;5256.51;5256.76;119.859;0;0;0;188;93;71;34;0;50;50;50;239;0;50;0;0;0;0;0;0;50;50;50;50
|
||||
13;5788.92;5789.33;131.455;64;0;42;109;43;81;0;0;50;52;50;436;0;50;0;0;0;0;0;0;50;50;50;50
|
||||
14;6321.33;6321.9;143.053;2;0;49;192;119;95;1;0;50;50;50;365;0;50;0;0;0;0;0;0;50;50;50;50
|
||||
15;6853.74;6853.79;154.626;3;0;57;187;132;101;1;0;50;55;50;442;0;50;0;0;0;0;0;0;50;50;50;50
|
||||
16;7386.15;7386.47;166.79;3;0;114;250;147;120;0;0;50;56;51;450;0;50;0;0;0;0;0;0;50;50;50;50
|
||||
17;7918.56;7918.79;180.122;165;0;109;190;0;145;2;0;50;53;51;370;0;50;0;0;0;0;0;0;50;50;50;50
|
||||
18;8450.97;8450.98;194.31;95;0;117;250;85;172;50;0;50;50;56;450;0;50;0;0;0;0;0;0;50;50;50;50
|
||||
19;8983.38;8983.46;209.32;201;0;146;190;1;191;51;0;50;52;54;450;0;50;0;0;0;0;0;0;50;50;50;50
|
||||
20;9515.79;9515.8;225.023;288;0;148;250;1;212;81;0;50;50;50;450;0;50;0;0;0;0;0;0;50;50;50;50
|
||||
21;10048.2;10048.3;241.223;1;0;150;190;236;302;0;0;50;51;160;370;0;50;0;0;0;0;0;0;50;50;50;50
|
||||
22;10580.6;10580.7;257.65;257;0;109;250;1;0;0;0;50;304;184;450;0;50;0;0;0;0;0;0;50;50;50;50
|
||||
23;11113;11113.1;274.336;1;0;149;250;274;349;162;0;50;56;50;450;0;50;0;0;0;0;0;0;50;50;50;50
|
||||
24;11645.4;11645.6;291.421;272;0;150;190;85;1;188;0;50;346;50;450;0;50;0;0;0;0;0;0;50;50;50;50
|
||||
25;12177.8;12177.9;308.783;270;0;111;190;36;270;0;0;50;99;301;450;0;50;0;0;0;0;0;0;50;50;50;50
|
||||
26;12710.2;12710.4;326.256;0;0;0;250;324;271;409;0;50;183;80;450;0;50;0;0;0;0;0;0;50;50;50;50
|
||||
27;13242.7;13242.9;343.752;270;0;148;190;135;0;275;0;50;411;52;450;0;50;0;0;0;0;0;0;50;50;50;50
|
||||
28;13775.1;13775.2;361.295;0;0;3;250;362;350;0;0;50;160;560;370;0;50;0;0;0;0;0;0;50;50;50;50
|
||||
29;14307.5;14307.7;378.849;271;0;146;190;176;11;327;0;50;439;52;450;0;50;0;0;0;0;0;0;50;50;50;50
|
||||
30;14839.9;14840;396.41;347;0;110;190;131;270;482;0;50;266;51;370;0;50;0;0;0;0;0;0;50;50;50;50
|
||||
31;15372.3;15372.7;414.073;0;0;5;190;417;349;5;0;50;225;530;450;0;50;0;0;0;0;0;0;50;50;50;50
|
||||
32;15904.7;15904.9;431.837;270;0;110;190;162;270;400;0;50;246;60;370;0;50;0;0;0;0;0;0;50;50;50;50
|
||||
33;16437.1;16437.2;449.621;270;0;0;190;239;350;72;0;50;269;649;450;0;50;0;0;0;0;0;0;50;50;50;50
|
||||
34;16969.5;16969.6;467.424;350;0;5;250;190;1;399;0;50;560;227;370;0;50;0;0;0;0;0;0;50;50;50;50
|
||||
35;17501.9;17502;485.233;349;0;1;250;204;23;129;0;50;691;530;370;0;50;0;0;0;0;0;0;50;50;50;50
|
||||
36;18034.3;18034.4;503.08;0;0;148;250;610;0;51;0;50;748;530;450;0;50;0;0;0;0;0;0;50;50;50;50
|
||||
37;18566.8;18566.9;520.949;1;0;150;190;502;0;401;0;50;776;288;450;0;50;0;0;0;0;0;0;50;50;50;50
|
||||
38;19099.2;19099.2;538.82;1;0;1;250;520;1;499;0;50;803;344;450;0;50;0;0;0;0;0;0;50;50;50;50
|
||||
39;19631.6;19631.6;556.705;1;0;150;190;672;349;500;0;50;406;261;370;0;50;0;0;0;0;0;0;50;50;50;50
|
||||
40;20164;20164;574.59;1;0;36;250;693;9;497;0;50;690;363;370;0;50;0;0;0;0;0;0;50;50;50;50
|
||||
41;20696.4;20696.4;592.504;347;0;2;190;305;34;290;0;50;850;648;450;0;50;0;0;0;0;0;0;50;50;50;50
|
||||
42;21228.8;21228.8;610.459;271;0;1;190;383;59;499;0;50;850;444;370;0;50;0;0;0;0;0;0;50;50;50;50
|
||||
43;21761.2;21761.3;628.438;350;0;150;190;338;349;500;0;50;500;362;450;0;50;0;0;0;0;0;0;50;50;50;50
|
||||
44;22293.6;22293.7;646.432;348;0;148;190;358;296;401;0;50;690;471;450;0;50;0;0;0;0;0;0;50;50;50;50
|
||||
45;22826;22826.1;664.435;350;0;0;250;374;347;400;0;50;543;527;450;0;50;0;0;0;0;0;0;50;50;50;50
|
||||
46;23358.4;23358.5;682.428;270;0;149;190;570;145;313;0;50;848;530;450;0;50;0;0;0;0;0;0;50;50;50;50
|
||||
47;23890.9;23891;700.439;271;0;150;250;591;270;339;0;50;719;650;450;0;50;0;0;0;0;0;0;50;50;50;50
|
||||
48;24423.3;24423.3;718.467;323;0;150;250;561;258;366;0;50;761;650;370;0;50;0;0;0;0;0;0;50;50;50;50
|
||||
49;24955.7;24955.8;736.497;350;0;150;250;446;272;498;0;50;850;524;450;0;50;0;0;0;0;0;0;50;50;50;50
|
||||
50;25488.1;25488.3;755.133;185;0;110;190;700;307;400;0;50;848;530;450;0;50;0;0;0;0;0;0;50;50;50;50
|
||||
51;26020.5;26020.6;774.872;221;0;150;250;696;263;400;0;50;690;530;450;0;50;0;0;0;0;0;0;50;50;50;50
|
||||
52;26552.9;26553.9;796.113;270;0;110;190;700;270;500;0;50;690;650;450;0;50;0;0;0;0;0;0;50;50;50;50
|
||||
@ -0,0 +1,99 @@
|
||||
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
|
||||
10580.7;10580.8;257.666;336;0;149;190;0;1;134;0;50;301;51;370;0;50;0;0;0;0;0;0;50;50;50;50
|
||||
avgProfit:
|
||||
10431.3
|
||||
10701.3
|
||||
10289.3
|
||||
10069.9
|
||||
10850.6
|
||||
10484.8
|
||||
10350.1
|
||||
10326.3
|
||||
10453.9
|
||||
10467.4
|
||||
10049.4
|
||||
10603.5
|
||||
11024.6
|
||||
11070.8
|
||||
10234.5
|
||||
10268
|
||||
10798.3
|
||||
9880.5
|
||||
10836.7
|
||||
11107.6
|
||||
10320.1
|
||||
11855.6
|
||||
9764.31
|
||||
11123.6
|
||||
10475
|
||||
11498.3
|
||||
10815
|
||||
10594.3
|
||||
9900.24
|
||||
10777.9
|
||||
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
|
||||
20164;20164;574.598;346;0;0;250;289;9;401;0;50;689;583;370;0;50;0;0;0;0;0;0;50;50;50;50
|
||||
avgProfit:
|
||||
20154.7
|
||||
20455.9
|
||||
20073
|
||||
18945.5
|
||||
20449.9
|
||||
19784.6
|
||||
19458
|
||||
19834.6
|
||||
20212.1
|
||||
20071.6
|
||||
18646.7
|
||||
20721.6
|
||||
20994.7
|
||||
21696
|
||||
19350
|
||||
19462
|
||||
20773.9
|
||||
18405.2
|
||||
20631.2
|
||||
20984
|
||||
18959.4
|
||||
22145.5
|
||||
18483.8
|
||||
21647.1
|
||||
20124.6
|
||||
22142.5
|
||||
20811.8
|
||||
20397.9
|
||||
18593.3
|
||||
20510
|
||||
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
|
||||
26553.9;26553.9;796.113;270;0;150;190;700;270;400;0;50;850;530;370;0;50;0;0;0;0;0;0;50;50;50;50
|
||||
avgProfit:
|
||||
26799.8
|
||||
27035.6
|
||||
26275.1
|
||||
24812.5
|
||||
26806
|
||||
25731.5
|
||||
25709.3
|
||||
26040
|
||||
26796.5
|
||||
26717.3
|
||||
24063.1
|
||||
27351.1
|
||||
27509.7
|
||||
28774
|
||||
25328.3
|
||||
25695.7
|
||||
27530.2
|
||||
24353
|
||||
26997.2
|
||||
27534.5
|
||||
24894.9
|
||||
28956
|
||||
24512.9
|
||||
28704.1
|
||||
26404.1
|
||||
29275.3
|
||||
27718.4
|
||||
27043.9
|
||||
24179.5
|
||||
27068.2
|
||||
@ -0,0 +1,99 @@
|
||||
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
|
||||
25488.3;25488.3;755.133;268;0;110;190;477;270;500;0;50;654;530;370;0;50;0;0;0;0;0;0;50;50;50;50
|
||||
avgProfit:
|
||||
25609.4
|
||||
25873.7
|
||||
25413.2
|
||||
23878.9
|
||||
25764.6
|
||||
24872.7
|
||||
24604.1
|
||||
25059.6
|
||||
25695.3
|
||||
25506.2
|
||||
23307.3
|
||||
26302.3
|
||||
26478.7
|
||||
27585.3
|
||||
24356.9
|
||||
24579.8
|
||||
26361.5
|
||||
23240.8
|
||||
26012.6
|
||||
26449.8
|
||||
23820.7
|
||||
27877.6
|
||||
23386.8
|
||||
27485.6
|
||||
25413.4
|
||||
28068.6
|
||||
26454.6
|
||||
25893.9
|
||||
23353.4
|
||||
25942
|
||||
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
|
||||
26020.6;26020.8;774.88;218;0;110;190;700;266;400;0;50;846;530;450;0;50;0;0;0;0;0;0;50;50;50;50
|
||||
avgProfit:
|
||||
26186
|
||||
26404.1
|
||||
25894.4
|
||||
24381.3
|
||||
26283.5
|
||||
25336.7
|
||||
25180.9
|
||||
25542.5
|
||||
26294.8
|
||||
26116.1
|
||||
23699.7
|
||||
26835.4
|
||||
26989.9
|
||||
28161.5
|
||||
24813.8
|
||||
25087.9
|
||||
26951.7
|
||||
23788.7
|
||||
26512.6
|
||||
26979.8
|
||||
24345.2
|
||||
28472.6
|
||||
23907.3
|
||||
28056.3
|
||||
25890.8
|
||||
28668.9
|
||||
27075.7
|
||||
26478.2
|
||||
23787.7
|
||||
26501.1
|
||||
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
|
||||
26553.9;26553.9;796.113;270;0;150;190;700;270;400;0;50;850;530;370;0;50;0;0;0;0;0;0;50;50;50;50
|
||||
avgProfit:
|
||||
26799.8
|
||||
27035.6
|
||||
26275.1
|
||||
24812.5
|
||||
26806
|
||||
25731.5
|
||||
25709.3
|
||||
26040
|
||||
26796.5
|
||||
26717.3
|
||||
24063.1
|
||||
27351.1
|
||||
27509.7
|
||||
28774
|
||||
25328.3
|
||||
25695.7
|
||||
27530.2
|
||||
24353
|
||||
26997.2
|
||||
27534.5
|
||||
24894.9
|
||||
28956
|
||||
24512.9
|
||||
28704.1
|
||||
26404.1
|
||||
29275.3
|
||||
27718.4
|
||||
27043.9
|
||||
24179.5
|
||||
27068.2
|
||||
@ -0,0 +1,99 @@
|
||||
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
|
||||
10580.7;10580.8;257.666;336;0;149;190;0;1;134;0;50;301;51;370;0;50;0;0;0;0;0;0;50;50;50;50
|
||||
Risk:
|
||||
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
|
||||
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
|
||||
20164;20164;574.598;346;0;0;250;289;9;401;0;50;689;583;370;0;50;0;0;0;0;0;0;50;50;50;50
|
||||
Risk:
|
||||
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
|
||||
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
|
||||
26553.9;26553.9;796.113;270;0;150;190;700;270;400;0;50;850;530;370;0;50;0;0;0;0;0;0;50;50;50;50
|
||||
Risk:
|
||||
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
|
||||
@ -0,0 +1,99 @@
|
||||
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
|
||||
25488.3;25488.3;755.133;268;0;110;190;477;270;500;0;50;654;530;370;0;50;0;0;0;0;0;0;50;50;50;50
|
||||
Risk:
|
||||
530.713
|
||||
540.297
|
||||
540.363
|
||||
880.892
|
||||
533.022
|
||||
618.647
|
||||
672.371
|
||||
587.509
|
||||
530.713
|
||||
534.152
|
||||
1092.72
|
||||
618.438
|
||||
665.276
|
||||
1074.34
|
||||
737.478
|
||||
678.05
|
||||
632.259
|
||||
1123.76
|
||||
560.502
|
||||
655.794
|
||||
900.277
|
||||
1201.02
|
||||
1059.4
|
||||
1034.46
|
||||
540.34
|
||||
1290.13
|
||||
657.239
|
||||
542.315
|
||||
1072.76
|
||||
548.737
|
||||
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
|
||||
26020.6;26020.8;774.88;218;0;110;190;700;266;400;0;50;846;530;450;0;50;0;0;0;0;0;0;50;50;50;50
|
||||
Risk:
|
||||
545.117
|
||||
552.781
|
||||
562.228
|
||||
899.047
|
||||
545.117
|
||||
643.324
|
||||
674.499
|
||||
609.029
|
||||
545.491
|
||||
547.446
|
||||
1160.56
|
||||
629.71
|
||||
667.372
|
||||
1097.62
|
||||
769.274
|
||||
696.182
|
||||
656.859
|
||||
1119.07
|
||||
565.151
|
||||
664.345
|
||||
911.073
|
||||
1232.42
|
||||
1071.62
|
||||
1055.54
|
||||
562.586
|
||||
1324.02
|
||||
695.983
|
||||
560.188
|
||||
1119.5
|
||||
563.245
|
||||
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
|
||||
26553.9;26553.9;796.113;270;0;150;190;700;270;400;0;50;850;530;370;0;50;0;0;0;0;0;0;50;50;50;50
|
||||
Risk:
|
||||
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
|
||||
1046
Programming/WDWR/projekt/eiti-wdwr/cplex-studio/wdwr/wdwr17421-1.dat
Normal file
1046
Programming/WDWR/projekt/eiti-wdwr/cplex-studio/wdwr/wdwr17421-1.dat
Normal file
File diff suppressed because it is too large
Load Diff
@ -0,0 +1,117 @@
|
||||
/*********************************************
|
||||
* OPL 12.5.1.0 Model
|
||||
* Author: Krzysztof Rudnicki
|
||||
* Creation Date: May 23, 2017 at 6:34:43 PM
|
||||
*********************************************/
|
||||
|
||||
/***********PARAMETRY************************/
|
||||
//Paramatry zostaladniej opisane w pliku .dat oraz raporcie
|
||||
|
||||
// Parametry liczbowe
|
||||
int nMachType = ...;
|
||||
int nMonth = ...;
|
||||
int nProdType = ...;
|
||||
|
||||
int nHours = ...;
|
||||
int nScenarios = ...;
|
||||
|
||||
// Utworzenie wektorow indeksujacych
|
||||
{int} machines = asSet(1..nMachType);
|
||||
{int} months = asSet(1..nMonth);
|
||||
{int} products = asSet(1..nProdType);
|
||||
{int} scenarios = asSet(1..nScenarios);
|
||||
|
||||
//Parametry produkcji i sprzedazy
|
||||
int machineCount[machines] = ...;
|
||||
float prodTime[machines][products] = ...;
|
||||
int maxInMonth[months][products] = ...;
|
||||
|
||||
//Parametry magazynowania
|
||||
int storageMax[products] = ...;
|
||||
int storageCost = ...;
|
||||
int storageStart[products] = ...;
|
||||
|
||||
//Parametry do generowania scenariusze (nieuzywane w modelu CPLEX)
|
||||
int mu[products] = ...;
|
||||
int sigma[products][products] = ...;
|
||||
|
||||
//Macierz scenariuszy dochodow ze sprzedazy: typ produkty (kolumna) - scenariusz (wiersz)
|
||||
float sellProfit[scenarios][products] = ...;
|
||||
|
||||
/*********** ZMIENNE DECYZYJNE ********************************************/
|
||||
dvar int produce[months][products]; // Liczba wyprodukowanych
|
||||
dvar int sell[months][products]; // Liczba sprzedanych
|
||||
dvar int stock[months][products]; // Liczba w magazynie
|
||||
|
||||
// Czas wykorzystany na danym typie maszyna na dany typ produktu
|
||||
dvar float workTime[months][machines][products];
|
||||
|
||||
// Zmienna binarna - czy sprzedaz danego typu produktu przekaroczyla 80 procent pojemnosci rynku
|
||||
dvar boolean if80prec[months][products];
|
||||
|
||||
// Zmienna - ile pieniedzy nalezy odjac od dochodow z poszczegolnych produkow
|
||||
// w poszczegolnych miesiacach ze wzgledu na przekroczenie 80% pojmnosci rynku
|
||||
dvar float lowerProfit[scenarios][months][products];
|
||||
|
||||
/************ KRYTERIA OCENY *********************************************/
|
||||
// zysk policzony dla poszczegolnych scenariuszy
|
||||
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;
|
||||
|
||||
// funkcja celu
|
||||
maximize avgProfit;
|
||||
|
||||
// ************** OGRANICZENIA ******************************************/
|
||||
subject to {
|
||||
// Zmienne decyzyjne nie mniejsze niz zero
|
||||
forall(i in scenarios, m in months, mc in machines, p in products) {
|
||||
workTime[m][mc][p] >= 0;
|
||||
produce[m][p] >= 0;
|
||||
sell[m][p] >= 0;
|
||||
stock[m][p] >= 0;
|
||||
lowerProfit[i][m][p] >= 0;
|
||||
}
|
||||
// Ogranicznie czasu produkcji maszyn w miesiacu
|
||||
forall(m in months, mc in machines) {
|
||||
sum(p in products) (workTime[m][mc][p]) <= (machineCount[mc]*nHours);
|
||||
}
|
||||
// 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];
|
||||
}
|
||||
// Ogranicznie maksymalnej pojemnosci rynku
|
||||
forall(m in months, p in products) {
|
||||
sell[m][p] <= maxInMonth[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];
|
||||
}
|
||||
// Ograniczenia linearyzujace wplyw zmiennej binarnej na funkcje celu
|
||||
forall (i in scenarios,m in months, p in products) {
|
||||
lowerProfit[i][m][p] <= 1000000 * if80prec[m][p];
|
||||
lowerProfit[i][m][p] <= 0.2 * sell[m][p]*sellProfit[i][p];
|
||||
0.2 * sell[m][p]*sellProfit[i][p] - lowerProfit[i][m][p] + 1000000 * if80prec[m][p] <= 1000000;
|
||||
}
|
||||
// Ograniczenie sprzedazy oraz definicja ilosci towaru pozostajacej w magazynie
|
||||
forall(m in months, p in products) {
|
||||
if(m == 1) { //pierwszy miesiac
|
||||
sell[m][p] <= produce[m][p]+storageStart[p];
|
||||
stock[m][p]==(produce[m][p] + storageStart[p])-sell[m][p];
|
||||
}else { // kolejne miesiace
|
||||
sell[m][p] <= produce[m][p] + stock[m-1][p];
|
||||
stock[m][p]==(produce[m][p] + stock[m-1][p])-sell[m][p];
|
||||
}
|
||||
}
|
||||
// Ogranicznie maksymalnej ilosci magazynowanych produktow oraz
|
||||
// wymaganej ilosc pozostalej w magazynie na na koniec symulacji
|
||||
forall(m in months, p in products) {
|
||||
stock[m][p] <= storageMax[p];
|
||||
if(m == 3) {
|
||||
stock[m][p] >= 50;
|
||||
}
|
||||
}
|
||||
}
|
||||
@ -0,0 +1,77 @@
|
||||
/*********************************************
|
||||
* OPL 12.5.1.0 Data
|
||||
* Author: Krzysztof Rudnicki
|
||||
* Creation Date: May 24, 2017 at 10:09:32 PM
|
||||
*********************************************/
|
||||
|
||||
/***************PARAMETRY********************/
|
||||
nMachType = 5; //ilosc typow maszun
|
||||
nMonth = 3; //ilosc symulowanych miesiecy
|
||||
nProdType = 4; //ilosc typow produktow
|
||||
|
||||
nHours = 384; //liczba godzin roboczych w miesiacu 2*8*24=384
|
||||
nScenarios = 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]
|
||||
[ 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]
|
||||
[ 300 100 200 200]
|
||||
[ 0 300 100 200]];
|
||||
|
||||
// Magazyn
|
||||
storageMax = [200 200 200 200]; //maksymalna pojemnosc dla typow produktow
|
||||
storageCost = 1; //koszt magazynowania zl/sztuka/miesiac
|
||||
storageStart = [0 0 0 0]; //poczatkowa ilosc w magazynach
|
||||
|
||||
/************************* SCENARIOS *************************/
|
||||
// expected values (used only in t-student.R script)
|
||||
mu = [9 8 7 6];
|
||||
|
||||
// covariance (used only in t-student.R script)
|
||||
sigma = [[ 16 -2 -1 -3]
|
||||
[ -2 9 -4 -1]
|
||||
[ -1 -4 4 1]
|
||||
[ -3 -1 1 1]];
|
||||
|
||||
// scenarios (generated by t-student.R script)
|
||||
sellProfit = [[10.7349277395552 7.72178696852481 6.91313555665251 5.3580692014906]
|
||||
[11.4029325398093 5.35289018472828 8.44560627918346 5.94437008867837]
|
||||
[5.9511305436333 9.89072813219028 8.15019579921374 5.92283032635847]
|
||||
[6.98653442934503 9.43820696539249 6.08947859890014 6.28684001183198]
|
||||
[8.97632928181137 7.73492022936159 7.69443003815675 6.65911599366542]
|
||||
[6.3718935550723 8.80949463923562 7.79090422832384 6.81174804312265]
|
||||
[8.78246371277526 9.96223625339419 5.07839427301482 6.04541265888823]
|
||||
[8.61200211939238 6.9004774184148 8.38569802461679 6.01047636955988]
|
||||
[8.04259291408092 11.6005401405856 5.51825529023523 5.52418355625024]
|
||||
[10.2568641176451 9.42484863719592 5.61768337124079 5.44832826311492]
|
||||
[6.06345343273768 6.67810135189213 8.25425855603235 7.11046580533962]
|
||||
[8.74262951486885 8.49193741618487 8.26781448661321 5.63718569432722]
|
||||
[8.96019482191789 7.48206038212727 8.64020735666332 6.61806454609454]
|
||||
[10.7060656286305 7.74073441264031 8.70806653294011 5.56273592101066]
|
||||
[9.14849596786536 5.38206186993592 8.48324089408178 6.31836607658665]
|
||||
[10.9884988766065 5.05294389126629 7.81201862380442 5.89377116896792]
|
||||
[9.85025400030063 9.20603928762331 6.76845266520436 5.77678827669309]
|
||||
[9.76699335636152 7.83363407758539 5.01347383618885 5.84594312150737]
|
||||
[8.22098260831502 7.93964476990494 8.36747212617667 6.58666346744554]
|
||||
[9.64940023484707 7.34646951028725 8.15389801271092 6.71485257935324]
|
||||
[9.56697193644308 7.24791547600423 5.82061898605385 6.6329880618574]
|
||||
[7.64858383380397 11.8956850930214 6.57566578417732 7.52978318768004]
|
||||
[10.8667504186116 5.6239431792075 6.49095275149094 5.44747350145729]
|
||||
[11.5459204391574 6.5874000517338 8.91791399632966 5.70569902009294]
|
||||
[9.00453124705504 6.25952067886102 8.93937357845343 6.11437998871486]
|
||||
[10.4316051568988 8.89165309349428 8.00183466339121 6.22792967489147]
|
||||
[11.1403947310683 8.80153331584519 6.36710780356291 5.52424084189948]
|
||||
[9.5907049066395 9.30053224873728 6.5052199777433 5.64308372528693]
|
||||
[6.47305423724122 7.66508680006143 7.42589600717661 6.52108273658984]
|
||||
[9.76726531281191 8.22194904261638 7.1081746124431 6.13833241033153]
|
||||
];
|
||||
@ -0,0 +1,128 @@
|
||||
/*********************************************
|
||||
* OPL 12.5.1.0 Model
|
||||
* Author: mateu
|
||||
* Creation Date: May 24, 2017 at 10:08:31 PM
|
||||
*********************************************/
|
||||
|
||||
/***********PARAMETRY************************/
|
||||
//Paramatry zostaladniej opisane w pliku .dat oraz raporcie
|
||||
|
||||
// Parametry liczbowe
|
||||
int nMachType = ...;
|
||||
int nMonth = ...;
|
||||
int nProdType = ...;
|
||||
|
||||
int nHours = ...;
|
||||
int nScenarios = ...;
|
||||
|
||||
// Utworzenie wektorow indeksujacych
|
||||
{int} machines = asSet(1..nMachType);
|
||||
{int} months = asSet(1..nMonth);
|
||||
{int} products = asSet(1..nProdType);
|
||||
{int} scenarios = asSet(1..nScenarios);
|
||||
|
||||
//Parametry produkcji i sprzedazy
|
||||
int machineCount[machines] = ...;
|
||||
float prodTime[machines][products] = ...;
|
||||
int maxInMonth[months][products] = ...;
|
||||
|
||||
//Parametry magazynowania
|
||||
int storageMax[products] = ...;
|
||||
int storageCost = ...;
|
||||
int storageStart[products] = ...;
|
||||
|
||||
//Parametry do generowania scenariusze (nieuzywane w modelu CPLEX)
|
||||
int mu[products] = ...;
|
||||
int sigma[products][products] = ...;
|
||||
|
||||
//Macierz scenariuszy dochodow ze sprzedazy: typ produkty (kolumna) - scenariusz (wiersz)
|
||||
float sellProfit[scenarios][products] = ...;
|
||||
|
||||
/*********** ZMIENNE DECYZYJNE ********************************************/
|
||||
dvar int produce[months][products]; // Liczba wyprodukowanych
|
||||
dvar int sell[months][products]; // Liczba sprzedanych
|
||||
dvar int stock[months][products]; // Liczba w magazynie
|
||||
|
||||
// Czas wykorzystany na danym typie maszyna na dany typ produktu
|
||||
dvar float workTime[months][machines][products];
|
||||
|
||||
// Zmienna binarna - czy sprzedaz danego typu produktu przekaroczyla 80 procent pojemnosci rynku
|
||||
dvar boolean if80prec[months][products];
|
||||
|
||||
// Zmienna - ile pieniedzy nalezy odjac od dochodow z poszczegolnych produkow
|
||||
// w poszczegolnych miesiacach ze wzgledu na przekroczenie 80% pojmnosci rynku
|
||||
dvar float lowerProfit[scenarios][months][products];
|
||||
|
||||
/************ KRYTERIA OCENY *********************************************/
|
||||
// ZYSK policzony dla poszczegolnych scenariuszy
|
||||
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;
|
||||
|
||||
// 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
|
||||
);
|
||||
|
||||
// funkcja celu
|
||||
//minimize giniRisk;
|
||||
maximize avgProfit;
|
||||
|
||||
// ************** OGRANICZENIA ******************************************/
|
||||
subject to {
|
||||
// Zmienne decyzyjne nie mniejsze niz zero
|
||||
forall(i in scenarios, m in months, mc in machines, p in products) {
|
||||
workTime[m][mc][p] >= 0;
|
||||
produce[m][p] >= 0;
|
||||
sell[m][p] >= 0;
|
||||
stock[m][p] >= 0;
|
||||
lowerProfit[i][m][p] >= 0;
|
||||
}
|
||||
// Ogranicznie czasu produkcji maszyn w miesiacu
|
||||
forall(m in months, mc in machines) {
|
||||
sum(p in products) (workTime[m][mc][p]) <= (machineCount[mc]*nHours);
|
||||
}
|
||||
// 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];
|
||||
}
|
||||
// Ogranicznie maksymalnej pojemnosci rynku
|
||||
forall(m in months, p in products) {
|
||||
sell[m][p] <= maxInMonth[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];
|
||||
}
|
||||
// Ograniczenia linearyzujace wplyw zmiennej binarnej na funkcje celu
|
||||
forall (i in scenarios,m in months, p in products) {
|
||||
lowerProfit[i][m][p] <= 1000000 * if80prec[m][p];
|
||||
lowerProfit[i][m][p] <= 0.2 * sell[m][p]*sellProfit[i][p];
|
||||
0.2 * sell[m][p]*sellProfit[i][p] - lowerProfit[i][m][p] + 1000000 * if80prec[m][p] <= 1000000;
|
||||
}
|
||||
// Ograniczenie sprzedazy oraz definicja ilosci towaru pozostajacej w magazynie
|
||||
forall(m in months, p in products) {
|
||||
if(m == 1) { //pierwszy miesiac
|
||||
sell[m][p] <= produce[m][p]+storageStart[p];
|
||||
stock[m][p]==(produce[m][p] + storageStart[p])-sell[m][p];
|
||||
}else { // kolejne miesiace
|
||||
sell[m][p] <= produce[m][p] + stock[m-1][p];
|
||||
stock[m][p]==(produce[m][p] + stock[m-1][p])-sell[m][p];
|
||||
}
|
||||
}
|
||||
// Ogranicznie maksymalnej ilosci magazynowanych produktow oraz
|
||||
// wymaganej ilosc pozostalej w magazynie na na koniec symulacji
|
||||
forall(m in months, p in products) {
|
||||
stock[m][p] <= storageMax[p];
|
||||
if(m == 3) {
|
||||
stock[m][p] >= 50;
|
||||
}
|
||||
}
|
||||
}
|
||||
execute {
|
||||
cplex.tilim = 600;
|
||||
writeln("avgProfit: ",avgProfit,", giniRisk: ",giniRisk);
|
||||
}
|
||||
@ -0,0 +1,80 @@
|
||||
/*********************************************
|
||||
* OPL 12.5.1.0 Data
|
||||
* Author: Krzysztof Rudnicki
|
||||
* Creation Date: May 24, 2017 at 10:09:32 PM
|
||||
*********************************************/
|
||||
|
||||
/***************PARAMETRY********************/
|
||||
nMachType = 5; //ilosc typow maszun
|
||||
nMonth = 3; //ilosc symulowanych miesiecy
|
||||
nProdType = 4; //ilosc typow produktow
|
||||
|
||||
nHours = 384; //liczba godzin roboczych w miesiacu 2*8*24=384
|
||||
nScenarios = 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]
|
||||
[ 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]
|
||||
[ 300 100 200 200]
|
||||
[ 0 300 100 200]];
|
||||
|
||||
// Magazyn
|
||||
storageMax = [200 200 200 200]; //maksymalna pojemnosc dla typow produktow
|
||||
storageCost = 1; //koszt magazynowania zl/sztuka/miesiac
|
||||
storageStart = [0 0 0 0]; //poczatkowa ilosc w magazynach
|
||||
|
||||
/******************* METODA: WYMAGANY POZIOM ZYSKU ***********/
|
||||
minAvgProfit = 20000.0; //wymagany poziom zysku
|
||||
|
||||
/************************* SCENARIOS *************************/
|
||||
// expected values (used only in t-student.R script)
|
||||
mu = [9 8 7 6];
|
||||
|
||||
// covariance (used only in t-student.R script)
|
||||
sigma = [[ 16 -2 -1 -3]
|
||||
[ -2 9 -4 -1]
|
||||
[ -1 -4 4 1]
|
||||
[ -3 -1 1 1]];
|
||||
|
||||
// scenarios (generated by t-student.R script)
|
||||
sellProfit = [[10.7349277395552 7.72178696852481 6.91313555665251 5.3580692014906]
|
||||
[11.4029325398093 5.35289018472828 8.44560627918346 5.94437008867837]
|
||||
[5.9511305436333 9.89072813219028 8.15019579921374 5.92283032635847]
|
||||
[6.98653442934503 9.43820696539249 6.08947859890014 6.28684001183198]
|
||||
[8.97632928181137 7.73492022936159 7.69443003815675 6.65911599366542]
|
||||
[6.3718935550723 8.80949463923562 7.79090422832384 6.81174804312265]
|
||||
[8.78246371277526 9.96223625339419 5.07839427301482 6.04541265888823]
|
||||
[8.61200211939238 6.9004774184148 8.38569802461679 6.01047636955988]
|
||||
[8.04259291408092 11.6005401405856 5.51825529023523 5.52418355625024]
|
||||
[10.2568641176451 9.42484863719592 5.61768337124079 5.44832826311492]
|
||||
[6.06345343273768 6.67810135189213 8.25425855603235 7.11046580533962]
|
||||
[8.74262951486885 8.49193741618487 8.26781448661321 5.63718569432722]
|
||||
[8.96019482191789 7.48206038212727 8.64020735666332 6.61806454609454]
|
||||
[10.7060656286305 7.74073441264031 8.70806653294011 5.56273592101066]
|
||||
[9.14849596786536 5.38206186993592 8.48324089408178 6.31836607658665]
|
||||
[10.9884988766065 5.05294389126629 7.81201862380442 5.89377116896792]
|
||||
[9.85025400030063 9.20603928762331 6.76845266520436 5.77678827669309]
|
||||
[9.76699335636152 7.83363407758539 5.01347383618885 5.84594312150737]
|
||||
[8.22098260831502 7.93964476990494 8.36747212617667 6.58666346744554]
|
||||
[9.64940023484707 7.34646951028725 8.15389801271092 6.71485257935324]
|
||||
[9.56697193644308 7.24791547600423 5.82061898605385 6.6329880618574]
|
||||
[7.64858383380397 11.8956850930214 6.57566578417732 7.52978318768004]
|
||||
[10.8667504186116 5.6239431792075 6.49095275149094 5.44747350145729]
|
||||
[11.5459204391574 6.5874000517338 8.91791399632966 5.70569902009294]
|
||||
[9.00453124705504 6.25952067886102 8.93937357845343 6.11437998871486]
|
||||
[10.4316051568988 8.89165309349428 8.00183466339121 6.22792967489147]
|
||||
[11.1403947310683 8.80153331584519 6.36710780356291 5.52424084189948]
|
||||
[9.5907049066395 9.30053224873728 6.5052199777433 5.64308372528693]
|
||||
[6.47305423724122 7.66508680006143 7.42589600717661 6.52108273658984]
|
||||
[9.76726531281191 8.22194904261638 7.1081746124431 6.13833241033153]
|
||||
];
|
||||
@ -0,0 +1,164 @@
|
||||
/*********************************************
|
||||
* OPL 12.5.1.0 Model
|
||||
* Author: mateu
|
||||
* Creation Date: May 24, 2017 at 10:08:31 PM
|
||||
*********************************************/
|
||||
|
||||
/***********PARAMETRY************************/
|
||||
//Paramatry zostaladniej opisane w pliku .dat oraz raporcie
|
||||
|
||||
// Parametry liczbowe
|
||||
int nMachType = ...;
|
||||
int nMonth = ...;
|
||||
int nProdType = ...;
|
||||
|
||||
int nHours = ...;
|
||||
int nScenarios = ...;
|
||||
|
||||
// Utworzenie wektorow indeksujacych
|
||||
{int} machines = asSet(1..nMachType);
|
||||
{int} months = asSet(1..nMonth);
|
||||
{int} products = asSet(1..nProdType);
|
||||
{int} scenarios = asSet(1..nScenarios);
|
||||
|
||||
//Parametry produkcji i sprzedazy
|
||||
int machineCount[machines] = ...;
|
||||
float prodTime[machines][products] = ...;
|
||||
int maxInMonth[months][products] = ...;
|
||||
|
||||
//Parametry magazynowania
|
||||
int storageMax[products] = ...;
|
||||
int storageCost = ...;
|
||||
int storageStart[products] = ...;
|
||||
|
||||
//Parametry do generowania scenariusze (nieuzywane w modelu CPLEX)
|
||||
int mu[products] = ...;
|
||||
int sigma[products][products] = ...;
|
||||
|
||||
//Macierz scenariuszy dochodow ze sprzedazy: typ produkty (kolumna) - scenariusz (wiersz)
|
||||
float sellProfit[scenarios][products] = ...;
|
||||
|
||||
/******************* PARAMTERY METODY: WYMAGANY POZIOM ZYSKU ***********/
|
||||
float minAvgProfit = ...; //wymagany poziom zysku
|
||||
|
||||
/*********** ZMIENNE DECYZYJNE ********************************************/
|
||||
dvar int produce[months][products]; // Liczba wyprodukowanych
|
||||
dvar int sell[months][products]; // Liczba sprzedanych
|
||||
dvar int stock[months][products]; // Liczba w magazynie
|
||||
|
||||
// Czas wykorzystany na danym typie maszyna na dany typ produktu
|
||||
dvar float workTime[months][machines][products];
|
||||
|
||||
// Zmienna binarna - czy sprzedaz danego typu produktu przekaroczyla 80 procent pojemnosci rynku
|
||||
dvar boolean if80prec[months][products];
|
||||
|
||||
// Zmienna - ile pieniedzy nalezy odjac od dochodow z poszczegolnych produkow
|
||||
// w poszczegolnych miesiacach ze wzgledu na przekroczenie 80% pojmnosci rynku
|
||||
dvar float lowerProfit[scenarios][months][products];
|
||||
|
||||
/************ KRYTERIA OCENY *********************************************/
|
||||
// ZYSK policzony dla poszczegolnych scenariuszy
|
||||
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;
|
||||
|
||||
// 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
|
||||
);
|
||||
|
||||
// funkcja celu
|
||||
minimize giniRisk;
|
||||
//maximize avgProfit;
|
||||
|
||||
// ************** OGRANICZENIA ******************************************/
|
||||
subject to {
|
||||
// Zmienne decyzyjne nie mniejsze niz zero
|
||||
forall(i in scenarios, m in months, mc in machines, p in products) {
|
||||
workTime[m][mc][p] >= 0;
|
||||
produce[m][p] >= 0;
|
||||
sell[m][p] >= 0;
|
||||
stock[m][p] >= 0;
|
||||
lowerProfit[i][m][p] >= 0;
|
||||
}
|
||||
// Ogranicznie czasu produkcji maszyn w miesiacu
|
||||
forall(m in months, mc in machines) {
|
||||
sum(p in products) (workTime[m][mc][p]) <= (machineCount[mc]*nHours);
|
||||
}
|
||||
// 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];
|
||||
}
|
||||
// Ogranicznie maksymalnej pojemnosci rynku
|
||||
forall(m in months, p in products) {
|
||||
sell[m][p] <= maxInMonth[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];
|
||||
}
|
||||
// Ograniczenia linearyzujace wplyw zmiennej binarnej na funkcje celu
|
||||
forall (i in scenarios,m in months, p in products) {
|
||||
lowerProfit[i][m][p] <= 1000000 * if80prec[m][p];
|
||||
lowerProfit[i][m][p] <= 0.2 * sell[m][p]*sellProfit[i][p];
|
||||
0.2 * sell[m][p]*sellProfit[i][p] - lowerProfit[i][m][p] + 1000000 * if80prec[m][p] <= 1000000;
|
||||
}
|
||||
// Ograniczenie sprzedazy oraz definicja ilosci towaru pozostajacej w magazynie
|
||||
forall(m in months, p in products) {
|
||||
if(m == 1) { //pierwszy miesiac
|
||||
sell[m][p] <= produce[m][p]+storageStart[p];
|
||||
stock[m][p]==(produce[m][p] + storageStart[p])-sell[m][p];
|
||||
}else { // kolejne miesiace
|
||||
sell[m][p] <= produce[m][p] + stock[m-1][p];
|
||||
stock[m][p]==(produce[m][p] + stock[m-1][p])-sell[m][p];
|
||||
}
|
||||
}
|
||||
// Ogranicznie maksymalnej ilosci magazynowanych produktow oraz
|
||||
// wymaganej ilosc pozostalej w magazynie na na koniec symulacji
|
||||
forall(m in months, p in products) {
|
||||
stock[m][p] <= storageMax[p];
|
||||
if(m == 3) {
|
||||
stock[m][p] >= 50;
|
||||
}
|
||||
}
|
||||
/******************OGRANICZENIE: WYMAGANY POZIOM ZYSKU ****************************/
|
||||
avgProfit>=minAvgProfit;
|
||||
|
||||
}// Koniec ogranicznen
|
||||
|
||||
main {
|
||||
var file = new IloOplOutputFile("result-minAvgProfit.txt");
|
||||
//var fileAP = new IloOplOutputFile("avgProfitScenario.txt");
|
||||
//var fileMR = new IloOplOutputFile("maxRiskScenario.txt");
|
||||
|
||||
var mod = thisOplModel;
|
||||
var def = mod.modelDefinition;
|
||||
var data = mod.dataElements;
|
||||
var maxAvgProfit = 26553;
|
||||
var i = 1;
|
||||
|
||||
file.writeln("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");
|
||||
|
||||
data.minAvgProfit = -600.0;
|
||||
|
||||
while (data.minAvgProfit <= maxAvgProfit) {
|
||||
mod = new IloOplModel (def, cplex);
|
||||
mod.addDataSource(data);
|
||||
mod.generate();
|
||||
cplex.tilim = 300;
|
||||
cplex.solve();
|
||||
file.writeln(i,";",data.minAvgProfit,";",mod.avgProfit,";",mod.giniRisk,";",mod.produce[1][1],";",mod.produce[1][2],";",mod.produce[1][3],";",mod.produce[1][4], ";",mod.produce[2][1],";",mod.produce[2][2],";",mod.produce[2][3],";",mod.produce[2][4],";",mod.produce[3][1],";",mod.produce[3][2], ";",mod.produce[3][3],";",mod.produce[3][4],";",mod.stock[1][1],";",mod.stock[1][2],";",mod.stock[1][3],";",mod.stock[1][4], ";",mod.stock[2][1],";",mod.stock[2][2],";",mod.stock[2][3],";",mod.stock[2][4],";",mod.stock[3][1],";",mod.stock[3][2], ";",mod.stock[3][3],";",mod.stock[3][4]);
|
||||
writeln(i," minAvgProfit: ",data.minAvgProfit," avgProfit: ",mod.avgProfit,", giniRisk: ",mod.giniRisk);
|
||||
mod.end();
|
||||
data.minAvgProfit = data.minAvgProfit + 532.41;
|
||||
i = i+1;
|
||||
};
|
||||
|
||||
|
||||
file.close();
|
||||
//fileAP.close();
|
||||
//fileMR.close();
|
||||
}
|
||||
@ -0,0 +1,80 @@
|
||||
/*********************************************
|
||||
* OPL 12.5.1.0 Data
|
||||
* Author: Krzysztof Rudnicki
|
||||
* Creation Date: May 24, 2017 at 10:09:32 PM
|
||||
*********************************************/
|
||||
|
||||
/***************PARAMETRY********************/
|
||||
nMachType = 5; //ilosc typow maszun
|
||||
nMonth = 3; //ilosc symulowanych miesiecy
|
||||
nProdType = 4; //ilosc typow produktow
|
||||
|
||||
nHours = 384; //liczba godzin roboczych w miesiacu 2*8*24=384
|
||||
nScenarios = 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]
|
||||
[ 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]
|
||||
[ 300 100 200 200]
|
||||
[ 0 300 100 200]];
|
||||
|
||||
// Magazyn
|
||||
storageMax = [200 200 200 200]; //maksymalna pojemnosc dla typow produktow
|
||||
storageCost = 1; //koszt magazynowania zl/sztuka/miesiac
|
||||
storageStart = [0 0 0 0]; //poczatkowa ilosc w magazynach
|
||||
|
||||
/******************* METODA: WYMAGANY POZIOM ZYSKU ***********/
|
||||
minAvgProfit = 20000.0; //wymagany poziom zysku
|
||||
|
||||
/************************* SCENARIOS *************************/
|
||||
// expected values (used only in t-student.R script)
|
||||
mu = [9 8 7 6];
|
||||
|
||||
// covariance (used only in t-student.R script)
|
||||
sigma = [[ 16 -2 -1 -3]
|
||||
[ -2 9 -4 -1]
|
||||
[ -1 -4 4 1]
|
||||
[ -3 -1 1 1]];
|
||||
|
||||
// scenarios (generated by t-student.R script)
|
||||
sellProfit = [[10.7349277395552 7.72178696852481 6.91313555665251 5.3580692014906]
|
||||
[11.4029325398093 5.35289018472828 8.44560627918346 5.94437008867837]
|
||||
[5.9511305436333 9.89072813219028 8.15019579921374 5.92283032635847]
|
||||
[6.98653442934503 9.43820696539249 6.08947859890014 6.28684001183198]
|
||||
[8.97632928181137 7.73492022936159 7.69443003815675 6.65911599366542]
|
||||
[6.3718935550723 8.80949463923562 7.79090422832384 6.81174804312265]
|
||||
[8.78246371277526 9.96223625339419 5.07839427301482 6.04541265888823]
|
||||
[8.61200211939238 6.9004774184148 8.38569802461679 6.01047636955988]
|
||||
[8.04259291408092 11.6005401405856 5.51825529023523 5.52418355625024]
|
||||
[10.2568641176451 9.42484863719592 5.61768337124079 5.44832826311492]
|
||||
[6.06345343273768 6.67810135189213 8.25425855603235 7.11046580533962]
|
||||
[8.74262951486885 8.49193741618487 8.26781448661321 5.63718569432722]
|
||||
[8.96019482191789 7.48206038212727 8.64020735666332 6.61806454609454]
|
||||
[10.7060656286305 7.74073441264031 8.70806653294011 5.56273592101066]
|
||||
[9.14849596786536 5.38206186993592 8.48324089408178 6.31836607658665]
|
||||
[10.9884988766065 5.05294389126629 7.81201862380442 5.89377116896792]
|
||||
[9.85025400030063 9.20603928762331 6.76845266520436 5.77678827669309]
|
||||
[9.76699335636152 7.83363407758539 5.01347383618885 5.84594312150737]
|
||||
[8.22098260831502 7.93964476990494 8.36747212617667 6.58666346744554]
|
||||
[9.64940023484707 7.34646951028725 8.15389801271092 6.71485257935324]
|
||||
[9.56697193644308 7.24791547600423 5.82061898605385 6.6329880618574]
|
||||
[7.64858383380397 11.8956850930214 6.57566578417732 7.52978318768004]
|
||||
[10.8667504186116 5.6239431792075 6.49095275149094 5.44747350145729]
|
||||
[11.5459204391574 6.5874000517338 8.91791399632966 5.70569902009294]
|
||||
[9.00453124705504 6.25952067886102 8.93937357845343 6.11437998871486]
|
||||
[10.4316051568988 8.89165309349428 8.00183466339121 6.22792967489147]
|
||||
[11.1403947310683 8.80153331584519 6.36710780356291 5.52424084189948]
|
||||
[9.5907049066395 9.30053224873728 6.5052199777433 5.64308372528693]
|
||||
[6.47305423724122 7.66508680006143 7.42589600717661 6.52108273658984]
|
||||
[9.76726531281191 8.22194904261638 7.1081746124431 6.13833241033153]
|
||||
];
|
||||
@ -0,0 +1,248 @@
|
||||
/*********************************************
|
||||
* OPL 12.5.1.0 Model
|
||||
* Author: mateu
|
||||
* Creation Date: May 24, 2017 at 10:08:31 PM
|
||||
*********************************************/
|
||||
|
||||
/***********PARAMETRY************************/
|
||||
//Paramatry zostaladniej opisane w pliku .dat oraz raporcie
|
||||
|
||||
// Parametry liczbowe
|
||||
int nMachType = ...;
|
||||
int nMonth = ...;
|
||||
int nProdType = ...;
|
||||
|
||||
int nHours = ...;
|
||||
int nScenarios = ...;
|
||||
|
||||
// Utworzenie wektorow indeksujacych
|
||||
{int} machines = asSet(1..nMachType);
|
||||
{int} months = asSet(1..nMonth);
|
||||
{int} products = asSet(1..nProdType);
|
||||
{int} scenarios = asSet(1..nScenarios);
|
||||
|
||||
//Parametry produkcji i sprzedazy
|
||||
int machineCount[machines] = ...;
|
||||
float prodTime[machines][products] = ...;
|
||||
int maxInMonth[months][products] = ...;
|
||||
|
||||
//Parametry magazynowania
|
||||
int storageMax[products] = ...;
|
||||
int storageCost = ...;
|
||||
int storageStart[products] = ...;
|
||||
|
||||
//Parametry do generowania scenariusze (nieuzywane w modelu CPLEX)
|
||||
int mu[products] = ...;
|
||||
int sigma[products][products] = ...;
|
||||
|
||||
//Macierz scenariuszy dochodow ze sprzedazy: typ produkty (kolumna) - scenariusz (wiersz)
|
||||
float sellProfit[scenarios][products] = ...;
|
||||
|
||||
/******************* PARAMTERY METODY: WYMAGANY POZIOM ZYSKU ***********/
|
||||
float minAvgProfit = ...; //wymagany poziom zysku
|
||||
|
||||
/*********** ZMIENNE DECYZYJNE ********************************************/
|
||||
dvar int produce[months][products]; // Liczba wyprodukowanych
|
||||
dvar int sell[months][products]; // Liczba sprzedanych
|
||||
dvar int stock[months][products]; // Liczba w magazynie
|
||||
|
||||
// Czas wykorzystany na danym typie maszyna na dany typ produktu
|
||||
dvar float workTime[months][machines][products];
|
||||
|
||||
// Zmienna binarna - czy sprzedaz danego typu produktu przekaroczyla 80 procent pojemnosci rynku
|
||||
dvar boolean if80prec[months][products];
|
||||
|
||||
// Zmienna - ile pieniedzy nalezy odjac od dochodow z poszczegolnych produkow
|
||||
// w poszczegolnych miesiacach ze wzgledu na przekroczenie 80% pojmnosci rynku
|
||||
dvar float lowerProfit[scenarios][months][products];
|
||||
|
||||
/************ KRYTERIA OCENY *********************************************/
|
||||
// ZYSK policzony dla poszczegolnych scenariuszy
|
||||
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;
|
||||
|
||||
// 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
|
||||
);
|
||||
|
||||
// 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
|
||||
);
|
||||
|
||||
// funkcja celu
|
||||
minimize giniRisk;
|
||||
//maximize avgProfit;
|
||||
|
||||
// ************** OGRANICZENIA ******************************************/
|
||||
subject to {
|
||||
// Zmienne decyzyjne nie mniejsze niz zero
|
||||
forall(i in scenarios, m in months, mc in machines, p in products) {
|
||||
workTime[m][mc][p] >= 0;
|
||||
produce[m][p] >= 0;
|
||||
sell[m][p] >= 0;
|
||||
stock[m][p] >= 0;
|
||||
lowerProfit[i][m][p] >= 0;
|
||||
}
|
||||
// Ogranicznie czasu produkcji maszyn w miesiacu
|
||||
forall(m in months, mc in machines) {
|
||||
sum(p in products) (workTime[m][mc][p]) <= (machineCount[mc]*nHours);
|
||||
}
|
||||
// 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];
|
||||
}
|
||||
// Ogranicznie maksymalnej pojemnosci rynku
|
||||
forall(m in months, p in products) {
|
||||
sell[m][p] <= maxInMonth[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];
|
||||
}
|
||||
// Ograniczenia linearyzujace wplyw zmiennej binarnej na funkcje celu
|
||||
forall (i in scenarios,m in months, p in products) {
|
||||
lowerProfit[i][m][p] <= 1000000 * if80prec[m][p];
|
||||
lowerProfit[i][m][p] <= 0.2 * sell[m][p]*sellProfit[i][p];
|
||||
0.2 * sell[m][p]*sellProfit[i][p] - lowerProfit[i][m][p] + 1000000 * if80prec[m][p] <= 1000000;
|
||||
}
|
||||
// Ograniczenie sprzedazy oraz definicja ilosci towaru pozostajacej w magazynie
|
||||
forall(m in months, p in products) {
|
||||
if(m == 1) { //pierwszy miesiac
|
||||
sell[m][p] <= produce[m][p]+storageStart[p];
|
||||
stock[m][p]==(produce[m][p] + storageStart[p])-sell[m][p];
|
||||
}else { // kolejne miesiace
|
||||
sell[m][p] <= produce[m][p] + stock[m-1][p];
|
||||
stock[m][p]==(produce[m][p] + stock[m-1][p])-sell[m][p];
|
||||
}
|
||||
}
|
||||
// Ogranicznie maksymalnej ilosci magazynowanych produktow oraz
|
||||
// wymaganej ilosc pozostalej w magazynie na na koniec symulacji
|
||||
forall(m in months, p in products) {
|
||||
stock[m][p] <= storageMax[p];
|
||||
if(m == 3) {
|
||||
stock[m][p] >= 50;
|
||||
}
|
||||
}
|
||||
/******************OGRANICZENIE: WYMAGANY POZIOM ZYSKU ****************************/
|
||||
avgProfit>=minAvgProfit;
|
||||
|
||||
}// Koniec ogranicznen
|
||||
|
||||
main {
|
||||
//var fileProfit = new IloOplOutputFile("results-minAvgProfit-FSD-profit.txt");
|
||||
//var fileRisk = new IloOplOutputFile("results-minAvgProfit-FSD-risk.txt");
|
||||
var fileProfit = new IloOplOutputFile("results-minAvgProfit-FSD-profit(2).txt");
|
||||
var fileRisk = new IloOplOutputFile("results-minAvgProfit-FSD-risk(2).txt");
|
||||
|
||||
var mod = thisOplModel;
|
||||
var def = mod.modelDefinition;
|
||||
var data = mod.dataElements;
|
||||
var maxAvgProfit = 26553;
|
||||
var i = 1;
|
||||
/**************** Pierwsze wybrane rozwiazanie ************************************/
|
||||
fileProfit.writeln("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");
|
||||
fileRisk.writeln("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");
|
||||
|
||||
//data.minAvgProfit = 25488.3;
|
||||
data.minAvgProfit = 10580.7;
|
||||
|
||||
mod = new IloOplModel (def, cplex);
|
||||
mod.addDataSource(data);
|
||||
mod.generate();
|
||||
|
||||
writeln("Pierwsze wybrane rozwiazanie: ");
|
||||
cplex.solve();
|
||||
|
||||
writeln(i," minAvgProfit: ",data.minAvgProfit," avgProfit: ",mod.avgProfit,", giniRisk: ",mod.giniRisk);
|
||||
fileProfit.writeln(data.minAvgProfit,";",mod.avgProfit,";",mod.giniRisk,";",mod.produce[1][1],";",mod.produce[1][2],";",mod.produce[1][3],";",mod.produce[1][4], ";",mod.produce[2][1],";",mod.produce[2][2],";",mod.produce[2][3],";",mod.produce[2][4],";",mod.produce[3][1],";",mod.produce[3][2], ";",mod.produce[3][3],";",mod.produce[3][4],";",mod.stock[1][1],";",mod.stock[1][2],";",mod.stock[1][3],";",mod.stock[1][4], ";",mod.stock[2][1],";",mod.stock[2][2],";",mod.stock[2][3],";",mod.stock[2][4],";",mod.stock[3][1],";",mod.stock[3][2], ";",mod.stock[3][3],";",mod.stock[3][4]);
|
||||
fileRisk.writeln(data.minAvgProfit,";",mod.avgProfit,";",mod.giniRisk,";",mod.produce[1][1],";",mod.produce[1][2],";",mod.produce[1][3],";",mod.produce[1][4], ";",mod.produce[2][1],";",mod.produce[2][2],";",mod.produce[2][3],";",mod.produce[2][4],";",mod.produce[3][1],";",mod.produce[3][2], ";",mod.produce[3][3],";",mod.produce[3][4],";",mod.stock[1][1],";",mod.stock[1][2],";",mod.stock[1][3],";",mod.stock[1][4], ";",mod.stock[2][1],";",mod.stock[2][2],";",mod.stock[2][3],";",mod.stock[2][4],";",mod.stock[3][1],";",mod.stock[3][2], ";",mod.stock[3][3],";",mod.stock[3][4]);
|
||||
|
||||
i = 1;
|
||||
fileProfit.writeln("avgProfit: ");
|
||||
while (i<=data.nScenarios) {
|
||||
fileProfit.writeln(mod.profit[i]);
|
||||
i++;
|
||||
};
|
||||
|
||||
i = 1;
|
||||
fileRisk.writeln("Risk: ");
|
||||
while (i<=data.nScenarios) {
|
||||
fileRisk.writeln(mod.risk[i]);
|
||||
i++;
|
||||
};
|
||||
|
||||
/**************** Drugie wybrane rozwiazanie ************************************/
|
||||
fileProfit.writeln("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");
|
||||
fileRisk.writeln("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");
|
||||
|
||||
//data.minAvgProfit = 26020.6;
|
||||
data.minAvgProfit = 20164;
|
||||
|
||||
|
||||
mod = new IloOplModel (def, cplex);
|
||||
mod.addDataSource(data);
|
||||
mod.generate();
|
||||
|
||||
writeln("Drugie wybrane rozwiazanie: ");
|
||||
cplex.solve();
|
||||
|
||||
writeln(i," minAvgProfit: ",data.minAvgProfit," avgProfit: ",mod.avgProfit,", giniRisk: ",mod.giniRisk);
|
||||
fileProfit.writeln(data.minAvgProfit,";",mod.avgProfit,";",mod.giniRisk,";",mod.produce[1][1],";",mod.produce[1][2],";",mod.produce[1][3],";",mod.produce[1][4], ";",mod.produce[2][1],";",mod.produce[2][2],";",mod.produce[2][3],";",mod.produce[2][4],";",mod.produce[3][1],";",mod.produce[3][2], ";",mod.produce[3][3],";",mod.produce[3][4],";",mod.stock[1][1],";",mod.stock[1][2],";",mod.stock[1][3],";",mod.stock[1][4], ";",mod.stock[2][1],";",mod.stock[2][2],";",mod.stock[2][3],";",mod.stock[2][4],";",mod.stock[3][1],";",mod.stock[3][2], ";",mod.stock[3][3],";",mod.stock[3][4]);
|
||||
fileRisk.writeln(data.minAvgProfit,";",mod.avgProfit,";",mod.giniRisk,";",mod.produce[1][1],";",mod.produce[1][2],";",mod.produce[1][3],";",mod.produce[1][4], ";",mod.produce[2][1],";",mod.produce[2][2],";",mod.produce[2][3],";",mod.produce[2][4],";",mod.produce[3][1],";",mod.produce[3][2], ";",mod.produce[3][3],";",mod.produce[3][4],";",mod.stock[1][1],";",mod.stock[1][2],";",mod.stock[1][3],";",mod.stock[1][4], ";",mod.stock[2][1],";",mod.stock[2][2],";",mod.stock[2][3],";",mod.stock[2][4],";",mod.stock[3][1],";",mod.stock[3][2], ";",mod.stock[3][3],";",mod.stock[3][4]);
|
||||
|
||||
i = 1;
|
||||
fileProfit.writeln("avgProfit: ");
|
||||
while (i<=data.nScenarios) {
|
||||
fileProfit.writeln(mod.profit[i]);
|
||||
i++;
|
||||
};
|
||||
|
||||
i = 1;
|
||||
fileRisk.writeln("Risk: ");
|
||||
while (i<=data.nScenarios) {
|
||||
fileRisk.writeln(mod.risk[i]);
|
||||
i++;
|
||||
};
|
||||
|
||||
/**************** Trzecie wybrane rozwiazanie ************************************/
|
||||
fileProfit.writeln("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");
|
||||
fileRisk.writeln("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");
|
||||
|
||||
//data.minAvgProfit = 26553.9;
|
||||
data.minAvgProfit = 26553.9;
|
||||
|
||||
mod = new IloOplModel (def, cplex);
|
||||
mod.addDataSource(data);
|
||||
mod.generate();
|
||||
|
||||
writeln("Trzecie wybrane rozwiazanie: ");
|
||||
cplex.solve();
|
||||
|
||||
writeln(i," minAvgProfit: ",data.minAvgProfit," avgProfit: ",mod.avgProfit,", giniRisk: ",mod.giniRisk);
|
||||
fileProfit.writeln(data.minAvgProfit,";",mod.avgProfit,";",mod.giniRisk,";",mod.produce[1][1],";",mod.produce[1][2],";",mod.produce[1][3],";",mod.produce[1][4], ";",mod.produce[2][1],";",mod.produce[2][2],";",mod.produce[2][3],";",mod.produce[2][4],";",mod.produce[3][1],";",mod.produce[3][2], ";",mod.produce[3][3],";",mod.produce[3][4],";",mod.stock[1][1],";",mod.stock[1][2],";",mod.stock[1][3],";",mod.stock[1][4], ";",mod.stock[2][1],";",mod.stock[2][2],";",mod.stock[2][3],";",mod.stock[2][4],";",mod.stock[3][1],";",mod.stock[3][2], ";",mod.stock[3][3],";",mod.stock[3][4]);
|
||||
fileRisk.writeln(data.minAvgProfit,";",mod.avgProfit,";",mod.giniRisk,";",mod.produce[1][1],";",mod.produce[1][2],";",mod.produce[1][3],";",mod.produce[1][4], ";",mod.produce[2][1],";",mod.produce[2][2],";",mod.produce[2][3],";",mod.produce[2][4],";",mod.produce[3][1],";",mod.produce[3][2], ";",mod.produce[3][3],";",mod.produce[3][4],";",mod.stock[1][1],";",mod.stock[1][2],";",mod.stock[1][3],";",mod.stock[1][4], ";",mod.stock[2][1],";",mod.stock[2][2],";",mod.stock[2][3],";",mod.stock[2][4],";",mod.stock[3][1],";",mod.stock[3][2], ";",mod.stock[3][3],";",mod.stock[3][4]);
|
||||
|
||||
i = 1;
|
||||
fileProfit.writeln("avgProfit: ");
|
||||
while (i<=data.nScenarios) {
|
||||
fileProfit.writeln(mod.profit[i]);
|
||||
i++;
|
||||
};
|
||||
|
||||
i = 1;
|
||||
fileRisk.writeln("Risk: ");
|
||||
while (i<=data.nScenarios) {
|
||||
fileRisk.writeln(mod.risk[i]);
|
||||
i++;
|
||||
};
|
||||
|
||||
|
||||
fileProfit.close();
|
||||
fileRisk.close();
|
||||
}
|
||||
Binary file not shown.
Binary file not shown.
|
After Width: | Height: | Size: 15 KiB |
Binary file not shown.
|
After Width: | Height: | Size: 20 KiB |
Binary file not shown.
|
After Width: | Height: | Size: 30 KiB |
Binary file not shown.
|
After Width: | Height: | Size: 30 KiB |
467
Programming/WDWR/projekt/eiti-wdwr/docs/LATEX/raport.tex
Normal file
467
Programming/WDWR/projekt/eiti-wdwr/docs/LATEX/raport.tex
Normal file
@ -0,0 +1,467 @@
|
||||
\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}
|
||||
\usepackage{relsize,amsfonts}
|
||||
\usepackage{enumitem}
|
||||
\usepackage{graphicx}
|
||||
|
||||
\newcommand\bigexists{%
|
||||
\mathop{\lower0.75ex\hbox{\ensuremath{%
|
||||
\mathlarger{\mathlarger{\mathlarger{\mathlarger{\exists}}}}}}}%
|
||||
\limits}
|
||||
|
||||
\newcommand\bigforall{%
|
||||
\mathop{\lower0.75ex\hbox{\ensuremath{%
|
||||
\mathlarger{\mathlarger{\mathlarger{\mathlarger{\forall}}}}}}}%
|
||||
\limits}
|
||||
|
||||
\title{Wspomaganie Decyzji w Warunkach Ryzyka\\\large \medskip Projekt: WDWR 25406\\}
|
||||
\author{Krzysztof Rudnicki 307585}
|
||||
\date{\today}
|
||||
|
||||
\begin{document}
|
||||
|
||||
\maketitle
|
||||
|
||||
\section*{Treść zadania}
|
||||
\addcontentsline{toc}{section}{Treść zadania}
|
||||
Rozważmy następujące zagadnienie planowania produkcji:
|
||||
|
||||
\begin{itemize}
|
||||
\item Przedsiębiorstwo wytwarza 4 produkty P1,...,P4 na następujących maszynach: 4 szlifierkach, 2 wiertarkach pionowych, 3 wiertarkach poziomych, 1 frezarce i 1 tokarce. Wymagane czasy produkcji 1 sztuki produktu (w godzinach) w danym procesie obróbki zostały przedstawione w poniższej tabeli:\\
|
||||
\begin{center}
|
||||
\begin{tabular}{l*{4}{c}}
|
||||
\hline
|
||||
& P1 & P2 & P3 & P4 \\
|
||||
\hline
|
||||
Szlifowanie & 0,4 & 0,6 & - & - \\
|
||||
Wiercenie pionowe & 0,2 & 0,1 & - & 0,6 \\
|
||||
Wiercenie poziome & 0,1 & - & 0,7 & - \\
|
||||
Frezowanie & 0,06 & 0,04 & - & 0,05 \\
|
||||
Toczenie & - & 0,05 & 0,02 & - \\
|
||||
\hline
|
||||
\end{tabular}
|
||||
\end{center}
|
||||
|
||||
\item Dochody ze sprzedaży produktów (w zł/sztukę) określają składowe wektora $\mathbf{R} = (R_{1},...,R_{4})^{T}$. Wektor $\mathbf{R}$ opisuje 4-wymiarowy rozkład \textit{t}-Studenta z 4 stopniami swobody, którego wartości składowych zostały zawężone do przedziału $[5;12]$. Wektor wartości oczekiwanych $\mu$ oraz macierz kowariancji $\Sigma$ niezawężonego rozkładu \textit{t}-Studenta są następujące:
|
||||
\begin{displaymath}
|
||||
\mathbf{\mu} =
|
||||
\begin{pmatrix}
|
||||
9 \\ 8 \\ 7 \\ 6 \\
|
||||
\end{pmatrix},
|
||||
\mathbf{\Sigma} =
|
||||
\begin{pmatrix}
|
||||
16 & -2 & -1 & -3 \\
|
||||
-2 & 9 & -4 & -1 \\
|
||||
-1 & -4 & 4 & 1 \\
|
||||
-3 & -1 & 1 & 1 \\
|
||||
\end{pmatrix}
|
||||
\end{displaymath}
|
||||
|
||||
\item Istnieją ograniczenia rynkowe na liczbę sprzedawanych produktów w danym miesiącu:
|
||||
\begin{center}
|
||||
\begin{tabular}{l*{4}{c}}
|
||||
\hline
|
||||
& P1 & P2 & P3 & P4 \\
|
||||
\hline
|
||||
Styczeń & 200 & 0 & 100 & 200 \\
|
||||
Luty & 300 & 100 & 200 & 200 \\
|
||||
Marzec & 0 & 300 & 100 & 200 \\
|
||||
\hline
|
||||
\end{tabular}
|
||||
\end{center}
|
||||
|
||||
\item Jeżeli sprzedaż danego produktu przekracza 80 procent ilości jaką może wchłonąć rynek, jego dochód spada o 20 procent.
|
||||
|
||||
\item Istnieje możliwość składowania do 200 sztuk każdego produktu w danym czasie w cenie 1 zł/sztukę za miesiąc. W chwili obecnej (grudzień) w magazynach znajduje się 0 sztuk każdego produkt. Istnieje wymaganie, aby tyle pozostało również pod koniec marca.
|
||||
|
||||
\item Przedsiębiorstwo pracuje 6 dni w tygodniu w systemie dwóch zmian. Każda zmiana trwa 8 godzin. Można założyć, że każdy miesiąc składa się z 24 dni roboczych.
|
||||
\end{itemize}
|
||||
|
||||
\section*{Polecenia}
|
||||
\addcontentsline{toc}{section}{Polecenia}
|
||||
\begin{enumerate}
|
||||
\item Zaproponować jednokryterialny model wyboru w warunkach ryzyka z wartością oczekiwaną jako miarą zysku. Wyznaczyć rozwiązanie optymalne.
|
||||
\item Jako rozszerzenie powyższego zaproponować dwukryterialny model zysku i ryzyka ze średnią jako miarą zysku i średnią różnicą Giniego jako miarą ryzyka. Dla decyzji $\mathbf{x}\in Q$ średnia różnica Giniego jest definiowana jako $\Gamma(\mathbf{x})=\frac{1}{2}\sum_{t'=1}^{T}\sum_{t"=1}^{T}\lvert r_{t'}(\mathbf{x})-r_{t"}(\mathbf{x})\rvert p_{t'}p_{t"}$, gdzie $r_{t'}(\mathbf{x})$ oznacza realizację dla scenariusza t, $p_{t}$ prawdopodobieństwo scenariusza t.
|
||||
\begin{enumerate}
|
||||
\item Wyznaczyć obraz zbioru rozwiązań efektywnych w przestrzeni zysk-ryzyko.
|
||||
\item Wskazać rozwiązania efektywne minimalnego ryzyka i maksymalnego zysku. Jakie odpowiadają im wartości w przestrzeni ryzyko-zysk?
|
||||
\item Wybrać trzy dowolne rozwiązania efektywne. Sprawdzić, czy zachodzi pomiędzy nimi relacja dominacji stochastycznej pierwszego rzędu. Wyniki skomentować, odnieść do ogólnego przypadku.
|
||||
\end{enumerate}
|
||||
\end{enumerate}
|
||||
|
||||
\section{Jednokryterialny model wyboru}
|
||||
Jednokryterialny model wyboru w warunkach ryzyka ma umożliwić wybór rozwiązania optymalnego ze względu na maksymalizację wartości oczekiwanej zysku. Wartość oczekiwana ma być określana na podstawie scenariuszy wygenerowanych z rozkładu \textit{t}-Studenta o parametrach podanych w treści zadania. Przyjęto, że wszystkie scenariusze mają takie same prawdopodobieństwo.
|
||||
\subsection{Parametry modelu}
|
||||
W tabeli \ref{tab:param} zestawiono wszystkie przyjęte parametry modelu razem z opisami. Takie samo nazwy przyjęto podczas implementacji modelu. W przypadku wektorów oraz macierzy parametrów w nawiasach kwadratowych podano ich rozmiar odwołując się do parametrów liczbowych.
|
||||
\begin{table}[ht!]
|
||||
\caption{Tabela zawierająca parametry modelu jednokryterialnego}
|
||||
\label{tab:param}
|
||||
\begin{tabular}{lp{9cm}}
|
||||
\hline
|
||||
Nazwa parametru & Opis \\
|
||||
\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\\
|
||||
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 \\
|
||||
\hline
|
||||
\end{tabular}
|
||||
\end{table}
|
||||
|
||||
\subsection{Zmienne decyzyjne}
|
||||
Zmienne decyzyjne są kontrolowanymi przez decydenta, kluczowymi dla problemu wartościami. Celem systemu jest dobranie przez solver takich wartości tych zmiennych, które pozwolą na osiągnięcie najlepszego rozwiązania zadania. W tabeli \ref{tab:var} przedstawiono zmienne decyzyjne wykorzystane w modelu wraz z opisami. Zastosowano konwencję nazw identyczną, jak w przypadku parametrów modelu.
|
||||
|
||||
\begin{table}[ht!]
|
||||
\caption{Tabela zawierająca zmienne decyzyjne modelu}
|
||||
\label{tab:var}
|
||||
\begin{tabular}{lp{7.5cm}}
|
||||
\hline
|
||||
Nazwa zmiennej & Opis \\
|
||||
\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\\
|
||||
\hline
|
||||
\end{tabular}
|
||||
\end{table}
|
||||
|
||||
\subsection{Ograniczenia}
|
||||
Z punktu widzenia projektowania modelu, najważniejsze jest prawidłowe dobranie przedstawionych założeniach ograniczeń. Zidentyfikowano następujące ograniczenia modelu:
|
||||
\begin{itemize}
|
||||
\item Ograniczenie dolne wartości zmiennych decyzyjnych – wartości nie mogą być mniejsze od zera:
|
||||
\begin{equation}
|
||||
\bigforall_{\substack{
|
||||
m \in months \\
|
||||
p \in products \\
|
||||
mc \in machines}} workTime[m][mc][p] >=0
|
||||
\end{equation}
|
||||
\begin{equation}
|
||||
\bigforall_{\substack{
|
||||
m \in months \\
|
||||
p \in products}} produce[m][p] >=0
|
||||
\end{equation}
|
||||
\begin{equation}
|
||||
\bigforall_{\substack{
|
||||
m \in months \\
|
||||
p \in products}} sell[m][p] >=0
|
||||
\end{equation}
|
||||
\begin{equation}
|
||||
\bigforall_{\substack{
|
||||
m \in months \\
|
||||
p \in products}} stock[m][p] >=0
|
||||
\end{equation}
|
||||
\begin{equation}
|
||||
\bigforall_{\substack{
|
||||
i \in scenarios \\
|
||||
m \in months \\
|
||||
p \in products}} lowerProfit[i][m][p] >=0
|
||||
\end{equation}
|
||||
|
||||
\item Ograniczenie ilości jednocześnie pracujących maszyn - Ze względu na to, że każda pojedyncza maszyna może pracować w ciągu miesiąca \textit{nHours} godzin, to dla każdego typu maszyny, czas ich pracy nie może przekroczyć wartości iloczynu ilości maszyn danego typu oraz czasu \textit{nHours}.
|
||||
\begin{equation}
|
||||
\bigforall_{\substack{
|
||||
m \in months\\
|
||||
mc \in machines}} \sum_{p \in products}
|
||||
(workTime[m][mc][p] <= machineCount[mc]*nHours)
|
||||
\end{equation}
|
||||
\item Ograniczenie definiujące czas pracy maszyn - czas pracy danego typu maszyny to iloczyn ilości wyprodukowanych sztuk danego produktu i czasu trwania danego procesu technologicznego dla jednej sztuki:
|
||||
\begin{equation}
|
||||
\bigforall_{\substack{
|
||||
m \in months\\
|
||||
mc \in machines\\
|
||||
p \in products}} workTime[m][mc][p] == produce[m][p]*prodTime[mc][p]
|
||||
\end{equation}
|
||||
\item Ograniczenie rynkowe maksymalnej sprzedaży w danym miesiącu:
|
||||
\begin{equation}
|
||||
\bigforall_{\substack{
|
||||
m \in months\\
|
||||
p \in products}} sell[m][p] == maxInMonth[m][p]
|
||||
\end{equation}
|
||||
|
||||
\item Ograniczenia ustawiające zmienną binarną po przekroczeniu 80 procent pojemności rynku:
|
||||
\begin{equation}
|
||||
\bigforall_{\substack{
|
||||
m \in months\\
|
||||
p \in products}} sell[m][p] <= 0.8*maxInMonth[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]
|
||||
\end{equation}
|
||||
|
||||
\item Ograniczenia linearyzujące wpływ zmiennej binarnej na funkcje celu:
|
||||
\begin{equation}
|
||||
\bigforall_{\substack{
|
||||
i \in scenarios\\
|
||||
m \in months\\
|
||||
p \in products}} lowerProfit[i][m][p] <= 1000000 * if80prec[m][p]
|
||||
\end{equation}
|
||||
\begin{equation}
|
||||
\bigforall_{\substack{
|
||||
i \in scenarios\\
|
||||
m \in months\\
|
||||
p \in products}} lowerProfit[i][m][p] <= 0.2 * sell[m][p]*sellProfit[i][p]
|
||||
\end{equation}
|
||||
\begin{multline}
|
||||
\bigforall_{\substack{
|
||||
i \in scenarios\\
|
||||
m \in months\\
|
||||
p \in products}} 0.2 * sell[m][p]*sellProfit[i][p] - lowerProfit[i][m][p] +\\ 1000000 * if80prec[m][p] <= 1000000;
|
||||
\end{multline}
|
||||
|
||||
\item Ograniczenie sprzedaż do ilości sztuk wyprodukowanych oraz znajdujących się w magazynie. Dla pierwszego miesiąca ma ono postać:
|
||||
\begin{equation}
|
||||
\bigforall_{\substack{
|
||||
m \in months\\
|
||||
p \in products}} sell[m][p] <= produce[m][p]+storageStart[p]
|
||||
\end{equation}
|
||||
Dla każdego następnego miesiąca:
|
||||
\begin{equation}
|
||||
\bigforall_{\substack{
|
||||
m \in months\\
|
||||
p \in products}} sell[m][p] <= produce[m][p] + stock[m-1][p]
|
||||
\end{equation}
|
||||
|
||||
\item Ograniczenie definiujące ilość produktów pozostających w magazynach na następny miesiąc, jako sumę sztuk wyprodukowanych i będących w magazynie na początku tego miesiąca pomniejszoną o ilość sprzedaną w tym miesiącu. Dla pierwszego miesiąca:
|
||||
\begin{equation}
|
||||
\bigforall_{\substack{
|
||||
m \in months\\
|
||||
p \in products}} stock[m][p]==(produce[m][p] + storageStart[p])-sell[m][p]
|
||||
\end{equation}
|
||||
Dla każdego następnego miesiąca:
|
||||
\begin{equation}
|
||||
\bigforall_{\substack{
|
||||
m \in months\\
|
||||
p \in products}} stock[m][p]==(produce[m][p] + stock[m-1][p])-sell[m][p]
|
||||
\end{equation}
|
||||
|
||||
\end{itemize}
|
||||
\subsection{Funkcja celu}
|
||||
Funkcja celu dla modelu jednokryterialnego to maksymalizacja wartości oczekiwanej zysku dla wszystkich scenariuszy. Dla każdego scenariusza została przyjęta funkcja zysku w postaci
|
||||
\begin{multline}
|
||||
\bigforall_{\substack{
|
||||
i<nScernarios\\
|
||||
i \in N}}
|
||||
profit[i] =\sum_{m \in months} \sum_{p \in products}
|
||||
(sell[m][p]\cdot sellProfit[i][p] \\ -lowerProfit[i][m][p]-stock[m][p]*storageCost)
|
||||
\end{multline}
|
||||
|
||||
|
||||
|
||||
\subsection{Implementacja modelu}
|
||||
\subsubsection{Generacja scenariusz dochodów ze sprzedaży}
|
||||
Dochody ze sprzedaży poszczególnych produktów są określone wektorem losowym określonym w treści zadania. Do wygenerowania wektorów opisujących konkretne scenariusze sprzedaży wykorzystano pakiet MASS dla języka R. Skrypt drukujący wektory do pliku został napisany w środowisku R Studio IDE. Załącznik 1 to wspomniany skrypt - \textit{t-student.R}. Do potrzeby symulacji wygenerowano 1000 scenariuszy.
|
||||
|
||||
\subsubsection{Model}
|
||||
Rozwiązanie zadania zaimplementowano w całości przy pomocy programu IBM ILOG CPLEX Optimization Studio przy wykorzystaniu solvera CPLEX. Nazwy parametrów oraz zmiennych decyzyjnych pokrywają się z nazwami opisanymi w tabelach \ref{tab:param} i \ref{tab:var}. Załącznik 2 to plik \textit{wdwr17421-1.dat}, który definiuje parametry modelu. Załącznik 3 to plik \textit{wdwr17421-1.mod}, który wczytuje parametry modelu, definiuje zmienne decyzyjne, funkcję oceny oraz ograniczenia modelu. Dla przyśpieszenia implementacji modelu przyjęto, że kolejne miesiące, produkty oraz procesy technologiczne będą opisane liczbami naturalnymi. Miesiące ponumerowane są w kolejności występowania, produkty według indeksu przy literze P w nazwie, a procesy technologiczne w następujące kolejności:
|
||||
\begin{enumerate}
|
||||
\item Szlifowanie,
|
||||
\item Wiercenie pionowe,
|
||||
\item Wiercenie poziome,
|
||||
\item Frezowanie,
|
||||
\item Toczenie.
|
||||
\end{enumerate}
|
||||
|
||||
\subsection{Rozwiązanie}
|
||||
Optymalne rozwiązanie maksymalizacji wartości oczekiwanej zysku zostało obliczone przez solver CPLEX. Optymalny zysk wyniósł około 26023,63 zł. Wynik taki jest osiągany dla następujących wartości zmiennych decyzyjnych:
|
||||
\begin{displaymath}
|
||||
\mathbf{sell} =
|
||||
\begin{pmatrix}
|
||||
320 & 0 & 160 & 240 \\
|
||||
700 & 320 & 500 & 0 \\
|
||||
0 & 800 & 600 & 320 \\
|
||||
\end{pmatrix},
|
||||
\mathbf{if80prec} =
|
||||
\begin{pmatrix}
|
||||
0 & 1 & 0 & 0 \\
|
||||
1 & 0 & 1 & 1 \\
|
||||
1 & 1 & 1 & 0 \\
|
||||
\end{pmatrix},
|
||||
\end{displaymath}
|
||||
\begin{displaymath}
|
||||
\mathbf{stock} =
|
||||
\begin{pmatrix}
|
||||
0 & 50 & 0 & 0 \\
|
||||
0 & 0 & 0 & 0 \\
|
||||
50 & 50 & 50 & 50 \\
|
||||
\end{pmatrix},
|
||||
\mathbf{produce} =
|
||||
\begin{pmatrix}
|
||||
270 & 0 & 110 & 190 \\
|
||||
700 & 270 & 500 & 0 \\
|
||||
50 & 850 & 650 & 370 \\
|
||||
\end{pmatrix}
|
||||
\end{displaymath}
|
||||
|
||||
Macierze z czasami pracy maszyn dla poszczególnych typów produktów zostały przedstawione oddzielnie dla każdego miesiąca:
|
||||
\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 \\
|
||||
\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 \\
|
||||
\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 \\
|
||||
\end{pmatrix}
|
||||
\end{displaymath}
|
||||
|
||||
Macierzy lowerProfit nie przedstawiono w raporcie ze względu na jej wielkość. Pełne wyniki działania solvera dołączono do raportu jako załącznik 4.
|
||||
\subsection{Wnioski}
|
||||
Z przeprowadzonej sytuacji wynika, że możliwości produkcyjne fabryki przekraczają pojemność rynku. W celu maksymalizacji w niektórych miesiącach opłaca się sprzedawać poszczególne produkty, nawet po przekroczeniu 80\% pojemności rynku. Nie ma potrzeby magazynowania produktów, poza wymaganym minimum.
|
||||
|
||||
\section{Model dwukryterialny zysku i ryzyka}
|
||||
\subsection{Model zadania}
|
||||
Model przedsiębiorstwa pozostał w całości taki, jak w pierwszej części zadania. Miarą zysku jest wartość oczekiwana, czyli w przypadku równie prawdopodobnych scenariuszy - średnia. Miarą ryzyka w danym zadaniu jest średnia różnica Giniego wyrażająca się wzorem:
|
||||
\begin{equation}
|
||||
\Gamma(\mathbf{x})=\frac{1}{2}\sum_{t'=1}^{T}\sum_{t"=1}^{T}\lvert r_{t'}(\mathbf{x})-r_{t"}(\mathbf{x})\rvert p_{t'}p_{t"},
|
||||
\end{equation}
|
||||
gdzie $r_{t'}(\mathbf{x})$ oznacza realizację dla scenariusza t, a $p_{t}$ - prawdopodobieństwo scenariusza t.
|
||||
|
||||
Zgodnie z przyjętymi w projekcie oznaczeniami wyrażenie określające miarę ryzyka będzie wyglądało następująco:
|
||||
\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}
|
||||
\end{equation}
|
||||
|
||||
\subsection{Model preferencji}
|
||||
Model preferencji został zbudowany na podstawie wymaganego poziomu średniej przy minimalizacji ryzyka.
|
||||
\begin{equation}
|
||||
avgProfit<minAvgProfit
|
||||
\end{equation}
|
||||
\begin{equation}
|
||||
minimize giniRisk
|
||||
\end{equation}
|
||||
minAvgProfit jest dodatkowym parametrem modelu. Załączniki 5 i 6 to pliki z paramtrami i modelem zadania dwukryterialnego wyboru - pliki źródłowe dla solvera CPLEX.
|
||||
|
||||
\subsection{Zbiór rozwiązań efektywnych w przestrzeni ryzyko-zysk}
|
||||
Rysunek \ref{fig:profit-risk} przedstawia rozwiązania efektywne modelu w przestrzeni ryzyko-zysk. Niebieskie trójkąty przedstawiają rozwiązanie efektywne dla różnych wartości wymaganego poziomu zysku. Ze względu na możliwości obliczeniowe komputera rozwiązania 52 równo odległe rozwiązania, każe biorące pod uwagę 30 scenariuszy. Wprowadzono ograniczenie czasu solvera poświęconego jednemu rozwiązania do 5 min. Obliczenia zajęły ponad 3 godziny. Załączniki 7 i 8 to pliki parametrów oraz modelu wraz ze skryptem dla solvera CPLEX, służące do uzyskania rozwiązań. Kolorem żółtym oznaczono rozwiązanie maksymalnego zysku oraz minimalnego ryzyka. Odpowiadające im wartości zawarte są w tabeli \ref{tab:min-max}.
|
||||
\begin{figure}[ht!]
|
||||
\centering
|
||||
\includegraphics[width=0.8\textwidth]{graphics/results-minAvgProfit-marker}
|
||||
\caption{Obraz zbioru rozwiązań efektywnych w przestrzeni ryzyko-zysk}
|
||||
\label{fig:profit-risk}
|
||||
\end{figure}
|
||||
|
||||
\subsection{Rozwiązania efektywne minimalnego ryzyka i maksymalnego zysku}
|
||||
|
||||
Na wykresie \ref{fig:profit-risk} kolorem żółtym oznaczono rozwiązania maksymalnego zysku oraz minimalnego ryzyka. Odpowiadające im wartości w przestrzeni ryzyko zysk zawarte są w tabeli \ref{tab:min-max}.
|
||||
|
||||
\begin{table}[ht!]
|
||||
\label{tab:min-max}
|
||||
\caption{Rozwiązania maksymalnego zysku i minimalnego ryzyka}
|
||||
\centering
|
||||
\begin{tabular}{l*{4}{c}}
|
||||
|
||||
\hline
|
||||
& Miara zysku & Miara ryzyka \\
|
||||
\hline
|
||||
Maksymalizacja zysku & 26553.9 zł & 796.113 zł \\
|
||||
Minimalizacja ryzyka & -600.00 zł & 0.0 zł \\
|
||||
\hline
|
||||
|
||||
\end{tabular}
|
||||
\end{table}
|
||||
|
||||
Rozwiązanie zadania jednokryterialnego maksymalizacji zysku wiąże się maksymalizacją ryzyka, natomiast zadanie minimalizacji ryzyka, bez ograniczeń na miarę zysku powoduje stratę (zysk ujemny) spowodowaną brakiem sprzedaży oraz kosztami utrzymania minimalnego stanu magazynu.
|
||||
|
||||
\subsection{Sprawdzenie dominacji stochastycznej wybranych rozwiązań efektywnych}
|
||||
|
||||
W celu sprawdzenia dominacji stochastycznej pierwszego rzędu (FSD) wybrano 3 rozwiązania efektywne modelu. Zostały oznaczone literami A, B, C. Wartości średniego zysku oraz miary ryzyka odpowiadające tym rozwiązaniom zostały przedstawione w tabeli \ref{tab:abc}. Wybrano rozwiązanie, które były do siebie najbardziej zbliżone pod względem średniej zysku. Jej wartość różniła się o około 500 zł. Załączniki 9 i 10 to pliki parametrów oraz modelu wraz ze skryptem dla solvera CPLEX, służące do wygenerowania informacji o zysku i ryzyku dla poszczególnych scenariuszy.
|
||||
|
||||
\begin{table}[ht!]
|
||||
\label{tab:abc}
|
||||
\caption{Rozwiązania wybrane do analizy dominacji FSD}
|
||||
\centering
|
||||
\begin{tabular}{lccc}
|
||||
\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ł\\
|
||||
\hline
|
||||
\end{tabular}
|
||||
\end{table}
|
||||
|
||||
|
||||
Aby sprawdzić dominację wzajemną dominację rozwiązań w sensie FSD narysowano odwrotne dystrybuanty dla obydwu kryteriów. Rysunek \ref{fig:FSD-profit} przedstawia wykres odwrotnej dystrybuanty rozkładu średniego zysku pomiędzy scenariuszami dla 3 wybranych rozwiązań efektywnych. Z wykresu można odczytać, że rozwiązanie C dominuje rozwiązania A i B w sensie FSD, tzn. że dla każdego scenariusza miara zysku w przypadku decyzji C jest większa niż w przypadku decyzji A i B. Rozwiązanie B dominuje w sensie FSD rozwiązanie A.
|
||||
|
||||
\begin{figure}[ht!]
|
||||
\centering
|
||||
\includegraphics[width=\textwidth]{graphics/results-FSD-profit}
|
||||
\caption{Odwrotna dystrybuanta rozkładu średniego zysku między scenariuszami}
|
||||
\label{fig:FSD-profit}
|
||||
\end{figure}
|
||||
|
||||
Rysunek \ref{fig:FSD-risk} to wykres odwrotnej dystrybuanty rozkładu średniego różnicy Giniego jako miary ryzyka pomiędzy scenariuszami dla tych samych 3 rozwiązań efektywnych. Ze względu na miarę ryzyka rozwiązanie A dominuje rozwiązania B, C, natomiast rozwiązanie B nie dominuje "ściśle" rozwiązania C. Powodem jest przecinanie się dystrybuant w miejscu oznaczonym na żółto na wykresie na rysunku \ref{fig:FSD-profit}.
|
||||
|
||||
\begin{figure}[ht!]
|
||||
\centering
|
||||
\includegraphics[width=0.95\textwidth]{graphics/results-FSD-risk}
|
||||
\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}
|
||||
BIN
Programming/WDWR/projekt/eiti-wdwr/docs/result-FSD-profit.xlsx
Normal file
BIN
Programming/WDWR/projekt/eiti-wdwr/docs/result-FSD-profit.xlsx
Normal file
Binary file not shown.
BIN
Programming/WDWR/projekt/eiti-wdwr/docs/result-FSD-risk.xlsx
Normal file
BIN
Programming/WDWR/projekt/eiti-wdwr/docs/result-FSD-risk.xlsx
Normal file
Binary file not shown.
Binary file not shown.
BIN
Programming/WDWR/projekt/eiti-wdwr/docs/result-minAvgProfit.xlsx
Normal file
BIN
Programming/WDWR/projekt/eiti-wdwr/docs/result-minAvgProfit.xlsx
Normal file
Binary file not shown.
@ -1,8 +0,0 @@
|
||||
sudo pacman -S r
|
||||
yay r-tmvtnorm
|
||||
Rscript WDWR.r
|
||||
#Download AMPL
|
||||
https://wutwaw-my.sharepoint.com/:f:/g/personal/adam_krzemienowski_pw_edu_pl/EopE83LtqlJFnzi8u2iDkwoBgISyjUVvCbcE4EVaUwEMqw
|
||||
~/ampl/ampl_linux-intel64/ampl ./WDWR1.run
|
||||
~/ampl/ampl_linux-intel64/ampl ./WDWR2.run
|
||||
~/ampl/ampl_linux-intel64/ampl ./WDWR3.run
|
||||
@ -1,50 +0,0 @@
|
||||
0.020000 11639.667141
|
||||
0.040000 10292.082599
|
||||
0.060000 11996.818322
|
||||
0.080000 11801.202380
|
||||
0.100000 11047.083018
|
||||
0.120000 9941.182838
|
||||
0.140000 12469.184647
|
||||
0.160000 11749.639752
|
||||
0.180000 12521.561887
|
||||
0.200000 10799.437424
|
||||
0.220000 12250.278054
|
||||
0.240000 11998.961779
|
||||
0.260000 12334.974633
|
||||
0.280000 11748.822489
|
||||
0.300000 11533.496636
|
||||
0.320000 11650.567186
|
||||
0.340000 10505.951816
|
||||
0.360000 11906.078116
|
||||
0.380000 10706.762250
|
||||
0.400000 11469.313644
|
||||
0.420000 12261.502189
|
||||
0.440000 11949.591326
|
||||
0.460000 11684.599720
|
||||
0.480000 11254.293504
|
||||
0.500000 11019.077043
|
||||
0.520000 11660.321693
|
||||
0.540000 10689.432294
|
||||
0.560000 11619.454963
|
||||
0.580000 11509.036663
|
||||
0.600000 11235.252802
|
||||
0.620000 10966.519996
|
||||
0.640000 11355.652416
|
||||
0.660000 10990.753206
|
||||
0.680000 10646.294395
|
||||
0.700000 10464.177226
|
||||
0.720000 11666.180143
|
||||
0.740000 11387.100619
|
||||
0.760000 12471.939730
|
||||
0.780000 11219.420397
|
||||
0.800000 12297.869146
|
||||
0.820000 12590.731969
|
||||
0.840000 11961.876952
|
||||
0.860000 11816.323123
|
||||
0.880000 10514.812398
|
||||
0.900000 12223.545025
|
||||
0.920000 11483.289216
|
||||
0.940000 13326.529017
|
||||
0.960000 10801.660163
|
||||
0.980000 12060.838985
|
||||
1.000000 10142.319128
|
||||
|
@ -1,50 +0,0 @@
|
||||
0.020000 8334.413457
|
||||
0.040000 8815.328577
|
||||
0.060000 8744.362234
|
||||
0.080000 10054.734924
|
||||
0.100000 8531.997783
|
||||
0.120000 8436.145053
|
||||
0.140000 9274.773903
|
||||
0.160000 9048.940981
|
||||
0.180000 9581.821780
|
||||
0.200000 8268.608177
|
||||
0.220000 9781.602957
|
||||
0.240000 10010.709973
|
||||
0.260000 9378.021217
|
||||
0.280000 10110.988008
|
||||
0.300000 8996.520470
|
||||
0.320000 8371.333346
|
||||
0.340000 8311.828619
|
||||
0.360000 8286.748340
|
||||
0.380000 9051.369471
|
||||
0.400000 8977.096282
|
||||
0.420000 9504.738633
|
||||
0.440000 9024.825705
|
||||
0.460000 8785.788983
|
||||
0.480000 9103.663665
|
||||
0.500000 9064.958116
|
||||
0.520000 8759.874949
|
||||
0.540000 8539.407399
|
||||
0.560000 9251.416429
|
||||
0.580000 8613.449292
|
||||
0.600000 8902.125325
|
||||
0.620000 8270.820433
|
||||
0.640000 9178.385113
|
||||
0.660000 8848.276351
|
||||
0.680000 8450.073796
|
||||
0.700000 8528.075255
|
||||
0.720000 9271.358778
|
||||
0.740000 8934.054436
|
||||
0.760000 9916.588628
|
||||
0.780000 9125.210257
|
||||
0.800000 9075.712755
|
||||
0.820000 9760.295161
|
||||
0.840000 9812.044676
|
||||
0.860000 8961.520425
|
||||
0.880000 8673.882341
|
||||
0.900000 9811.630231
|
||||
0.920000 9256.374980
|
||||
0.940000 9798.126373
|
||||
0.960000 8835.051454
|
||||
0.980000 9556.205053
|
||||
1.000000 8267.170403
|
||||
|
@ -1,50 +0,0 @@
|
||||
0.020000 8462.904351
|
||||
0.040000 8887.361263
|
||||
0.060000 8882.563026
|
||||
0.080000 10141.687000
|
||||
0.100000 8634.948985
|
||||
0.120000 8513.615679
|
||||
0.140000 9395.675683
|
||||
0.160000 9153.185821
|
||||
0.180000 9687.103924
|
||||
0.200000 8380.711280
|
||||
0.220000 9881.370022
|
||||
0.240000 10109.134413
|
||||
0.260000 9496.385439
|
||||
0.280000 10188.525618
|
||||
0.300000 9096.003124
|
||||
0.320000 8496.469280
|
||||
0.340000 8408.842845
|
||||
0.360000 8430.629207
|
||||
0.380000 9129.919779
|
||||
0.400000 9066.482113
|
||||
0.420000 9619.132880
|
||||
0.440000 9149.991621
|
||||
0.460000 8889.914639
|
||||
0.480000 9195.736366
|
||||
0.500000 9149.737910
|
||||
0.520000 8875.122293
|
||||
0.540000 8622.587577
|
||||
0.560000 9352.908154
|
||||
0.580000 8710.754238
|
||||
0.600000 8994.969887
|
||||
0.620000 8364.096545
|
||||
0.640000 9275.711427
|
||||
0.660000 8925.830861
|
||||
0.680000 8544.573155
|
||||
0.700000 8600.349704
|
||||
0.720000 9357.569926
|
||||
0.740000 9028.726132
|
||||
0.760000 10014.377784
|
||||
0.780000 9208.464306
|
||||
0.800000 9188.211655
|
||||
0.820000 9873.907368
|
||||
0.840000 9897.483068
|
||||
0.860000 9061.467124
|
||||
0.880000 8761.564619
|
||||
0.900000 9892.459756
|
||||
0.920000 9362.638268
|
||||
0.940000 9929.148231
|
||||
0.960000 8926.168209
|
||||
0.980000 9672.217945
|
||||
1.000000 8362.733857
|
||||
|
@ -1,100 +0,0 @@
|
||||
-200.000000 0.000000 0.000153
|
||||
-200.000000 0.000000 0.000153
|
||||
-200.000000 0.000000 0.000153
|
||||
-200.000000 0.000000 0.000153
|
||||
-200.000000 0.000000 0.000153
|
||||
-200.000000 0.000000 0.000153
|
||||
-200.000000 0.000000 0.000153
|
||||
-200.000000 0.000000 0.000153
|
||||
-200.000000 0.000000 0.000111
|
||||
-200.000000 0.000000 0.000000
|
||||
-200.000000 0.000000 0.000042
|
||||
-200.000000 0.000000 0.000042
|
||||
-200.000000 0.000000 0.000042
|
||||
-200.000000 0.000000 0.000042
|
||||
-200.000000 0.000000 0.000042
|
||||
-200.000000 0.000000 0.000042
|
||||
-200.000000 0.000000 0.000042
|
||||
-200.000000 0.000000 0.000042
|
||||
-200.000000 0.000000 0.000042
|
||||
-200.000000 0.000000 0.000000
|
||||
5388.280763 673.375180 0.000319
|
||||
8453.165836 1004.361418 0.000532
|
||||
7464.470364 888.082372 0.000462
|
||||
6464.644347 771.022268 0.000393
|
||||
5456.347323 654.460477 0.000323
|
||||
4366.632009 549.520402 0.000248
|
||||
3392.421231 434.063877 0.000179
|
||||
2374.847064 318.378638 0.000109
|
||||
1765.371563 240.818335 0.000026
|
||||
425.448190 72.719700 -0.025835
|
||||
5388.280763 673.375180 0.000208
|
||||
9317.090153 1147.518267 0.000481
|
||||
8301.136529 1036.409118 0.000410
|
||||
7285.591657 919.291964 0.000340
|
||||
6361.934765 790.460607 0.000275
|
||||
5365.283387 669.990504 0.000206
|
||||
4434.582882 540.004038 0.000142
|
||||
3373.344061 434.703276 0.000068
|
||||
2417.827519 311.250020 0.000001
|
||||
1432.148909 188.510726 -0.066975
|
||||
5388.280763 673.375180 0.000097
|
||||
10000.288917 1307.292831 0.000417
|
||||
9291.427014 1151.339411 0.000368
|
||||
8439.813809 1007.101848 0.000309
|
||||
7436.822686 890.327465 0.000239
|
||||
6344.809413 790.851811 0.000163
|
||||
5340.293203 671.880254 0.000094
|
||||
4375.860271 553.674833 0.000026
|
||||
3444.833709 420.543399 -0.038285
|
||||
2443.218902 304.590798 -0.108208
|
||||
9382.134535 1104.116837 0.000263
|
||||
11040.319690 1435.989662 0.000379
|
||||
10406.562382 1249.283436 0.000334
|
||||
9157.108633 1182.543437 0.000247
|
||||
8243.887310 1046.431089 0.000184
|
||||
7252.262318 926.566187 0.000115
|
||||
6114.343105 833.935936 0.000036
|
||||
5458.235147 652.125451 -0.009439
|
||||
4451.534428 536.334425 -0.079420
|
||||
3445.121460 420.374152 -0.149341
|
||||
9534.263193 1124.891344 0.000163
|
||||
11623.893720 1629.772538 0.000308
|
||||
11040.319690 1435.989662 0.000268
|
||||
10234.420750 1282.152533 0.000212
|
||||
8955.458871 1217.950976 0.000123
|
||||
8125.266489 1067.542071 0.000065
|
||||
7460.723990 888.894318 0.000018
|
||||
6462.769540 767.700977 -0.050643
|
||||
5458.235147 652.125451 -0.120556
|
||||
4451.534428 536.334425 -0.190537
|
||||
9371.663529 1104.493126 0.000040
|
||||
11985.535635 1876.338189 0.000222
|
||||
11623.893720 1629.772538 0.000197
|
||||
11040.319690 1435.989662 0.000156
|
||||
10406.562382 1249.283436 0.000112
|
||||
9479.717395 1116.983538 0.000048
|
||||
8475.742091 999.775354 -0.021837
|
||||
7471.207698 883.988876 -0.091810
|
||||
6462.769540 767.700977 -0.161760
|
||||
5458.235147 652.125451 -0.231672
|
||||
10658.420822 1308.556262 0.000019
|
||||
11973.604069 1746.007712 0.000110
|
||||
11973.604069 1746.007712 0.000110
|
||||
11623.893720 1629.772538 0.000086
|
||||
11040.319690 1435.989662 0.000045
|
||||
10406.562382 1249.283436 0.000001
|
||||
9479.717395 1116.983538 -0.063467
|
||||
8475.742091 999.775354 -0.132953
|
||||
7471.207698 883.988876 -0.202927
|
||||
6462.481788 767.807980 -0.272896
|
||||
11984.113511 1748.047892 -0.000201
|
||||
11987.418989 2046.236151 0.000000
|
||||
11987.418989 2046.236151 0.000000
|
||||
11984.113511 1748.047892 -0.000201
|
||||
11634.403161 1632.508345 -0.024509
|
||||
11040.697227 1435.311557 -0.065778
|
||||
10399.451279 1248.963735 -0.110354
|
||||
9479.717395 1116.983538 -0.174583
|
||||
8475.454340 999.671406 -0.244090
|
||||
7471.207698 883.988876 -0.314044
|
||||
|
Loading…
Reference in New Issue
Block a user