Skip to content

Commit b10b933

Browse files
committed
[UPD] update testing
1 parent cd89818 commit b10b933

File tree

1 file changed

+55
-3
lines changed

1 file changed

+55
-3
lines changed

test/sddp.jl

Lines changed: 55 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -71,7 +71,7 @@ facts("SDDP algorithm: 1D case") do
7171

7272
# Test if the first subgradient has the same dimension as state:
7373
@fact size(V[1].lambdas, 2) --> model.dimStates
74-
@fact V[1].numCuts < n_scenarios*max_iterations + n_scenarios --> true
74+
@fact V[1].numCuts <= n_scenarios*max_iterations + n_scenarios --> true
7575
@fact size(V[1].lambdas, 1) --> V[1].numCuts
7676

7777
# Test upper bounds estimation with Monte-Carlo:
@@ -109,10 +109,62 @@ facts("SDDP algorithm: 1D case") do
109109
context("Cuts pruning") do
110110
v = V[1]
111111
vt = PolyhedralFunction([v.betas[1]; v.betas[1] - 1.], v.lambdas[[1,1],:], 2)
112-
isactive1 = StochDynamicProgramming.is_cut_relevant(model, 1, vt, param.SOLVER)
113-
isactive2 = StochDynamicProgramming.is_cut_relevant(model, 2, vt, param.SOLVER)
112+
# Check cuts counting:
113+
@fact StochDynamicProgramming.get_total_number_cuts([vt]) --> 2
114+
115+
# Check computation of cut value:
116+
@fact StochDynamicProgramming.cutvalue(vt, 1, [0., 0.]) --> v.betas[1]
117+
118+
# Check computation of optimal cut:
119+
@fact StochDynamicProgramming.optimalcut([0., 0.], vt)[2] --> 1
120+
121+
terr = StochDynamicProgramming.Territories(2)
122+
StochDynamicProgramming.find_territory!(terr, vt, [0. 0.; 1. 0.])
123+
@fact terr.ncuts --> 2
124+
@fact terr.nstates --> 2
125+
@fact length(terr.territories[1]) --> 2
126+
@fact length(terr.territories[2]) --> 0
127+
128+
# Check heuristic removal:
129+
vt2 = StochDynamicProgramming.remove_empty_cuts!(terr, vt)
130+
@fact isa(vt2, StochDynamicProgramming.PolyhedralFunction) --> true
131+
@fact vt2.numCuts --> 1
132+
@fact vt2.betas[1] --> vt.betas[1]
133+
134+
# Check exact dominance test:
135+
isactive1 = StochDynamicProgramming.is_cut_relevant(model, 1, vt, param.SOLVER)[1]
136+
isactive2 = StochDynamicProgramming.is_cut_relevant(model, 2, vt, param.SOLVER)[1]
114137
@fact isactive1 --> true
115138
@fact isactive2 --> false
139+
140+
# Check insertion of pruning algorithms into SDDP solver:
141+
param1 = StochDynamicProgramming.SDDPparameters(solver,
142+
passnumber=n_scenarios,
143+
gap=epsilon,
144+
pruning_algo="exact",
145+
prune_cuts=1,
146+
max_iterations=1)
147+
V1 = solve_SDDP(model, param1, 0)[1]
148+
param1 = StochDynamicProgramming.SDDPparameters(solver,
149+
passnumber=n_scenarios,
150+
gap=epsilon,
151+
pruning_algo="territory",
152+
prune_cuts=1,
153+
max_iterations=1)
154+
V2 = solve_SDDP(model, param1, 0)[1]
155+
param1 = StochDynamicProgramming.SDDPparameters(solver,
156+
passnumber=n_scenarios,
157+
gap=epsilon,
158+
pruning_algo="mixed",
159+
prune_cuts=1,
160+
max_iterations=1)
161+
V3 = solve_SDDP(model, param1, 0)[1]
162+
163+
n1 = StochDynamicProgramming.get_total_number_cuts(V1)
164+
n2 = StochDynamicProgramming.get_total_number_cuts(V2)
165+
n3 = StochDynamicProgramming.get_total_number_cuts(V3)
166+
@fact n1 > n2 --> true
167+
@fact n3 > n2 --> true
116168
end
117169

118170
context("Quadratic regularization") do

0 commit comments

Comments
 (0)