-
Notifications
You must be signed in to change notification settings - Fork 2
Expand file tree
/
Copy pathCostByShortageCost.m
More file actions
32 lines (27 loc) · 1 KB
/
CostByShortageCost.m
File metadata and controls
32 lines (27 loc) · 1 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
function newCost = CostByShortageCost( savedDataFile, lp, shortageCost, rho )
%CostByShortageCost changes the shortage cost and recalculates the expected
%worst-case cost for any solution
d = load(savedDataFile);
[scens, rhos] = size(d.scenSolns);
numVars = size(lp.Abase, 2);
firstStagePeriods = length(lp.c) / numVars;
secondStagePeriods = length(d.scenSolns{1,1}) / numVars;
dummyLocs = find(~cellfun(@isempty, regexp(lp.variableNames, 'Dummy -->>')));
c = lp.c;
for ii=1:firstStagePeriods
locs = dummyLocs + (ii-1)*numVars;
c(locs) = shortageCost / ((1+0.04)^(ii-1));
end
firstStageCost = c*d.x(:,rho);
secondStageCosts = zeros(scens, 1);
for omega=1:scens
q = lp.Getq(omega);
for ii = 1:secondStagePeriods
locs = dummyLocs + (ii-1)*numVars;
q(locs) = shortageCost / ((1+0.04)^(firstStagePeriods+ii-1));
end
secondStageCosts(omega) = q*d.scenSolns{omega,rho};
end
pWorst = d.pWorst(:,rho)';
pWorst = pWorst / sum(pWorst);
newCost = firstStageCost + pWorst * secondStageCosts;