from ortools.sat.python import cp_model
class VarArraySolutionPrinter(cp_model.CpSolverSolutionCallback):
"""Print intermediate solutions."""
def __init__(self, variables):
cp_model.CpSolverSolutionCallback.__init__(self)
self.__variables = variables
self.__solution_count = 0
def on_solution_callback(self):
self.__solution_count += 1
print(f"---------Solution {self.__solution_count} ------------------")
for i,v in self.__variables.items():
print(i, self.Value(v) )
def solution_count(self):
return self.__solution_count
def main() -> None:
model = cp_model.CpModel()
N = 3
coef = [ 1,2,3]
x = {i:model.NewIntVar(0,3, f"x_{i}") for i in range(N)}
model.Add( sum( coef[i]*x[i] for i in range(N) ) == 6)
solver = cp_model.CpSolver()
#solver.parameters.num_workers = 4
solver.parameters.enumerate_all_solutions = True
solution_printer = VarArraySolutionPrinter(x)
status = solver.solve(model, solution_printer)
model.ExportToFile('simplemodel.txt')
if status == cp_model.OPTIMAL or status == cp_model.FEASIBLE:
print(f"Maximum of objective function: {solver.objective_value}\n")
else:
print("No solution found.")
if __name__ == "__main__":
main()