discrete_optimization.lotsizing.capacitatedmultiitem.solvers package

Submodules

discrete_optimization.lotsizing.capacitatedmultiitem.solvers.cpsat module

CP-SAT solvers for capacitated multi-item lot sizing problem.

class discrete_optimization.lotsizing.capacitatedmultiitem.solvers.cpsat.ChangeoverModel(*values)[source]

Bases: Enum

Modeling approach for changeover costs in CP-SAT solver.

SHORTEST_PATH_BASED = 'shortest_path_based'
STATE_BASED = 'state_based'
class discrete_optimization.lotsizing.capacitatedmultiitem.solvers.cpsat.CpSatCapacitatedLotSizingSolver(problem: Problem, params_objective_function: ParamsObjectiveFunction | None = None, **kwargs: Any)[source]

Bases: OrtoolsCpSatSolver, WarmstartMixin

CP-SAT solver for capacitated multi-item lot sizing.

Supports multiple changeover cost encodings: - STATE_BASED: Track last produced item using element constraints - TRANSITION_BASED: Model explicit transitions between production events - SHORTEST_PATH_BASED: Model as shortest path through production sequence

Supports warm-start from existing solutions.

hyperparameters: list[Hyperparameter] = [EnumHyperparameter(name='changeover_model', default=<ChangeoverModel.STATE_BASED: 'state_based'>, depends_on=None, name_in_kwargs='changeover_model')]

Hyperparameters available for this solver.

These hyperparameters are to be feed to **kwargs found in
  • __init__()

  • init_model() (when available)

  • solve()

init_model(**kwargs: Any) None[source]

Initialize the CP-SAT model.

Parameters:
  • changeover_model – How to model changeover costs (default: STATE_BASED)

  • **kwargs – Additional parameters passed to parent class

problem: CapacitatedMultiItemLSP
retrieve_solution(cpsolvercb: CpSolverSolutionCallback) CapacitatedMultiItemSolution[source]

Extract solution from CP-SAT solver.

set_warm_start(solution: CapacitatedMultiItemSolution) None[source]

Set warm-start hints from a solution.

Parameters:

solution – A solution to use as warm-start

variables: dict

discrete_optimization.lotsizing.capacitatedmultiitem.solvers.cpsat_scheduling module

CP-SAT scheduling solver for capacitated multi-item lot sizing problem.

class discrete_optimization.lotsizing.capacitatedmultiitem.solvers.cpsat_scheduling.CpSatSchedulingCapacitatedLotSizing(problem: Problem, params_objective_function: ParamsObjectiveFunction | None = None, **kwargs: Any)[source]

Bases: OrtoolsCpSatSolver, WarmstartMixin

CP-SAT scheduling solver for capacitated multi-item lot sizing.

Uses interval variables to model production events: - One interval for each demand occurrence - NoOverlap constraint ensures at most one production per period - Circuit constraint models changeover costs between consecutive productions - Stock cost computed as (deadline - production_time) per demand

Based on the original scheduling solver approach.

deadlines: dict
init_model(**kwargs: Any) None[source]

Initialize the CP-SAT scheduling model.

problem: CapacitatedMultiItemLSP
retrieve_solution(cpsolvercb: CpSolverSolutionCallback) CapacitatedMultiItemSolution[source]

Extract solution from CP-SAT solver.

set_warm_start(solution: CapacitatedMultiItemSolution) None[source]

Set warm-start hints from a solution.

Parameters:

solution – A solution to use as warm-start

variables: dict

discrete_optimization.lotsizing.capacitatedmultiitem.solvers.dp module

Dynamic programming solvers for capacitated multi-item lot sizing problem.

class discrete_optimization.lotsizing.capacitatedmultiitem.solvers.dp.DpCapacitatedLotSizingSolver(problem: CapacitatedMultiItemLSP, params_objective_function: ParamsObjectiveFunction | None = None, **kwargs)[source]

Bases: DpSolver, WarmstartMixin

hyperparameters: list[Hyperparameter] = [CategoricalHyperparameter(name='relax_delays', default=False, depends_on=None, name_in_kwargs='relax_delays'), CategoricalHyperparameter(name='use_lookahead_constraints', default=False, depends_on=None, name_in_kwargs='use_lookahead_constraints'), IntegerHyperparameter(name='lookahead_window', default=5, depends_on=[('use_lookahead_constraints', True)], name_in_kwargs='lookahead_window', low=1, high=20, step=1, log=False), CategoricalHyperparameter(name='use_flexibility_delays', default=False, depends_on=None, name_in_kwargs='use_flexibility_delays'), IntegerHyperparameter(name='flexibility_delta', default=2, depends_on=[('use_flexibility_delays', True)], name_in_kwargs='flexibility_delta', low=0, high=30, step=1, log=False)]

Hyperparameters available for this solver.

These hyperparameters are to be feed to **kwargs found in
  • __init__()

  • init_model() (when available)

  • solve()

init_model(**kwargs: Any) None[source]

Initialize internal model used to solve.

Can initialize a ortools, milp, gurobi, … model.

problem: CapacitatedMultiItemLSP
retrieve_solution(sol: Solution) Solution[source]
set_warm_start(solution: CapacitatedMultiItemSolution) None[source]

Convert a CapacitatedMultiItemSolution to a sequence of DP transitions for warmstart.

The DP model expects transitions in a specific order: - For each timestep: production(s), delivery(ies), advance_in_time - Final timestep: production(s), delivery(ies), finish

transition_objects: dict
transitions: dict
variables: dict
class discrete_optimization.lotsizing.capacitatedmultiitem.solvers.dp.DpSchedCapacitatedLotSizingSolver(problem: CapacitatedMultiItemLSP, params_objective_function: ParamsObjectiveFunction = None, **kwargs)[source]

Bases: DpSolver, WarmstartMixin

Scheduling-based DP solver for capacitated multi-item lot sizing.

This solver models the problem as scheduling demand occurrences, where each demand is a task with a deadline.

hyperparameters: list[Hyperparameter] = [CategoricalHyperparameter(name='relax_delays', default=False, depends_on=None, name_in_kwargs='relax_delays'), CategoricalHyperparameter(name='use_lookahead_constraints', default=False, depends_on=None, name_in_kwargs='use_lookahead_constraints'), IntegerHyperparameter(name='lookahead_window', default=5, depends_on=[('use_lookahead_constraints', True)], name_in_kwargs='lookahead_window', low=1, high=20, step=1, log=False), CategoricalHyperparameter(name='use_flexibility_delays', default=False, depends_on=None, name_in_kwargs='use_flexibility_delays'), IntegerHyperparameter(name='flexibility_delta', default=2, depends_on=[('use_flexibility_delays', True)], name_in_kwargs='flexibility_delta', low=0, high=30, step=1, log=False)]

Hyperparameters available for this solver.

These hyperparameters are to be feed to **kwargs found in
  • __init__()

  • init_model() (when available)

  • solve()

init_model(**kwargs: Any) None[source]

Initialize internal model used to solve.

Can initialize a ortools, milp, gurobi, … model.

problem: CapacitatedMultiItemLSP
retrieve_solution(sol: Solution) Solution[source]
set_warm_start(solution: CapacitatedMultiItemSolution) None[source]

Convert a CapacitatedMultiItemSolution to a sequence of DP transitions for warmstart.

DpSchedLotSizingSolver uses a scheduling-based DP model where: - Each demand occurrence is a task with a deadline - Transitions are produce_{i} where i is the index into all_items list - advance_in_time is used for idle periods - No deliver or finish transitions

transition_objects: dict
transitions: dict
variables: dict

discrete_optimization.lotsizing.capacitatedmultiitem.solvers.greedy module

Greedy solver for capacitated multi-item lot sizing problem.

class discrete_optimization.lotsizing.capacitatedmultiitem.solvers.greedy.GreedyLotSizingSolver(problem: Problem, params_objective_function: ParamsObjectiveFunction | None = None, **kwargs: Any)[source]

Bases: SolverDO

Greedy solver for capacitated multi-item lot sizing problems.

This solver provides various greedy heuristics for constructing initial solutions. These solutions can be used as starting points for local search or other metaheuristic methods.

Hyperparameters:

strategy: The greedy strategy to use for constructing the solution

Example

solver = GreedyLotSizingSolver(problem) result = solver.solve(strategy=GreedyStrategy.BALANCED)

hyperparameters: list[Hyperparameter] = [EnumHyperparameter(name='strategy', default=<GreedyStrategy.BALANCED: 'balanced'>, depends_on=None, name_in_kwargs='strategy')]

Hyperparameters available for this solver.

These hyperparameters are to be feed to **kwargs found in
  • __init__()

  • init_model() (when available)

  • solve()

problem: CapacitatedMultiItemLSP
solve(callbacks: list[Callback] | None = None, **kwargs: Any) ResultStorage[source]

Solve the problem using a greedy strategy.

class discrete_optimization.lotsizing.capacitatedmultiitem.solvers.greedy.GreedyStrategy(*values)[source]

Bases: Enum

Greedy strategy for lot sizing problem.

  • EARLIEST_DEMAND_FIRST: Produce items to satisfy earliest unmet demands

  • MINIMUM_CHANGEOVER: Batch production of same items to minimize changeover costs

  • JUST_IN_TIME: Produce items as late as possible while meeting demands

  • BALANCED: Balance between changeover costs and stock holding costs

BALANCED = 'balanced'
EARLIEST_DEMAND_FIRST = 'earliest_demand_first'
JUST_IN_TIME = 'just_in_time'
MINIMUM_CHANGEOVER = 'minimum_changeover'
discrete_optimization.lotsizing.capacitatedmultiitem.solvers.greedy.greedy_best(problem: CapacitatedMultiItemLSP) CapacitatedMultiItemSolution[source]

Try all greedy strategies and return the best solution.

Parameters:

problem – The lot sizing problem instance

Returns:

The best solution found among all strategies

discrete_optimization.lotsizing.capacitatedmultiitem.solvers.lp module

MILP solvers for capacitated multi-item lot sizing problem.

class discrete_optimization.lotsizing.capacitatedmultiitem.solvers.lp.GurobiCapacitatedLotSizingSolver(problem: Problem, params_objective_function: ParamsObjectiveFunction | None = None, **kwargs: Any)[source]

Bases: _BaseLpCapacitatedLotSizingSolver, GurobiMilpSolver

Gurobi-based MILP solver for capacitated multi-item lot sizing.

class discrete_optimization.lotsizing.capacitatedmultiitem.solvers.lp.MathOptCapacitatedLotSizingSolver(problem: Problem, params_objective_function: ParamsObjectiveFunction | None = None, **kwargs: Any)[source]

Bases: _BaseLpCapacitatedLotSizingSolver, OrtoolsMathOptMilpSolver

MathOpt-based MILP solver for capacitated multi-item lot sizing.

discrete_optimization.lotsizing.capacitatedmultiitem.solvers.lp_milp module

discrete_optimization.lotsizing.capacitatedmultiitem.solvers.ls module

discrete_optimization.lotsizing.capacitatedmultiitem.solvers.mutation module

discrete_optimization.lotsizing.capacitatedmultiitem.solvers.sa_fast module

discrete_optimization.lotsizing.capacitatedmultiitem.solvers.toulbar module

Module contents