Skip to content

Commit

Permalink
Merge branch 'master' into adding-choco
Browse files Browse the repository at this point in the history
  • Loading branch information
Dimosts committed Oct 6, 2023
2 parents fc4c917 + bef513f commit 5125901
Show file tree
Hide file tree
Showing 4 changed files with 20 additions and 2 deletions.
6 changes: 6 additions & 0 deletions cpmpy/solvers/exact.py
Original file line number Diff line number Diff line change
Expand Up @@ -37,6 +37,8 @@
from ..transformations.normalize import toplevel_list
from ..expressions.globalconstraints import DirectConstraint
from ..exceptions import NotSupportedError
from ..expressions.utils import flatlist

import numpy as np
import numbers

Expand Down Expand Up @@ -589,6 +591,10 @@ def solution_hint(self, cpm_vars, vals):
:param cpm_vars: list of CPMpy variables
:param vals: list of (corresponding) values for the variables
"""

cpm_vars = flatlist(cpm_vars)
vals = flatlist(vals)
assert (len(cpm_vars) == len(vals)), "Variables and values must have the same size for hinting"
try:
pkg_resources.require("exact>=1.1.5")
self.xct_solver.setSolutionHints(self.solver_vars(cpm_vars), vals)
Expand Down
6 changes: 5 additions & 1 deletion cpmpy/solvers/ortools.py
Original file line number Diff line number Diff line change
Expand Up @@ -32,7 +32,7 @@
from ..expressions.globalconstraints import DirectConstraint
from ..expressions.variables import _NumVarImpl, _IntVarImpl, _BoolVarImpl, NegBoolView, boolvar
from ..expressions.globalconstraints import GlobalConstraint
from ..expressions.utils import is_num, is_any_list, eval_comparison
from ..expressions.utils import is_num, is_any_list, eval_comparison, flatlist
from ..transformations.decompose_global import decompose_in_tree
from ..transformations.get_variables import get_variables
from ..transformations.flatten_model import flatten_constraint, flatten_objective
Expand Down Expand Up @@ -521,6 +521,10 @@ def solution_hint(self, cpm_vars, vals):
:param vals: list of (corresponding) values for the variables
"""
self.ort_model.ClearHints() # because add just appends

cpm_vars = flatlist(cpm_vars)
vals = flatlist(vals)
assert (len(cpm_vars) == len(vals)), "Variables and values must have the same size for hinting"
for (cpm_var, val) in zip(cpm_vars, vals):
self.ort_model.AddHint(self.solver_var(cpm_var), val)

Expand Down
7 changes: 6 additions & 1 deletion cpmpy/solvers/pysat.py
Original file line number Diff line number Diff line change
Expand Up @@ -34,7 +34,7 @@
from ..expressions.core import Expression, Comparison, Operator, BoolVal
from ..expressions.variables import _BoolVarImpl, NegBoolView, boolvar
from ..expressions.globalconstraints import DirectConstraint
from ..expressions.utils import is_any_list, is_int
from ..expressions.utils import is_int, flatlist
from ..transformations.decompose_global import decompose_in_tree
from ..transformations.get_variables import get_variables
from ..transformations.flatten_model import flatten_constraint
Expand Down Expand Up @@ -316,6 +316,11 @@ def solution_hint(self, cpm_vars, vals):
:param cpm_vars: list of CPMpy variables
:param vals: list of (corresponding) values for the variables
"""

cpm_vars = flatlist(cpm_vars)
vals = flatlist(vals)
assert (len(cpm_vars) == len(vals)), "Variables and values must have the same size for hinting"

literals = []
for (cpm_var, val) in zip(cpm_vars, vals):
lit = self.solver_var(cpm_var)
Expand Down
3 changes: 3 additions & 0 deletions tests/test_solvers_solhint.py
Original file line number Diff line number Diff line change
Expand Up @@ -32,6 +32,9 @@ def test_hints(self):
slv.solution_hint([a,b], [True,True])
self.assertTrue(slv.solve(**args)) # should also work with an UNSAT hint

slv.solution_hint([a,[b]], [[[False]], True]) # check nested lists
self.assertTrue(slv.solve(**args))

except NotSupportedError:
continue

Expand Down

0 comments on commit 5125901

Please sign in to comment.