-
Notifications
You must be signed in to change notification settings - Fork 1
/
Copy pathtoyNetwork.m
62 lines (48 loc) · 1.32 KB
/
toyNetwork.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
62
clear all;
p = generateTestParameters();
dstar = ones(2*p.N*p.N*p.T, 1);
u = rand(2*p.N*p.N*p.T + 2*p.N*p.T + 1, 1);
trivial_solution = 0*dstar;
violated = find(constraints(p, trivial_solution, 1) > 0);
if ~isempty(violated)
error("Trivial solution violates constraints");
end
opts = struct();
opts.nIter = 150;
opts.innerIter = 2000;
opts.c0 = 1.5;
opts.beta = 2;
opts.gamma = 100;
gamma_vals = [50];
c0_vals = [100];
beta_vals = [2];
parameter_grid = allcomb(gamma_vals, c0_vals, beta_vals);
nCombs = size(parameter_grid, 1);
objValues = zeros(opts.nIter*opts.innerIter, nCombs);
solutions = zeros(2*p.N*p.N*p.T, nCombs);
%%
for i = 1:nCombs
row = parameter_grid(i, :);
fprintf("Running with parameters:");
disp(row);
opts.gamma = row(1);
opts.c0 = row(2);
opts.beta = row(3);
[actual_dstar, actual_u, history] = augLagrangeMethod(p, opts, u, dstar);
solutions(:, i) = actual_dstar;
objValues(:, i) = vertcat(history(:).objectiveValues);
end
%%
startIdx = 1;
gammas = parameter_grid(:,1);
figure;
semilogy(objValues(:, startIdx:end));
ylim([1, 500]);
title("Convergence with different step size multipliers");
xlabel("iterations");
ylabel("objective value ($)");
labels = {};
for i = startIdx:length(gammas)
labels = horzcat(labels, sprintf("\\gamma = %d", gammas(i)));
end
legend(labels);