AnyLogic
Expand
Font size

Class ExperimentOptimization<ROOT extends Agent>

Type Parameters:
ROOT - class of top-level agent
All Implemented Interfaces:
AgentConstants, EnvironmentConstants, Serializable

public abstract class ExperimentOptimization<ROOT extends Agent>
extends ExperimentMultipleRuns<ROOT>
Experiment used to search for optimal solutions. Uses OptQuest optimizer. To use this experiment you need to subclass from it and define the methods setupRootParameters(Agent, boolean) which needs to retrieve the parameter values suggested by OptQuest and Experiment.onEngineFinished() to set the objective according to simulation output.
Author:
AnyLogic North America, LLC https://anylogic.com
See Also:
Serialized Form

Nested Class Summary

Nested classes/interfaces inherited from class com.anylogic.engine.ExperimentMultipleRuns

ExperimentMultipleRuns.ConfidenceLevel

Nested classes/interfaces inherited from class com.anylogic.engine.Experiment

Experiment.Command, Experiment.State

Field Summary

Fields inherited from class com.anylogic.engine.ExperimentMultipleRuns

CONFIDENCE_LEVEL_80, CONFIDENCE_LEVEL_90, CONFIDENCE_LEVEL_95, CONFIDENCE_LEVEL_98, CONFIDENCE_LEVEL_99, CONFIDENCE_LEVEL_99_9

Fields inherited from interface com.anylogic.engine.AgentConstants

AGENT_ORIENTATION_FRONT, AGENT_ORIENTATION_LEFT, AGENT_ORIENTATION_REAR, AGENT_ORIENTATION_RIGHT, ALL, ALL_CONNECTED, ALL_NEIGHBORS, AREA_ACCESS_RESTRICTION_BY_CAPACITY, AREA_ACCESS_RESTRICTION_BY_CONDITION, AREA_ACCESS_RESTRICTION_BY_SCHEDULE, AREA_ACCESS_RESTRICTION_BY_THROUGHPUT, AREA_ACCESS_RESTRICTION_MANUAL, CENTIMETER, CONVEYOR_BACKWARD, CONVEYOR_CUSTOM_STATION_AGENT_LOCATION_CENTER, CONVEYOR_CUSTOM_STATION_AGENT_LOCATION_NEAR_CONVEYOR, CONVEYOR_CUSTOM_STATION_AGENT_LOCATION_RANDOM, CONVEYOR_FORWARD, CONVEYOR_SIMPLE_STATION_DELAY_TYPE_MANUAL, CONVEYOR_SIMPLE_STATION_DELAY_TYPE_TIMEOUT, CONVEYOR_TYPE_BELT, CONVEYOR_TYPE_CELL, CONVEYOR_TYPE_ROLLER, CUBIC_METER, CUBIC_METER_PER_SECOND, CUSTOM_COLOR_SCHEME, DAY, DEG_PER_SECOND, DEGREE, DENSITY_VALUE_MAX, DENSITY_VALUE_MEAN, EAST, ELEVATOR_DIRECTION_DOWN, ELEVATOR_DIRECTION_NONE, ELEVATOR_DIRECTION_UP, ELEVATOR_DOOR_FRONT, ELEVATOR_DOOR_REAR, ELEVATOR_DOORS_FRONT, ELEVATOR_DOORS_FRONT_REAR, ELEVATOR_DOORS_FRONT_REAR_XJAL, ELEVATOR_DOORS_FRONT_XJAL, ELEVATOR_MOVEMENT_BY_SPEED, ELEVATOR_MOVEMENT_BY_TIME_PER_LEVEL, ELEVATOR_STATE_FAILED, ELEVATOR_STATE_IDLE, ELEVATOR_STATE_LOADING, ELEVATOR_STATE_MOVING, ESCALATOR_STAY_ALL, ESCALATOR_WALK_ALL, ESCALATOR_WALK_ON_LEFT_SIDE, ESCALATOR_WALK_ON_RIGHT_SIDE, EVENT_TIMEOUT_MODE_CYCLIC, EVENT_TIMEOUT_MODE_ONCE, EVENT_TIMEOUT_MODE_USER, EXCEEDED_QUEUE_CROWD_ROUND_AT_THE_END, EXCEEDED_QUEUE_EXTEND_TO_THE_FREE_SPACE, EXT_AGENT_CONTINUOUS, EXT_AGENT_DISCRETE, EXT_AGENT_GIS, EXT_AGENT_INTERACTIVE, EXT_AGENT_NETWORK, EXT_ENTITY, EXT_ENVIRONMENT_CONTINUOUS, EXT_ENVIRONMENT_DISCRETE, EXT_ENVIRONMENT_GIS, EXT_ENVIRONMENT_INTERACTIVE, EXT_SPACE, FLOW_STATISTICS_BOTH, FLOW_STATISTICS_LEFT, FLOW_STATISTICS_RIGHT, FOOT, FPM, FPS, FPS_SQ, HOUR, INCH, JIB_CRANE_CAT_HEAD, JIB_CRANE_FLAT_TOP, JIB_CRANE_INDUSTRIAL, JIB_CRANE_MOVEMENT_CONCURRENT, JIB_CRANE_MOVEMENT_STEP_BY_STEP, KILOGRAM, KILOGRAM_PER_SECOND, KILOMETER, KN, KPH, LIFT_PLATFORM_FLAT, LIFT_PLATFORM_ROLLER, LIFT_SELECTION_MODE_COMPARISON, LIFT_SELECTION_MODE_FIFO, LIFT_SELECTION_MODE_PRIORITY, LINEAR_COLOR_SCHEME, LITER, LITER_PER_SECOND, LOGARITHMIC_COLOR_SCHEME, METER, MILE, MILLIMETER, MILLISECOND, MINUTE, MONTH, MPH, MPS, MPS_SQ, NAUTICAL_MILE, NORTH, NORTHEAST, NORTHWEST, OBJECT_3D_INTERNAL_LIGHTING_GLOBAL, OBJECT_3D_INTERNAL_LIGHTING_INSIDE, OBJECT_3D_INTERNAL_LIGHTING_OFF, OBJECT_3D_XYZ_AXIS_ORDER, OBJECT_3D_YZX_AXIS_ORDER, OBJECT_3D_ZXY_AXIS_ORDER, OIL_BARREL, OIL_BARREL_PER_SECOND, OVERHEAD_CRANE_BRIDGE, OVERHEAD_CRANE_GANTRY, OVERHEAD_CRANE_GIRDER_DOUBLE_TIE, OVERHEAD_CRANE_GIRDER_SINGLE_FLAT, OVERHEAD_CRANE_MOVEMENT_CONCURRENT, OVERHEAD_CRANE_MOVEMENT_INDEPENDENT_HOIST, OVERHEAD_CRANE_MOVEMENT_STEP_BY_STEP, PALLET_RACK_LEFT_TO_RIGHT, PALLET_RACK_NO_DIRECTION, PALLET_RACK_RIGHT_TO_LEFT, PALLET_RACK_SINGLE_AISLE_LEFT, PALLET_RACK_SINGLE_AISLE_RIGHT, PALLET_RACK_TWO_AISLES, PALLET_RACK_TWO_PALLET_RACKS, PARKING_LOT_PARALLEL, PARKING_LOT_PERPENDICULAR, PATH_CONVEYOR, PATH_DASHEDLINE, PATH_LINE, PATH_RAILROAD, PATH_ROAD, PEDESTRIAN_MAP_TYPE, PER_DAY, PER_HOUR, PER_MILLISECOND, PER_MINUTE, PER_MONTH, PER_SECOND, PER_WEEK, PER_YEAR, POSITION_CHOICE_ARRANGED, POSITION_CHOICE_BY_ATTRACTORS, POSITION_CHOICE_RANDOM, RACK_PLACEMENT_BACK_TO_BACK, RACK_PLACEMENT_STAND_ALONE, RACK_TYPE_DRIVE_IN, RACK_TYPE_FIFO_FLOW, RACK_TYPE_LIFO_FLOW, RACK_TYPE_SELECTIVE, RAD_PER_SECOND, RADIAN, RAILWAY_SWITCH_ALL_TO_ALL, RAILWAY_SWITCH_DOUBLE_SLIP, RAILWAY_SWITCH_SINGLE_SLIP, RANDOM, RANDOM_CONNECTED, RANDOM_NEIGHBOR, ROAD_LEFT_HAND, ROAD_LINE_DOUBLE, ROAD_LINE_DOUBLE_DASHED, ROAD_LINE_SINGLE, ROAD_LINE_SINGLE_DASHED, ROAD_RIGHT_HAND, RPM, SECOND, SERVICE_GROUP_BEHAVIOR_DEPENDS_ON_INCOMING_GROUP, SERVICE_GROUP_BEHAVIOR_SAME_FOR_ALL_GROUPS, SERVICE_GROUP_INDIVIDUAL_SERVING, SERVICE_GROUP_ONE_MEMBER_IS_SERVED_OTHERS_WAIT_IN_AREA, SERVICE_GROUP_ONE_MEMBER_IS_SERVED_OTHERS_WAIT_IN_QUEUE, SERVICE_QUEUE_CLOSEST_NON_EMPTY, SERVICE_QUEUE_CLOSEST_STRICT, SERVICE_QUEUE_CUSTOM, SERVICE_QUEUE_LONGEST, SERVICE_QUEUE_NEXT_ROUND_ROBIN, SERVICE_QUEUE_PRIORITY, SERVICE_TYPE_LINEAR, SERVICE_TYPE_POINT, SIGNAL_GREEN, SIGNAL_NONE, SIGNAL_RED, SIGNAL_YELLOW, SIMPLE_STATION_LOADING_MODE_AFTER_UNLOADING, SIMPLE_STATION_LOADING_MODE_SIMULTANEOUS_WITH_UNLOADING, SIMPLE_STATION_PROCESSING_WHEN_AGENT_ENTERS, SIMPLE_STATION_PROCESSING_WHEN_CAPACITY_FULL, SOUTH, SOUTHEAST, SOUTHWEST, SPACE_CONTINUOUS, SPACE_CONTINUOUS_2D, SPACE_DISCRETE, SPACE_DISCRETE_2D, SPACE_GIS, SPACE_UNDEFINED, SQ_CENTIMETER, SQ_FOOT, SQ_INCH, SQ_KILOMETER, SQ_METER, SQ_MILE, SQ_MILLIMETER, SQ_NAUTICAL_MILE, SQ_YARD, TON, TON_PER_SECOND, TRANSFER_MODE_AUTOMATIC, TRANSFER_MODE_MANUAL, TRANSPORTER_MAP_TYPE, TURN, TURN_STATION_MODE_ANGLE, TURN_STATION_MODE_ORIENTATION, WALL_FILL_HATCHING, WALL_FILL_NONE, WALL_FILL_SOLID, WEEK, WEST, WINDOW_3D_NAVIGATION_FULL, WINDOW_3D_NAVIGATION_LIMITED_TO_Z_ABOVE_ZERO, WINDOW_3D_NAVIGATION_NONE, WINDOW_3D_NAVIGATION_ROTATION_ONLY, YARD, YEAR

Constructor Summary

ConstructorDescription
ExperimentOptimization()
Creates the experiment, a new simulation engine, and a new optimizer that will be used throughout the whole experiment execution.
ExperimentOptimization(boolean allowParallelEvaluations)
Same as ExperimentOptimization() but allows to disable parallel evaluations on multicore/multiprocessor systems (which are enabled by default)

Method Summary

Modifier and TypeMethodDescription
voidaddConstraint(IPreConstraint constraint) 
voidaddParameterVariable(IVariable parameter)
Adds the variable defined by the input parameter to the optimization

This is optimization setup method, user should not call it
voidaddRequirement(IPostConstraint requirement)
Adds the requirement defined by the input parameter to the optimization

This is optimization setup method, user should not call it
voidaddSuggestedSolution()
This method signals the completion of a suggested solution definition.
#setParameterVariableSuggestedValue(COptQuestVariable, double) is used to set a value for each variable.
This method signals a value has been set for each variable.
The solution is added to the set of suggested solution and will be one of the first solutions evaluated if the optimization has not started.
If the optimization is running, the suggested solution will be one of the next solutions to be evaluated

This is optimization setup method, user should not call it
IBinaryVariablecreateBinaryVariable_xjal() 
IContinuousVariablecreateContinuousVariable_xjal() 
IDiscreteVariablecreateDicsreteVariable_xjal() 
IObjectivecreateObjective_xjal() 
static com.opttek.optquest.COptQuestOptimizationcreateOptimization(Engine engine)
Creates and returns new OptQuest optimization instance for Custom Experiment
This method should only be used in custom experiment code
This method is designed for use in the AnyLogic Professional only
static com.opttek.optquest.COptQuestOptimizationcreateOptimization(Engine engine, OptimizationCallback callback)
Creates and returns new OptQuest optimization instance for Custom Experiment with objective function defined in a free form using evaluate method of a special callback.
IPostConstraintcreatePostConstraint_xjal() 
IPreConstraintcreatePreConstraint_xjal() 
voidevaluateConstraints(List<? extends IPreConstraint> constraints, List<? extends IVariable> variables) 
voidevaluateSerial(int iteration)
Is called to obtain and set a value of the objective function corresponding to the currently suggested set of parameters (decision variables).
intgetBestIteration()
Returns the iteration that resulted in the best solution thus far
(solution may be infeasible)
doublegetBestObjectiveValue()
Returns the value of the objective function for the best solution found thus far
Returned value may be infeasible
doublegetBestParamValue(IVariable parameter)
Returns the value of the given optimization parameter variable for the best solution found thus far
(solution may be infeasible)
intgetBestReplicationsNumber()
Returns the number of replications that were run for the best solution
(solution may be infeasible)
Ensure replications are used (isUseReplications()) before calling this method
intgetCurrentIteration()
Returns the current value of iteration counter
doublegetCurrentObjectiveValue()
Returns the value of the objective function for the current solution
ObjectgetCurrentParam(IVariable optimizationParameterVariable) 
doublegetCurrentParamValue(IVariable parameter)
Returns the value of the given optimization parameter variable for the current solution
intgetCurrentReplication()
Returns the replication number for the current solution being evaluated
Ensure replications are used (isUseReplications()) before calling this method
intgetMaximumIterations()
Returns the number of iterations set by setMaximumIterations(int)
intgetNumberOfCompletedIterations()
Returns the current value of iteration counter
com.opttek.optquest.COptQuestOptimizationgetOptimization()
Deprecated.
the method is deprecated and available only with OptQuest optimization engine.
abstract OptimizationEnginegetOptimizationEngineType() 
final doublegetProgress()
Returns the progress of the experiment: a number between 0 and 1 corresponding to the part of the experiment completed so far (based on iteration count or time limit), or -1 if this cannot be calculated.
intgetSelectedNthBestIteration()
Returns the iteration number for the Nth best solution, where the Nth best solution is identified by the method selectNthBestSolution(int)
doublegetSelectedNthBestObjectiveValue()
Returns the objective value for the Nth best solution, identified by the method selectNthBestSolution(int)
doublegetSelectedNthBestParamValue(IVariable parameter)
Used to retrieve the value of the variable for the solution that produced the Nth best objective value
The Nth best solution is identified by calling selectNthBestSolution(int)
intgetSelectedNthBestReplicationsNumber()
Returns the number of replications for the Nth best solution, where the Nth best solution is identified by the method selectNthBestSolution(int)
Ensure replications are used (isUseReplications()) before calling this method
booleanisBestSolutionFeasible()
Returns true if the best solution satisfies all constraints and requirements
booleanisCommandEnabled(Experiment.Command cmd)
Checks if a command can be executed.
booleanisCurrentSolutionBest()
Returns true if current solution is the best one at this moment
booleanisCurrentSolutionFeasible()
Returns true if current solution satisfies all constraints and requirements
booleanisLastReplication()
Deprecated.
booleanisParallel() 
booleanisSelectedNthBestSolutionFeasible()
Returns true if nth best solution satisfies all constraints and requirements
final booleanisUseReplications()
Returns true if optimization uses replications
ROOTprepareRoot(Engine engine) 
voidselectNthBestSolution(int bestSolutionIndex)
Called by the user to identify the Nth best soluiton.
Subsequent calles to getSelectedNthBestObjectiveValue() and getSelectedNthBestParamValue(IVariable) methods use this setting to identify the solution.
voidsetAutoStop(boolean stop)
Sets the auto stop option.
If the input parameter is true, auto stop is turned on.
voidsetConstraint(IPreConstraint constraint, double bound, ConstraintTypeEnum type, String expression) 
voidsetCurrentObjectiveValue(double value)
Used to set the value of the objective for the current solution.
voidsetCurrentPreConstraintValue_xjal(IPreConstraint constraint, double value) 
voidsetCurrentRequirementValue_xjal(IPostConstraint requirement, double value)
Used to set the value of the requirement for the current solution.
voidsetFixedReplicationsNumber(int replicationsNumber)
Sets experiment to use a fixed number of replications.
No confidence testing is to be used
For confidence testing use ExperimentMultipleRuns.setVariableReplicationsNumber(int, int, ConfidenceLevel, double)

This is setup method, user should not call it
voidsetLogBufferLength(int length) 
voidsetMaximumIterations(int numberOfIterations)
Sets the number of iterations the optimization should perform before stopping.
voidsetObjectiveMaximize()
Sets the goal of the optimization to maximize the objective value

This is optimization setup method, user should not call it
voidsetObjectiveMinimize()
Sets the goal of the optimization to minimize the objective value

This is optimization setup method, user should not call it
voidsetParameterSuggestedValue(IVariable parameter, Object value)
Allows the user to suggest a solution by setting a suggested value for each variable
addSuggestedSolution() indicates the suggested solution is complete and should be added to the set of solutions to be evaluated.

This is optimization setup method, user should not call it
voidsetParameterVariable(IBinaryVariable parameter, String name) 
voidsetParameterVariable(IContinuousVariable parameter, String name, String min, String max) 
voidsetParameterVariable(IDiscreteVariable parameter, String name, DiscreteParameterDataType dataType, String min, String max, String step) 
voidsetRequirement(IPostConstraint requirement, double bound, ConstraintTypeEnum type) 
abstract voidsetupRootParameters(ROOT root, boolean callOnChangeActions)
Is called to setup parameters of top-level agent.
voidsetUserControlledStop(boolean stop)
Indicates the user will stop the optimization by calling the stopOptimization() method

This is optimization setup method, user should not call it
voidsetUseReplications(boolean useReplications)
Sets optimization to use replications

This is optimization setup method, user should not call it
voidsetVariableReplicationsNumber(int minimumReplications, int maximumReplications, ExperimentMultipleRuns.ConfidenceLevel confidenceLevel, double errorPercent)
Sets experiment to stop replications after the minimum replications when the confidence level is reached (i.e.
voidstopOptimization()
Stops the currently running optimization

This is optimization setup method, user should not call it

Methods inherited from class com.anylogic.engine.ExperimentRunFast

getRunTimeSeconds, getState, pause, run, step, stop

Methods inherited from class com.anylogic.engine.Utilities

addToDate, addToDate, atan2fast, bernoulli, bernoulli, beta, beta, beta, beta, beta, binomial, binomial, binomial, binomial, binomial, briefInfoOn, castNumberTypes, castTypes, castTypesBack, cauchy, cauchy, cauchy, chi2, chi2, chi2, convertMarkupSegmentDescriptors_xjal, copyToClipboard, copyToClipboard, copyToClipboard, createTableElementDatabaseBuilder, createTrajectoryGIS, createURL_xjal, date, dateToTime, day, deleteFrom, difference, difference, differenceInCalendarUnits, differenceInCalendarUnits, differenceInDateUnits, differenceInDateUnits, differenceInDateUnits, differenceInDateUnits, dirToAngle, dropTime, erlang, erlang, erlang, error, error, error, errorInModel, errorInModel, errorInModel, executeAction, executeExpression, executeExpression, executeStatement, exponential, exponential, exponential, exponential, exponential, exponential, findExistingFile, format, format, format, format, format, format, format, formatAmountUnits, formatDayOfWeek, formatFlowRateUnits, formatGeoHeading, formatLatitude, formatLengthUnits, formatLengthUnits, formatLongitude, formatMonth, formatSpeedUnits, formatTimeInterval, gamma, gamma, gamma, gamma, gamma, gammaLog, geometric, geometric, getAmPm, getAmPm, getCanonicalPath, getDatabaseConnection, getDateWithTimeNextTo, getDayOfMonth, getDayOfMonth, getDayOfWeek, getDayOfWeek, getDayOfYear, getDefaultRandomGenerator, getDistance, getDistance, getDistanceFromPointToLine, getDistanceFromPointToLineSq, getDistanceFromPointToSegment, getDistanceFromPointToSegment, getDistanceFromPointToSegmentSq, getDistanceFromPointToSegmentSq, getDistanceGIS, getDistanceGIS, getDistanceSq, getDistanceSq, getFullName, getHour, getHour, getHourOfDay, getHourOfDay, getLength, getLength, getLengthSq, getLengthSq, getMillisecond, getMillisecond, getMinute, getMinute, getMonth, getMonth, getName, getNearestPointOnSegment, getNearestPointOnSegment, getPerformanceParallelWorkersCount_xjal, getRandom, getRandom, getResult, getSecond, getSecond, getTime, getTimeoutToNextTime, getYear, getYear, gumbel1, gumbel1, gumbel2, gumbel2, hour, hypergeometric, hypergeometric, insertInto, inspectOf, inspectOfLink_xjal, isFinite, isLineIntersectingLine, isLineIntersectingRectangle, isLoggingClassToDB, isLoggingToDB, isPointInsideRay, isPointInsideRectangle, isPointInsideSegment, isPointOnTheSameLine, isRayIntersectingSegment, joinArrays_xjal, laplace, laplace, layoutTypeToString, limit, limit, limitMax, limitMax, limitMin, limitMin, logarithmic, logarithmic, logistic, logistic, lognormal, lognormal, logToDB, logToDB, logToDB, logToDB, millisecond, minute, month, negativeBinomial, negativeBinomial, negativeBinomial, negativeBinomial, normal, normal, normal, normal, normal, normal, pareto, pareto, pareto, pert, pert, poisson, poisson, poisson, poisson, prepareBeforeExperimentStart_xjal, prepareStatement, pulse, pulseTrain, quantum, ramp, random, randomColor, randomFalse, randomFalse, randomFrom, randomFrom, randomFrom, randomFrom, randomFrom, randomFrom, randomlyCreate, randomlyCreate, randomlyCreate, randomlyCreate, randomTrue, randomTrue, randomWhere, randomWhere, randomWhere, randomWhere, rayleigh, rayleigh, rayleigh, roundToDecimal, roundToInt, second, selectAndDoForEach, selectArrayOfDouble, selectArrayOfInt, selectExists, selectExists, selectFirstValue, selectFirstValue, selectFirstValue, selectFirstValue, selectFrom, selectResultSet, selectTableFunction, selectUniqueValue, selectUniqueValue, selectUniqueValue, selectUniqueValue, selectValues, selectValues, setDefaultRandomGenerator, shuffle, sqlGetObject, sqlGetObject, sqlGetObject, sqlGetObject, sqlSetObject, sqr, step, time, time, timeToDate, toBoxedDouble_xjal, toDate, toDate, toDate, toDateInMillis, toLatitude, toLongitude, toModelRate, toModelTime, toRateUnits, toStringAlignedNameValues, toTimeout, toTimeout, toTimeoutInCalendar, toTimeUnits, trace, trace, traceln, traceln, traceln, traceln, traceln, traceToDB, traceToDB, triangular, triangular, triangular, triangular, triangular, triangularAV, triangularAV, uniform, uniform, uniform, uniform, uniform, uniform_discr, uniform_discr, uniform_discr, uniform_pos, uniform_pos, update, week, weibull, weibull, weibull, weibull, weibull, xidz, year, zidz

Methods inherited from class java.lang.Object

equals, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait

Constructor Details

ExperimentOptimization

public ExperimentOptimization()
Creates the experiment, a new simulation engine, and a new optimizer that will be used throughout the whole experiment execution. A user-controlled objective is added to the optimizer at this time.

ExperimentOptimization

public ExperimentOptimization(boolean allowParallelEvaluations)
Same as ExperimentOptimization() but allows to disable parallel evaluations on multicore/multiprocessor systems (which are enabled by default)
Parameters:
allowParallelEvaluations - if false, the iterations/replications of experiment will be performed sequentially
See Also:

Method Details

isParallel

public boolean isParallel()

createOptimization

public static com.opttek.optquest.COptQuestOptimization createOptimization(Engine engine)
Creates and returns new OptQuest optimization instance for Custom Experiment
This method should only be used in custom experiment code
This method is designed for use in the AnyLogic Professional only
Parameters:
engine - the engine instance
Returns:
new OptQuest optimization instance
See OptQuest API documentation for further usage information
See Also:

createOptimization

public static com.opttek.optquest.COptQuestOptimization createOptimization(Engine engine,
 OptimizationCallback callback)
Creates and returns new OptQuest optimization instance for Custom Experiment with objective function defined in a free form using evaluate method of a special callback. For more information see the example of such optimization.
This method should only be used in custom experiment code
This method is designed for use in the AnyLogic Professional only
Parameters:
engine - the engine instance
callback - the callback for evaluate (and monitorStatus) methods
Returns:
new OptQuest optimization instance
See OptQuest API documentation for further usage information

isCommandEnabled

public boolean isCommandEnabled(Experiment.Command cmd)
Description copied from class: Experiment
Checks if a command can be executed. The possible command ids are: OPEN_RESULTS, SAVE_RESULTS, OPEN_SNAPSHOT, SAVE_SNAPSHOT, RUN, STEP PAUSE, STOP.
Overrides:
isCommandEnabled in class Experiment<ROOT extends Agent>
Parameters:
cmd - the command id
Returns:
true if the command can be executed, false otherwise

getProgress

public final double getProgress()
Returns the progress of the experiment: a number between 0 and 1 corresponding to the part of the experiment completed so far (based on iteration count or time limit), or -1 if this cannot be calculated.
Overrides:
getProgress in class ExperimentMultipleRuns<ROOT extends Agent>
Returns:
the progress of the experiment

getMaximumIterations

public int getMaximumIterations()
Returns the number of iterations set by setMaximumIterations(int)
Specified by:
getMaximumIterations in class ExperimentMultipleRuns<ROOT extends Agent>
Returns:
the total number of iterations

getCurrentIteration

public int getCurrentIteration()
Returns the current value of iteration counter
Specified by:
getCurrentIteration in class ExperimentMultipleRuns<ROOT extends Agent>
Returns:
the current value of iteration counter

getNumberOfCompletedIterations

public int getNumberOfCompletedIterations()
Returns the current value of iteration counter
Overrides:
getNumberOfCompletedIterations in class ExperimentMultipleRuns<ROOT extends Agent>
Returns:
the current value of iteration counter

isCurrentSolutionBest

public boolean isCurrentSolutionBest()
Returns true if current solution is the best one at this moment
Returns:
true if current solution is the best one at this moment, false otherwise

getCurrentReplication

public int getCurrentReplication()
Returns the replication number for the current solution being evaluated
Ensure replications are used (isUseReplications()) before calling this method
Specified by:
getCurrentReplication in class ExperimentMultipleRuns<ROOT extends Agent>
Returns:
the number of replications run thus far

getCurrentObjectiveValue

public double getCurrentObjectiveValue()
Returns the value of the objective function for the current solution
Returns:
the value of the objective function for the current solution

isCurrentSolutionFeasible

public boolean isCurrentSolutionFeasible()
Returns true if current solution satisfies all constraints and requirements
Returns:
true if current solution satisfies all constraints and requirements, false otherwise

getBestIteration

public int getBestIteration()
Returns the iteration that resulted in the best solution thus far
(solution may be infeasible)
Returns:
the iteration that resulted in the best solution
See Also:
isBestSolutionFeasible()

getBestReplicationsNumber

public int getBestReplicationsNumber()
Returns the number of replications that were run for the best solution
(solution may be infeasible)
Ensure replications are used (isUseReplications()) before calling this method
Returns:
the number of replications that were run for the best solution
(solution may be infeasible)
See Also:
isBestSolutionFeasible()

getBestObjectiveValue

public double getBestObjectiveValue()
Returns the value of the objective function for the best solution found thus far
Returned value may be infeasible
Returns:
the value of the objective function for the best solution found thus far
See Also:
isBestSolutionFeasible()

isBestSolutionFeasible

public boolean isBestSolutionFeasible()
Returns true if the best solution satisfies all constraints and requirements
Returns:
true if the best solution satisfies all constraints and requirements, false otherwise
See Also:
getBestObjectiveValue()

selectNthBestSolution

public void selectNthBestSolution(int bestSolutionIndex)
Called by the user to identify the Nth best soluiton.
Subsequent calles to getSelectedNthBestObjectiveValue() and getSelectedNthBestParamValue(IVariable) methods use this setting to identify the solution. This method locates the Nth best solution and sets up data for subsequent calls that retrieve specific pieces of information
Parameters:
bestSolutionIndex - 1 for the best solution, 2 for the second best etc.
See Also:

getSelectedNthBestIteration

public int getSelectedNthBestIteration()
Returns the iteration number for the Nth best solution, where the Nth best solution is identified by the method selectNthBestSolution(int)
Returns:
the iteration of the Nth best solution
See Also:
selectNthBestSolution(int)

getSelectedNthBestReplicationsNumber

public int getSelectedNthBestReplicationsNumber()
Returns the number of replications for the Nth best solution, where the Nth best solution is identified by the method selectNthBestSolution(int)
Ensure replications are used (isUseReplications()) before calling this method
Returns:
the number of replications in the nth best solution
See Also:
selectNthBestSolution(int)

getSelectedNthBestObjectiveValue

public double getSelectedNthBestObjectiveValue()
Returns the objective value for the Nth best solution, identified by the method selectNthBestSolution(int)
Returns:
the objective value of the Nth best solution. Returns 0 if the solution doesn't exist
See Also:
selectNthBestSolution(int)

isSelectedNthBestSolutionFeasible

public boolean isSelectedNthBestSolutionFeasible()
Returns true if nth best solution satisfies all constraints and requirements
Returns:
true if nth best solution satisfies all constraints and requirements, false otherwise
See Also:
selectNthBestSolution(int)

getOptimization

@Deprecated
public com.opttek.optquest.COptQuestOptimization getOptimization()
Deprecated.
the method is deprecated and available only with OptQuest optimization engine.
Returns the optimization engine. The returned instance is recreated fresh each time the experiment is started.
Returns:
the optimization engine instance
Since:
8.5

setObjectiveMinimize

@AnyLogicInternalCodegenAPI
public void setObjectiveMinimize()
Sets the goal of the optimization to minimize the objective value

This is optimization setup method, user should not call it

setObjectiveMaximize

@AnyLogicInternalCodegenAPI
public void setObjectiveMaximize()
Sets the goal of the optimization to maximize the objective value

This is optimization setup method, user should not call it

stopOptimization

@AnyLogicInternalCodegenAPI
public void stopOptimization()
Stops the currently running optimization

This is optimization setup method, user should not call it

setUseReplications

@AnyLogicInternalCodegenAPI
public void setUseReplications(boolean useReplications)
Sets optimization to use replications

This is optimization setup method, user should not call it
Specified by:
setUseReplications in class ExperimentMultipleRuns<ROOT extends Agent>
Parameters:
useReplications -
See Also:

isUseReplications

public final boolean isUseReplications()
Returns true if optimization uses replications
Specified by:
isUseReplications in class ExperimentMultipleRuns<ROOT extends Agent>
Returns:
true if optimization uses replications, false otherwise

setFixedReplicationsNumber

@AnyLogicInternalCodegenAPI
public void setFixedReplicationsNumber(int replicationsNumber)
Description copied from class: ExperimentMultipleRuns
Sets experiment to use a fixed number of replications.
No confidence testing is to be used
For confidence testing use ExperimentMultipleRuns.setVariableReplicationsNumber(int, int, ConfidenceLevel, double)

This is setup method, user should not call it
Specified by:
setFixedReplicationsNumber in class ExperimentMultipleRuns<ROOT extends Agent>
Parameters:
replicationsNumber - the number of replications to be run
See Also:

addSuggestedSolution

@AnyLogicInternalCodegenAPI
public void addSuggestedSolution()
This method signals the completion of a suggested solution definition.
#setParameterVariableSuggestedValue(COptQuestVariable, double) is used to set a value for each variable.
This method signals a value has been set for each variable.
The solution is added to the set of suggested solution and will be one of the first solutions evaluated if the optimization has not started.
If the optimization is running, the suggested solution will be one of the next solutions to be evaluated

This is optimization setup method, user should not call it

setMaximumIterations

@AnyLogicInternalCodegenAPI
public void setMaximumIterations(int numberOfIterations)
Sets the number of iterations the optimization should perform before stopping. If multiple stop options are set, the optimization will stop at the first option that is satisfied

This is optimization setup method, user should not call it
Parameters:
numberOfIterations - number of optimization iterations to be performed

setAutoStop

@AnyLogicInternalCodegenAPI
public void setAutoStop(boolean stop)
Sets the auto stop option.
If the input parameter is true, auto stop is turned on. The default is auto stop is turned off.
OptQuest uses different techniques to search for a better solution and cycles through them when determines that the current technique stops helping to improve the solution. When automatic stop is set, the optimization stops when OptQuest has already cycled through all of its techniques for two (default) times. This method is an equivalent of getOptimization().SetAutoStopByCycles(stop);

This is optimization setup method, user should not call it
Parameters:
stop - true if auto stop is to be used, false if it is not used

setUserControlledStop

@AnyLogicInternalCodegenAPI
public void setUserControlledStop(boolean stop)
Indicates the user will stop the optimization by calling the stopOptimization() method

This is optimization setup method, user should not call it
Parameters:
stop - true if the user will stop the optimization
false if the optimization will be stopped by setting the number of iterations or the maximum time

isLastReplication

@AnyLogicInternalCodegenAPI
@Deprecated
public boolean isLastReplication()
Deprecated.
Return true if we have run the last replication for the current solution

This is optimization setup method, user should not call it
Specified by:
isLastReplication in class ExperimentMultipleRuns<ROOT extends Agent>
Returns:
true if this is the last replication of the iteration

getCurrentParam

@AnyLogicInternalCodegenAPI
public Object getCurrentParam(IVariable optimizationParameterVariable)

getBestParamValue

public double getBestParamValue(IVariable parameter)
Returns the value of the given optimization parameter variable for the best solution found thus far
(solution may be infeasible)
Returns:
the value of the given optimization parameter variable for the best solution found thus far
See Also:
isBestSolutionFeasible()

getCurrentParamValue

public double getCurrentParamValue(IVariable parameter)
Returns the value of the given optimization parameter variable for the current solution
Returns:
the value of the given optimization parameter variable for the current solution

getSelectedNthBestParamValue

public double getSelectedNthBestParamValue(IVariable parameter)
Used to retrieve the value of the variable for the solution that produced the Nth best objective value
The Nth best solution is identified by calling selectNthBestSolution(int)
Parameters:
optimizationParameterVariable -
Returns:
the variable's value for the Nth best solution
See Also:
selectNthBestSolution(int)

setParameterSuggestedValue

@AnyLogicInternalCodegenAPI
public void setParameterSuggestedValue(IVariable parameter,
 Object value)
Allows the user to suggest a solution by setting a suggested value for each variable
addSuggestedSolution() indicates the suggested solution is complete and should be added to the set of solutions to be evaluated.

This is optimization setup method, user should not call it
Parameters:
parameter -
value -

addParameterVariable

@AnyLogicInternalCodegenAPI
public void addParameterVariable(IVariable parameter)
Adds the variable defined by the input parameter to the optimization

This is optimization setup method, user should not call it
Parameters:
parameter -

setParameterVariable

@AnyLogicInternalCodegenAPI
public void setParameterVariable(IDiscreteVariable parameter,
 String name,
 DiscreteParameterDataType dataType,
 String min,
 String max,
 String step)

setParameterVariable

@AnyLogicInternalCodegenAPI
public void setParameterVariable(IContinuousVariable parameter,
 String name,
 String min,
 String max)

setParameterVariable

@AnyLogicInternalCodegenAPI
public void setParameterVariable(IBinaryVariable parameter,
 String name)

setRequirement

@AnyLogicInternalCodegenAPI
public void setRequirement(IPostConstraint requirement,
 double bound,
 ConstraintTypeEnum type)

addRequirement

@AnyLogicInternalCodegenAPI
public void addRequirement(IPostConstraint requirement)
Adds the requirement defined by the input parameter to the optimization

This is optimization setup method, user should not call it
Parameters:
requirement -

setCurrentRequirementValue_xjal

@AnyLogicInternalCodegenAPI
public void setCurrentRequirementValue_xjal(IPostConstraint requirement,
 double value)
Used to set the value of the requirement for the current solution. This method should be called from the Experiment.onEngineFinished() method when the user is calculating the requirement value

This is optimization setup method, user should not call it
Parameters:
value -

setCurrentPreConstraintValue_xjal

@AnyLogicInternalCodegenAPI
public void setCurrentPreConstraintValue_xjal(IPreConstraint constraint,
 double value)

setConstraint

@AnyLogicInternalCodegenAPI
public void setConstraint(IPreConstraint constraint,
 double bound,
 ConstraintTypeEnum type,
 String expression)

addConstraint

@AnyLogicInternalCodegenAPI
public void addConstraint(IPreConstraint constraint)

setCurrentObjectiveValue

@AnyLogicInternalCodegenAPI
public void setCurrentObjectiveValue(double value)
Used to set the value of the objective for the current solution. This method should be called from the Experiment.onEngineFinished() method when the user is calculating the objective value

This is optimization setup method, user should not call it
Parameters:
value -

setVariableReplicationsNumber

@AnyLogicInternalCodegenAPI
public void setVariableReplicationsNumber(int minimumReplications,
 int maximumReplications,
 ExperimentMultipleRuns.ConfidenceLevel confidenceLevel,
 double errorPercent)
Description copied from class: ExperimentMultipleRuns
Sets experiment to stop replications after the minimum replications when
  • the confidence level is reached (i.e. mean confidence is within the given percentage errorPercent of the value obtained at the last replication)
  • maximum replications number is reached
For fixed number of replications use ExperimentMultipleRuns.setFixedReplicationsNumber(int)

This is optimization setup method, user should not call it
Specified by:
setVariableReplicationsNumber in class ExperimentMultipleRuns<ROOT extends Agent>
Parameters:
minimumReplications - minimum number of replications
maximumReplications - minimum number of replications
confidenceLevel - one of
errorPercent - the error percentage as a value > 0 and < 1.
See Also:

setupRootParameters

@AnyLogicInternalCodegenAPI
public abstract void setupRootParameters(ROOT root,
 boolean callOnChangeActions)
Is called to setup parameters of top-level agent. This method must be defined in a subclass.
Parameters:
root - the top-level agent instance
callOnChangeActions - if true this method should use set_* methods of root to setup parameters, otherwise parameter values should be simply assigned to the fields of root

evaluateSerial

public void evaluateSerial(int iteration)
Is called to obtain and set a value of the objective function corresponding to the currently suggested set of parameters (decision variables). This method must be defined in a subclass. Most probably you will be creating a new model and executing it in this method.
Parameters:
iteration - the iteration number, used for error reporting

setLogBufferLength

@AnyLogicInternalCodegenAPI
public void setLogBufferLength(int length)

getOptimizationEngineType

@AnyLogicInternalCodegenAPI
public abstract OptimizationEngine getOptimizationEngineType()

prepareRoot

@AnyLogicInternalAPI
public ROOT prepareRoot(Engine engine)

evaluateConstraints

@AnyLogicInternalCodegenAPI
public void evaluateConstraints(List<? extends IPreConstraint> constraints,
 List<? extends IVariable> variables)

createObjective_xjal

@AnyLogicInternalCodegenAPI
public IObjective createObjective_xjal()

createContinuousVariable_xjal

@AnyLogicInternalCodegenAPI
public IContinuousVariable createContinuousVariable_xjal()

createDicsreteVariable_xjal

@AnyLogicInternalCodegenAPI
public IDiscreteVariable createDicsreteVariable_xjal()

createBinaryVariable_xjal

@AnyLogicInternalCodegenAPI
public IBinaryVariable createBinaryVariable_xjal()

createPostConstraint_xjal

@AnyLogicInternalCodegenAPI
public IPostConstraint createPostConstraint_xjal()

createPreConstraint_xjal

@AnyLogicInternalCodegenAPI
public IPreConstraint createPreConstraint_xjal()