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:
EnumModeling 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,WarmstartMixinCP-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,WarmstartMixinCP-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
- 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
- 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,WarmstartMixinScheduling-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
- 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:
SolverDOGreedy 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:
EnumGreedy 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,GurobiMilpSolverGurobi-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,OrtoolsMathOptMilpSolverMathOpt-based MILP solver for capacitated multi-item lot sizing.