com.xj.anylogic.engine
Class OptimizationCallback
java.lang.Object
com.xj.anylogic.engine.OptimizationCallback
public abstract class OptimizationCallback
- extends java.lang.Object
This class is designed for usage in optimizations performed within custom
experiments, see
ExperimentOptimization.createOptimization(Engine, OptimizationCallback).
Usage example (the code of custom experiment, requires
import com.opttek.optquest.*;):
try {
// Create Engine, initialize random number generator:
Engine engine = createEngine();
// Set stop time:
engine.setStopTime(1);
// Create optimization variable
final COptQuestContinuousVariable v = new COptQuestContinuousVariable();
v.SetLowerBound(0.0);
v.SetUpperBound(100.0);
// Create objective
final COptQuestObjective obj = new COptQuestUserControlledObjective();
obj.SetMinimize();
// 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.param = 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.objective);
// 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(500);
// Add suggested solution (initial solution)
COptQuestSolution suggestedSolution = opt.CreateSolution();
suggestedSolution.SetVariableValue(v, 50.0);
opt.AddSuggestedSolution(suggestedSolution);
// Perform optimization
opt.Optimize();
// Output results
COptQuestSolution bestSolution = opt.GetBestSolution();
traceln("Best objective: " + format(bestSolution.GetObjectiveValue(obj)));
traceln("Best parameter: " + format(bestSolution.GetVariableValue(v)));
} catch (COptQuestException e) {
traceln(e.Description());
}
- Author:
- XJ Technologies Company Ltd. www.anylogic.com
- See Also:
ExperimentOptimization.createOptimization(Engine, OptimizationCallback)
|
Method Summary |
abstract void |
evaluate(com.opttek.optquest.COptQuestOptimization optimization,
com.opttek.optquest.COptQuestSolution solution,
Engine engine)
This callback should evaluate a solution. |
void |
monitorStatus(com.opttek.optquest.COptQuestOptimization optimization,
com.opttek.optquest.COptQuestSolution solution,
Engine engine)
This method is called at the end of each iteration (after
evaluate(COptQuestOptimization, COptQuestSolution, Engine)). |
| Methods inherited from class java.lang.Object |
equals, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait |
OptimizationCallback
public OptimizationCallback()
evaluate
public abstract void evaluate(com.opttek.optquest.COptQuestOptimization optimization,
com.opttek.optquest.COptQuestSolution solution,
Engine engine)
- This callback should evaluate a solution.
This method is called at each iteration/replication of optimization.
Please call COptQuestVariable.GetCurrentValue() to obtain
calculated values of optimization parameters and save objective value
using COptQuestOptimization.SetCurrentObjectiveValue(double)
The most common implementation of this method is a single simulation
(using runFast()) of a newly created (each
time) model active object
- Parameters:
optimization - optimization engine instancesolution - solution being evaluatedengine - AnyLogic engine instance
monitorStatus
public void monitorStatus(com.opttek.optquest.COptQuestOptimization optimization,
com.opttek.optquest.COptQuestSolution solution,
Engine engine)
- This method is called at the end of each iteration (after
evaluate(COptQuestOptimization, COptQuestSolution, Engine)).
When this method is called, the solution has been checked for
feasibility.
- Parameters:
optimization - optimization engine instancesolution - the solutionengine - AnyLogic engine instance
Copyright © 1991-2008 XJ Technlogies. All Rights Reserved.