RSplineSolver

class RSplineSolver @JvmOverloads constructor(problemDefinition: ProblemDefinition, evaluator: EvaluatorIfc, maxIterations: Int = defaultMaxNumberIterations, replicationsPerEvaluation: FixedGrowthRateReplicationSchedule, solutionEqualityChecker: SolutionEqualityIfc = InputsAndConfidenceIntervalEquality(), streamNum: Int = 0, streamProvider: RNStreamProviderIfc = KSLRandom.DefaultRNStreamProvider, name: String? = null) : StochasticSolver(source)

This class represents an implementation of R-SPLINE from the paper:

H. Wang, R. Pasupathy, and B. W. Schmeiser, “Integer-Ordered Simulation Optimization using R-SPLINE: Retrospective Search with Piecewise-Linear Interpolation and Neighborhood Enumeration,” ACM Transactions on Modeling and Computer Simulation (TOMACS), vol. 23, no. 3, pp. 17–24, July 2013, doi: 10.1145/2499913.2499916.

The original algorithm used the total number of oracle calls as an approach to stopping the iterations. Matlab/R implementations did not use this approach, but had a limit on the total number of R-SPLINE iterations. The basic implementation of all solvers has such a limit via the maxIterations property. The theory of the approach indicates that each sample-path problem, P_k, is used to seed the next sample path problem. This causes the solutions to the P_k problems to eventually converge to some solution. The original paper does not provide much insight into how to compare solutions for stopping. The approach implemented here follows the suggestions found within the cross-entropy literature. The sequence of P_k calls will stop when a fixed number of the last produced solutions test for equality. The default here is to indicate that solutions are equal if they compare equal according to a confidence interval test and have the same input variable values. The confidence interval test is based on the penalized objective function value. The stopping criteria is controlled by the solutionChecker property. Users can supply their own checking procedure via this property and their own definition of equality via its solutionEqualityChecker property.

Parameters

problemDefinition

the problem being solved.

evaluator

The evaluator responsible for assessing the quality of solutions. Must implement the EvaluatorIfc interface.

maxIterations

The maximum number of iterations allowed for the solving process.

replicationsPerEvaluation

Strategy to determine the number of replications to perform for each evaluation.

solutionEqualityChecker

Used when testing if solutions have converged for equality between solutions. The default is InputsAndConfidenceIntervalEquality, which checks if the inputs are the same and there is no statistical difference between the solutions

streamNum

the random number stream number, defaults to 0, which means the next stream

streamProvider

the provider of random number streams, defaults to KSLRandom.DefaultRNStreamProvider

name

Optional name identifier for this instance of the solver.

Constructors

Link copied to clipboard
constructor(problemDefinition: ProblemDefinition, evaluator: EvaluatorIfc, maxIterations: Int = defaultMaxNumberIterations, initialNumReps: Int = defaultInitialSampleSize, sampleSizeGrowthRate: Double = defaultReplicationGrowthRate, maxNumReplications: Int = defaultMaxNumReplications, solutionEqualityChecker: SolutionEqualityIfc = InputsAndConfidenceIntervalEquality(), streamNum: Int = 0, streamProvider: RNStreamProviderIfc = KSLRandom.DefaultRNStreamProvider, name: String? = null)
constructor(problemDefinition: ProblemDefinition, evaluator: EvaluatorIfc, maxIterations: Int = defaultMaxNumberIterations, replicationsPerEvaluation: FixedGrowthRateReplicationSchedule, solutionEqualityChecker: SolutionEqualityIfc = InputsAndConfidenceIntervalEquality(), streamNum: Int = 0, streamProvider: RNStreamProviderIfc = KSLRandom.DefaultRNStreamProvider, name: String? = null)

Creates an R-SPLINE solver with the specified parameters.

Types

Link copied to clipboard
object Companion
Link copied to clipboard
class NESearchResults(val numOracleCalls: Int, val solution: Solution)
Link copied to clipboard
class PLIResults(val numOracleCalls: Int, val gradients: DoubleArray? = null, val solution: Solution)
Link copied to clipboard
class SPLIResults(val numOracleCalls: Int, val solution: Solution)

Properties

Link copied to clipboard

This defines the growth schedule for the number of replications. In the original paper, this is the value of m_k.

Link copied to clipboard

The initial setting of the line search step-size. By default, this is 2.0

Link copied to clipboard

Since the number of SPLINE calls can grow as the algorithm proceeds, this variable provides the initial number of SPLINE calls to which the growth is applied. The default value is defaultInitialMaxSplineCalls.

Link copied to clipboard

This variable limits the number of permissible line-searches within the SPLINE step.

Link copied to clipboard

The multiplier that increases the line search step-size for each line search iteration. The default is 2.0

Link copied to clipboard

Since the number of SPLINE calls can grow as the algorithm proceeds, this variable provides the maximum number of calls that are permissible. The growth with not exceed this value. By default, this is defaultMaxSplineCallLimit.

Link copied to clipboard

The neighborhood finder for performing the neighborhood search. By default, this is a von Neumann neighborhood.

Link copied to clipboard

The amount of the perturbation for Algorithm 4 in the paper:

Link copied to clipboard

This variable tracks the current sample size for each SPLINE iteration. In the notation of the paper, this is m_k.

Link copied to clipboard

Used to check if the last set of solutions that were captured are the same.

Link copied to clipboard

This variable limits the number of permissible SPLI-searches within the SPLINE step.

Link copied to clipboard

The rate at which the permissible number of SPLINE calls grows. By default, this is defined by defaultSplineCallGrowthRate.

Link copied to clipboard

Since the number of SPLINE calls can grow as the algorithm proceeds, this variable represents the current number of permissible SPLINE calls. In the notation of the R-SPLINE paper, this is b_k.