1% opt_bisection_sizing Exact server sizing via BisectionSolver (O(log n) LINE
2% solves). Same M/M/c as opt_server_sizing -> 6 servers, cost 60, 4 probes.
3% Mirrors python/examples/opt/opt_bisection_sizing.py.
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));
14problem = opt.OptimizationProblem(model);
15problem.addVariable(opt.ServerAllocation(queue, [1 10]));
16serverCost = containers.Map(
'KeyType',
'char',
'ValueType',
'double');
17serverCost(
'Server') = 10.0;
18problem.setObjective(opt.MinimizeCost(serverCost, [], [], {}));
19problem.addConstraint(opt.UtilizationConstraint(queue, 0.5));
21result = opt.BisectionSolver(problem).solve();
23fprintf(
'Optimal servers : %d\n', result.getVariableValue(
'Server_servers'));
24fprintf(
'Cost : %.1f\n', result.objectiveValue);
25fprintf(
'LINE evaluations: %d (vs hundreds for DE)\n', result.modelEvaluations);