-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathcable_optimization_stochastic.mod
112 lines (75 loc) · 3.15 KB
/
cable_optimization_stochastic.mod
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
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
param n := 3;
set V;
set T;
set A := {i in V, j in V: i != j};
set W := 1..n;
set VxW := {i in V, w in W};
param x_coord{V};
param y_coord{V};
param type{V};
param P{h in V} >= 0, default 1;
param P_deviation{(h,w) in VxW} >=-1, <=1, default 0;
param P_sum := sum{i in V: type[i]=1} P[i];
param P_min{w in W} := P_sum + sum{i in V: type[i]=1} P_deviation[i,w];
param k{t in T} > 0;
param u{t in T} > 0;
param max_usage{t in T} > 0;
param C > 0;
param c{i in V, j in V, t in T} :=
u[t] * sqrt( (x_coord[i]-x_coord[j])^2 + (y_coord[i]-y_coord[j])^2 );
var x{(i,j) in A, t in T}, binary;
var y{(i,j) in A}, binary;
var f{(i,j) in A} >= 0;
var x_add{(i,j) in A, t in T, w in W}, binary;
var y_add{(i,j) in A, w in W}, binary;
var f_new{(i,j) in A, w in W} >= 0;
var new_cables{w in W} >= 0, integer;
subject to new_cables_def{w in W}:
new_cables[w] = sum{(i,j) in A, t in T} x_add[i,j,t,w];
var deterministic_cost >= 0;
subject to deterministic_cost_def:
deterministic_cost = sum{(i,j) in A, t in T} c[i,j,t]*x[i,j,t];
var stochastic_cost >= 0;
subject to stochastic_cost_def:
stochastic_cost = (sum{(i,j) in A, t in T, w in W} c[i,j,t]*x_add[i,j,t,w])/n;
var stochastic_cost_pessimistic >= 0;
var y_worst_cost{w in W}, binary;
subject to stochastic_cost_pessimistic_def{w in W}:
stochastic_cost_pessimistic >= sum{(i,j) in A, t in T} c[i,j,t]*x_add[i,j,t,w];
subject to y_worst_cost_def:
sum {w in W} y_worst_cost[w] = 1;
subject to stochastic_cost_pessimistic_def2{w in W}:
stochastic_cost_pessimistic <= (sum{(i,j) in A, t in T} c[i,j,t]*x_add[i,j,t,w]) + 1000000*(1-y_worst_cost[w]);
param deterministic_cost_weight, default 0.5;
param stochastic_cost_weight, default 0.5;
param stochastic_cost_weight_pessimistic, default 0;
minimize of:
deterministic_cost_weight*deterministic_cost + stochastic_cost_weight*stochastic_cost + stochastic_cost_weight_pessimistic*stochastic_cost_pessimistic;
### Deterministic part
subject to cable_built{(i,j) in A}:
sum{t in T} x[i,j,t] = y[i,j];
subject to power{h in V: type[h]=1}:
sum{i in V: (i,h) in A} (f[h,i] - f[i,h]) <= P[h];
subject to flow_def{(i,j) in A}:
f[i,j] <= sum{t in T} k[t]*x[i,j,t];
subject to one_cable_out{h in V: type[h]=1}:
sum{j in V: (h,j) in A} y[h,j] = 1;
subject to zero_cable_out{h in V: type[h]=-1}:
sum{j in V: (h,j) in A} y[h,j] = 0;
subject to capacity{h in V: type[h]=-1}:
sum{i in V: (i,h) in A} y[i,h] <= C;
subject to power_to_source{w in W, h in V: type[h]=-1}:
sum{i in V: (i,h) in A} f[i,h] >= sum{i in V: type[i]=1} P[i];
### Stochastic part
subject to cable_built_new{(i,j) in A, w in W}:
sum{t in T} x_add[i,j,t,w] = y_add[i,j,w];
subject to power_new{w in W, h in V: type[h]=1}:
sum{i in V: (i,h) in A} (f_new[h,i,w] - f_new[i,h,w]) <= P[h] + P_deviation[h,w];
subject to flow_def_new{(i,j) in A, w in W}:
f_new[i,j,w] <= sum{t in T} k[t]*(x_add[i,j,t,w]+x[i,j,t]);
subject to zero_cable_out_new{w in W, h in V: type[h]=-1}:
sum{j in V: (h,j) in A} y_add[h,j,w] = 0;
subject to capacity_new{w in W, h in V: type[h]=-1}:
sum{i in V: (i,h) in A} (y_add[i,h,w] + y[i,h]) <= C;
subject to power_to_source_new{w in W, h in V: type[h]=-1}:
sum{i in V: (i,h) in A} f_new[i,h,w] >= P_min[w];