Я построил свою первую основанную на агентах модель с AnyLogic, и теперь мне нужно ее откалибровать. Я пробовал с доступными экспериментами, но это занимает слишком много времени, и я не могу имитировать более 10.000 агентов. Поэтому я хочу попробовать собственный эксперимент ... но я не знаю, как его построить!AnyLogic - как создать собственный эксперимент
Я построил очень простую модель где параметр bernoulli(main.calib)
, а затем я хочу, чтобы максимизировать количество агентов, которые идут в конечном состоянии.
Я скопировал код из экспериментов, доступных с помощью и сделал некоторые незначительные коррективы
try {
// Create Engine, initialize random number generator:
Engine engine = createEngine();
// Set stop time:
engine.setStopTime(2);
// Create optimization variable
final COptQuestContinuousVariable v = new COptQuestContinuousVariable();
v.SetLowerBound(0.0);
v.SetUpperBound(1.0);
// Create objective
final COptQuestObjective obj = new COptQuestUserControlledObjective();
obj.SetMaximize();
// Create optimization engine
final COptQuestOptimization opt = ExperimentOptimization.createOptimization(engine, new OptimizationCallback() {
@Override
public void evaluate(COptQuestOptimization optimization,
COptQuestSolution solution, Engine engine) {
try {
// Create new root object:
Main root = new Main(engine, null, null);
// Setup parameters of root object here
root.calib = solution.GetVariableValue(v);
// Prepare Engine for simulation:
engine.start(root);
// Start simulation in fast mode:
engine.runFast();
// Process results of simulation here
solution.SetObjectiveValue(obj, root.end);
// Destroy the model:
engine.stop();
} catch (COptQuestException e) {
traceln(e.Description());
}
}
// Trace each iteration (optional!)
@Override
public void monitorStatus(COptQuestOptimization optimization,
COptQuestSolution solution, Engine engine) {
try {
traceln(String.format(" %3d : %6.2f : %8.2f -- %8.2f",
solution.GetIteration(), solution.GetVariableValue(v),
solution.GetObjectiveValue(),
optimization.GetBestSolution() != null ?
optimization.GetBestSolution().GetObjectiveValue(obj) : Double.NaN));
} catch (COptQuestException e) {
traceln(e.Description());
}
}
});
// Setup optimization engine
opt.AddVariable(v);
opt.AddObjective(obj);
// Set the number of iterations to run
opt.SetMaximumIterations(30);
// Add suggested solution (initial solution)
COptQuestSolution suggestedSolution = opt.CreateSolution();
suggestedSolution.SetVariableValue(v, 0.5);
opt.AddSuggestedSolution(suggestedSolution);
traceln(" Iter : Param : Objective -- Best obj.");
traceln("-------------------------------------------");
// Perform optimization
opt.Optimize();
traceln("-------------------------------------------");
// Output results
COptQuestSolution bestSolution = opt.GetBestSolution();
traceln("Best objective: " + format(bestSolution.GetObjectiveValue(obj)));
traceln(" is feasible: " + format(bestSolution.IsFeasible()));
traceln("Best parameter: " + format(bestSolution.GetVariableValue(v)));
traceln("Best iteration: " + bestSolution.GetIteration());
} catch (COptQuestException e) { traceln(e.Description()); }
и следующий результат ...
Я не понимаю, почему цель всегда равна нулю ...
Спасибо за помощь!
Я так долго не работал с обычным экспериментом. в основном с изменениями параметров. Но где вы рассказываете эксперимент о количестве агентов на заключительном этапе? –