Skip to content

Precedence constraint

PrecedenceConstraint

Bases: Constraint

Precedence constraint defined in PPC-HLP

Only used in the PPC-HLP model. The PC-HLP model avoids these constraints by merging customers.

Requires:

build(model, **kwargs)

Adds the following constraint to the model:

\[ y_{ij}^z \geq y_{ij}^{z+1} \quad \forall (i,j,z), (i,j,z+1) \in \Gamma_{ij} \]
Source code in src/oracle_paper/constraints/precedence_constraint.py
def build(self, model: "BaseModel", **kwargs):
    r"""
    Adds the following constraint to the model:

    $$
    y_{ij}^z \geq y_{ij}^{z+1} \quad \forall (i,j,z), (i,j,z+1) \in \Gamma_{ij}
    $$

    """
    data = model.data
    y = model.vars[ClientDecisionVariable]

    for (i, j, z) in data[BilevelDataCol.CLIENT_ID_ROUTE]:
        if (i, j, z + 1) in data[BilevelDataCol.CLIENT_ID_ROUTE]:
            model.add_constr(
                y[i, j, z] >= y[i, j, z + 1],
                name=f"precedence_{i}_{j}_{z}_{z + 1}"
            )