lumix.goal_programming.relaxation.relax_constraint

lumix.goal_programming.relaxation.relax_constraint(constraint, goal_metadata)[source]

Relax a constraint by adding deviation variables.

Transforms the constraint based on its type: - LE (expr <= rhs): expr + neg_dev - pos_dev == rhs (minimize pos_dev) - GE (expr >= rhs): expr + neg_dev - pos_dev == rhs (minimize neg_dev) - EQ (expr == rhs): expr + neg_dev - pos_dev == rhs (minimize both)

Parameters:
Return type:

RelaxedConstraint[TypeVar(TModel)]

Returns:

RelaxedConstraint containing the equality constraint with deviations and the deviation variable families

Raises:

ValueError – If constraint has no LHS expression

Example

>>> goal = LXConstraint[Product]("production_goal")
...     .expression(production_expr)
...     .ge()
...     .rhs(lambda p: p.target)
>>> relaxed = relax_constraint(goal, goal_metadata)
>>> # Now: production_expr + neg_dev - pos_dev == target
>>> # Objective: minimize neg_dev (under-production is bad for GE)