from ortools.sat.python import cp_model
import collections
class SolutionPrinter(cp_model.CpSolverSolutionCallback):
"""Print intermediate solutions."""
def __init__(self, variables):
cp_model.CpSolverSolutionCallback.__init__(self)
self.__variables = variables
self.__num_vars = len(variables)
self.__num_values = len(variables[0])
self.__solution_count = 0
def on_solution_callback(self):
self.__solution_count += 1
for var in range(self.__num_vars):
for value in range(self.__num_values):
if self.BooleanValue(self.__variables[var][value]):
print('var[%i]=%i' % (var, value), end=' ')
break
print()
def solution_count(self):
return self.__solution_count
num_vars = 3
max_values = 5
model = cp_model.CpModel()
vars = collections.defaultdict(list)
for var in range(num_vars):
for value in range(max_values + 1):
vars[var].append(model.NewBoolVar('x_%i_%i' % (var, value)))
# Exactly one value per variable
for var in range(num_vars):
model.Add(sum(vars[var]) == 1)
# At least 2 between 2 and 3
model.Add(sum(vars[var][2] for var in range(num_vars)) +
sum(vars[var][3] for var in range(num_vars)) >= 2)
# Enumerate all solutions
solver = cp_model.CpSolver()
solution_printer = SolutionPrinter(vars)
status = solver.SearchForAllSolutions(model, solution_printer)
print('Status = %s' % solver.StatusName(status))
print('Number of solutions found: %i' % solution_printer.solution_count())
假设你有这些条件
然后您可以构建一个值列表,然后应用}来找出问题。例如:
^{pr2}$lambda
、map
和{它当然可以压实为:
输出
^{pr2}$相关问题 更多 >
编程相关推荐