-
Notifications
You must be signed in to change notification settings - Fork 2
/
Copy pathTestTwoStage.m
61 lines (49 loc) · 1.53 KB
/
TestTwoStage.m
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
function TestTwoStage
simpleLP = InitializeSimpleTwoStageLP();
phiTypes = {'burg','kl','chi2','mchi2'};
% phi = PhiDivergence('mchi2');
origLP = simpleLP;
assert( isequal( simpleLP, origLP ) )
problemCases = {'mchi2', [-1, 27, 39, 47, 7]}; % mchi2, poorly scaled lp
numKnownProblems = size(problemCases,1);
numNewProblems = 2;
numProblems = numKnownProblems + numNewProblems*length(phiTypes);
cuts = zeros(numProblems,1);
probs = cuts;
tols = cuts;
ptols = cuts;
for ii = 1:numProblems
if ii <= numKnownProblems
phi = PhiDivergence(problemCases{ii,1});
details = problemCases{ii,2};
rho = details(ii,1);
obs = details(ii,2:end);
else
type = phiTypes{ceil((ii-numKnownProblems)/numProblems*length(phiTypes))};
phi = PhiDivergence( type );
obs = ceil(50*rand(1,4));
rho = -1;
end
[solvedLRLP,cuts(ii),probs(ii)] = SolveLRLP( 'lp',simpleLP, 'phi',phi, ...
'obs',obs, 'rho',rho, 'cuttype','multi', 'isgraphical',false );
tols(ii) = solvedLRLP.currentObjectiveTolerance;
ptols(ii) = solvedLRLP.currentProbabilityTolerance;
assert( isequal( simpleLP, origLP ) )
clear solvedLRLP
end
disp(' ------------------------')
disp(' Cuts Problems')
disp([cuts,probs])
disp(' Maximums')
disp([max(cuts),max(probs)])
format short e
disp(' ------------------------')
disp(' Objective Probability')
disp([tols,ptols])
mtol = max(tols);
mp = max(ptols);
disp(' Maximums')
disp([mtol,mp])
assert(mtol <= 1e-6)
assert(mp <= 1e-2)
end