AnyLogic
Expand
Font size

Class ExperimentOptimization<ROOT extends Agent>

Type Parameters:
ROOT - class of top-level agent
All Implemented Interfaces:
AgentConstants, EnvironmentConstants, java.io.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 class com.anylogic.engine.Experiment

ERROR, FINISHED, IDLE, modelExecutionCommandQueue, mutexModelActionQueue, OPEN_RESULTS, OPEN_SNAPSHOT, PAUSE, PAUSED, PLEASE_WAIT, RUN, RUNNING, SAVE_RESULTS, SAVE_SNAPSHOT, STEP, STOP

Fields inherited from class com.anylogic.engine.Utilities

AM, APRIL, AUGUST, CUSTOM_DISTRIBUTION_INTERPOLATION_LINEAR, CUSTOM_DISTRIBUTION_INTERPOLATION_NONE, CUSTOM_DISTRIBUTION_INTERPOLATION_STEP, DECEMBER, FEBRUARY, FRIDAY, infinity, JANUARY, JULY, JUNE, LENGTH_UNIT_CENTIMETER, LENGTH_UNIT_FOOT, LENGTH_UNIT_INCH, LENGTH_UNIT_KILOMETER, LENGTH_UNIT_METER, LENGTH_UNIT_MILE, MARCH, MAY, MONDAY, NOVEMBER, OCTOBER, PM, SATURDAY, SEPTEMBER, SUNDAY, THURSDAY, TIME_UNIT_DAY, TIME_UNIT_HOUR, TIME_UNIT_MILLISECOND, TIME_UNIT_MINUTE, TIME_UNIT_MONTH, TIME_UNIT_SECOND, TIME_UNIT_WEEK, TIME_UNIT_YEAR, TUESDAY, UNDECIMBER, WEDNESDAY

Fields inherited from class com.anylogic.engine.Presentable

ALIGNMENT_CENTER, ALIGNMENT_LEFT, ALIGNMENT_RIGHT, ARROW_FILLED, ARROW_NONE, ARROW_THIN, CAD_ANTIALIASING, CAD_INVERTED, LINE_STYLE_DASHED, LINE_STYLE_DOTTED, LINE_STYLE_SOLID, SHAPE_DRAW_2D, SHAPE_DRAW_2D3D, SHAPE_DRAW_3D

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

Fields inherited from interface com.anylogic.engine.EnvironmentConstants

LAYOUT_ARRANGED, LAYOUT_RANDOM, LAYOUT_RING, LAYOUT_SPRING_MASS, LAYOUT_USER_DEFINED, NEIGHBORHOOD_EUCLIDEAN, NEIGHBORHOOD_MOORE, NETWORK_ALL_IN_RANGE, NETWORK_RANDOM, NETWORK_RING_LATTICE, NETWORK_SCALE_FREE, NETWORK_SMALL_WORLD, NETWORK_USER_DEFINED

Constructor Summary

Constructors 
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)
Constructor Description

Method Summary

All Methods Static Methods Instance Methods Abstract Methods Concrete Methods Deprecated Methods 
void addConstraint​(IPreConstraint constraint)  
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
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
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
IBinaryVariable createBinaryVariable_xjal()  
IContinuousVariable createContinuousVariable_xjal()  
IDiscreteVariable createDicsreteVariable_xjal()  
IObjective createObjective_xjal()  
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
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.
IPostConstraint createPostConstraint_xjal()  
IPreConstraint createPreConstraint_xjal()  
void evaluateConstraints​(java.util.List<? extends IPreConstraint> constraints, java.util.List<? extends IVariable> variables)  
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).
int getBestIteration()
Returns the iteration that resulted in the best solution thus far
(solution may be infeasible)
double getBestObjectiveValue()
Returns the value of the objective function for the best solution found thus far
Returned value may be infeasible
double getBestParamValue​(IVariable parameter)
Returns the value of the given optimization parameter variable for the best solution found thus far
(solution may be infeasible)
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
int getCurrentIteration()
Returns the current value of iteration counter
double getCurrentObjectiveValue()
Returns the value of the objective function for the current solution
java.lang.Object getCurrentParam​(IVariable optimizationParameterVariable)  
double getCurrentParamValue​(IVariable parameter)
Returns the value of the given optimization parameter variable for the current solution
int getCurrentReplication()
Returns the replication number for the current solution being evaluated
Ensure replications are used (isUseReplications()) before calling this method
int getMaximumIterations()
Returns the number of iterations set by setMaximumIterations(int)
int getNumberOfCompletedIterations()
Returns the current value of iteration counter
com.opttek.optquest.COptQuestOptimization getOptimization()
Deprecated.
the method is deprecated and available only with OptQuest optimization engine.
abstract OptimizationEngine getOptimizationEngineType()  
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.
int getSelectedNthBestIteration()
Returns the iteration number for the Nth best solution, where the Nth best solution is identified by the method selectNthBestSolution(int)
double getSelectedNthBestObjectiveValue()
Returns the objective value for the Nth best solution, identified by the method selectNthBestSolution(int)
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)
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
boolean isBestSolutionFeasible()
Returns true if the best solution satisfies all constraints and requirements
boolean isCommandEnabled​(Experiment.Command cmd)
Checks if a command can be executed.
boolean isCurrentSolutionBest()
Returns true if current solution is the best one at this moment
boolean isCurrentSolutionFeasible()
Returns true if current solution satisfies all constraints and requirements
boolean isLastReplication()
Deprecated.
boolean isParallel()  
boolean isSelectedNthBestSolutionFeasible()
Returns true if nth best solution satisfies all constraints and requirements
boolean isUseReplications()
Returns true if optimization uses replications
ROOT prepareRoot​(Engine engine)  
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.
void setAutoStop​(boolean stop)
Sets the auto stop option.
If the input parameter is true, auto stop is turned on.
void setConstraint​(IPreConstraint constraint, double bound, ConstraintTypeEnum type, java.lang.String expression)  
void setCurrentObjectiveValue​(double value)
Used to set the value of the objective for the current solution.
void setCurrentPreConstraintValue_xjal​(IPreConstraint constraint, double value)  
void setCurrentRequirementValue_xjal​(IPostConstraint requirement, double value)
Used to set the value of the requirement for the current solution.
void setFixedReplicationsNumber​(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
void setLogBufferLength​(int length)  
void setMaximumIterations​(int numberOfIterations)
Sets the number of iterations the optimization should perform before stopping.
void setObjectiveMaximize()
Sets the goal of the optimization to maximize the objective value

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

This is optimization setup method, user should not call it
void setParameterSuggestedValue​(IVariable parameter, java.lang.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
void setParameterVariable​(IBinaryVariable parameter, java.lang.String name)  
void setParameterVariable​(IContinuousVariable parameter, java.lang.String name, java.lang.String min, java.lang.String max)  
void setParameterVariable​(IDiscreteVariable parameter, java.lang.String name, DiscreteParameterDataType dataType, java.lang.String min, java.lang.String max, java.lang.String step)  
void setRequirement​(IPostConstraint requirement, double bound, ConstraintTypeEnum type)  
abstract void setupRootParameters​(ROOT root, boolean callOnChangeActions)
Is called to setup parameters of top-level agent.
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
void setUseReplications​(boolean useReplications)
Sets optimization to use replications

This is optimization setup method, user should not call it
void setVariableReplicationsNumber​(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.
void stopOptimization()
Stops the currently running optimization

This is optimization setup method, user should not call it
Modifier and Type Method Description

Methods inherited from class com.anylogic.engine.ExperimentMultipleRuns

getEngine, getMutexRead_xjal, getMutexWrite_xjal, getParallelEvaluatorsCount, getRunCount, getSimulationProgress_xjal, getStep, onAfterExperiment, onAfterIteration, onDestroy_xjal, registerExperimentHost_xjal

Methods inherited from class com.anylogic.engine.ExperimentRunFast

getRunTimeSeconds, getState, pause, run, step, stop

Methods inherited from class com.anylogic.engine.Experiment

addExecutionListener, close, createRoot, destroy_xjal, error, errorInModel, getCommandLineArguments, getExperimentHost, getName, getSnapshotFileName, getWindowHeight, getWindowWidth, initDefaultRandomNumberGenerator, internalFillConfig, isLoadRootFromSnapshot, isTestExperiment, onBeforeSimulationRun, onDestroy, onEngineFinished, onError, onError, removeExecutionListener, reset, setCommandLineArguments_xjal, setLoadRootFromSnapshot, setName, setup, setupEngine, warning, warning

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, 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 com.anylogic.engine.Presentable

createElementDescriptors, executeShapeControlAction, executeShapeControlAction, executeShapeControlAction, executeShapeControlAction, executeShapeControlAction, executeShapeControlAction, getElementDesciptors, getElementProperty, getExperiment, getModelElementsShape, getPresentation, getPresentationShape, getShapeControlDefaultValueBoolean, getShapeControlDefaultValueDouble, getShapeControlDefaultValueInt, getShapeControlDefaultValueString, getViewAreas, iconContains, onSelectionChanged_xjal, onShapeClick, onShapeGroupDraw, presentationContains, readCustomData, updateShapeDynamicProperties, writeCustomData

Methods inherited from class java.lang.Object

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

Constructor Detail

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:
ExperimentMultipleRuns.getParallelEvaluatorsCount()

Method Detail

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(Engine, OptimizationCallback)

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:
getSelectedNthBestObjectiveValue(), getSelectedNthBestParamValue(IVariable)

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:
setFixedReplicationsNumber(int), setVariableReplicationsNumber(int, int, com.anylogic.engine.ExperimentMultipleRuns.ConfidenceLevel, double)

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:
ExperimentMultipleRuns.setUseReplications(boolean)

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 java.lang.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,
                                       java.lang.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,
                                 java.lang.String name,
                                 DiscreteParameterDataType dataType,
                                 java.lang.String min,
                                 java.lang.String max,
                                 java.lang.String step)

setParameterVariable

@AnyLogicInternalCodegenAPI
public void setParameterVariable​(IContinuousVariable parameter,
                                 java.lang.String name,
                                 java.lang.String min,
                                 java.lang.String max)

setParameterVariable

@AnyLogicInternalCodegenAPI
public void setParameterVariable​(IBinaryVariable parameter,
                                 java.lang.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,
                          java.lang.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:
ExperimentMultipleRuns.setUseReplications(boolean)

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​(java.util.List<? extends IPreConstraint> constraints,
                                java.util.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()
How can we improve this article?