KRelaxationSolver¶
-
class KRelaxationSolver : public KAbstractPtrArray<KRelaxationSolver>¶
This class is intended as a superclass for linear relaxation solvers.
Such a solver must be provided with
a linear relaxation (KLinearRelaxation)
an objective variable (KNumVar)
a sense for optimization (KProblem::Sense).
It relies on a LP/MIP solver to provide the following information:
a value (a bound for the relaxed problem, cf method getBound())
a solution, possibly not feasible for the original problem, but which can be used to guide the search for a feasible solution
if the problem is LP, reduced costs (that can be used for instance in the “reduced cost fixing” procedure).
- Since
2016.1
Subclassed by KLinearRelaxationSolver
Public Functions
-
virtual void setObjective(const KNumVar &var) = 0¶
Set objective variable.
- Parameters
var – the new objective variable
-
virtual int solve() = 0¶
Solve the relaxed optimization problem.
This methods returns the following error codes :
0 : optimal
1 : infeasible
2 : search interrupted prematurely, a solution was found
3 : search interrupted prematurely, no solution was found
4 : other problem
-
virtual double getBound(void) const = 0¶
Get the (lower for minimization, upper for maximization) bound computed by solve().
Note that :
solve() method must be called before the getBound() method
moreover, the return code provided by solve() must be checked before using the value returned by getBound().
-
bool isGlobal(const KAuxVar&)¶
Return true if the given variable is set as global.
-
void setGlobal(const KIntVar &var, bool isGlobal)¶
Set (or unset) a KIntVar as global.
- Parameters
var – variable to modify
isGlobal – new global status
-
void setGlobal(const KAuxVar &var, bool isGlobal)¶
Set (or unset) a KAuxVar global.
- Parameters
var – variable to check
isGlobal – new global status
-
void setAllGlobal(bool isGlobal)¶
(Un)set variables as global.
Set or unset as “global” all KIntVar and KAuxVar with global type (note that a KFloatVar variables are not modified, since it would make little sense to set them global.)
- Parameters
isGlobal – new global status
-
void setIndicatorsGlobal(bool isGlobal)¶
Set all indicator auxiliary variables global.
- Parameters
isGlobal – new global status
-
void setSense(KProblem::Sense)¶
Set the sense of optimization (maximize, minimize).
- Parameters
sense – new sense for optimization
-
virtual double getMIPSolution(const KNumVar &var) const = 0¶
Get the current MIP solution for a given KNumVar variable.
- Parameters
var – variable whose solution is checked
- Returns
value of var in the current MIP solution
-
virtual double getMIPSolution(const KAuxVar &var) const = 0¶
Get the current MIP solution for a given KAuxVar variable.
- Parameters
var – variable whose solution is checked
- Returns
value of var in the current MIP solution
-
virtual double getLPSolution(const KNumVar &var) const = 0¶
Get the current LP solution for a given KNumVar variable.
- Parameters
var – variable whose value is checked
- Returns
value of var in the current MIP solution
-
virtual double getLPSolution(const KAuxVar &var) const = 0¶
Get the current relaxed solution for a given KAuxVar variable.
- Parameters
var – variable whose value is checked
- Returns
value of var in the current solution
-
virtual int getNumberGlobals(void) const = 0¶
Get the total number of global variables.
-
double getTotalTimeSpentInComputation(void) const¶
Get the total amount of time spent in computations since the object was built.
-
double getTimeSpentInLastComputation(void) const¶
Get the amount of time spent during the last call to solve().
-
void setSolveAsMIP(bool flag)¶
Set this flag to 0 if you want to solve as LP a linear relaxation containing global entities (1 is the default).
- Deprecated:
The new way of doing this is to use a configurator
- Parameters
flag – New flag value
-
bool solveAsMIP()¶
Return true if the flag “solveAsMIP” is set.
-
void setMaxMIPSol(int)¶
Stop global search after maxMIPSol feasible solutions found.
0 for no limit, this is the default. If the limit is low, this is likely to cause optimization to end before optimality.
-
void setAlgorithm(int alg)¶
Set the resolution algorithm.
-
int getAlgorithm()¶
Get the resolution algorithm.
-
virtual void instantiateNumVarsToCurrentSol(void) = 0¶
Instantiate variables to current solution obtained by linear relaxation solver.
-
virtual void instantiateNumVarToCurrentSol(KNumVar *var) = 0¶
Instantiate a variables to current solution obtained by linear relaxation solver.
-
virtual void generateCuts(KLinearRelaxation *relaxation) = 0¶
Cut generation.
-
void setConfigurator(KRelaxationSolverConfigurator *configurator)¶
Set the configurator of a KRelaxationSolver.
-
KRelaxationSolverConfigurator *getConfigurator()¶
Get the configurator of a KRelaxationSolver.