Source code for cpmpy.tools.explain.utils

#!/usr/bin/env python
#-*- coding:utf-8 -*-
##
## utils.py
##
"""
    Utilities for explanation techniques

    =================
    List of functions
    =================

    .. autosummary::
        :nosignatures:

        make_assump_model
"""

import cpmpy as cp
from cpmpy.transformations.normalize import toplevel_list

[docs]def make_assump_model(soft, hard=[], name=None): """ Construct implied version of all soft constraints. Can be used to extract cores (see :func:`tools.mus() <cpmpy.tools.explain.mus.mus>`). Provide name for assumption variables with `name` param. """ # ensure toplevel list soft2 = toplevel_list(soft, merge_and=False) # make assumption variables assump = cp.boolvar(shape=(len(soft2),), name=name) # hard + implied soft constraints hard = toplevel_list(hard) model = cp.Model(hard + [assump.implies(soft2)]) # each assumption variable implies a candidate return model, soft2, assump