public class CuttingPlaneExtOptimizer extends CuttingPlaneOptimizer
CuttingPlaneOptimizer
such as: time limit and local search with increment simulation length.
A restriction is that it assumes the use of a simulator to evaluate the service levels of
the solutions.CuttingPlaneOptimizer.LocalSearchMethod
Modifier and Type | Field and Description |
---|---|
protected CuttingPlaneExtParams |
cutexParams
The extended cutting-plane parameters.
|
protected SimParams |
lsSimParams
The simulation parameter used for the local search.
|
agentCosts, arrivalRates, callGroups, cc, constraintCount, constraintMap, cpTest, cutp, eval, numAgents, numAgentsNoRound, numGroups, numTypes, objValue, optSL, optSLPerCall, optSolution, serviceRates, serviceRatesIG, solver, solverTimeSec, staffNoRoundDf, varIndexMap, verbose
Constructor and Description |
---|
CuttingPlaneExtOptimizer(CallCenter cc,
CuttingPlaneExtParams cutParams,
CuttingPlaneTest cpTest,
ContactCenterEval eval,
SimParams lsSimParams)
Constructs and initializes a cutting-plane optimizer.
|
Modifier and Type | Method and Description |
---|---|
CuttingPlaneExtParams |
getCuttingPlaneExtParams()
Returns the parameter object
CuttingPlaneExtParams . |
protected static boolean |
isTimeUp(long elapsedTimeSec,
int maxTimeSec) |
protected int[] |
localSearch(int[] staffing,
int maxCPUSec)
Calls the (possibly different) local search algorithm.
|
static void |
main(String[] args)
Runs the optimization with the entered parameters files.
|
void |
optimize()
Executes the cutting plane optimizing algorithm.
|
protected StaffingSolution |
optimizeCP()
Executes the cutting-plane optimization.
|
protected StaffingSolution |
optimizeLocalSearch(int maxCPUSec)
Manages the local search optimization.
|
protected void |
solverSolve()
Internal use: Calls the
Solver.solve() function of the Solver and also updates the solutions. |
addConstraint, addHeuristicCut, addIntConstr, addIntMaxFlowConstr, addSubGradientConstraint, adjustHeuristicCut, ccEval, changeConstraintRhs, createSolverInstance, equal, exportLP, freeSolver, generateSolver, getBestStaffing, getBestStaffingCost, getCuttingPlaneParams, getCuttingPlaneTest, getMapFlowIndex, getMapStaffingIndex, getOptimalSL, getOptimalSLPerCall, getPerAgentCost, getStaffingCost, localSearch, optimizeLocalSearch, printNumAgents, printNumAgents, setDefaultSolver, setMapFlowIndex, setMapStaffingIndex, solveMaxFlow
protected CuttingPlaneExtParams cutexParams
protected SimParams lsSimParams
public CuttingPlaneExtOptimizer(CallCenter cc, CuttingPlaneExtParams cutParams, CuttingPlaneTest cpTest, ContactCenterEval eval, SimParams lsSimParams)
cc
- the call center parameterscutParams
- the parameter file for the cutting-plane optimizercpTest
- the CuttingPlaneTest
that will be used to compute the service leveleval
- the call center simulator to uselsSimParams
- the simulator parameters for the local searchprotected static boolean isTimeUp(long elapsedTimeSec, int maxTimeSec)
elapsedTimeSec
- the time elapsed up to now, in seconds.maxTimeSec
- the maximum time limit in seconds.public void optimize() throws OptimizerException
CuttingPlaneOptimizer
If a composition of call type is not covered by the skill supply (not enough agents), then there is a Minimum-Cut in the Max-Flow of the network representation of the call center. The number of agents must be equal or greater than the ρ of that composition.
If the SL of a call type is below its minimum required SL, then it adds a heuristic constraint to satisfy its minimum SL. Else, if the SL does not satisfy the overall SL, then a subgradient cut is generated.
However, satisfying the SL constraint might violate the skill supply constraint. The algorithm iterates until both constraints are satisfied or until it exceeds a maximum number of iterations.
optimize
in interface StaffingOptimizer
optimize
in class CuttingPlaneOptimizer
OptimizerException
- if an error occurred in the optimization.protected void solverSolve() throws SolverException
Solver.solve()
function of the Solver and also updates the solutions.
If the solver solves the problem with real variables, the continuous variables
that are rounded-up is controlled by a threshold parameter CuttingPlaneExtParams.roundLPThreshold
.
The number of agent variables are rounded up if the fractional value (real value - floor value)
is higher than the threshold.solverSolve
in class CuttingPlaneOptimizer
SolverException
- if an error occurred while solving the MIP.protected StaffingSolution optimizeCP() throws OptimizerException
optimizeCP
in class CuttingPlaneOptimizer
OptimizerException
- if an error occurred while trying to add a constraintprotected StaffingSolution optimizeLocalSearch(int maxCPUSec)
optimizeCP()
.maxCPUSec
- the maximum CPU time in seconds for the local searchprotected int[] localSearch(int[] staffing, int maxCPUSec)
optimizeCP()
.
In fact, this method is called by optimizeLocalSearch(int)
.staffing
- last solution of the cutting-plane optimization and
starting point of the local searchmaxCPUSec
- the maximum CPU time in seconds for the local searchpublic CuttingPlaneExtParams getCuttingPlaneExtParams()
CuttingPlaneExtParams
.