Source code for discrete_optimization.lotsizing.generic_solver.cpsat.backlog

#  Copyright (c) 2026 AIRBUS and its affiliates.
#  This source code is licensed under the MIT license found in the
#  LICENSE file in the root directory of this source tree.
from discrete_optimization.lotsizing.generic_solver.cpsat.lotsizing_solver_cpsat import (
    Item,
    LotSizingCpSatSolver,
)


[docs] class BacklogConstraintCpsat(LotSizingCpSatSolver[Item]):
[docs] def create_constraint_backlog(self): if not self.problem.is_backlog_allowed(): for item in self.problem.items_list: for t in range(self.problem.horizon): self.cp_model.add(self.get_backlog_var(item=item, period=t) == 0) else: # Formula to define backlog. for item in self.problem.items_list: for t in range(self.problem.horizon): if t == 0: self.cp_model.add( self.get_backlog_var(item=item, period=t) == self.problem.get_demand(item=item, period=t) - self.get_delivery_var(item=item, period=t) ) else: self.cp_model.add( self.get_backlog_var(item=item, period=t) == self.get_backlog_var(item=item, period=t - 1) + self.problem.get_demand(item=item, period=t) - self.get_delivery_var(item=item, period=t) )
[docs] def create_backlog_cost(self): if not self.problem.is_backlog_allowed(): return 0 return sum( [ self.get_backlog_var(item=item, period=t) * int(self.problem.get_backlog_cost_per_unit(item=item, period=t)) for item in self.problem.items_list for t in range(self.problem.horizon) ] )