C++ API#
The C++ API reference is generated from headers in core/, plugins/, and
routing/.
Note
This section is populated by Breathe once Doxygen XML is available.
-
struct Appointment : public routing::Attribute<Appointment>#
- #include <Appointment.hpp>
Appointment flexibility metrics (solution values)
Appointment stores solution-dependent values related to time window flexibility: maximum shift and waiting time.
Public Functions
-
inline virtual std::unique_ptr<IAttribute> clone() const override#
Creates a deep copy of this attribute.
-
inline virtual std::unique_ptr<IAttribute> clone() const override#
-
template<typename Derived>
class Attribute : public routing::IAttribute# - #include <IAttribute.hpp>
CRTP base class for concrete attributes.
Public Functions
-
inline virtual AttributeTypeId typeId() const override#
Returns the unique type identifier for this attribute.
-
inline virtual AttributeTypeId typeId() const override#
-
class BoolVar#
- #include <MIPTypes.hpp>
Handle for a binary variable in MIP model.
Public Functions
-
BoolVar() = default#
-
inline explicit BoolVar(int id)#
-
inline bool isValid() const#
-
inline int id() const#
Private Members
-
int id_ = -1#
Friends
- friend class IMIPBackend
-
BoolVar() = default#
-
class CapacityConstraintGenerator : public routing::IConstraintGenerator#
- #include <CapacityConstraintGenerator.hpp>
Capacity constraint generator.
Implements vehicle capacity constraints:
Consumption variables (q_i) for tracking load
Vehicle capacity limits per route
MTZ-style load propagation constraints
Requires: Consumer (on clients) and Stock (on vehicles)
Public Functions
-
inline virtual std::string name() const override#
Returns a unique name for this generator (for debugging/logging)
-
inline virtual std::vector<AttributeTypeId> requiredAttributes() const override#
Returns the attribute types that must be enabled for this generator to be active.
-
inline virtual int priority() const override#
Priority for ordering generators (lower = earlier). Default: 100 Routing constraints should be ~10, capacity ~50, time windows ~60
-
class CapacityEvaluator : public routing::IEvaluator#
- #include <CapacityEvaluator.hpp>
Public Functions
-
inline virtual std::vector<AttributeTypeId> requiredAttributes() const override#
Returns the attribute types required for this evaluator.
-
inline virtual int priority() const override#
Priority for evaluation ordering (lower = earlier). Default: 100.
-
inline virtual bool checkFeasibility(const Tour &tour, const InsertionContext &ctx) const override#
Check if an insertion is feasible.
- Parameters:
tour – The tour to insert into
ctx – The insertion context
- Returns:
true if the insertion maintains feasibility for this evaluator’s constraints
-
inline virtual double evaluateInsertionDelta(const Tour&, const InsertionContext&) const override#
Compute the cost delta for an insertion.
- Parameters:
tour – The tour to insert into
ctx – The insertion context
- Returns:
The change in cost (positive = worse, negative = better)
-
inline virtual void applyInsertion(Tour&, const InsertionContext&) override#
Apply an insertion and update internal state.
Called after an insertion is accepted. The evaluator should update any cached state (e.g., total load, arrival times).
- Parameters:
tour – The tour being modified
ctx – The insertion context
-
inline virtual std::vector<AttributeTypeId> requiredAttributes() const override#
-
class CapacityPlugin : public routing::IPlugin#
- #include <CapacityPlugin.hpp>
Public Functions
-
inline virtual PluginType type() const override#
Get the plugin type.
-
inline virtual void initialize(PluginRegistry ®istry) override#
Initialize the plugin and register components.
-
inline virtual PluginType type() const override#
-
struct ChromosomeCmp#
- #include <GASolver.hpp>
-
class Client : public routing::Entity, public routing::models::Client#
- #include <Entity.hpp>
Client entity with runtime attributes.
Public Functions
-
inline explicit Client(unsigned id)#
-
inline explicit Client(unsigned id)#
-
struct Client : public virtual routing::Model#
- #include <Client.hpp>
Subclassed by routing::Client
Public Functions
-
inline explicit Client(unsigned id)#
-
inline explicit Client(unsigned id)#
-
class ComposableCorePlugin : public routing::IPlugin#
- #include <ComposableCorePlugin.hpp>
Public Functions
-
inline virtual PluginType type() const override#
Get the plugin type.
-
inline virtual void initialize(PluginRegistry&) override#
Initialize the plugin and register components.
-
inline virtual PluginType type() const override#
-
class Configuration#
- #include <Configuration.hpp>
Public Functions
Public Static Attributes
-
static constexpr const char *iterMax = "iterMax"#
-
static constexpr const char *iterMax = "iterMax"#
-
struct ConstraintConfig#
- #include <GASolver.hpp>
-
class ConstructionParameters#
- #include <Constructor.hpp>
Public Static Functions
-
static inline ConstructionParameters *getDefault()#
-
static inline ConstructionParameters *getDefault()#
-
class Constructor#
- #include <Constructor.hpp>
Subclassed by routing::GreedyConstructor
Public Functions
-
inline Constructor(routing::ConstructionParameters *p_params)#
-
inline Constructor()#
-
inline Constructor *setParams(routing::ConstructionParameters *p_params)#
Public Members
-
routing::ConstructionParameters *params = nullptr#
-
inline Constructor(routing::ConstructionParameters *p_params)#
-
struct Consumer : public routing::Attribute<Consumer>#
- #include <Consumer.hpp>
A node with demand (capacity consumption)
Consumer models the demand that must be satisfied at a node, consuming vehicle capacity.
Public Functions
-
inline virtual std::unique_ptr<IAttribute> clone() const override#
Creates a deep copy of this attribute.
-
inline virtual std::unique_ptr<IAttribute> clone() const override#
-
class CPCapacityGenerator : public routing::cp::ICPConstraintGenerator#
- #include <CPCapacityGenerator.hpp>
CP Capacity constraint generator.
Implements vehicle capacity constraints using CP primitives:
Load variables tracking cumulative demand per vehicle
Capacity constraints ensuring load <= vehicle capacity
For each vehicle, the sum of demands of visited clients must not exceed the vehicle’s capacity.
Public Functions
-
inline virtual std::vector<AttributeTypeId> requiredAttributes() const override#
Attribute types required by this generator.
-
inline virtual int priority() const override#
Priority for ordering (lower = earlier)
-
inline void setRoutingGenerator(CPRoutingGenerator *routing)#
-
inline virtual void addVariables(ICPBackend &cp, Problem &problem) override#
Add variables to the CP model.
- Parameters:
cp – The CP backend
problem – The problem instance
-
inline virtual void addConstraints(ICPBackend &cp, Problem &problem) override#
Add constraints to the CP model.
- Parameters:
cp – The CP backend
problem – The problem instance
-
inline virtual void addObjectiveTerms(ICPBackend &cp, Problem &problem, LinearExpr &expr) override#
Add terms to the objective function.
- Parameters:
cp – The CP backend
problem – The problem instance
expr – The linear expression to add to
-
inline virtual void extractSolution(const ICPBackend &cp, Problem &problem) override#
Called after solving to extract solution data.
- Parameters:
cp – The CP backend (with solution)
problem – The problem instance
-
struct CPEntry#
Public Members
-
CPGeneratorFactory factory#
-
std::vector<AttributeTypeId> requiredAttrs#
-
int priority#
-
CPGeneratorFactory factory#
-
struct CPGeneratorEntry#
Public Members
-
CPGeneratorFactory factory#
-
std::vector<AttributeTypeId> requiredAttrs#
-
int priority#
-
CPGeneratorFactory factory#
-
class CPLEXMIPBackend : public routing::mip::IMIPBackend#
- #include <CPLEXMIPBackend.hpp>
Stub implementation when CPLEX is not available.
Public Functions
-
inline CPLEXMIPBackend()#
-
inline virtual std::string name() const override#
Get backend name (e.g., “cplex”, “gurobi”, “highs”)
-
inline virtual Var newVar(double, double, const std::string&) override#
Create a continuous variable.
- Parameters:
lb – Lower bound (default: 0)
ub – Upper bound (default: infinity)
name – Optional variable name
-
inline virtual IntVar newIntVar(int, int, const std::string&) override#
Create an integer variable.
- Parameters:
lb – Lower bound
ub – Upper bound
name – Optional variable name
-
inline virtual BoolVar newBoolVar(const std::string&) override#
Create a binary variable (0-1)
- Parameters:
name – Optional variable name
-
inline virtual void addLessEqual(const LinearExpr&, double, const std::string&) override#
Add constraint: expr <= rhs.
-
inline virtual void addGreaterEqual(const LinearExpr&, double, const std::string&) override#
Add constraint: expr >= rhs.
-
inline virtual void addEqual(const LinearExpr&, double, const std::string&) override#
Add constraint: expr == rhs.
-
inline virtual void addRange(const LinearExpr&, double, double, const std::string&) override#
Add constraint: lb <= expr <= ub.
-
inline virtual void addIndicator(BoolVar, int, const LinearExpr&, Sense, double, const std::string&) override#
Add indicator constraint: if indicator == value, then expr sense rhs.
- Parameters:
indicator – Boolean variable
value – Value that activates the constraint (0 or 1)
expr – Linear expression
sense – Constraint sense
rhs – Right-hand side
-
inline virtual void addSOS1(const std::vector<Var>&, const std::vector<double>&, const std::string&) override#
Add SOS1 constraint (at most one variable in set is non-zero)
-
inline virtual void addSOS2(const std::vector<Var>&, const std::vector<double>&, const std::string&) override#
Add SOS2 constraint (at most two adjacent variables are non-zero)
-
inline virtual void addLazyConstraint(const LinearExpr&, Sense, double) override#
Add a lazy constraint (checked only when integer solution found)
-
inline virtual void addUserCut(const LinearExpr&, Sense, double) override#
Add a user cut (can be added at any time, must not cut off feasible solutions)
-
inline virtual void minimize(const LinearExpr&) override#
Set objective to minimize.
-
inline virtual void maximize(const LinearExpr&) override#
Set objective to maximize.
-
inline virtual void setWarmStart(const std::vector<Var>&, const std::vector<double>&) override#
Provide a warm start solution.
- Parameters:
vars – Variables to set
values – Values for the variables
-
inline virtual void setMIPStart(const std::vector<std::pair<Var, double>>&) override#
Provide MIP start hint for integer variables.
-
inline virtual MIPStatus solve(double) override#
Solve the model.
- Parameters:
timeout – Maximum solving time in seconds
- Returns:
Solver status
-
inline virtual double getObjectiveValue() const override#
Get objective value of solution.
-
inline virtual double getObjectiveBound() const override#
Get best objective bound.
-
inline virtual double getDual(int) const override#
Get dual value (shadow price) of a constraint.
- Parameters:
constraintIndex – Index of the constraint
-
inline virtual double getSolveTime() const override#
Get solving time in seconds.
-
inline virtual long long getNumIterations() const override#
Get number of simplex iterations.
-
inline virtual long long getNumNodes() const override#
Get number of nodes explored in branch-and-bound.
-
inline virtual int getNumSolutions() const override#
Get number of solutions found.
-
inline virtual void setTimeLimit(double) override#
Set time limit in seconds.
-
inline virtual void setGapTolerance(double) override#
Set MIP gap tolerance.
-
inline virtual void setNumThreads(int) override#
Set number of threads.
-
inline virtual void setRandomSeed(int) override#
Set random seed.
-
inline virtual void setVerbosity(int) override#
Set verbosity level (0 = quiet, higher = more verbose)
-
inline virtual void setPresolve(bool) override#
Enable/disable presolve.
-
inline virtual void setNodeLimit(long long) override#
Set node limit.
-
inline virtual void setSolutionLimit(int) override#
Set solution limit.
-
inline virtual void clear() override#
Clear the model (remove all variables and constraints)
-
inline virtual int getNumVars() const override#
Get number of variables.
-
inline virtual int getNumConstraints() const override#
Get number of constraints.
-
inline virtual long long getNumNonZeros() const override#
Get number of non-zeros in constraint matrix.
-
inline CPLEXMIPBackend()#
-
class CPOptimizerBackend : public routing::cp::ICPBackend#
- #include <CPOptimizerBackend.hpp>
Stub implementation when CP Optimizer is not available.
Public Functions
-
inline CPOptimizerBackend()#
-
inline virtual std::string name() const override#
Get backend name (e.g., “cpoptimizer”, “ortools”, “gecode”)
-
inline virtual IntVar newIntVar(int, int, const std::string&) override#
Create an integer variable.
- Parameters:
lb – Lower bound
ub – Upper bound
name – Optional variable name
-
inline virtual IntVar newBoolVar(const std::string&) override#
Create a boolean variable (0-1)
- Parameters:
name – Optional variable name
-
inline virtual IntVar newConstant(int) override#
Create an integer constant.
- Parameters:
value – Constant value
-
inline virtual IntervalVar newIntervalVar(int, int, int, int, const std::string&) override#
Create an interval variable for scheduling.
- Parameters:
minStart – Earliest possible start time
maxEnd – Latest possible end time
minDuration – Minimum duration
maxDuration – Maximum duration
name – Optional variable name
-
inline virtual OptionalIntervalVar newOptionalIntervalVar(int, int, int, int, const std::string&) override#
Create an optional interval variable.
- Parameters:
minStart – Earliest possible start time
maxEnd – Latest possible end time
minDuration – Minimum duration
maxDuration – Maximum duration
name – Optional variable name
- Returns:
OptionalIntervalVar with presence indicator
-
inline virtual void addEquality(const LinearExpr&, int) override#
Add constraint: expr == value.
-
inline virtual void addLinearConstraint(const LinearExpr&, int, int) override#
Add constraint: lb <= expr <= ub.
-
inline virtual void addLessOrEqual(IntVar, IntVar, int) override#
Add constraint: var1 <= var2 + offset.
-
inline virtual void addImplication(IntVar, const LinearExpr&, int, int) override#
Add implication: if condition is true, then expr op bound.
-
inline virtual void addReification(IntVar, IntVar, int) override#
Add reification: indicator == 1 iff var == value This creates a channeling constraint linking a boolean indicator to a condition.
-
inline virtual void addAllDifferent(const std::vector<IntVar>&) override#
All-different constraint All variables must take different values.
-
inline virtual void addElement(IntVar, const std::vector<int>&, IntVar) override#
Element constraint: result = array[index].
-
inline virtual void addElement(IntVar, const std::vector<IntVar>&, IntVar) override#
Element constraint with variable array: result = vars[index].
-
inline virtual void addCircuit(const std::vector<IntVar>&) override#
Circuit constraint Variables define a Hamiltonian circuit over nodes 0..n-1 next[i] = j means arc from i to j.
-
inline virtual void addSubCircuit(const std::vector<IntVar>&) override#
Sub-circuit constraint (allows nodes to point to themselves) Used for TSP with optional nodes.
-
inline virtual void addInverse(const std::vector<IntVar>&, const std::vector<IntVar>&) override#
Inverse constraint: next[prev[i]] == i and prev[next[i]] == i.
-
inline virtual void addNoOverlap(const std::vector<IntervalVar>&) override#
No-overlap constraint Intervals cannot overlap in time.
-
inline virtual void addNoOverlap(const std::vector<OptionalIntervalVar>&) override#
No-overlap constraint with optional intervals.
-
inline virtual void addCumulative(const std::vector<IntervalVar>&, const std::vector<int>&, int) override#
Cumulative constraint At any time point, sum of demands of active intervals <= capacity.
-
inline virtual void addCumulative(const std::vector<OptionalIntervalVar>&, const std::vector<int>&, int) override#
Cumulative with optional intervals.
-
inline virtual void addEndBeforeStart(IntervalVar, IntervalVar, int) override#
Precedence constraint: interval1 ends before interval2 starts end(interval1) + delay <= start(interval2)
-
inline virtual IntVar startOf(IntervalVar) override#
Get start variable of an interval.
-
inline virtual IntVar endOf(IntervalVar) override#
Get end variable of an interval.
-
inline virtual IntVar durationOf(IntervalVar) override#
Get duration variable of an interval.
-
inline virtual IntVar startOf(OptionalIntervalVar, int) override#
Get start variable of optional interval (undefined if absent)
-
inline virtual IntVar endOf(OptionalIntervalVar, int) override#
Get end variable of optional interval (undefined if absent)
-
inline virtual void minimize(const LinearExpr&) override#
Set objective to minimize.
-
inline virtual void maximize(const LinearExpr&) override#
Set objective to maximize.
-
inline virtual void minimizeMakespan(const std::vector<IntervalVar>&) override#
Minimize the makespan (max end time of intervals)
-
inline virtual CPStatus solve(double) override#
Solve the model.
- Parameters:
timeout – Maximum solving time in seconds
- Returns:
Solver status
-
inline virtual void setHint(const std::vector<std::pair<IntVar, int>>&) override#
Provide hints/warm start.
-
inline virtual void setNumWorkers(int) override#
Set number of worker threads.
-
inline virtual void setRandomSeed(int) override#
Set random seed for reproducibility.
-
inline virtual int getStart(IntervalVar) const override#
Get start time of interval in solution.
-
inline virtual int getEnd(IntervalVar) const override#
Get end time of interval in solution.
-
inline virtual int getDuration(IntervalVar) const override#
Get duration of interval in solution.
-
inline virtual bool isPresent(OptionalIntervalVar) const override#
Check if optional interval is present in solution.
-
inline virtual double getObjectiveValue() const override#
Get objective value of solution.
-
inline virtual double getObjectiveBound() const override#
Get lower bound on objective.
-
inline virtual double getSolveTime() const override#
Get solving time in seconds.
-
inline virtual long long getNumBranches() const override#
Get number of search branches.
-
inline virtual long long getNumFailures() const override#
Get number of failures/backtracks.
-
inline virtual void clear() override#
Clear the model (remove all variables and constraints)
-
inline CPOptimizerBackend()#
-
class CPRoutingGenerator : public routing::cp::ICPConstraintGenerator#
- #include <CPRoutingGenerator.hpp>
CP Routing constraint generator.
Implements the fundamental VRP routing constraints using CP primitives:
Successor variables (next[i] = j means node j follows node i)
Visit interval variables for each node
Circuit constraint for tour structure
Vehicle assignment
The model uses a multi-depot multi-vehicle formulation where:
Each vehicle has its own start/end at depot copies
Successor variables encode the tour structure
No-overlap ensures each customer is visited at most once
Public Functions
-
inline virtual std::vector<AttributeTypeId> requiredAttributes() const override#
Attribute types required by this generator.
-
inline virtual int priority() const override#
Priority for ordering (lower = earlier)
-
inline virtual void addVariables(ICPBackend &cp, Problem &problem) override#
Add variables to the CP model.
- Parameters:
cp – The CP backend
problem – The problem instance
-
inline virtual void addConstraints(ICPBackend &cp, Problem &problem) override#
Add constraints to the CP model.
- Parameters:
cp – The CP backend
problem – The problem instance
-
inline virtual void addObjectiveTerms(ICPBackend &cp, Problem &problem, LinearExpr &expr) override#
Add terms to the objective function.
- Parameters:
cp – The CP backend
problem – The problem instance
expr – The linear expression to add to
-
inline virtual void extractSolution(const ICPBackend &cp, Problem &problem) override#
Called after solving to extract solution data.
- Parameters:
cp – The CP backend (with solution)
problem – The problem instance
-
inline size_t getNumClients() const#
-
inline size_t getNumVehicles() const#
-
inline size_t getTotalNodes() const#
-
inline size_t clientNodeIndex(size_t clientIdx) const#
-
class CPSolver : public routing::ISolver#
- #include <CPSolver.hpp>
CP-based solver using pluggable backends.
This solver uses the ICPBackend interface to solve routing problems using constraint programming. It automatically discovers and uses ICPConstraintGenerator instances based on the problem’s enabled attributes.
Public Functions
-
inline explicit CPSolver(Problem *problem, const std::string &backendType = "cpoptimizer")#
Construct a CP solver for a problem.
- Parameters:
problem – The problem to solve
backendType – Backend to use (“cpoptimizer”, “ortools”, “gecode”)
-
~CPSolver() override = default#
-
inline virtual void setConfiguration(Configuration *config) override#
Set solver configuration.
-
inline virtual void setDefaultConfiguration() override#
Set default configuration.
-
inline virtual bool solve(double timeout) override#
Solve the problem.
-
inline virtual double getObjectiveValue() const override#
Get the objective value of the best solution.
-
inline virtual bool isOptimal() const override#
Check if the problem was solved to optimality.
-
inline void setVerbose(bool verbose)#
-
inline void setNumWorkers(int workers)#
-
inline void addGenerator(std::unique_ptr<ICPConstraintGenerator> generator)#
Add a custom CP constraint generator.
-
inline ICPBackend &getBackend()#
Get the backend for advanced usage.
-
inline const ICPBackend &getBackend() const#
Private Members
-
double objectiveValue_#
-
double timeout_#
-
int numWorkers_#
-
bool verbose_#
-
std::unique_ptr<ICPBackend> backend_#
-
std::vector<std::unique_ptr<ICPConstraintGenerator>> customGenerators_#
-
std::vector<std::unique_ptr<ICPConstraintGenerator>> autoGenerators_#
-
generators::CPRoutingGenerator *routingGen_ = nullptr#
-
inline explicit CPSolver(Problem *problem, const std::string &backendType = "cpoptimizer")#
-
class CPSolverPlugin : public routing::IPlugin#
- #include <CPSolverPlugin.hpp>
Plugin that registers the CP solver with the plugin registry.
Public Functions
-
inline virtual PluginType type() const override#
Get the plugin type.
-
inline virtual void initialize(PluginRegistry ®istry) override#
Initialize the plugin and register components.
-
inline virtual PluginType type() const override#
-
class CPTimeWindowGenerator : public routing::cp::ICPConstraintGenerator#
- #include <CPTimeWindowGenerator.hpp>
CP Time Window constraint generator.
Implements time window constraints using CP interval variables:
Each visit is modeled as an interval with bounds from time windows
Service time defines the interval duration
Precedence constraints ensure temporal consistency
No-overlap ensures each vehicle visits nodes in sequence
The CP model naturally handles:
Waiting time (start can be later than arrival)
Service time as interval duration
Time window bounds as interval bounds
Public Functions
-
inline virtual std::vector<AttributeTypeId> requiredAttributes() const override#
Attribute types required by this generator.
-
inline virtual int priority() const override#
Priority for ordering (lower = earlier)
-
inline void setRoutingGenerator(CPRoutingGenerator *routing)#
-
inline virtual void addVariables(ICPBackend &cp, Problem &problem) override#
Add variables to the CP model.
- Parameters:
cp – The CP backend
problem – The problem instance
-
inline virtual void addConstraints(ICPBackend &cp, Problem &problem) override#
Add constraints to the CP model.
- Parameters:
cp – The CP backend
problem – The problem instance
-
inline virtual void addObjectiveTerms(ICPBackend &cp, Problem &problem, LinearExpr &expr) override#
Add terms to the objective function.
- Parameters:
cp – The CP backend
problem – The problem instance
expr – The linear expression to add to
-
inline virtual void extractSolution(const ICPBackend &cp, Problem &problem) override#
Called after solving to extract solution data.
- Parameters:
cp – The CP backend (with solution)
problem – The problem instance
-
inline const std::vector<IntervalVar> &getVisitIntervals() const#
Public Static Attributes
-
static constexpr int kTimeScale = 100#
-
class Decoder#
- #include <Decoder.hpp>
Subclassed by routing::dummyDecoder
-
class DefaultInitializer : public routing::Initializer#
Default initializer for Problem.
-
struct Delivery : public routing::Attribute<Delivery>#
- #include <Delivery.hpp>
Delivery demand at a node.
Delivery models goods to be dropped off at this node, reducing the vehicle’s current load.
Public Functions
-
inline explicit Delivery(const DeliveryDemand &p_delivery)#
-
inline DeliveryDemand getDelivery() const#
-
inline DeliveryDemand getPickup() const#
-
inline virtual std::unique_ptr<IAttribute> clone() const override#
Creates a deep copy of this attribute.
Public Members
-
EntityData<DeliveryDemand> deliveryDemand#
-
inline explicit Delivery(const DeliveryDemand &p_delivery)#
-
class Depot : public routing::Entity, public routing::models::Depot#
- #include <Entity.hpp>
Depot entity with runtime attributes.
Public Functions
-
inline explicit Depot(unsigned id)#
-
inline explicit Depot(unsigned id)#
-
struct Depot : public virtual routing::Model#
- #include <Depot.hpp>
Subclassed by routing::Depot
Public Functions
-
inline explicit Depot(unsigned id)#
-
inline explicit Depot(unsigned id)#
-
class DestructionParameters#
- #include <Destructor.hpp>
Public Static Functions
-
static inline DestructionParameters *getDefault()#
-
static inline DestructionParameters *getDefault()#
-
class Destructor#
- #include <Destructor.hpp>
Subclassed by routing::RandomDestructor
Public Functions
-
inline Destructor(routing::DestructionParameters *p_params)#
-
inline Destructor *setParams(routing::DestructionParameters *p_params)#
-
inline Destructor()#
Public Members
-
routing::DestructionParameters *params = nullptr#
-
inline Destructor(routing::DestructionParameters *p_params)#
-
class Diver#
- #include <Diver.hpp>
Subclassed by routing::dummyDiver
-
class dummyDecoder : public routing::Decoder#
- #include <Decoder.hpp>
-
class Entity : public virtual routing::Model#
- #include <Entity.hpp>
Runtime-composable entity that can hold any combination of attributes.
Entity uses a runtime composition model where attributes are stored in a map and accessed dynamically, replacing multiple-inheritance model composition.
Usage: Entity entity(1); entity.addAttribute<GeoNode>(10.0, 20.0); entity.addAttribute<Consumer>(15);
if (entity.hasAttribute<Consumer>()) { auto demand = entity.getAttribute<Consumer>().getDemand(); }
Note: Uses virtual inheritance from Model to avoid diamond inheritance issues when combined with models::Client, models::Vehicle, or models::Depot.
Subclassed by routing::Client, routing::Depot, routing::Vehicle
Public Functions
-
inline explicit Entity(unsigned id)#
-
virtual ~Entity() = default#
-
template<typename Attr, typename ...Args>
inline Attr &addAttribute(Args&&... args)# Add an attribute to this entity.
Creates a new attribute instance with the given constructor arguments. If an attribute of this type already exists, it will be replaced.
- Template Parameters:
Attr – The attribute type (must inherit from Attribute<Attr>)
Args – Constructor argument types
- Parameters:
args – Constructor arguments forwarded to Attr’s constructor
- Returns:
Reference to the newly created attribute
-
template<typename Attr>
inline bool hasAttribute() const# Check if this entity has a specific attribute type.
-
template<typename Attr>
inline const Attr &getAttribute() const# Get an attribute by type (const version)
-
template<typename Attr>
inline Attr *tryGetAttribute()# Try to get an attribute (returns nullptr if not found)
-
template<typename Attr>
inline const Attr *tryGetAttribute() const# Try to get an attribute (const version)
-
template<typename Attr>
inline bool removeAttribute()# Remove an attribute by type.
- Returns:
true if the attribute was removed, false if it didn’t exist
-
inline std::set<AttributeTypeId> getAttributeTypes() const#
Get all attribute type IDs on this entity.
-
inline size_t attributeCount() const#
Get the number of attributes on this entity.
Private Members
-
std::map<AttributeTypeId, std::unique_ptr<IAttribute>> attributes_#
-
inline explicit Entity(unsigned id)#
-
template<typename V>
class EntityData : public routing::IEntityData# - #include <IAttribute.hpp>
Public Functions
-
template<typename T>
inline bool is()#
-
template<typename T>
-
class GASolver : public routing::Solver#
- #include <GASolver.hpp>
Subclassed by routing::MASolver
Public Functions
-
inline GASolver(routing::Problem *p_problem, Generator *p_generator, const std::vector<Neighborhood*> &p_neighbors, std::ostream &os = std::cout)#
-
inline virtual void setNeighbors(std::vector<routing::Neighborhood*> p_neighbors)#
-
inline virtual void setDefaultConfiguration() override#
-
inline virtual bool solve(double timeout = 3600) override#
-
virtual ~GASolver() = default#
Protected Attributes
-
std::vector<routing::Neighborhood*> neighbors#
Private Functions
-
inline ConstraintConfig buildConstraintConfig() const#
-
inline GASolver(routing::Problem *p_problem, Generator *p_generator, const std::vector<Neighborhood*> &p_neighbors, std::ostream &os = std::cout)#
-
class GASolverPlugin : public routing::IPlugin#
- #include <GASolverPlugin.hpp>
Public Functions
-
inline virtual PluginType type() const override#
Get the plugin type.
-
inline virtual void initialize(PluginRegistry ®istry) override#
Initialize the plugin and register components.
-
inline virtual PluginType type() const override#
-
class GASolverWrapper : public routing::ISolver#
- #include <GASolverPlugin.hpp>
Public Functions
-
inline virtual void setConfiguration(Configuration *config) override#
Set solver configuration.
-
inline virtual void setDefaultConfiguration() override#
Set default configuration.
-
inline virtual bool solve(double timeout) override#
Solve the problem.
-
inline virtual double getObjectiveValue() const override#
Get the objective value of the best solution.
-
inline virtual void setImprovementCallback(ImprovementCallback callback) override#
Set callback for solution improvements.
-
inline void setNeighbors(const std::vector<Neighborhood*> &neighbors)#
Private Functions
-
inline void ensureConfig()#
-
inline virtual void setConfiguration(Configuration *config) override#
-
class Generator#
- #include <Generator.hpp>
Public Functions
-
inline Generator(Problem *p_problem, Constructor *p_constructor, Destructor *p_destructor)#
-
inline Constructor *getConstructor() const#
-
inline Destructor *getDestructor() const#
-
inline Generator(Problem *p_problem, Constructor *p_constructor, Destructor *p_destructor)#
-
class GeneratorRegistry#
- #include <GeneratorRegistry.hpp>
Registry for constraint generators (CP and MIP)
Generators register themselves with factories. Solvers query the registry to get all generators whose required attributes are satisfied.
Public Types
-
using CPGeneratorFactory = std::function<std::unique_ptr<cp::ICPConstraintGenerator>()>#
-
using MIPGeneratorFactory = std::function<std::unique_ptr<mip::IMIPConstraintGenerator>()>#
Public Functions
-
inline void registerCPGenerator(const std::string &name, CPGeneratorFactory factory, std::vector<AttributeTypeId> requiredAttrs, int priority = 100)#
-
inline void registerMIPGenerator(const std::string &name, MIPGeneratorFactory factory, std::vector<AttributeTypeId> requiredAttrs, int priority = 100)#
-
inline std::vector<std::unique_ptr<cp::ICPConstraintGenerator>> getApplicableCPGenerators(const std::set<AttributeTypeId> &enabledAttrs) const#
-
inline std::vector<std::unique_ptr<mip::IMIPConstraintGenerator>> getApplicableMIPGenerators(const std::set<AttributeTypeId> &enabledAttrs) const#
Public Static Functions
-
static inline GeneratorRegistry &instance()#
Private Functions
-
GeneratorRegistry() = default#
Private Members
Private Static Functions
-
static inline bool isApplicable(const std::vector<AttributeTypeId> &required, const std::set<AttributeTypeId> &enabled)#
-
using CPGeneratorFactory = std::function<std::unique_ptr<cp::ICPConstraintGenerator>()>#
-
struct GeoNode : public routing::Attribute<GeoNode>#
- #include <GeoNode.hpp>
A node with x, y coordinates.
GeoNode provides geographic positioning for entities. Used for distance calculations between nodes.
-
class GreedyConstructor : public routing::Constructor#
- #include <GreedyConstructor.hpp>
Public Functions
-
GreedyConstructor() = default#
-
GreedyConstructor() = default#
-
class HeuristicCallback : public IloCplex::HeuristicCallbackI#
- #include <HeuristicCallback.hpp>
Public Functions
-
inline HeuristicCallback(IloEnv env, Problem *_problem, routing::Generator *p_generator, routing::Diver *p_diver, std::vector<routing::Neighborhood*> p_neighbors)#
-
~HeuristicCallback() override = default#
-
inline HeuristicCallback(IloEnv env, Problem *_problem, routing::Generator *p_generator, routing::Diver *p_diver, std::vector<routing::Neighborhood*> p_neighbors)#
-
class HiGHSMIPBackend : public routing::mip::IMIPBackend#
- #include <HiGHSMIPBackend.hpp>
Stub implementation when HiGHS is not available.
Public Functions
-
inline HiGHSMIPBackend()#
-
inline virtual std::string name() const override#
Get backend name (e.g., “cplex”, “gurobi”, “highs”)
-
inline virtual Var newVar(double, double, const std::string&) override#
Create a continuous variable.
- Parameters:
lb – Lower bound (default: 0)
ub – Upper bound (default: infinity)
name – Optional variable name
-
inline virtual IntVar newIntVar(int, int, const std::string&) override#
Create an integer variable.
- Parameters:
lb – Lower bound
ub – Upper bound
name – Optional variable name
-
inline virtual BoolVar newBoolVar(const std::string&) override#
Create a binary variable (0-1)
- Parameters:
name – Optional variable name
-
inline virtual void addLessEqual(const LinearExpr&, double, const std::string&) override#
Add constraint: expr <= rhs.
-
inline virtual void addGreaterEqual(const LinearExpr&, double, const std::string&) override#
Add constraint: expr >= rhs.
-
inline virtual void addEqual(const LinearExpr&, double, const std::string&) override#
Add constraint: expr == rhs.
-
inline virtual void addRange(const LinearExpr&, double, double, const std::string&) override#
Add constraint: lb <= expr <= ub.
-
inline virtual void addIndicator(BoolVar, int, const LinearExpr&, Sense, double, const std::string&) override#
Add indicator constraint: if indicator == value, then expr sense rhs.
- Parameters:
indicator – Boolean variable
value – Value that activates the constraint (0 or 1)
expr – Linear expression
sense – Constraint sense
rhs – Right-hand side
-
inline virtual void addSOS1(const std::vector<Var>&, const std::vector<double>&, const std::string&) override#
Add SOS1 constraint (at most one variable in set is non-zero)
-
inline virtual void addSOS2(const std::vector<Var>&, const std::vector<double>&, const std::string&) override#
Add SOS2 constraint (at most two adjacent variables are non-zero)
-
inline virtual void addLazyConstraint(const LinearExpr&, Sense, double) override#
Add a lazy constraint (checked only when integer solution found)
-
inline virtual void addUserCut(const LinearExpr&, Sense, double) override#
Add a user cut (can be added at any time, must not cut off feasible solutions)
-
inline virtual void minimize(const LinearExpr&) override#
Set objective to minimize.
-
inline virtual void maximize(const LinearExpr&) override#
Set objective to maximize.
-
inline virtual void setWarmStart(const std::vector<Var>&, const std::vector<double>&) override#
Provide a warm start solution.
- Parameters:
vars – Variables to set
values – Values for the variables
-
inline virtual void setMIPStart(const std::vector<std::pair<Var, double>>&) override#
Provide MIP start hint for integer variables.
-
inline virtual MIPStatus solve(double) override#
Solve the model.
- Parameters:
timeout – Maximum solving time in seconds
- Returns:
Solver status
-
inline virtual double getObjectiveValue() const override#
Get objective value of solution.
-
inline virtual double getObjectiveBound() const override#
Get best objective bound.
-
inline virtual double getDual(int) const override#
Get dual value (shadow price) of a constraint.
- Parameters:
constraintIndex – Index of the constraint
-
inline virtual double getSolveTime() const override#
Get solving time in seconds.
-
inline virtual long long getNumIterations() const override#
Get number of simplex iterations.
-
inline virtual long long getNumNodes() const override#
Get number of nodes explored in branch-and-bound.
-
inline virtual int getNumSolutions() const override#
Get number of solutions found.
-
inline virtual void setTimeLimit(double) override#
Set time limit in seconds.
-
inline virtual void setGapTolerance(double) override#
Set MIP gap tolerance.
-
inline virtual void setNumThreads(int) override#
Set number of threads.
-
inline virtual void setRandomSeed(int) override#
Set random seed.
-
inline virtual void setVerbosity(int) override#
Set verbosity level (0 = quiet, higher = more verbose)
-
inline virtual void setPresolve(bool) override#
Enable/disable presolve.
-
inline virtual void setNodeLimit(long long) override#
Set node limit.
-
inline virtual void setSolutionLimit(int) override#
Set solution limit.
-
inline virtual void clear() override#
Clear the model (remove all variables and constraints)
-
inline virtual int getNumVars() const override#
Get number of variables.
-
inline virtual int getNumConstraints() const override#
Get number of constraints.
-
inline virtual long long getNumNonZeros() const override#
Get number of non-zeros in constraint matrix.
-
inline HiGHSMIPBackend()#
-
class IAttribute#
- #include <IAttribute.hpp>
Base interface for all composable attributes.
Subclassed by routing::Attribute< Appointment >, routing::Attribute< Consumer >, routing::Attribute< Delivery >, routing::Attribute< GeoNode >, routing::Attribute< Pickup >, routing::Attribute< Profiter >, routing::Attribute< Rendezvous >, routing::Attribute< Service >, routing::Attribute< ServiceQuery >, routing::Attribute< SoftTimeWindows >, routing::Attribute< Stock >, routing::Attribute< Synced >, routing::Attribute< Derived >
Public Functions
-
virtual ~IAttribute() = default#
-
virtual AttributeTypeId typeId() const = 0#
Returns the unique type identifier for this attribute.
-
virtual std::unique_ptr<IAttribute> clone() const = 0#
Creates a deep copy of this attribute.
-
virtual ~IAttribute() = default#
-
class IConstraintGenerator#
- #include <IConstraintGenerator.hpp>
Interface for constraint generators.
Constraint generators are responsible for adding CPLEX variables, constraints, and objective terms for a specific problem aspect (e.g., capacity, time windows, synchronization).
Each generator declares which attributes it requires. The PluginRegistry uses this to automatically activate generators when their required attributes are enabled on a problem.
Subclassed by routing::constraints::CapacityConstraintGenerator, routing::constraints::PickupDeliveryConstraintGenerator, routing::constraints::ProfitObjectiveGenerator, routing::constraints::RoutingConstraintGenerator, routing::constraints::SoftTimeWindowGenerator, routing::constraints::SyncConstraintGenerator, routing::constraints::TimeWindowConstraintGenerator
Public Functions
-
virtual ~IConstraintGenerator() = default#
-
virtual std::string name() const = 0#
Returns a unique name for this generator (for debugging/logging)
-
virtual std::vector<AttributeTypeId> requiredAttributes() const = 0#
Returns the attribute types that must be enabled for this generator to be active.
-
inline virtual std::vector<AttributeTypeId> conflictingAttributes() const#
Returns attribute types that conflict with this generator (optional)
-
inline virtual int priority() const#
Priority for ordering generators (lower = earlier). Default: 100 Routing constraints should be ~10, capacity ~50, time windows ~60
-
inline bool isApplicable(const std::set<AttributeTypeId> &enabledAttrs) const#
Check if this generator should be active given the enabled attributes.
-
virtual ~IConstraintGenerator() = default#
-
class ICPBackend#
- #include <ICPBackend.hpp>
Abstract interface for Constraint Programming backends.
This interface provides a unified API for different CP solvers:
IBM ILOG CP Optimizer
Google OR-Tools CP-SAT
Gecode
The interface focuses on the constraints commonly used in vehicle routing:
Interval variables for time windows
Circuit/path constraints
Cumulative constraints for capacity
No-overlap constraints for synchronization
Subclassed by routing::cp::CPOptimizerBackend, routing::cp::ORToolsCPSATBackend, routing::cp::XCSP3Backend
Public Functions
-
virtual ~ICPBackend() = default#
-
virtual IntVar newIntVar(int lb, int ub, const std::string &name = "") = 0#
Create an integer variable.
- Parameters:
lb – Lower bound
ub – Upper bound
name – Optional variable name
-
virtual IntVar newBoolVar(const std::string &name = "") = 0#
Create a boolean variable (0-1)
- Parameters:
name – Optional variable name
-
virtual IntVar newConstant(int value) = 0#
Create an integer constant.
- Parameters:
value – Constant value
-
virtual IntervalVar newIntervalVar(int minStart, int maxEnd, int minDuration, int maxDuration, const std::string &name = "") = 0#
Create an interval variable for scheduling.
- Parameters:
minStart – Earliest possible start time
maxEnd – Latest possible end time
minDuration – Minimum duration
maxDuration – Maximum duration
name – Optional variable name
-
inline virtual IntervalVar newFixedIntervalVar(int minStart, int maxEnd, int duration, const std::string &name = "")#
Create an interval variable with fixed duration.
-
virtual OptionalIntervalVar newOptionalIntervalVar(int minStart, int maxEnd, int minDuration, int maxDuration, const std::string &name = "") = 0#
Create an optional interval variable.
- Parameters:
minStart – Earliest possible start time
maxEnd – Latest possible end time
minDuration – Minimum duration
maxDuration – Maximum duration
name – Optional variable name
- Returns:
OptionalIntervalVar with presence indicator
-
virtual void addEquality(const LinearExpr &expr, int value) = 0#
Add constraint: expr == value.
-
virtual void addLinearConstraint(const LinearExpr &expr, int lb, int ub) = 0#
Add constraint: lb <= expr <= ub.
-
inline virtual void addLessOrEqual(const LinearExpr &expr, int ub)#
Add constraint: expr <= ub.
-
inline virtual void addGreaterOrEqual(const LinearExpr &expr, int lb)#
Add constraint: expr >= lb.
-
virtual void addLessOrEqual(IntVar var1, IntVar var2, int offset = 0) = 0#
Add constraint: var1 <= var2 + offset.
-
virtual void addImplication(IntVar condition, const LinearExpr &expr, int lb, int ub) = 0#
Add implication: if condition is true, then expr op bound.
-
virtual void addReification(IntVar indicator, IntVar var, int value) = 0#
Add reification: indicator == 1 iff var == value This creates a channeling constraint linking a boolean indicator to a condition.
-
virtual void addAllDifferent(const std::vector<IntVar> &vars) = 0#
All-different constraint All variables must take different values.
-
virtual void addElement(IntVar index, const std::vector<int> &array, IntVar result) = 0#
Element constraint: result = array[index].
-
virtual void addElement(IntVar index, const std::vector<IntVar> &vars, IntVar result) = 0#
Element constraint with variable array: result = vars[index].
-
virtual void addCircuit(const std::vector<IntVar> &next) = 0#
Circuit constraint Variables define a Hamiltonian circuit over nodes 0..n-1 next[i] = j means arc from i to j.
-
virtual void addSubCircuit(const std::vector<IntVar> &next) = 0#
Sub-circuit constraint (allows nodes to point to themselves) Used for TSP with optional nodes.
-
virtual void addInverse(const std::vector<IntVar> &next, const std::vector<IntVar> &prev) = 0#
Inverse constraint: next[prev[i]] == i and prev[next[i]] == i.
-
virtual void addNoOverlap(const std::vector<IntervalVar> &intervals) = 0#
No-overlap constraint Intervals cannot overlap in time.
-
virtual void addNoOverlap(const std::vector<OptionalIntervalVar> &intervals) = 0#
No-overlap constraint with optional intervals.
-
virtual void addCumulative(const std::vector<IntervalVar> &intervals, const std::vector<int> &demands, int capacity) = 0#
Cumulative constraint At any time point, sum of demands of active intervals <= capacity.
-
virtual void addCumulative(const std::vector<OptionalIntervalVar> &intervals, const std::vector<int> &demands, int capacity) = 0#
Cumulative with optional intervals.
-
virtual void addEndBeforeStart(IntervalVar interval1, IntervalVar interval2, int delay = 0) = 0#
Precedence constraint: interval1 ends before interval2 starts end(interval1) + delay <= start(interval2)
-
virtual IntVar startOf(IntervalVar interval) = 0#
Get start variable of an interval.
-
virtual IntVar endOf(IntervalVar interval) = 0#
Get end variable of an interval.
-
virtual IntVar durationOf(IntervalVar interval) = 0#
Get duration variable of an interval.
-
virtual IntVar startOf(OptionalIntervalVar interval, int defaultValue = 0) = 0#
Get start variable of optional interval (undefined if absent)
-
virtual IntVar endOf(OptionalIntervalVar interval, int defaultValue = 0) = 0#
Get end variable of optional interval (undefined if absent)
-
virtual void minimize(const LinearExpr &expr) = 0#
Set objective to minimize.
-
virtual void maximize(const LinearExpr &expr) = 0#
Set objective to maximize.
-
virtual void minimizeMakespan(const std::vector<IntervalVar> &intervals) = 0#
Minimize the makespan (max end time of intervals)
-
virtual CPStatus solve(double timeout = 3600.0) = 0#
Solve the model.
- Parameters:
timeout – Maximum solving time in seconds
- Returns:
Solver status
-
virtual void setHint(const std::vector<std::pair<IntVar, int>> &hints) = 0#
Provide hints/warm start.
-
virtual void setNumWorkers(int workers) = 0#
Set number of worker threads.
-
virtual void setRandomSeed(int seed) = 0#
Set random seed for reproducibility.
-
virtual int getStart(IntervalVar interval) const = 0#
Get start time of interval in solution.
-
virtual int getEnd(IntervalVar interval) const = 0#
Get end time of interval in solution.
-
virtual int getDuration(IntervalVar interval) const = 0#
Get duration of interval in solution.
-
virtual bool isPresent(OptionalIntervalVar interval) const = 0#
Check if optional interval is present in solution.
-
virtual double getObjectiveValue() const = 0#
Get objective value of solution.
-
virtual double getObjectiveBound() const = 0#
Get lower bound on objective.
-
inline virtual double getGap() const#
Get gap between objective and bound.
-
virtual double getSolveTime() const = 0#
Get solving time in seconds.
-
virtual long long getNumBranches() const = 0#
Get number of search branches.
-
virtual long long getNumFailures() const = 0#
Get number of failures/backtracks.
-
virtual void clear() = 0#
Clear the model (remove all variables and constraints)
-
class ICPConstraintGenerator#
- #include <ICPConstraintGenerator.hpp>
Interface for CP constraint generators.
Similar to IConstraintGenerator but uses ICPBackend instead of CPLEX. Each generator adds variables, constraints, and objective terms for a specific aspect of the problem (routing, time windows, capacity, etc.)
Subclassed by routing::cp::generators::CPCapacityGenerator, routing::cp::generators::CPRoutingGenerator, routing::cp::generators::CPTimeWindowGenerator
Public Functions
-
virtual ~ICPConstraintGenerator() = default#
-
inline virtual int priority() const#
Priority for ordering (lower = earlier)
-
virtual std::vector<AttributeTypeId> requiredAttributes() const = 0#
Attribute types required by this generator.
-
virtual void addVariables(ICPBackend &cp, Problem &problem) = 0#
Add variables to the CP model.
- Parameters:
cp – The CP backend
problem – The problem instance
-
virtual void addConstraints(ICPBackend &cp, Problem &problem) = 0#
Add constraints to the CP model.
- Parameters:
cp – The CP backend
problem – The problem instance
-
inline virtual void addObjectiveTerms(ICPBackend &cp, Problem &problem, LinearExpr &expr)#
Add terms to the objective function.
- Parameters:
cp – The CP backend
problem – The problem instance
expr – The linear expression to add to
-
inline virtual void extractSolution(const ICPBackend &cp, Problem &problem)#
Called after solving to extract solution data.
- Parameters:
cp – The CP backend (with solution)
problem – The problem instance
-
virtual ~ICPConstraintGenerator() = default#
-
class IDCH : public routing::Neighborhood#
- #include <IDCH.hpp>
Public Functions
-
inline IDCH(Constructor *p_constructor, Destructor *p_destructor)#
-
inline IDCH(Constructor *p_constructor, Destructor *p_destructor)#
-
class IDCHNeighborhood : public routing::INeighborhood#
- #include <IDCHPlugin.hpp>
Public Functions
-
IDCHNeighborhood() = default#
-
inline explicit IDCHNeighborhood(Constructor *constructor, Destructor *destructor)#
-
inline virtual std::optional<NeighborhoodMove> explore(Solution&) override#
Explore the neighborhood and find the best move.
-
inline virtual void apply(Solution&, const NeighborhoodMove&) override#
Apply a move to the solution.
-
inline virtual bool improve(Solution &solution) override#
Convenience method: explore and apply best move.
-
inline void setOperators(Constructor *constructor, Destructor *destructor)#
Private Functions
-
inline void rebuild()#
-
IDCHNeighborhood() = default#
-
class IDCHPlugin : public routing::IPlugin#
- #include <IDCHPlugin.hpp>
Public Functions
-
inline virtual PluginType type() const override#
Get the plugin type.
-
inline virtual void initialize(PluginRegistry ®istry) override#
Initialize the plugin and register components.
-
inline virtual PluginType type() const override#
-
class IEntityData#
- #include <IAttribute.hpp>
Subclassed by routing::EntityData< Demand >, routing::EntityData< DeliveryDemand >, routing::EntityData< Duration >, routing::EntityData< PickupDemand >, routing::EntityData< Profit >, routing::EntityData< TW >, routing::EntityData< Capacity >, routing::EntityData< V >
-
class IEvaluator#
- #include <IEvaluator.hpp>
Interface for incremental solution evaluators.
Evaluators are responsible for checking feasibility and computing cost deltas for move operations in metaheuristic search.
Each evaluator is associated with specific attributes (e.g., capacity evaluator requires Consumer and Stock attributes). The PluginRegistry uses this information to activate evaluators based on enabled attributes.
Subclassed by routing::evaluators::CapacityEvaluator, routing::evaluators::RoutingEvaluator, routing::evaluators::TimeWindowEvaluator
Public Functions
-
virtual ~IEvaluator() = default#
-
virtual std::vector<AttributeTypeId> requiredAttributes() const = 0#
Returns the attribute types required for this evaluator.
-
inline virtual int priority() const#
Priority for evaluation ordering (lower = earlier). Default: 100.
-
virtual bool checkFeasibility(const Tour &tour, const InsertionContext &ctx) const = 0#
Check if an insertion is feasible.
- Parameters:
tour – The tour to insert into
ctx – The insertion context
- Returns:
true if the insertion maintains feasibility for this evaluator’s constraints
-
virtual double evaluateInsertionDelta(const Tour &tour, const InsertionContext &ctx) const = 0#
Compute the cost delta for an insertion.
- Parameters:
tour – The tour to insert into
ctx – The insertion context
- Returns:
The change in cost (positive = worse, negative = better)
-
virtual void applyInsertion(Tour &tour, const InsertionContext &ctx) = 0#
Apply an insertion and update internal state.
Called after an insertion is accepted. The evaluator should update any cached state (e.g., total load, arrival times).
- Parameters:
tour – The tour being modified
ctx – The insertion context
-
inline bool isApplicable(const std::set<AttributeTypeId> &enabledAttrs) const#
Check if this evaluator is applicable given enabled attributes.
-
virtual ~IEvaluator() = default#
-
class IMIPBackend#
- #include <IMIPBackend.hpp>
Abstract interface for Mixed Integer Programming backends.
This interface provides a unified API for different MIP solvers:
IBM ILOG CPLEX
Gurobi
HiGHS
SCIP
CBC
The interface focuses on building and solving MIP models for vehicle routing.
Subclassed by routing::mip::CPLEXMIPBackend, routing::mip::HiGHSMIPBackend
Public Types
-
using LazyCallback = std::function<void(IMIPBackend &backend)>#
Callback function type for lazy constraints Called when an integer feasible solution is found. The callback receives the backend to query solution values and add cuts.
-
using CutCallback = std::function<void(IMIPBackend &backend)>#
Callback function type for user cuts Called during the branch-and-bound process.
-
using IncumbentCallback = std::function<void(IMIPBackend &backend, double objValue)>#
Callback for incumbent solutions Called when a new best solution is found.
Public Functions
-
virtual ~IMIPBackend() = default#
-
virtual Var newVar(double lb = 0.0, double ub = std::numeric_limits<double>::infinity(), const std::string &name = "") = 0#
Create a continuous variable.
- Parameters:
lb – Lower bound (default: 0)
ub – Upper bound (default: infinity)
name – Optional variable name
-
virtual IntVar newIntVar(int lb, int ub, const std::string &name = "") = 0#
Create an integer variable.
- Parameters:
lb – Lower bound
ub – Upper bound
name – Optional variable name
-
virtual BoolVar newBoolVar(const std::string &name = "") = 0#
Create a binary variable (0-1)
- Parameters:
name – Optional variable name
-
inline virtual std::vector<std::vector<BoolVar>> newBoolVarArray2D(size_t rows, size_t cols, const std::string &namePrefix = "")#
Create a 2D array of binary variables.
- Parameters:
rows – Number of rows
cols – Number of columns
namePrefix – Prefix for variable names
-
virtual void addLessEqual(const LinearExpr &expr, double rhs, const std::string &name = "") = 0#
Add constraint: expr <= rhs.
-
virtual void addGreaterEqual(const LinearExpr &expr, double rhs, const std::string &name = "") = 0#
Add constraint: expr >= rhs.
-
virtual void addEqual(const LinearExpr &expr, double rhs, const std::string &name = "") = 0#
Add constraint: expr == rhs.
-
virtual void addRange(const LinearExpr &expr, double lb, double ub, const std::string &name = "") = 0#
Add constraint: lb <= expr <= ub.
-
inline virtual void addEqual(const LinearExpr &expr1, const LinearExpr &expr2, const std::string &name = "")#
Add constraint: expr1 == expr2.
-
virtual void addIndicator(BoolVar indicator, int value, const LinearExpr &expr, Sense sense, double rhs, const std::string &name = "") = 0#
Add indicator constraint: if indicator == value, then expr sense rhs.
- Parameters:
indicator – Boolean variable
value – Value that activates the constraint (0 or 1)
expr – Linear expression
sense – Constraint sense
rhs – Right-hand side
-
virtual void addSOS1(const std::vector<Var> &vars, const std::vector<double> &weights = {}, const std::string &name = "") = 0#
Add SOS1 constraint (at most one variable in set is non-zero)
-
virtual void addSOS2(const std::vector<Var> &vars, const std::vector<double> &weights = {}, const std::string &name = "") = 0#
Add SOS2 constraint (at most two adjacent variables are non-zero)
-
virtual void addLazyConstraint(const LinearExpr &expr, Sense sense, double rhs) = 0#
Add a lazy constraint (checked only when integer solution found)
-
virtual void addUserCut(const LinearExpr &expr, Sense sense, double rhs) = 0#
Add a user cut (can be added at any time, must not cut off feasible solutions)
-
virtual void minimize(const LinearExpr &expr) = 0#
Set objective to minimize.
-
virtual void maximize(const LinearExpr &expr) = 0#
Set objective to maximize.
-
virtual void setWarmStart(const std::vector<Var> &vars, const std::vector<double> &values) = 0#
Provide a warm start solution.
- Parameters:
vars – Variables to set
values – Values for the variables
-
virtual void setMIPStart(const std::vector<std::pair<Var, double>> &solution) = 0#
Provide MIP start hint for integer variables.
-
virtual MIPStatus solve(double timeout = 3600.0) = 0#
Solve the model.
- Parameters:
timeout – Maximum solving time in seconds
- Returns:
Solver status
-
virtual double getObjectiveValue() const = 0#
Get objective value of solution.
-
virtual double getObjectiveBound() const = 0#
Get best objective bound.
-
inline virtual double getGap() const#
Get MIP gap.
-
virtual double getDual(int constraintIndex) const = 0#
Get dual value (shadow price) of a constraint.
- Parameters:
constraintIndex – Index of the constraint
-
virtual double getSolveTime() const = 0#
Get solving time in seconds.
-
virtual long long getNumIterations() const = 0#
Get number of simplex iterations.
-
virtual long long getNumNodes() const = 0#
Get number of nodes explored in branch-and-bound.
-
virtual int getNumSolutions() const = 0#
Get number of solutions found.
-
virtual void setTimeLimit(double seconds) = 0#
Set time limit in seconds.
-
virtual void setGapTolerance(double gap) = 0#
Set MIP gap tolerance.
-
virtual void setNumThreads(int threads) = 0#
Set number of threads.
-
virtual void setRandomSeed(int seed) = 0#
Set random seed.
-
virtual void setVerbosity(int level) = 0#
Set verbosity level (0 = quiet, higher = more verbose)
-
virtual void setPresolve(bool enable) = 0#
Enable/disable presolve.
-
virtual void setNodeLimit(long long limit) = 0#
Set node limit.
-
virtual void setSolutionLimit(int limit) = 0#
Set solution limit.
-
virtual void clear() = 0#
Clear the model (remove all variables and constraints)
-
virtual int getNumVars() const = 0#
Get number of variables.
-
virtual int getNumConstraints() const = 0#
Get number of constraints.
-
virtual long long getNumNonZeros() const = 0#
Get number of non-zeros in constraint matrix.
-
virtual bool exportModel(const std::string &filename) const = 0#
Export model to file.
- Parameters:
filename – File path (extension determines format: .lp, .mps, .sav)
-
inline virtual void setLazyCallback(LazyCallback callback)#
Set lazy constraint callback.
-
inline virtual void setCutCallback(CutCallback callback)#
Set user cut callback.
-
inline virtual void setIncumbentCallback(IncumbentCallback callback)#
Set incumbent callback.
Protected Attributes
-
LazyCallback lazyCallback_#
-
CutCallback cutCallback_#
-
IncumbentCallback incumbentCallback_#
-
class IMIPConstraintGenerator#
- #include <IMIPConstraintGenerator.hpp>
Interface for MIP constraint generators.
Similar to ICPConstraintGenerator but uses IMIPBackend instead. Each generator adds variables, constraints, and objective terms for a specific aspect of the problem (routing, time windows, capacity, etc.)
Subclassed by routing::mip::generators::MIPCapacityGenerator, routing::mip::generators::MIPRoutingGenerator, routing::mip::generators::MIPTimeWindowGenerator
Public Functions
-
virtual ~IMIPConstraintGenerator() = default#
-
inline virtual int priority() const#
Priority for ordering (lower = earlier)
-
virtual std::vector<AttributeTypeId> requiredAttributes() const = 0#
Attribute types required by this generator.
-
virtual void addVariables(IMIPBackend &mip, Problem &problem) = 0#
Add variables to the MIP model.
- Parameters:
mip – The MIP backend
problem – The problem instance
-
virtual void addConstraints(IMIPBackend &mip, Problem &problem) = 0#
Add constraints to the MIP model.
- Parameters:
mip – The MIP backend
problem – The problem instance
-
inline virtual void addObjectiveTerms(IMIPBackend &mip, Problem &problem, LinearExpr &expr)#
Add terms to the objective function.
- Parameters:
mip – The MIP backend
problem – The problem instance
expr – The linear expression to add to
-
inline virtual void extractSolution(const IMIPBackend &mip, Problem &problem, Solution &solution)#
Called after solving to extract solution data.
- Parameters:
mip – The MIP backend (with solution)
problem – The problem instance
solution – The solution to populate
-
virtual ~IMIPConstraintGenerator() = default#
-
class IncumbentCallback : public IloCplex::IncumbentCallbackI#
- #include <IncumbentCallback.hpp>
callback trigger every time a new incumbent is found
Public Functions
-
inline ~IncumbentCallback()#
-
inline ~IncumbentCallback()#
-
class INeighborhood#
- #include <INeighborhood.hpp>
Interface for neighborhood operators.
Subclassed by routing::plugins::IDCHNeighborhood, routing::plugins::TwoOptNeighborhood
Public Functions
-
virtual ~INeighborhood() = default#
-
virtual std::optional<NeighborhoodMove> explore(Solution &solution) = 0#
Explore the neighborhood and find the best move.
-
virtual void apply(Solution &solution, const NeighborhoodMove &move) = 0#
Apply a move to the solution.
-
virtual ~INeighborhood() = default#
-
class InformationCallback : public IloCplex::MIPCallbackI#
- #include <InformationCallback.hpp>
Public Functions
-
inline ~InformationCallback()#
Protected Functions
-
inline void main()#
-
inline ~InformationCallback()#
-
class Initializer#
- #include <Problem.hpp>
Initializer interface for creating solutions and tours.
Public Functions
-
virtual ~Initializer() = default#
-
virtual ~Initializer() = default#
-
struct InsertionContext#
- #include <IEvaluator.hpp>
Context for insertion operations.
Contains all information needed to evaluate and perform an insertion of a client into a tour.
-
class InsertionCost#
- #include <InsertionCost.hpp>
Public Functions
-
inline bool operator>(const InsertionCost &rhs) const#
-
inline bool isPossible() const#
-
inline void setPossible(bool possible)#
-
inline InsertionCost()#
-
inline InsertionCost(const InsertionCost &cost)#
-
inline bool operator>(const InsertionCost &rhs) const#
-
class IntervalVar#
- #include <CPTypes.hpp>
Handle for an interval variable in CP model.
Represents a time interval with start, end, and duration. Used for scheduling constraints (no-overlap, cumulative, etc.)
Public Functions
-
IntervalVar() = default#
-
inline explicit IntervalVar(int id)#
-
inline bool isValid() const#
-
inline int id() const#
-
inline bool operator==(const IntervalVar &other) const#
-
inline bool operator!=(const IntervalVar &other) const#
Private Members
-
int id_ = -1#
Friends
- friend class ICPBackend
-
IntervalVar() = default#
-
class IntVar#
- #include <CPTypes.hpp>
Handle for an integer variable in CP model.
This is a lightweight handle that references a variable in a backend. The actual variable is owned by the backend implementation.
Public Functions
-
IntVar() = default#
-
inline explicit IntVar(int id)#
-
inline bool isValid() const#
-
inline int id() const#
Private Members
-
int id_ = -1#
Friends
- friend class ICPBackend
-
IntVar() = default#
-
class IntVar#
- #include <MIPTypes.hpp>
Handle for an integer variable in MIP model.
Public Functions
-
IntVar() = default#
-
inline explicit IntVar(int id)#
-
inline bool isValid() const#
-
inline int id() const#
Private Members
-
int id_ = -1#
Friends
- friend class IMIPBackend
-
IntVar() = default#
-
class IPlugin#
- #include <IPlugin.hpp>
Base interface for all plugins.
Subclassed by routing::plugins::CPSolverPlugin, routing::plugins::CapacityPlugin, routing::plugins::ComposableCorePlugin, routing::plugins::GASolverPlugin, routing::plugins::IDCHPlugin, routing::plugins::LSSolverPlugin, routing::plugins::MASolverPlugin, routing::plugins::MIPSolverPlugin, routing::plugins::PSOSolverPlugin, routing::plugins::PickupDeliveryPlugin, routing::plugins::ProfitPlugin, routing::plugins::RoutingPlugin, routing::plugins::SolomonReaderPlugin, routing::plugins::SyncPlugin, routing::plugins::TSPLIBReaderPlugin, routing::plugins::TimeWindowPlugin, routing::plugins::TwoOptPlugin, routing::plugins::VNSSolverPlugin, routing::plugins::XCSP3SolverPlugin
Public Functions
-
virtual ~IPlugin() = default#
-
virtual PluginType type() const = 0#
Get the plugin type.
-
inline virtual std::vector<std::string> dependencies() const#
Get dependencies (other plugin names this depends on)
-
virtual void initialize(PluginRegistry ®istry) = 0#
Initialize the plugin and register components.
-
inline virtual void shutdown()#
Shutdown hook.
-
virtual ~IPlugin() = default#
-
class IReader#
- #include <IReader.hpp>
Interface for instance file readers.
Subclassed by routing::plugins::SolomonReader, routing::plugins::TSPLIBReader
-
class ISolutionValue#
- #include <IAttribute.hpp>
Subclassed by routing::SolutionValue< Duration >, routing::SolutionValue< Demand >, routing::SolutionValue< V >
-
class ISolver#
- #include <ISolver.hpp>
Interface for all solver implementations.
Subclassed by routing::MIPSolver, routing::cp::CPSolver, routing::cp::XCSP3Solver, routing::plugins::GASolverWrapper, routing::plugins::LSSolverWrapper, routing::plugins::MASolverWrapper, routing::plugins::PSOSolverWrapper, routing::plugins::VNSSolverWrapper
Public Functions
-
virtual ~ISolver() = default#
-
virtual void setConfiguration(Configuration *config) = 0#
Set solver configuration.
-
virtual void setDefaultConfiguration() = 0#
Set default configuration.
-
virtual bool solve(double timeout = 3600) = 0#
Solve the problem.
-
virtual double getObjectiveValue() const = 0#
Get the objective value of the best solution.
-
inline virtual bool isOptimal() const#
Check if the problem was solved to optimality.
-
inline virtual void setImprovementCallback(ImprovementCallback)#
Set callback for solution improvements.
-
virtual ~ISolver() = default#
-
class LazyConstraintCallback : public IloCplex::LazyConstraintCallbackI#
- #include <LazyConstraintCallback.hpp>
Public Functions
-
inline ~LazyConstraintCallback()#
-
inline ~LazyConstraintCallback()#
-
class LinearExpr#
- #include <CPTypes.hpp>
Linear expression over integer variables.
Represents: constant + sum(coeff[i] * var[i])
Public Functions
-
LinearExpr() = default#
-
inline explicit LinearExpr(int constant)#
-
inline LinearExpr &addTerm(IntVar var, int coeff = 1)#
-
inline LinearExpr &addConstant(int c)#
-
inline LinearExpr &operator+=(const LinearExpr &other)#
-
inline LinearExpr &operator+=(IntVar var)#
-
inline LinearExpr &operator-=(IntVar var)#
-
inline LinearExpr &operator*=(int coeff)#
-
inline int constant() const#
-
inline bool isEmpty() const#
-
LinearExpr() = default#
-
class LinearExpr#
- #include <MIPTypes.hpp>
Linear expression over variables.
Represents: constant + sum(coeff[i] * var[i])
Public Functions
-
LinearExpr() = default#
-
inline explicit LinearExpr(double constant)#
-
inline LinearExpr &addTerm(Var var, double coeff = 1.0)#
-
inline LinearExpr &addTerm(IntVar var, double coeff = 1.0)#
-
inline LinearExpr &addTerm(BoolVar var, double coeff = 1.0)#
-
inline LinearExpr &addConstant(double c)#
-
inline LinearExpr &operator+=(const LinearExpr &other)#
-
inline LinearExpr &operator+=(Var var)#
-
inline LinearExpr &operator-=(Var var)#
-
inline LinearExpr &operator*=(double coeff)#
-
inline double constant() const#
-
inline bool isEmpty() const#
-
LinearExpr() = default#
-
class LSSolver : public routing::Solver#
- #include <LSSolver.hpp>
Public Functions
-
inline LSSolver(routing::Problem *p_problem, Generator *p_generator, const std::vector<Neighborhood*> &p_neighbors, std::ostream &os = std::cout)#
-
inline virtual void setNeighbors(std::vector<routing::Neighborhood*> p_neighbors)#
-
inline virtual void setDefaultConfiguration() override#
-
inline virtual bool solve(double timeout = 3600) override#
-
virtual ~LSSolver() = default#
-
inline LSSolver(routing::Problem *p_problem, Generator *p_generator, const std::vector<Neighborhood*> &p_neighbors, std::ostream &os = std::cout)#
-
class LSSolverPlugin : public routing::IPlugin#
- #include <LSSolverPlugin.hpp>
Public Functions
-
inline virtual PluginType type() const override#
Get the plugin type.
-
inline virtual void initialize(PluginRegistry ®istry) override#
Initialize the plugin and register components.
-
inline virtual PluginType type() const override#
-
class LSSolverWrapper : public routing::ISolver#
- #include <LSSolverPlugin.hpp>
Public Functions
-
inline virtual void setConfiguration(Configuration *config) override#
Set solver configuration.
-
inline virtual void setDefaultConfiguration() override#
Set default configuration.
-
inline virtual bool solve(double timeout) override#
Solve the problem.
-
inline virtual double getObjectiveValue() const override#
Get the objective value of the best solution.
-
inline void setNeighbors(const std::vector<Neighborhood*> &neighbors)#
-
inline virtual void setConfiguration(Configuration *config) override#
-
class MASolver : public routing::GASolver#
- #include <MASolver.hpp>
Subclassed by routing::PSOSolver
-
class MASolverPlugin : public routing::IPlugin#
- #include <MASolverPlugin.hpp>
Public Functions
-
inline virtual PluginType type() const override#
Get the plugin type.
-
inline virtual void initialize(PluginRegistry ®istry) override#
Initialize the plugin and register components.
-
inline virtual PluginType type() const override#
-
class MASolverWrapper : public routing::ISolver#
- #include <MASolverPlugin.hpp>
Public Functions
-
inline virtual void setConfiguration(Configuration *config) override#
Set solver configuration.
-
inline virtual void setDefaultConfiguration() override#
Set default configuration.
-
inline virtual bool solve(double timeout) override#
Solve the problem.
-
inline virtual double getObjectiveValue() const override#
Get the objective value of the best solution.
-
inline void setNeighbors(const std::vector<Neighborhood*> &neighbors)#
Private Functions
-
inline void ensureConfig()#
-
inline virtual void setConfiguration(Configuration *config) override#
-
class Memory#
- #include <Memory.hpp>
-
class MIPCapacityGenerator : public routing::mip::IMIPConstraintGenerator#
- #include <MIPCapacityGenerator.hpp>
MIP Capacity constraint generator.
Implements vehicle capacity constraints using continuous load variables:
load[i] = cumulative load when arriving at node i
Capacity bounds: load[i] <= capacity
Load propagation: if x[i][j] = 1, then load[j] >= load[i] + demand[j]
Uses big-M formulation for conditional constraints
Public Functions
-
inline virtual std::vector<AttributeTypeId> requiredAttributes() const override#
Attribute types required by this generator.
-
inline virtual int priority() const override#
Priority for ordering (lower = earlier)
-
inline void setRoutingGenerator(MIPRoutingGenerator *routing)#
-
inline virtual void addVariables(IMIPBackend &mip, Problem &problem) override#
Add variables to the MIP model.
- Parameters:
mip – The MIP backend
problem – The problem instance
-
inline virtual void addConstraints(IMIPBackend &mip, Problem &problem) override#
Add constraints to the MIP model.
- Parameters:
mip – The MIP backend
problem – The problem instance
-
inline virtual void addObjectiveTerms(IMIPBackend &mip, Problem &problem, LinearExpr &expr) override#
Add terms to the objective function.
- Parameters:
mip – The MIP backend
problem – The problem instance
expr – The linear expression to add to
-
inline virtual void extractSolution(const IMIPBackend &mip, Problem &problem, Solution &solution) override#
Called after solving to extract solution data.
- Parameters:
mip – The MIP backend (with solution)
problem – The problem instance
solution – The solution to populate
-
struct MIPEntry#
Public Members
-
MIPGeneratorFactory factory#
-
std::vector<AttributeTypeId> requiredAttrs#
-
int priority#
-
MIPGeneratorFactory factory#
-
struct MIPGeneratorEntry#
Public Members
-
MIPGeneratorFactory factory#
-
std::vector<AttributeTypeId> requiredAttrs#
-
int priority#
-
MIPGeneratorFactory factory#
-
class MIPRoutingGenerator : public routing::mip::IMIPConstraintGenerator#
- #include <MIPRoutingGenerator.hpp>
MIP Routing constraint generator.
Implements arc-based VRP formulation:
Binary arc variables x[i][j] = 1 if arc (i,j) is used
Flow conservation: each client visited exactly once
Vehicle limit: at most m vehicles leave depot
MTZ subtour elimination constraints
Distance-based objective
Node indices:
0: depot
1 to n: clients
Public Functions
-
inline virtual std::vector<AttributeTypeId> requiredAttributes() const override#
Attribute types required by this generator.
-
inline virtual int priority() const override#
Priority for ordering (lower = earlier)
-
inline virtual void addVariables(IMIPBackend &mip, Problem &problem) override#
Add variables to the MIP model.
- Parameters:
mip – The MIP backend
problem – The problem instance
-
inline virtual void addConstraints(IMIPBackend &mip, Problem &problem) override#
Add constraints to the MIP model.
- Parameters:
mip – The MIP backend
problem – The problem instance
-
inline virtual void addObjectiveTerms(IMIPBackend &mip, Problem &problem, LinearExpr &expr) override#
Add terms to the objective function.
- Parameters:
mip – The MIP backend
problem – The problem instance
expr – The linear expression to add to
-
inline virtual void extractSolution(const IMIPBackend &mip, Problem &problem, Solution &solution) override#
Called after solving to extract solution data.
- Parameters:
mip – The MIP backend (with solution)
problem – The problem instance
solution – The solution to populate
-
inline size_t getNumClients() const#
-
inline size_t getNumVehicles() const#
-
class MIPSolver : public routing::ISolver#
- #include <MIPSolver.hpp>
MIP-based solver using pluggable backends.
This solver uses the IMIPBackend interface to solve routing problems using mixed integer programming. It supports different backends:
CPLEX (commercial, high performance)
HiGHS (open-source, good performance)
Gurobi (future)
Public Functions
-
inline explicit MIPSolver(Problem *problem, const std::string &backendType = "auto")#
Construct a MIP solver for a problem.
- Parameters:
problem – The problem to solve
backendType – Backend to use (“cplex”, “highs”, “auto”) “auto” selects best available: CPLEX > HiGHS
-
inline MIPSolver(Problem *problem, std::unique_ptr<IMIPBackend> backend)#
Construct a MIP solver with a custom backend.
- Parameters:
problem – The problem to solve
backend – Custom backend instance
-
~MIPSolver() override = default#
-
inline virtual void setConfiguration(Configuration *config) override#
Set solver configuration.
-
inline virtual void setDefaultConfiguration() override#
Set default configuration.
-
inline virtual bool solve(double timeout) override#
Solve the problem.
-
inline virtual double getObjectiveValue() const override#
Get the objective value of the best solution.
-
inline virtual bool isOptimal() const override#
Check if the problem was solved to optimality.
-
inline void setVerbose(bool verbose)#
-
inline void setGapTolerance(double gap)#
-
inline void setNumThreads(int threads)#
-
inline void setNodeLimit(long long limit)#
-
inline void setSolutionLimit(int limit)#
-
inline void setRandomSeed(int seed)#
-
inline void setPresolve(bool enable)#
-
inline IMIPBackend &getBackend()#
Get the backend for advanced usage.
-
inline const IMIPBackend &getBackend() const#
Public Static Functions
-
class MIPSolverPlugin : public routing::IPlugin#
- #include <MIPSolverPlugin.hpp>
Plugin for MIP-based solvers with pluggable backends.
Registers MIP solver variants using different backends:
”mip” / “auto”: Auto-select best available (CPLEX > HiGHS)
”cplex”: CPLEX backend (commercial)
”highs”: HiGHS backend (open-source)
Public Functions
-
inline virtual PluginType type() const override#
Get the plugin type.
-
inline virtual void initialize(PluginRegistry ®istry) override#
Initialize the plugin and register components.
-
class MIPTimeWindowGenerator : public routing::mip::IMIPConstraintGenerator#
- #include <MIPTimeWindowGenerator.hpp>
MIP Time Window constraint generator.
Implements time window constraints using continuous time variables:
t[i] = arrival time at node i
Time window bounds: tw_open[i] <= t[i] <= tw_close[i]
Precedence constraints: if x[i][j] = 1, then t[i] + service[i] + travel[i][j] <= t[j]
Uses big-M formulation with indicator constraints
Public Functions
-
inline virtual std::vector<AttributeTypeId> requiredAttributes() const override#
Attribute types required by this generator.
-
inline virtual int priority() const override#
Priority for ordering (lower = earlier)
-
inline void setRoutingGenerator(MIPRoutingGenerator *routing)#
-
inline virtual void addVariables(IMIPBackend &mip, Problem &problem) override#
Add variables to the MIP model.
- Parameters:
mip – The MIP backend
problem – The problem instance
-
inline virtual void addConstraints(IMIPBackend &mip, Problem &problem) override#
Add constraints to the MIP model.
- Parameters:
mip – The MIP backend
problem – The problem instance
-
inline virtual void addObjectiveTerms(IMIPBackend &mip, Problem &problem, LinearExpr &expr) override#
Add terms to the objective function.
- Parameters:
mip – The MIP backend
problem – The problem instance
expr – The linear expression to add to
-
inline virtual void extractSolution(const IMIPBackend &mip, Problem &problem, Solution &solution) override#
Called after solving to extract solution data.
- Parameters:
mip – The MIP backend (with solution)
problem – The problem instance
solution – The solution to populate
-
struct Model#
- #include <Model.hpp>
Subclassed by routing::Entity, routing::Solution, routing::models::Client, routing::models::Depot, routing::models::Tour, routing::models::Vehicle
Public Functions
-
inline unsigned getID() const#
-
inline void setID(const unsigned &p_id)#
-
virtual ~Model() = default#
Private Members
-
unsigned int id#
-
inline unsigned getID() const#
-
class Move : public routing::Neighborhood#
- #include <Move.hpp>
Public Functions
-
inline Move(Constructor *p_constructor)#
Private Members
-
Constructor *constructor#
-
inline Move(Constructor *p_constructor)#
-
class Neighborhood#
- #include <Neighborhood.hpp>
Subclassed by routing::IDCH, routing::Move, routing::TwoOpt
-
struct NeighborhoodMove#
- #include <INeighborhood.hpp>
Represents a move in a neighborhood.
Public Functions
-
inline bool isImproving() const#
-
inline bool isImproving() const#
-
class OptionalIntervalVar#
- #include <CPTypes.hpp>
Handle for an optional interval variable.
Like IntervalVar but can be absent (not scheduled). Used for optional activities.
Public Functions
-
OptionalIntervalVar() = default#
-
inline bool isValid() const#
-
inline int id() const#
-
inline bool operator==(const OptionalIntervalVar &other) const#
-
inline bool operator!=(const OptionalIntervalVar &other) const#
Friends
- friend class ICPBackend
-
OptionalIntervalVar() = default#
-
class ORToolsCPSATBackend : public routing::cp::ICPBackend#
- #include <ORToolsCPSATBackend.hpp>
Stub implementation when OR-Tools is not available.
Public Functions
-
inline ORToolsCPSATBackend()#
-
inline virtual std::string name() const override#
Get backend name (e.g., “cpoptimizer”, “ortools”, “gecode”)
-
inline virtual IntVar newIntVar(int, int, const std::string&) override#
Create an integer variable.
- Parameters:
lb – Lower bound
ub – Upper bound
name – Optional variable name
-
inline virtual IntVar newBoolVar(const std::string&) override#
Create a boolean variable (0-1)
- Parameters:
name – Optional variable name
-
inline virtual IntVar newConstant(int) override#
Create an integer constant.
- Parameters:
value – Constant value
-
inline virtual IntervalVar newIntervalVar(int, int, int, int, const std::string&) override#
Create an interval variable for scheduling.
- Parameters:
minStart – Earliest possible start time
maxEnd – Latest possible end time
minDuration – Minimum duration
maxDuration – Maximum duration
name – Optional variable name
-
inline virtual OptionalIntervalVar newOptionalIntervalVar(int, int, int, int, const std::string&) override#
Create an optional interval variable.
- Parameters:
minStart – Earliest possible start time
maxEnd – Latest possible end time
minDuration – Minimum duration
maxDuration – Maximum duration
name – Optional variable name
- Returns:
OptionalIntervalVar with presence indicator
-
inline virtual void addEquality(const LinearExpr&, int) override#
Add constraint: expr == value.
-
inline virtual void addLinearConstraint(const LinearExpr&, int, int) override#
Add constraint: lb <= expr <= ub.
-
inline virtual void addLessOrEqual(IntVar, IntVar, int) override#
Add constraint: var1 <= var2 + offset.
-
inline virtual void addImplication(IntVar, const LinearExpr&, int, int) override#
Add implication: if condition is true, then expr op bound.
-
inline virtual void addReification(IntVar, IntVar, int) override#
Add reification: indicator == 1 iff var == value This creates a channeling constraint linking a boolean indicator to a condition.
-
inline virtual void addAllDifferent(const std::vector<IntVar>&) override#
All-different constraint All variables must take different values.
-
inline virtual void addElement(IntVar, const std::vector<int>&, IntVar) override#
Element constraint: result = array[index].
-
inline virtual void addElement(IntVar, const std::vector<IntVar>&, IntVar) override#
Element constraint with variable array: result = vars[index].
-
inline virtual void addCircuit(const std::vector<IntVar>&) override#
Circuit constraint Variables define a Hamiltonian circuit over nodes 0..n-1 next[i] = j means arc from i to j.
-
inline virtual void addSubCircuit(const std::vector<IntVar>&) override#
Sub-circuit constraint (allows nodes to point to themselves) Used for TSP with optional nodes.
-
inline virtual void addInverse(const std::vector<IntVar>&, const std::vector<IntVar>&) override#
Inverse constraint: next[prev[i]] == i and prev[next[i]] == i.
-
inline virtual void addNoOverlap(const std::vector<IntervalVar>&) override#
No-overlap constraint Intervals cannot overlap in time.
-
inline virtual void addNoOverlap(const std::vector<OptionalIntervalVar>&) override#
No-overlap constraint with optional intervals.
-
inline virtual void addCumulative(const std::vector<IntervalVar>&, const std::vector<int>&, int) override#
Cumulative constraint At any time point, sum of demands of active intervals <= capacity.
-
inline virtual void addCumulative(const std::vector<OptionalIntervalVar>&, const std::vector<int>&, int) override#
Cumulative with optional intervals.
-
inline virtual void addEndBeforeStart(IntervalVar, IntervalVar, int) override#
Precedence constraint: interval1 ends before interval2 starts end(interval1) + delay <= start(interval2)
-
inline virtual IntVar startOf(IntervalVar) override#
Get start variable of an interval.
-
inline virtual IntVar endOf(IntervalVar) override#
Get end variable of an interval.
-
inline virtual IntVar durationOf(IntervalVar) override#
Get duration variable of an interval.
-
inline virtual IntVar startOf(OptionalIntervalVar, int) override#
Get start variable of optional interval (undefined if absent)
-
inline virtual IntVar endOf(OptionalIntervalVar, int) override#
Get end variable of optional interval (undefined if absent)
-
inline virtual void minimize(const LinearExpr&) override#
Set objective to minimize.
-
inline virtual void maximize(const LinearExpr&) override#
Set objective to maximize.
-
inline virtual void minimizeMakespan(const std::vector<IntervalVar>&) override#
Minimize the makespan (max end time of intervals)
-
inline virtual CPStatus solve(double) override#
Solve the model.
- Parameters:
timeout – Maximum solving time in seconds
- Returns:
Solver status
-
inline virtual void setHint(const std::vector<std::pair<IntVar, int>>&) override#
Provide hints/warm start.
-
inline virtual void setNumWorkers(int) override#
Set number of worker threads.
-
inline virtual void setRandomSeed(int) override#
Set random seed for reproducibility.
-
inline virtual int getStart(IntervalVar) const override#
Get start time of interval in solution.
-
inline virtual int getEnd(IntervalVar) const override#
Get end time of interval in solution.
-
inline virtual int getDuration(IntervalVar) const override#
Get duration of interval in solution.
-
inline virtual bool isPresent(OptionalIntervalVar) const override#
Check if optional interval is present in solution.
-
inline virtual double getObjectiveValue() const override#
Get objective value of solution.
-
inline virtual double getObjectiveBound() const override#
Get lower bound on objective.
-
inline virtual double getSolveTime() const override#
Get solving time in seconds.
-
inline virtual long long getNumBranches() const override#
Get number of search branches.
-
inline virtual long long getNumFailures() const override#
Get number of failures/backtracks.
-
inline virtual void clear() override#
Clear the model (remove all variables and constraints)
-
inline ORToolsCPSATBackend()#
-
class ParameterNotFound : public std::exception#
- #include <Configuration.hpp>
Public Functions
-
inline const char *what() const noexcept override#
-
inline const char *what() const noexcept override#
-
class Particle#
- #include <PSOSolver.hpp>
-
struct Pickup : public routing::Attribute<Pickup>#
- #include <Pickup.hpp>
Pickup demand at a node.
Pickup models goods to be collected from this node, adding to the vehicle’s current load.
Public Functions
-
inline explicit Pickup(const PickupDemand &p_pickup)#
-
inline PickupDemand getPickup() const#
-
inline virtual std::unique_ptr<IAttribute> clone() const override#
Creates a deep copy of this attribute.
Public Members
-
EntityData<PickupDemand> pickup#
-
inline explicit Pickup(const PickupDemand &p_pickup)#
-
class PickupDeliveryConstraintGenerator : public routing::IConstraintGenerator#
- #include <PickupDeliveryConstraintGenerator.hpp>
Pickup and Delivery constraint generator.
Extends capacity constraints for pickup-delivery scenarios where:
Pickup adds goods to the vehicle (increases load)
Delivery removes goods from the vehicle (decreases load)
Net demand = pickup - delivery
This generator conflicts with CapacityConstraintGenerator since it provides alternative capacity handling for P&D problems.
Requires: Pickup, Delivery, and Stock attributes
Public Functions
-
inline virtual std::string name() const override#
Returns a unique name for this generator (for debugging/logging)
-
inline virtual std::vector<AttributeTypeId> requiredAttributes() const override#
Returns the attribute types that must be enabled for this generator to be active.
-
inline virtual std::vector<AttributeTypeId> conflictingAttributes() const override#
Returns attribute types that conflict with this generator (optional)
-
inline virtual int priority() const override#
Priority for ordering generators (lower = earlier). Default: 100 Routing constraints should be ~10, capacity ~50, time windows ~60
-
class PickupDeliveryPlugin : public routing::IPlugin#
- #include <PickupDeliveryPlugin.hpp>
Public Functions
-
inline virtual PluginType type() const override#
Get the plugin type.
-
inline virtual void initialize(PluginRegistry ®istry) override#
Initialize the plugin and register components.
-
inline virtual PluginType type() const override#
-
template<typename T>
class PluginRegistrar# - #include <IPlugin.hpp>
Helper class for static registration.
Public Functions
-
PluginRegistrar()#
-
PluginRegistrar()#
-
class PluginRegistry#
- #include <PluginRegistry.hpp>
Central registry for all plugins and components.
Public Types
-
using CPGeneratorFactory = std::function<std::unique_ptr<cp::ICPConstraintGenerator>()>#
-
using MIPGeneratorFactory = std::function<std::unique_ptr<mip::IMIPConstraintGenerator>()>#
-
using SolverWithBackendFactory = std::function<std::unique_ptr<ISolver>(Problem*, const std::string&)>#
-
using MIPBackendFactory = std::function<std::unique_ptr<mip::IMIPBackend>()>#
-
using CPBackendFactory = std::function<std::unique_ptr<cp::ICPBackend>()>#
-
using NeighborhoodFactory = std::function<std::unique_ptr<INeighborhood>()>#
Public Functions
-
inline void initializeAll()#
-
inline void shutdownAll()#
-
inline void registerGenerator(std::unique_ptr<IConstraintGenerator> generator)#
-
inline IConstraintGenerator *getGenerator(const std::string &name) const#
-
inline std::vector<IConstraintGenerator*> getGenerators(const std::set<AttributeTypeId> &enabledAttrs) const#
-
inline const std::vector<std::unique_ptr<IConstraintGenerator>> &allGenerators() const#
-
inline void registerCPGenerator(const std::string &name, CPGeneratorFactory factory, std::vector<AttributeTypeId> requiredAttrs, int priority = 100)#
Register a CP generator factory.
-
inline std::unique_ptr<cp::ICPConstraintGenerator> createCPGenerator(const std::string &name) const#
Create a single CP generator by name.
-
inline std::vector<std::unique_ptr<cp::ICPConstraintGenerator>> createCPGenerators(const std::set<AttributeTypeId> &enabledAttrs) const#
Create all applicable CP generators for the given enabled attributes.
- Parameters:
enabledAttrs – Set of enabled attribute type IDs
- Returns:
Vector of fresh generator instances, sorted by priority
-
inline void registerMIPGenerator(const std::string &name, MIPGeneratorFactory factory, std::vector<AttributeTypeId> requiredAttrs, int priority = 100)#
Register a MIP generator factory.
-
inline std::unique_ptr<mip::IMIPConstraintGenerator> createMIPGenerator(const std::string &name) const#
Create a single MIP generator by name.
-
inline std::vector<std::unique_ptr<mip::IMIPConstraintGenerator>> createMIPGenerators(const std::set<AttributeTypeId> &enabledAttrs) const#
Create all applicable MIP generators for the given enabled attributes.
- Parameters:
enabledAttrs – Set of enabled attribute type IDs
- Returns:
Vector of fresh generator instances, sorted by priority
-
inline void registerEvaluator(std::unique_ptr<IEvaluator> evaluator)#
-
inline IEvaluator *getEvaluator(const std::string &name) const#
-
inline std::vector<IEvaluator*> getEvaluators(const std::set<AttributeTypeId> &enabledAttrs) const#
-
inline const std::vector<std::unique_ptr<IEvaluator>> &allEvaluators() const#
-
inline void registerSolver(const std::string &name, SolverFactory factory)#
-
inline void registerSolverWithBackend(const std::string &name, SolverWithBackendFactory factory)#
-
inline std::unique_ptr<ISolver> createSolverWithBackend(const std::string &name, Problem *problem, const std::string &backend) const#
-
inline void registerMIPBackend(const std::string &name, MIPBackendFactory factory)#
-
inline std::unique_ptr<mip::IMIPBackend> createMIPBackend(const std::string &name) const#
-
inline void registerCPBackend(const std::string &name, CPBackendFactory factory)#
-
inline std::unique_ptr<cp::ICPBackend> createCPBackend(const std::string &name) const#
-
inline void registerNeighborhood(const std::string &name, NeighborhoodFactory factory)#
-
inline std::unique_ptr<INeighborhood> createNeighborhood(const std::string &name) const#
-
inline void registerReader(const std::string &formatName, const std::vector<std::string> &extensions, ReaderFactory factory)#
-
inline void clear()#
Public Static Functions
-
static inline PluginRegistry &instance()#
Private Functions
-
PluginRegistry() = default#
Private Members
-
bool initialized_ = false#
-
std::vector<std::unique_ptr<IConstraintGenerator>> generators_#
-
std::map<std::string, IConstraintGenerator*> generatorByName_#
-
std::map<std::string, CPGeneratorEntry> cpGeneratorEntries_#
-
std::map<std::string, MIPGeneratorEntry> mipGeneratorEntries_#
-
std::vector<std::unique_ptr<IEvaluator>> evaluators_#
-
std::map<std::string, IEvaluator*> evaluatorByName_#
-
std::map<std::string, SolverFactory> solverFactories_#
-
std::map<std::string, SolverWithBackendFactory> solverWithBackendFactories_#
-
std::map<std::string, MIPBackendFactory> mipBackendFactories_#
-
std::map<std::string, CPBackendFactory> cpBackendFactories_#
-
std::map<std::string, NeighborhoodFactory> neighborhoodFactories_#
-
std::map<std::string, ReaderFactory> readerFactories_#
Private Static Functions
-
static inline bool isApplicable(const std::vector<AttributeTypeId> &required, const std::set<AttributeTypeId> &enabled)#
-
using CPGeneratorFactory = std::function<std::unique_ptr<cp::ICPConstraintGenerator>()>#
-
class Population#
- #include <GASolver.hpp>
Public Static Functions
-
static inline Population *initialize(Problem *p_problem, ConstraintConfig cfg)#
-
static inline Population *initialize(Problem *p_problem, ConstraintConfig cfg)#
-
class Problem#
- #include <Problem.hpp>
A composable VRP problem with runtime attribute configuration.
Problem replaces the inheritance-based problem hierarchy (VRP -> CVRP -> CVRPTW) with a runtime composition model.
Usage: Problem problem; problem.enableAttributes<GeoNode, Consumer, Stock, Rendezvous, ServiceQuery>();
auto* client = problem.addClient(1); client->addAttribute<GeoNode>(10.0, 20.0); client->addAttribute<Consumer>(15);
problem.generateModel(); // Constraints auto-added based on enabled attrs
Public Functions
-
Problem() = default#
-
inline virtual ~Problem()#
-
template<typename Attr>
inline void enableAttribute()# Enable an attribute type for this problem.
-
template<typename ...Attrs>
inline void enableAttributes()# Enable multiple attribute types at once.
-
template<typename Attr>
inline bool hasAttribute() const# Check if an attribute type is enabled.
-
inline const std::set<AttributeTypeId> &getEnabledAttributes() const#
Get all enabled attribute type IDs.
-
inline size_t numClients() const#
Get number of clients.
-
inline size_t numVehicles() const#
Get number of vehicles.
-
inline size_t numDepots() const#
Get number of depots.
-
inline void syncLegacyPointers()#
-
inline const std::vector<IConstraintGenerator*> &getActiveGenerators() const#
Get active constraint generators (sorted by priority)
-
inline const std::vector<IEvaluator*> &getActiveEvaluators() const#
Get active evaluators (sorted by priority)
-
inline void setDistanceMatrix(const double *data, size_t n)#
Set a custom distance matrix.
The matrix should include all nodes: depot(s) first, then clients. Index 0 is typically the depot, indices 1..n-1 are clients.
- Parameters:
data – Pointer to row-major distance data
n – Size of the matrix (n x n)
-
inline bool hasCustomDistances() const#
Check if custom distances are enabled.
-
inline void clearDistanceMatrix()#
Clear custom distance matrix.
-
inline Duration getCustomDistance(size_t from, size_t to) const#
Get distance from custom matrix by node indices.
-
inline Duration getDistanceEntity(const Entity &e1, const Entity &e2) const#
Get distance between two entities.
-
inline virtual Initializer *initializer()#
Public Members
Private Functions
-
inline void refreshActiveComponents()#
Private Members
-
std::set<AttributeTypeId> enabledAttributes_#
-
std::vector<IConstraintGenerator*> activeGenerators_#
-
std::vector<IEvaluator*> activeEvaluators_#
-
std::unique_ptr<Initializer> initializer_#
-
bool useCustomDistances_ = false#
-
Problem() = default#
-
struct Profiter : public routing::Attribute<Profiter>#
- #include <Profiter.hpp>
Profit/reward for visiting a node.
Profiter models the benefit gained from visiting this node, used in problems like TOP (Team Orienteering Problem).
Public Functions
-
inline double getProfit() const#
-
inline virtual std::unique_ptr<IAttribute> clone() const override#
Creates a deep copy of this attribute.
Public Members
-
EntityData<Profit> profit#
-
inline double getProfit() const#
-
class ProfitObjectiveGenerator : public routing::IConstraintGenerator#
- #include <ProfitObjectiveGenerator.hpp>
Profit objective generator for TOP (Team Orienteering Problem)
Replaces the default distance minimization objective with profit maximization. Only clients that are visited contribute to the objective.
Requires: Profiter attribute (on clients)
Public Functions
-
inline virtual std::string name() const override#
Returns a unique name for this generator (for debugging/logging)
-
inline virtual std::vector<AttributeTypeId> requiredAttributes() const override#
Returns the attribute types that must be enabled for this generator to be active.
-
inline virtual int priority() const override#
Priority for ordering generators (lower = earlier). Default: 100 Routing constraints should be ~10, capacity ~50, time windows ~60
-
inline virtual std::string name() const override#
-
class ProfitPlugin : public routing::IPlugin#
- #include <ProfitPlugin.hpp>
Public Functions
-
inline virtual PluginType type() const override#
Get the plugin type.
-
inline virtual void initialize(PluginRegistry ®istry) override#
Initialize the plugin and register components.
-
inline virtual PluginType type() const override#
-
struct PSOKey#
- #include <PSOSolver.hpp>
Public Functions
-
inline PSOKey(const double &length)#
Public Members
-
double _cost#
-
inline PSOKey(const double &length)#
-
class PSOSolver : public routing::MASolver#
- #include <PSOSolver.hpp>
Public Functions
-
class PSOSolverPlugin : public routing::IPlugin#
- #include <PSOSolverPlugin.hpp>
Public Functions
-
inline virtual PluginType type() const override#
Get the plugin type.
-
inline virtual void initialize(PluginRegistry ®istry) override#
Initialize the plugin and register components.
-
inline virtual PluginType type() const override#
-
class PSOSolverWrapper : public routing::ISolver#
- #include <PSOSolverPlugin.hpp>
Public Functions
-
inline virtual void setConfiguration(Configuration *config) override#
Set solver configuration.
-
inline virtual void setDefaultConfiguration() override#
Set default configuration.
-
inline virtual bool solve(double timeout) override#
Solve the problem.
-
inline virtual double getObjectiveValue() const override#
Get the objective value of the best solution.
-
inline void setNeighbors(const std::vector<Neighborhood*> &neighbors)#
Private Functions
-
inline void ensureConfig()#
-
inline virtual void setConfiguration(Configuration *config) override#
-
class QuadExpr#
- #include <MIPTypes.hpp>
Quadratic expression over variables.
Represents: constant + sum(linear_coeff[i] * var[i]) + sum(quad_coeff[i,j] * var[i] * var[j])
Public Functions
-
QuadExpr() = default#
-
inline explicit QuadExpr(const LinearExpr &linear)#
-
inline const LinearExpr &linearPart() const#
-
QuadExpr() = default#
-
class RandomDestructor : public routing::Destructor#
- #include <RandomDestructor.hpp>
Public Functions
-
inline explicit RandomDestructor(double fraction = 0.2)#
Private Members
-
double fraction_#
-
inline explicit RandomDestructor(double fraction = 0.2)#
-
class Reader#
- #include <Reader.hpp>
-
class RemoveCost#
- #include <RemoveCost.hpp>
Public Functions
-
inline bool operator>(const RemoveCost &rhs) const#
-
inline RemoveCost()#
-
inline RemoveCost(const RemoveCost &cost)#
-
inline bool operator>(const RemoveCost &rhs) const#
-
struct Rendezvous : public routing::Attribute<Rendezvous>#
- #include <Rendezvous.hpp>
Time window constraint for a node.
Rendezvous models a time window within which service must begin at this node.
Public Functions
-
inline bool isWithinWindow(Duration time) const#
Check if a given time falls within the time window.
-
inline virtual std::unique_ptr<IAttribute> clone() const override#
Creates a deep copy of this attribute.
Public Members
-
EntityData<TW> tw#
-
inline bool isWithinWindow(Duration time) const#
-
class RoutingConstraintGenerator : public routing::IConstraintGenerator#
- #include <RoutingConstraintGenerator.hpp>
Base routing constraint generator.
Implements the fundamental VRP constraints:
Arc decision variables (X_i_j)
Vehicle affectation variables (A_i_k)
Order variables for subtour elimination (o_i)
Flow conservation constraints
MTZ subtour elimination constraints
This is always active as it provides the foundation for all VRP variants.
Public Functions
-
inline virtual std::string name() const override#
Returns a unique name for this generator (for debugging/logging)
-
inline virtual std::vector<AttributeTypeId> requiredAttributes() const override#
Returns the attribute types that must be enabled for this generator to be active.
-
inline virtual int priority() const override#
Priority for ordering generators (lower = earlier). Default: 100 Routing constraints should be ~10, capacity ~50, time windows ~60
-
class RoutingEvaluator : public routing::IEvaluator#
- #include <RoutingEvaluator.hpp>
Public Functions
-
inline virtual std::vector<AttributeTypeId> requiredAttributes() const override#
Returns the attribute types required for this evaluator.
-
inline virtual int priority() const override#
Priority for evaluation ordering (lower = earlier). Default: 100.
-
inline virtual bool checkFeasibility(const Tour&, const InsertionContext&) const override#
Check if an insertion is feasible.
- Parameters:
tour – The tour to insert into
ctx – The insertion context
- Returns:
true if the insertion maintains feasibility for this evaluator’s constraints
-
inline virtual double evaluateInsertionDelta(const Tour &tour, const InsertionContext &ctx) const override#
Compute the cost delta for an insertion.
- Parameters:
tour – The tour to insert into
ctx – The insertion context
- Returns:
The change in cost (positive = worse, negative = better)
-
inline virtual void applyInsertion(Tour&, const InsertionContext&) override#
Apply an insertion and update internal state.
Called after an insertion is accepted. The evaluator should update any cached state (e.g., total load, arrival times).
- Parameters:
tour – The tour being modified
ctx – The insertion context
-
inline virtual std::vector<AttributeTypeId> requiredAttributes() const override#
-
class RoutingPlugin : public routing::IPlugin#
- #include <RoutingPlugin.hpp>
Public Functions
-
inline virtual PluginType type() const override#
Get the plugin type.
-
inline virtual void initialize(PluginRegistry ®istry) override#
Initialize the plugin and register components.
-
inline virtual PluginType type() const override#
-
class Sequence#
- #include <GASolver.hpp>
Public Functions
-
inline Sequence(Solution *p_solution, ConstraintConfig config = {})#
-
inline Sequence(Problem *p_problem, const std::vector<models::Client*> &p_sequence, ConstraintConfig config = {})#
-
inline Sequence(Problem *p_problem, ConstraintConfig config = {})#
-
inline ~Sequence()#
-
inline double getCost()#
-
inline long getHash()#
Protected Attributes
-
bool updated = true#
-
bool decoded = false#
-
long hash = 0#
-
ConstraintConfig config_#
-
inline Sequence(Solution *p_solution, ConstraintConfig config = {})#
-
struct Service : public routing::Attribute<Service>#
- #include <Service.hpp>
Service start time (solution value)
Service stores the actual start time of service at a node in the current solution. This is a mutable solution value.
Public Functions
-
inline virtual std::unique_ptr<IAttribute> clone() const override#
Creates a deep copy of this attribute.
Public Members
-
SolutionValue<Duration> start#
-
inline virtual std::unique_ptr<IAttribute> clone() const override#
-
struct ServiceQuery : public routing::Attribute<ServiceQuery>#
- #include <ServiceQuery.hpp>
Service time required at a node.
ServiceQuery models the time duration required to perform service at this node (loading, unloading, etc.).
Public Functions
-
inline virtual std::unique_ptr<IAttribute> clone() const override#
Creates a deep copy of this attribute.
Public Members
-
EntityData<Duration> service#
-
inline virtual std::unique_ptr<IAttribute> clone() const override#
-
class SoftTimeWindowGenerator : public routing::IConstraintGenerator#
- #include <SoftTimeWindowGenerator.hpp>
Soft time window constraint generator for CVRPSTW.
Unlike hard time windows, soft time windows allow violations with penalties:
Wait penalty: for arriving before the time window opens
Delay penalty: for arriving after the time window closes
The objective is lexicographic:
Minimize total wait + delay penalty
Minimize travel distance
This generator conflicts with TimeWindowConstraintGenerator since it provides alternative (soft) time window handling.
Requires: Rendezvous (time windows) and ServiceQuery (service times)
Public Functions
-
inline SoftTimeWindowGenerator(double waitPenalty = 1.0, double delayPenalty = 1.0)#
-
inline virtual std::string name() const override#
Returns a unique name for this generator (for debugging/logging)
-
inline virtual std::vector<AttributeTypeId> requiredAttributes() const override#
Returns the attribute types that must be enabled for this generator to be active.
-
inline virtual int priority() const override#
Priority for ordering generators (lower = earlier). Default: 100 Routing constraints should be ~10, capacity ~50, time windows ~60
-
inline void setWaitPenalty(double penalty)#
-
inline void setDelayPenalty(double penalty)#
-
inline double getWaitPenalty() const#
-
inline double getDelayPenalty() const#
-
struct SoftTimeWindows : public routing::Attribute<SoftTimeWindows>#
- #include <SoftTimeWindows.hpp>
Soft time window configuration attribute.
Used for CVRPSTW (CVRP with Soft Time Windows) problems. Unlike hard time windows, soft time windows allow violations with penalties for early arrival (wait) and late arrival (delay).
This attribute is typically attached to the depot to configure problem-wide penalty settings.
Public Functions
-
inline SoftTimeWindows(double waitPenalty = 1.0, double delayPenalty = 1.0)#
-
inline double getWaitPenalty() const#
-
inline void setWaitPenalty(double penalty)#
-
inline double getDelayPenalty() const#
-
inline void setDelayPenalty(double penalty)#
-
inline virtual std::unique_ptr<IAttribute> clone() const override#
Creates a deep copy of this attribute.
-
inline SoftTimeWindows(double waitPenalty = 1.0, double delayPenalty = 1.0)#
-
class SolomonReader : public routing::IReader#
- #include <SolomonReaderPlugin.hpp>
Standalone Solomon format reader using composable API.
Reads standard Solomon CVRPTW benchmark instances. Format: Line 1: Instance name Lines 2-4: Empty/header Line 5: Number of vehicles, vehicle capacity Lines 6-9: Empty/header Line 10+: CUST NO. XCOORD. YCOORD. DEMAND READY TIME DUE DATE SERVICE TIME
Public Functions
-
inline virtual std::string formatName() const override#
Get the format name (e.g., “solomon”, “tsplib”)
-
inline virtual std::vector<std::string> supportedExtensions() const override#
Get supported file extensions.
-
inline virtual bool canRead(const std::string &filepath) const override#
Check if this reader can read the given file.
-
inline virtual std::string formatName() const override#
-
class SolomonReaderPlugin : public routing::IPlugin#
- #include <SolomonReaderPlugin.hpp>
Public Functions
-
inline virtual PluginType type() const override#
Get the plugin type.
-
inline virtual void initialize(PluginRegistry ®istry) override#
Initialize the plugin and register components.
-
inline virtual PluginType type() const override#
-
class Solution : public routing::Model#
- #include <Solution.hpp>
Solution implementation for composable problems.
This class represents a complete solution consisting of multiple tours.
Public Functions
-
inline virtual ~Solution()#
-
inline virtual void update()#
-
inline virtual double getCost()#
-
inline virtual void setPenalty(double penalty)#
-
inline virtual double getPenalty() const#
-
inline virtual unsigned long getNbTour() const#
-
inline virtual void addClient(unsigned long index_tour, models::Client *client, unsigned long position, InsertionCost *cost)#
-
inline virtual void removeClient(unsigned long index_tour, unsigned long position)#
-
inline virtual ~Solution()#
-
template<typename V>
class SolutionValue : public routing::ISolutionValue# - #include <IAttribute.hpp>
Public Functions
-
template<typename T>
inline bool is()#
-
template<typename T>
-
class Solver#
- #include <Solver.hpp>
Subclassed by routing::GASolver, routing::LSSolver, routing::VNSSolver
Public Functions
-
virtual ~Solver() = default#
-
virtual bool solve(double timeout = 3600) = 0#
-
virtual void setDefaultConfiguration() = 0#
-
inline void setImprovementCallback(ImprovementCallback callback)#
-
virtual ~Solver() = default#
-
struct Stock : public routing::Attribute<Stock>#
- #include <Stock.hpp>
Vehicle capacity attribute.
Stock models the capacity of a vehicle, limiting how much demand it can satisfy in a single route.
Public Functions
-
inline virtual std::unique_ptr<IAttribute> clone() const override#
Creates a deep copy of this attribute.
Public Members
-
EntityData<Capacity> capacity#
-
inline virtual std::unique_ptr<IAttribute> clone() const override#
-
class SyncConstraintGenerator : public routing::IConstraintGenerator#
- #include <SyncConstraintGenerator.hpp>
Synchronization constraint generator for VRPTWTD.
Implements temporal synchronization constraints:
If client A has a sync relation to client B with delta D: start[A] + D <= start[B]
Additionally, direct arcs between synced clients are forbidden
This is used for problems where services at different nodes must be coordinated in time (e.g., home healthcare, technician routing).
Requires: Synced attribute (and implicitly Rendezvous for start times)
Public Functions
-
inline virtual std::string name() const override#
Returns a unique name for this generator (for debugging/logging)
-
inline virtual std::vector<AttributeTypeId> requiredAttributes() const override#
Returns the attribute types that must be enabled for this generator to be active.
-
inline virtual int priority() const override#
Priority for ordering generators (lower = earlier). Default: 100 Routing constraints should be ~10, capacity ~50, time windows ~60
-
struct Synced : public routing::Attribute<Synced>#
- #include <Synced.hpp>
Synchronization attribute for nodes requiring coordination.
Used in VRPTWTD (VRP with Time Windows and Temporal Dependencies) and similar problems where service at one node must happen before/after service at another node with a time delta.
A synchronized node has “brothers” that must be visited with a minimum time difference (delta).
Example: In home healthcare, a nurse must visit patient A before the doctor visits patient A (different service types).
Public Functions
-
Synced() = default#
-
inline explicit Synced(const std::vector<SyncRelation> &relations)#
-
inline size_t getBrothersCount() const#
-
inline unsigned getBrotherId(size_t index) const#
-
inline const std::vector<SyncRelation> &getRelations() const#
-
inline virtual std::unique_ptr<IAttribute> clone() const override#
Creates a deep copy of this attribute.
Private Members
-
std::vector<SyncRelation> relations_#
-
Synced() = default#
-
class SyncPlugin : public routing::IPlugin#
- #include <SyncPlugin.hpp>
Public Functions
-
inline virtual PluginType type() const override#
Get the plugin type.
-
inline virtual void initialize(PluginRegistry ®istry) override#
Initialize the plugin and register components.
-
inline virtual PluginType type() const override#
-
struct SyncRelation#
- #include <Synced.hpp>
-
class TimeWindowConstraintGenerator : public routing::IConstraintGenerator#
- #include <TimeWindowConstraintGenerator.hpp>
Time window constraint generator.
Implements time window constraints:
Start time variables (t_i) for each node
Time window bounds (open/close)
Sequence constraints with service times and travel times
Requires: Rendezvous (time windows) and ServiceQuery (service times)
Public Functions
-
inline virtual std::string name() const override#
Returns a unique name for this generator (for debugging/logging)
-
inline virtual std::vector<AttributeTypeId> requiredAttributes() const override#
Returns the attribute types that must be enabled for this generator to be active.
-
inline virtual int priority() const override#
Priority for ordering generators (lower = earlier). Default: 100 Routing constraints should be ~10, capacity ~50, time windows ~60
-
class TimeWindowEvaluator : public routing::IEvaluator#
- #include <TimeWindowEvaluator.hpp>
Public Functions
-
inline virtual std::vector<AttributeTypeId> requiredAttributes() const override#
Returns the attribute types required for this evaluator.
-
inline virtual int priority() const override#
Priority for evaluation ordering (lower = earlier). Default: 100.
-
inline virtual bool checkFeasibility(const Tour &tour, const InsertionContext &ctx) const override#
Check if an insertion is feasible.
- Parameters:
tour – The tour to insert into
ctx – The insertion context
- Returns:
true if the insertion maintains feasibility for this evaluator’s constraints
-
inline virtual double evaluateInsertionDelta(const Tour&, const InsertionContext&) const override#
Compute the cost delta for an insertion.
- Parameters:
tour – The tour to insert into
ctx – The insertion context
- Returns:
The change in cost (positive = worse, negative = better)
-
inline virtual void applyInsertion(Tour&, const InsertionContext&) override#
Apply an insertion and update internal state.
Called after an insertion is accepted. The evaluator should update any cached state (e.g., total load, arrival times).
- Parameters:
tour – The tour being modified
ctx – The insertion context
-
inline virtual std::vector<AttributeTypeId> requiredAttributes() const override#
-
class TimeWindowPlugin : public routing::IPlugin#
- #include <TimeWindowPlugin.hpp>
Public Functions
-
inline virtual PluginType type() const override#
Get the plugin type.
-
inline virtual void initialize(PluginRegistry ®istry) override#
Initialize the plugin and register components.
-
inline virtual PluginType type() const override#
-
struct Tour : public routing::Model#
- #include <Tour.hpp>
Subclassed by routing::Tour
Public Functions
-
virtual void update() = 0#
-
virtual void pushClient(Client *client, routing::InsertionCost *cost) = 0#
-
virtual InsertionCost *_pushClient(Client *client) = 0#
-
virtual void addClient(Client *client, unsigned long position, routing::InsertionCost *cost) = 0#
-
virtual void removeClient(unsigned long position) = 0#
-
virtual void clear() = 0#
-
virtual unsigned long getNbClient() const = 0#
-
virtual routing::InsertionCost *evaluateInsertion(Client *client, unsigned long position) = 0#
-
virtual routing::RemoveCost *evaluateRemove(unsigned long position) = 0#
-
virtual long getHash() = 0#
-
virtual void update() = 0#
-
class Tour : public routing::models::Tour#
- #include <Solution.hpp>
Tour implementation for composable problems.
This class stores a sequence of clients assigned to a vehicle.
Public Functions
-
inline virtual void update() override#
-
inline virtual void pushClient(models::Client *client, InsertionCost *cost) override#
-
inline virtual InsertionCost *_pushClient(models::Client *client) override#
-
inline virtual void addClient(models::Client *client, unsigned long position, InsertionCost *cost) override#
-
inline virtual void removeClient(unsigned long position) override#
-
inline virtual void clear() override#
-
inline virtual unsigned long getNbClient() const override#
-
inline virtual InsertionCost *evaluateInsertion(models::Client *client, unsigned long position) override#
-
inline virtual RemoveCost *evaluateRemove(unsigned long position) override#
-
inline virtual long getHash() override#
-
inline double getCost() const#
-
inline virtual void update() override#
-
class TSPLIBReader : public routing::IReader#
- #include <TSPLIBReaderPlugin.hpp>
Standalone TSPLIB/CVRPLIB format reader using composable API.
Reads standard TSPLIB-format CVRP benchmark instances. Supports NODE_COORD_SECTION, DEMAND_SECTION, and DEPOT_SECTION.
Public Functions
-
inline virtual std::string formatName() const override#
Get the format name (e.g., “solomon”, “tsplib”)
-
inline virtual std::vector<std::string> supportedExtensions() const override#
Get supported file extensions.
-
inline virtual bool canRead(const std::string &filepath) const override#
Check if this reader can read the given file.
-
inline virtual std::string formatName() const override#
-
class TSPLIBReaderPlugin : public routing::IPlugin#
- #include <TSPLIBReaderPlugin.hpp>
Public Functions
-
inline virtual PluginType type() const override#
Get the plugin type.
-
inline virtual void initialize(PluginRegistry ®istry) override#
Initialize the plugin and register components.
-
inline virtual PluginType type() const override#
-
class TwoOpt : public routing::Neighborhood#
- #include <TwoOpt.hpp>
-
class TwoOptMovement#
- #include <TwoOpt.hpp>
Public Functions
-
inline bool operator>(const TwoOptMovement &rhs) const#
-
inline bool isPossible() const#
-
inline void setPossible(bool possible)#
-
inline TwoOptMovement(int first_point, int second_point, int tour, routing::Duration delta, bool possible)#
-
inline TwoOptMovement()#
-
inline TwoOptMovement(const TwoOptMovement &cost)#
-
inline bool operator>(const TwoOptMovement &rhs) const#
-
class TwoOptNeighborhood : public routing::INeighborhood#
- #include <TwoOptPlugin.hpp>
Public Functions
-
inline virtual std::optional<NeighborhoodMove> explore(Solution&) override#
Explore the neighborhood and find the best move.
-
inline virtual void apply(Solution&, const NeighborhoodMove&) override#
Apply a move to the solution.
-
inline virtual std::optional<NeighborhoodMove> explore(Solution&) override#
-
class TwoOptPlugin : public routing::IPlugin#
- #include <TwoOptPlugin.hpp>
Public Functions
-
inline virtual PluginType type() const override#
Get the plugin type.
-
inline virtual void initialize(PluginRegistry ®istry) override#
Initialize the plugin and register components.
-
inline virtual PluginType type() const override#
-
class UserCutCallback : public IloCplex::UserCutCallbackI#
- #include <UserCutCallback.hpp>
-
class Var#
- #include <MIPTypes.hpp>
Handle for a continuous variable in MIP model.
Public Functions
-
Var() = default#
-
inline explicit Var(int id)#
-
inline bool isValid() const#
-
inline int id() const#
Private Members
-
int id_ = -1#
Friends
- friend class IMIPBackend
-
Var() = default#
-
struct Vehicle : public virtual routing::Model#
- #include <Vehicle.hpp>
Subclassed by routing::Vehicle
Public Functions
-
inline explicit Vehicle(unsigned id)#
-
inline explicit Vehicle(unsigned id)#
-
class Vehicle : public routing::Entity, public routing::models::Vehicle#
- #include <Entity.hpp>
Vehicle entity with runtime attributes.
Public Functions
-
inline explicit Vehicle(unsigned id)#
-
inline explicit Vehicle(unsigned id)#
-
class VNSSolver : public routing::Solver#
- #include <VNSSolver.hpp>
Public Functions
-
inline VNSSolver(routing::Problem *p_problem, Generator *p_generator, const std::vector<Neighborhood*> &p_neighbors, std::ostream &os = std::cout)#
-
inline virtual void setNeighbors(std::vector<routing::Neighborhood*> p_neighbors)#
-
inline virtual void setDefaultConfiguration() override#
-
inline virtual bool solve(double timeout = 3600) override#
-
virtual ~VNSSolver() = default#
-
inline VNSSolver(routing::Problem *p_problem, Generator *p_generator, const std::vector<Neighborhood*> &p_neighbors, std::ostream &os = std::cout)#
-
class VNSSolverPlugin : public routing::IPlugin#
- #include <VNSSolverPlugin.hpp>
Public Functions
-
inline virtual PluginType type() const override#
Get the plugin type.
-
inline virtual void initialize(PluginRegistry ®istry) override#
Initialize the plugin and register components.
-
inline virtual PluginType type() const override#
-
class VNSSolverWrapper : public routing::ISolver#
- #include <VNSSolverPlugin.hpp>
Public Functions
-
inline virtual void setConfiguration(Configuration *config) override#
Set solver configuration.
-
inline virtual void setDefaultConfiguration() override#
Set default configuration.
-
inline virtual bool solve(double timeout) override#
Solve the problem.
-
inline virtual double getObjectiveValue() const override#
Get the objective value of the best solution.
-
inline void setNeighbors(const std::vector<Neighborhood*> &neighbors)#
-
inline virtual void setConfiguration(Configuration *config) override#
-
class XCSP3Backend : public routing::cp::ICPBackend#
- #include <XCSP3Backend.hpp>
Public Functions
-
XCSP3Backend()#
-
~XCSP3Backend() override = default#
-
inline virtual std::string name() const override#
Get backend name (e.g., “cpoptimizer”, “ortools”, “gecode”)
-
virtual IntVar newIntVar(int lb, int ub, const std::string &name = "") override#
Create an integer variable.
- Parameters:
lb – Lower bound
ub – Upper bound
name – Optional variable name
-
virtual IntVar newBoolVar(const std::string &name = "") override#
Create a boolean variable (0-1)
- Parameters:
name – Optional variable name
-
virtual IntVar newConstant(int value) override#
Create an integer constant.
- Parameters:
value – Constant value
-
virtual IntervalVar newIntervalVar(int minStart, int maxEnd, int minDuration, int maxDuration, const std::string &name = "") override#
Create an interval variable for scheduling.
- Parameters:
minStart – Earliest possible start time
maxEnd – Latest possible end time
minDuration – Minimum duration
maxDuration – Maximum duration
name – Optional variable name
-
virtual OptionalIntervalVar newOptionalIntervalVar(int minStart, int maxEnd, int minDuration, int maxDuration, const std::string &name = "") override#
Create an optional interval variable.
- Parameters:
minStart – Earliest possible start time
maxEnd – Latest possible end time
minDuration – Minimum duration
maxDuration – Maximum duration
name – Optional variable name
- Returns:
OptionalIntervalVar with presence indicator
-
virtual void addEquality(const LinearExpr &expr, int value) override#
Add constraint: expr == value.
-
virtual void addLinearConstraint(const LinearExpr &expr, int lb, int ub) override#
Add constraint: lb <= expr <= ub.
-
virtual void addLessOrEqual(IntVar var1, IntVar var2, int offset = 0) override#
Add constraint: var1 <= var2 + offset.
-
virtual void addImplication(IntVar condition, const LinearExpr &expr, int lb, int ub) override#
Add implication: if condition is true, then expr op bound.
-
virtual void addReification(IntVar indicator, IntVar var, int value) override#
Add reification: indicator == 1 iff var == value This creates a channeling constraint linking a boolean indicator to a condition.
-
virtual void addAllDifferent(const std::vector<IntVar> &vars) override#
All-different constraint All variables must take different values.
-
virtual void addElement(IntVar index, const std::vector<int> &array, IntVar result) override#
Element constraint: result = array[index].
-
virtual void addElement(IntVar index, const std::vector<IntVar> &vars, IntVar result) override#
Element constraint with variable array: result = vars[index].
-
virtual void addCircuit(const std::vector<IntVar> &next) override#
Circuit constraint Variables define a Hamiltonian circuit over nodes 0..n-1 next[i] = j means arc from i to j.
-
virtual void addSubCircuit(const std::vector<IntVar> &next) override#
Sub-circuit constraint (allows nodes to point to themselves) Used for TSP with optional nodes.
-
virtual void addInverse(const std::vector<IntVar> &next, const std::vector<IntVar> &prev) override#
Inverse constraint: next[prev[i]] == i and prev[next[i]] == i.
-
virtual void addNoOverlap(const std::vector<IntervalVar> &intervals) override#
No-overlap constraint Intervals cannot overlap in time.
-
virtual void addNoOverlap(const std::vector<OptionalIntervalVar> &intervals) override#
No-overlap constraint with optional intervals.
-
virtual void addCumulative(const std::vector<IntervalVar> &intervals, const std::vector<int> &demands, int capacity) override#
Cumulative constraint At any time point, sum of demands of active intervals <= capacity.
-
virtual void addCumulative(const std::vector<OptionalIntervalVar> &intervals, const std::vector<int> &demands, int capacity) override#
Cumulative with optional intervals.
-
virtual void addEndBeforeStart(IntervalVar interval1, IntervalVar interval2, int delay = 0) override#
Precedence constraint: interval1 ends before interval2 starts end(interval1) + delay <= start(interval2)
-
virtual IntVar startOf(IntervalVar interval) override#
Get start variable of an interval.
-
virtual IntVar endOf(IntervalVar interval) override#
Get end variable of an interval.
-
virtual IntVar durationOf(IntervalVar interval) override#
Get duration variable of an interval.
-
virtual IntVar startOf(OptionalIntervalVar interval, int defaultValue = 0) override#
Get start variable of optional interval (undefined if absent)
-
virtual IntVar endOf(OptionalIntervalVar interval, int defaultValue = 0) override#
Get end variable of optional interval (undefined if absent)
-
virtual void minimize(const LinearExpr &expr) override#
Set objective to minimize.
-
virtual void maximize(const LinearExpr &expr) override#
Set objective to maximize.
-
virtual void minimizeMakespan(const std::vector<IntervalVar> &intervals) override#
Minimize the makespan (max end time of intervals)
-
virtual CPStatus solve(double timeout = 3600.0) override#
Solve the model.
- Parameters:
timeout – Maximum solving time in seconds
- Returns:
Solver status
-
virtual void setHint(const std::vector<std::pair<IntVar, int>> &hints) override#
Provide hints/warm start.
-
virtual void setNumWorkers(int workers) override#
Set number of worker threads.
-
virtual void setRandomSeed(int seed) override#
Set random seed for reproducibility.
-
virtual int getStart(IntervalVar interval) const override#
Get start time of interval in solution.
-
virtual int getEnd(IntervalVar interval) const override#
Get end time of interval in solution.
-
virtual int getDuration(IntervalVar interval) const override#
Get duration of interval in solution.
-
virtual bool isPresent(OptionalIntervalVar interval) const override#
Check if optional interval is present in solution.
-
virtual double getObjectiveValue() const override#
Get objective value of solution.
-
virtual double getObjectiveBound() const override#
Get lower bound on objective.
-
virtual double getSolveTime() const override#
Get solving time in seconds.
-
virtual long long getNumBranches() const override#
Get number of search branches.
-
virtual long long getNumFailures() const override#
Get number of failures/backtracks.
-
virtual void clear() override#
Clear the model (remove all variables and constraints)
Private Members
-
std::vector<XCSP3Variable> variables_#
-
std::vector<XCSP3Interval> intervals_#
-
std::vector<XCSP3Interval> optionalIntervals_#
-
bool isMinimization_ = true#
-
bool solved_ = false#
-
double bestObjective_ = 0.0#
-
double solveTime_ = 0.0#
-
XCSP3Backend()#
-
struct XCSP3Interval#
- #include <XCSP3Backend.hpp>
-
class XCSP3Solver : public routing::ISolver#
- #include <XCSP3Solver.hpp>
XCSP3-based solver.
Public Functions
-
~XCSP3Solver() override = default#
-
inline virtual void setConfiguration(Configuration *config) override#
Set solver configuration.
-
inline void setVerbose(bool verbose)#
-
inline void addGenerator(std::unique_ptr<ICPConstraintGenerator> generator)#
-
inline virtual void setDefaultConfiguration() override#
Set default configuration.
-
inline virtual bool solve(double timeout) override#
Solve the problem.
-
inline virtual double getObjectiveValue() const override#
Get the objective value of the best solution.
-
inline virtual bool isOptimal() const override#
Check if the problem was solved to optimality.
Private Members
-
double objectiveValue_#
-
double timeout_#
-
int numWorkers_#
-
bool verbose_#
-
std::unique_ptr<XCSP3Backend> backend_#
-
std::vector<std::unique_ptr<ICPConstraintGenerator>> customGenerators_#
-
std::vector<std::unique_ptr<ICPConstraintGenerator>> autoGenerators_#
-
generators::CPRoutingGenerator *routingGen_ = nullptr#
-
~XCSP3Solver() override = default#
-
class XCSP3SolverPlugin : public routing::IPlugin#
- #include <XCSP3SolverPlugin.hpp>
Public Functions
-
inline virtual PluginType type() const override#
Get the plugin type.
-
inline virtual void initialize(PluginRegistry ®istry) override#
Initialize the plugin and register components.
-
inline virtual PluginType type() const override#
-
struct XCSP3Variable#
- #include <XCSP3Backend.hpp>
-
namespace IloCplex#
-
namespace routing#
Typedefs
-
using ImprovementCallback = std::function<void(Solution*, double)>#
Callback type for solution improvement notifications Parameters: solution pointer, objective value
-
typedef int Demand#
-
typedef double Capacity#
-
typedef int DeliveryDemand#
-
typedef int PickupDemand#
-
typedef double Profit#
-
typedef double Duration#
-
using ImprovementCallback = std::function<void(Solution*, double)>#
-
namespace attributes#
-
namespace callback#
-
namespace constraints#
-
namespace cp#
Typedefs
-
using CPBackendFactory = std::function<std::unique_ptr<ICPBackend>()>#
Factory function type for creating CP backends.
Enums
Functions
-
inline LinearExpr operator+(IntVar a, IntVar b)#
-
inline LinearExpr operator+(IntVar var, int constant)#
-
inline LinearExpr operator-(IntVar a, IntVar b)#
-
inline LinearExpr operator*(IntVar var, int coeff)#
-
inline LinearExpr operator*(int coeff, IntVar var)#
-
using CPBackendFactory = std::function<std::unique_ptr<ICPBackend>()>#
-
namespace generators#
-
namespace evaluators#
-
namespace mip#
Typedefs
-
using MIPBackendFactory = std::function<std::unique_ptr<IMIPBackend>()>#
Factory function type for creating MIP backends.
Enums
-
enum class Sense#
Constraint sense for linear constraints.
Values:
-
enumerator LessEqual#
-
enumerator Equal#
-
enumerator GreaterEqual#
-
enumerator LessEqual#
-
enum class MIPStatus#
Solver status after solving.
Values:
-
enumerator Unknown#
-
enumerator Optimal#
-
enumerator Feasible#
-
enumerator Infeasible#
-
enumerator InfeasibleOrUnbounded#
-
enumerator Unbounded#
-
enumerator NodeLimit#
-
enumerator TimeLimit#
-
enumerator SolutionLimit#
-
enumerator Error#
-
enumerator Unknown#
Functions
-
inline LinearExpr operator+(Var a, Var b)#
-
inline LinearExpr operator+(Var var, double constant)#
-
inline LinearExpr operator+(double constant, Var var)#
-
inline LinearExpr operator-(Var a, Var b)#
-
inline LinearExpr operator*(Var var, double coeff)#
-
inline LinearExpr operator*(double coeff, Var var)#
-
using MIPBackendFactory = std::function<std::unique_ptr<IMIPBackend>()>#
-
namespace generators#
-
namespace models#
-
namespace solomon_detail#
-
namespace tsplib_detail#
-
namespace std#
- file CPTypes.hpp
- #include <vector>#include <limits>
- file GeneratorRegistry.hpp
- #include “core/interfaces/ICPConstraintGenerator.hpp”#include “core/interfaces/IMIPConstraintGenerator.hpp”#include <functional>#include <memory>#include <vector>#include <map>#include <string>#include <algorithm>
- file IAttribute.hpp
- #include <memory>#include <string>#include <type_traits>#include <typeindex>
- file IConstraintGenerator.hpp
- #include “core/interfaces/IAttribute.hpp”#include <vector>#include <set>#include <string>
- file ICPBackend.hpp
- #include “core/cp/CPTypes.hpp”#include <string>#include <vector>#include <memory>#include <functional>#include <limits>
- file ICPConstraintGenerator.hpp
- #include “core/interfaces/ICPBackend.hpp”#include “core/interfaces/IAttribute.hpp”#include <string>#include <vector>#include <typeindex>#include <set>
- file IEvaluator.hpp
- #include “core/interfaces/IAttribute.hpp”#include <set>#include <string>#include <vector>
- file IMIPBackend.hpp
- #include “core/mip/MIPTypes.hpp”#include <string>#include <vector>#include <memory>#include <functional>#include <limits>
- file IMIPConstraintGenerator.hpp
- #include “core/interfaces/IMIPBackend.hpp”#include “core/interfaces/IAttribute.hpp”#include <string>#include <vector>#include <typeindex>#include <set>
- file INeighborhood.hpp
- #include <optional>#include <string>#include <vector>
- file IReader.hpp
- #include <string>#include <vector>
- file ISolver.hpp
- #include <string>#include <functional>
- file IPlugin.hpp
- #include <memory>#include <string>#include <vector>
Defines
-
ROUTING_REGISTER_PLUGIN(PluginClass)#
Macro for static plugin registration.
-
ROUTING_REGISTER_PLUGIN(PluginClass)#
- file MIPTypes.hpp
- #include <vector>#include <limits>#include <string>
- file PluginRegistry.hpp
- #include “IPlugin.hpp”#include “core/interfaces/ISolver.hpp”#include “core/interfaces/INeighborhood.hpp”#include “core/interfaces/IReader.hpp”#include “core/interfaces/IConstraintGenerator.hpp”#include “core/interfaces/IEvaluator.hpp”#include “core/interfaces/IMIPBackend.hpp”#include “core/interfaces/ICPBackend.hpp”#include “core/interfaces/ICPConstraintGenerator.hpp”#include “core/interfaces/IMIPConstraintGenerator.hpp”#include <algorithm>#include <functional>#include <iostream>#include <map>#include <memory>#include <set>#include <stdexcept>#include <string>#include <utility>#include <vector>
- file Problem.hpp
- file Problem.hpp
- #include “Entity.hpp”#include “Memory.hpp”#include “core/PluginRegistry.hpp”#include “core/interfaces/IConstraintGenerator.hpp”#include “core/interfaces/IEvaluator.hpp”#include “plugins/attributes/RoutingPlugin/GeoNode.hpp”#include <set>#include <vector>#include <memory>#include <algorithm>#include <iostream>#include <string>#include “Solution.hpp”
- file Solution.hpp
- file Solution.hpp
- #include “Model.hpp”#include “models/Tour.hpp”#include “Entity.hpp”#include <vector>#include <iostream>#include <algorithm>#include <cassert>
- file CapacityConstraintGenerator.hpp
- #include “core/interfaces/IConstraintGenerator.hpp”#include “plugins/attributes/CapacityPlugin/Stock.hpp”
- file CapacityEvaluator.hpp
- #include “core/interfaces/IEvaluator.hpp”#include “plugins/attributes/CapacityPlugin/Stock.hpp”#include <cmath>#include <limits>#include <typeindex>#include <vector>
- file CapacityPlugin.hpp
- #include “core/IPlugin.hpp”#include “core/PluginRegistry.hpp”#include “plugins/attributes/CapacityPlugin/Stock.hpp”
- file Consumer.hpp
- #include “core/interfaces/IAttribute.hpp”#include <memory>
- file CPCapacityGenerator.hpp
- #include “core/interfaces/ICPConstraintGenerator.hpp”#include “plugins/attributes/CapacityPlugin/Stock.hpp”
- file MIPCapacityGenerator.hpp
- #include “core/interfaces/IMIPConstraintGenerator.hpp”#include “plugins/attributes/CapacityPlugin/Stock.hpp”#include <vector>#include <algorithm>
- file Stock.hpp
- #include “core/interfaces/IAttribute.hpp”#include <memory>
- file InsertionCost.hpp
- #include “plugins/attributes/RoutingPlugin/GeoNode.hpp”
- file RemoveCost.hpp
- #include “plugins/attributes/RoutingPlugin/GeoNode.hpp”
- file ComposableCorePlugin.hpp
- #include “core/IPlugin.hpp”#include “core/PluginRegistry.hpp”#include “Entity.hpp”#include “Problem.hpp”#include “Solution.hpp”
- file Entity.hpp
- #include “Model.hpp”#include “core/interfaces/IAttribute.hpp”#include “models/Client.hpp”#include “models/Vehicle.hpp”#include “models/Depot.hpp”#include <map>#include <set>#include <memory>#include <stdexcept>#include <typeindex>#include <utility>#include <iostream>#include <cstring>
- file Memory.hpp
- #include <map>#include <utility>
- file Model.hpp
- #include <string>
- file Client.hpp
- file Depot.hpp
- file Tour.hpp
-
#include “Client.hpp”
- file Vehicle.hpp
- file Delivery.hpp
- #include “core/interfaces/IAttribute.hpp”#include <memory>
- file Pickup.hpp
- #include “core/interfaces/IAttribute.hpp”#include <memory>
- file PickupDeliveryConstraintGenerator.hpp
- #include “core/interfaces/IConstraintGenerator.hpp”#include “plugins/attributes/CapacityPlugin/Stock.hpp”
- file PickupDeliveryPlugin.hpp
- #include “core/IPlugin.hpp”#include “core/PluginRegistry.hpp”
- file Profiter.hpp
- #include “core/interfaces/IAttribute.hpp”#include <memory>
- file ProfitObjectiveGenerator.hpp
- #include “core/interfaces/IConstraintGenerator.hpp”#include “plugins/attributes/ProfitPlugin/Profiter.hpp”
- file ProfitPlugin.hpp
- #include “core/IPlugin.hpp”#include “core/PluginRegistry.hpp”
- file CPRoutingGenerator.hpp
- #include “core/interfaces/ICPConstraintGenerator.hpp”#include “plugins/attributes/RoutingPlugin/GeoNode.hpp”#include <cmath>#include <unordered_map>
- file GeoNode.hpp
- #include “core/interfaces/IAttribute.hpp”#include <memory>#include <cmath>
- file MIPRoutingGenerator.hpp
- #include “core/interfaces/IMIPConstraintGenerator.hpp”#include “plugins/attributes/RoutingPlugin/GeoNode.hpp”#include <vector>#include <cmath>
- file RoutingConstraintGenerator.hpp
- #include “core/interfaces/IConstraintGenerator.hpp”#include “plugins/attributes/RoutingPlugin/GeoNode.hpp”
- file RoutingEvaluator.hpp
- #include “core/interfaces/IEvaluator.hpp”#include “plugins/attributes/RoutingPlugin/GeoNode.hpp”#include <typeindex>#include <vector>
- file RoutingPlugin.hpp
- #include “core/IPlugin.hpp”#include “core/PluginRegistry.hpp”#include “plugins/attributes/RoutingPlugin/GeoNode.hpp”
- file SyncConstraintGenerator.hpp
- #include “core/interfaces/IConstraintGenerator.hpp”#include “plugins/attributes/SyncPlugin/Synced.hpp”
- file Synced.hpp
- #include “core/interfaces/IAttribute.hpp”#include <vector>#include <memory>
- file SyncPlugin.hpp
- #include “core/IPlugin.hpp”#include “core/PluginRegistry.hpp”
- file Appointment.hpp
- #include “core/interfaces/IAttribute.hpp”#include “Rendezvous.hpp”#include <memory>
- file CPTimeWindowGenerator.hpp
- #include “core/interfaces/ICPConstraintGenerator.hpp”#include “plugins/attributes/RoutingPlugin/GeoNode.hpp”#include <cmath>
- file MIPTimeWindowGenerator.hpp
- #include “core/interfaces/IMIPConstraintGenerator.hpp”#include “plugins/attributes/RoutingPlugin/GeoNode.hpp”#include <vector>#include <limits>
- file Rendezvous.hpp
- #include “core/interfaces/IAttribute.hpp”#include “ServiceQuery.hpp”#include <memory>#include <utility>
- file Service.hpp
- #include “core/interfaces/IAttribute.hpp”#include “ServiceQuery.hpp”#include <memory>
- file ServiceQuery.hpp
- #include “core/interfaces/IAttribute.hpp”#include “plugins/attributes/RoutingPlugin/GeoNode.hpp”#include <memory>
- file SoftTimeWindowGenerator.hpp
- #include “core/interfaces/IConstraintGenerator.hpp”
- file SoftTimeWindows.hpp
- #include “core/interfaces/IAttribute.hpp”#include <memory>
- file TimeWindowConstraintGenerator.hpp
- #include “core/interfaces/IConstraintGenerator.hpp”#include “plugins/attributes/RoutingPlugin/GeoNode.hpp”
- file TimeWindowEvaluator.hpp
- #include “core/interfaces/IEvaluator.hpp”#include <algorithm>#include <typeindex>#include <vector>
- file TimeWindowPlugin.hpp
- #include “core/IPlugin.hpp”#include “core/PluginRegistry.hpp”
- file IDCH.hpp
-
#include <cassert>
- file IDCHPlugin.hpp
- #include “core/IPlugin.hpp”#include “core/PluginRegistry.hpp”#include “core/interfaces/INeighborhood.hpp”#include “plugins/neighborhoods/IDCHPlugin/IDCH.hpp”#include <memory>#include <optional>
- file Move.hpp
-
#include “Neighborhood.hpp”#include <cassert>
- file Neighborhood.hpp
- file TwoOpt.hpp
-
#include <cassert>#include <utility>
- file TwoOptPlugin.hpp
- #include “core/IPlugin.hpp”#include “core/PluginRegistry.hpp”#include “core/interfaces/INeighborhood.hpp”#include <optional>
- file PluginBundle.cpp
- #include “plugins/PluginBundle.hpp”#include “core/PluginRegistry.hpp”
- file PluginBundle.hpp
-
#include “plugins/attributes/SyncPlugin/SyncPlugin.hpp”
- file Reader.hpp
-
#include <sstream>
- file SolomonReaderPlugin.hpp
- #include “core/IPlugin.hpp”#include “core/PluginRegistry.hpp”#include “core/interfaces/IReader.hpp”#include “plugins/attributes/RoutingPlugin/GeoNode.hpp”#include “plugins/attributes/CapacityPlugin/Stock.hpp”#include <algorithm>#include <cctype>#include <fstream>#include <sstream>#include <string>#include <vector>#include <stdexcept>
- file TSPLIBReaderPlugin.hpp
- #include “core/IPlugin.hpp”#include “core/PluginRegistry.hpp”#include “core/interfaces/IReader.hpp”#include “plugins/attributes/RoutingPlugin/GeoNode.hpp”#include “plugins/attributes/CapacityPlugin/Stock.hpp”#include <algorithm>#include <cctype>#include <fstream>#include <sstream>#include <string>#include <vector>#include <stdexcept>#include <cmath>#include <map>
- file CPOptimizerBackend.hpp
- #include “core/interfaces/ICPBackend.hpp”#include <stdexcept>#include <unordered_map>
- file CPSolver.hpp
- #include “core/interfaces/ISolver.hpp”#include “core/interfaces/ICPBackend.hpp”#include “core/interfaces/ICPConstraintGenerator.hpp”#include “core/PluginRegistry.hpp”#include “CPOptimizerBackend.hpp”#include “ORToolsCPSATBackend.hpp”#include <memory>#include <vector>#include <algorithm>#include <iostream>
- file CPSolverPlugin.hpp
- #include “core/IPlugin.hpp”#include “core/PluginRegistry.hpp”#include “CPSolver.hpp”
- file ORToolsCPSATBackend.hpp
- #include “core/interfaces/ICPBackend.hpp”#include <stdexcept>#include <unordered_map>#include <chrono>#include <algorithm>
- file GASolver.hpp
- #include “plugins/solvers/SolverCorePlugin/Solver.hpp”#include “core/interfaces/IEvaluator.hpp”#include <cassert>#include <algorithm>#include <chrono>#include <functional>#include <set>#include <limits>#include <sstream>#include <iomanip>#include <utility>
- file GASolverPlugin.hpp
- #include “core/IPlugin.hpp”#include “core/PluginRegistry.hpp”#include “core/interfaces/ISolver.hpp”#include “plugins/solvers/GASolverPlugin/GASolver.hpp”
- file LSSolver.hpp
- #include “plugins/solvers/SolverCorePlugin/Solver.hpp”#include <cassert>
- file LSSolverPlugin.hpp
- #include “core/IPlugin.hpp”#include “core/PluginRegistry.hpp”#include “core/interfaces/ISolver.hpp”#include “plugins/solvers/LSSolverPlugin/LSSolver.hpp”#include <vector>
- file MASolver.hpp
- #include “plugins/solvers/GASolverPlugin/GASolver.hpp”#include “plugins/solvers/SolverCorePlugin/Solver.hpp”#include “plugins/neighborhoods/IDCHPlugin/IDCH.hpp”#include <cassert>#include <algorithm>#include <set>
- file MASolverPlugin.hpp
- #include “core/IPlugin.hpp”#include “core/PluginRegistry.hpp”#include “core/interfaces/ISolver.hpp”#include “plugins/solvers/MASolverPlugin/MASolver.hpp”#include <vector>
- file callbacks.hpp
- file HeuristicCallback.hpp
- #include <ilcplex/ilocplexi.h>#include <utility>
- file IncumbentCallback.hpp
- #include <ilcplex/ilocplexi.h>
- file InformationCallback.hpp
- #include <ilcplex/ilocplexi.h>
- file LazyConstraintCallback.hpp
- #include <ilcplex/ilocplexi.h>
- file UserCutCallback.hpp
- #include <ilcplex/ilocplexi.h>
- file CPLEXMIPBackend.hpp
- #include “core/interfaces/IMIPBackend.hpp”#include <stdexcept>#include <cmath>
- file HiGHSMIPBackend.hpp
- #include “core/interfaces/IMIPBackend.hpp”#include <stdexcept>#include <cmath>#include <algorithm>
- file MIPSolver.hpp
- #include “core/interfaces/ISolver.hpp”#include “core/interfaces/IMIPBackend.hpp”#include “core/interfaces/IMIPConstraintGenerator.hpp”#include “core/PluginRegistry.hpp”#include “CPLEXMIPBackend.hpp”#include “HiGHSMIPBackend.hpp”#include <memory>#include <vector>#include <iostream>#include <sstream>#include <typeindex>
- file MIPSolverPlugin.hpp
- #include “core/IPlugin.hpp”#include “core/PluginRegistry.hpp”#include “core/interfaces/ISolver.hpp”#include “core/interfaces/IMIPBackend.hpp”#include “MIPSolver.hpp”#include “CPLEXMIPBackend.hpp”#include “HiGHSMIPBackend.hpp”
- file Constructor.hpp
- file Decoder.hpp
- file Destructor.hpp
- file Diver.hpp
- #include <map>
- file Generator.hpp
- #include <random>#include “Destructor.hpp”#include “Constructor.hpp”
- file GreedyConstructor.hpp
- #include “Constructor.hpp”#include <algorithm>#include <limits>#include <vector>
- file RandomDestructor.hpp
- #include “Destructor.hpp”#include <algorithm>#include <random>#include <utility>#include <vector>
- file PSOSolver.hpp
- #include “plugins/solvers/MASolverPlugin/MASolver.hpp”#include “plugins/solvers/SolverCorePlugin/Solver.hpp”#include <cassert>#include <algorithm>#include <set>#include <map>
- file PSOSolverPlugin.hpp
- #include “core/IPlugin.hpp”#include “core/PluginRegistry.hpp”#include “core/interfaces/ISolver.hpp”#include <vector>
- file Configuration.hpp
- #include <map>#include <string>#include <exception>#include <utility>
- file Solver.hpp
-
#include “core/interfaces/ISolver.hpp”#include “Configuration.hpp”#include <filesystem>#include <fstream>#include <iostream>
- file VNSSolver.hpp
- #include “plugins/solvers/SolverCorePlugin/Solver.hpp”#include <cassert>
- file VNSSolverPlugin.hpp
- #include “core/IPlugin.hpp”#include “core/PluginRegistry.hpp”#include “core/interfaces/ISolver.hpp”
- file XCSP3Backend.cpp
- #include “XCSP3Backend.hpp”#include <fstream>#include <iostream>#include <algorithm>#include <cstdio>#include <cstdlib>#include <filesystem>#include <regex>
- file XCSP3Backend.hpp
- #include “core/interfaces/ICPBackend.hpp”#include <map>#include <sstream>#include <variant>
- file XCSP3Solver.hpp
- #include “core/interfaces/ISolver.hpp”#include “core/interfaces/ICPBackend.hpp”#include “core/interfaces/ICPConstraintGenerator.hpp”#include “XCSP3Backend.hpp”#include <memory>#include <vector>#include <algorithm>#include <iostream>
- file XCSP3SolverPlugin.hpp
- #include “core/IPlugin.hpp”#include “core/PluginRegistry.hpp”#include “XCSP3Solver.hpp”
- file routing.hpp
- dir plugins/attributes
- dir plugins/attributes/ComposableCorePlugin/attributes
- dir plugins/solvers/MIPSolverPlugin/callbacks
- dir plugins/attributes/CapacityPlugin
- dir plugins/attributes/ComposableCorePlugin
- dir core
- dir core/src/core
- dir core/src/core/cp
- dir plugins/solvers/CPSolverPlugin
- dir plugins/solvers/GASolverPlugin
- dir plugins/neighborhoods/IDCHPlugin
- dir core/src/core/interfaces
- dir plugins/solvers/LSSolverPlugin
- dir plugins/solvers/MASolverPlugin
- dir core/src/core/mip
- dir plugins/solvers/MIPSolverPlugin
- dir plugins/attributes/ComposableCorePlugin/models
- dir plugins/neighborhoods/NeighborhoodCorePlugin
- dir plugins/neighborhoods
- dir plugins/solvers/OperatorsPlugin/operators
- dir plugins/solvers/OperatorsPlugin
- dir plugins/attributes/PickupDeliveryPlugin
- dir plugins
- dir plugins/attributes/ProfitPlugin
- dir plugins/solvers/PSOSolverPlugin
- dir plugins/readers/ReaderCorePlugin
- dir plugins/readers
- dir routing
- dir plugins/attributes/RoutingPlugin
- dir plugins/readers/SolomonReaderPlugin
- dir plugins/solvers/SolverCorePlugin
- dir plugins/solvers
- dir core/src
- dir plugins/attributes/SyncPlugin
- dir plugins/attributes/TimeWindowPlugin
- dir plugins/readers/TSPLIBReaderPlugin
- dir plugins/neighborhoods/TwoOptPlugin
- dir plugins/solvers/VNSSolverPlugin
- dir plugins/solvers/XCSP3SolverPlugin