LINE Solver
MATLAB API documentation
Loading...
Searching...
No Matches
opt_decomposition.m
1% opt_decomposition Two-variable problem (server count + service rate) solved
2% by a DecompositionWorkflow: auto-decompose by variable type, then Gauss-Seidel
3% cycling to a fixed point. Mirrors opt_decomposition.py.
4
5model = Network('MMc');
6source = Source(model, 'Arrivals');
7queue = Queue(model, 'Server', SchedStrategy.FCFS);
8sink = Sink(model, 'Departures');
9jobs = OpenClass(model, 'Jobs');
10source.setArrival(jobs, Exp(3.0));
11queue.setService(jobs, Exp(1.0));
12model.link(Network.serialRouting(source, queue, sink));
13
14problem = opt.OptimizationProblem(model);
15problem.addVariable(opt.ServerAllocation(queue, [1 10]));
16problem.addVariable(opt.ServiceRate(queue, jobs, [1.0 4.0]));
17serverCost = containers.Map('KeyType','char','ValueType','double'); serverCost('Server') = 10.0;
18rateCost = containers.Map('KeyType','char','ValueType','double'); rateCost('Server') = 20.0;
19problem.setObjective(opt.MinimizeCost(serverCost, rateCost, [], {}));
20problem.addConstraint(opt.ResponseTimeConstraint(queue, jobs, 0.5));
21
22workflow = problem.decompose();
23workflow.autoDecompose();
24options = opt.LineOptSolverOptions(); options.setSeed(42);
25workflow.setSolverOptions(options);
26result = workflow.solveSequential(4, 1e-3);
27
28fprintf('Converged : %d after %d cycle(s)\n', result.converged, result.cyclesCompleted);
29fprintf('Servers : %d\n', result.getFinalVariableValue('Server_servers'));
30fprintf('Rate : %.3f\n', result.getFinalVariableValue('Server_Jobs_rate'));
31fprintf('Objective : %.2f\n', result.finalObjective);