From 77ffc2abb28b2bb069ddbdd5bdb36cee9c3622cd Mon Sep 17 00:00:00 2001 From: Laurent Perron Date: Tue, 6 Nov 2018 08:44:56 +0100 Subject: [PATCH] fix #911, rewrite example to use CP-SAT --- examples/python/diet1.py | 53 +++++++++++++++++----------------------- 1 file changed, 22 insertions(+), 31 deletions(-) diff --git a/examples/python/diet1.py b/examples/python/diet1.py index 65dfb39b74..6966d01fd7 100644 --- a/examples/python/diet1.py +++ b/examples/python/diet1.py @@ -44,12 +44,12 @@ http://www.hakank.org/google_or_tools/ """ from __future__ import print_function -from ortools.constraint_solver import pywrapcp +from ortools.sat.python import cp_model def main(unused_argv): # Create the solver. - solver = pywrapcp.Solver("Diet") + model = cp_model.CpModel() # # data @@ -67,43 +67,34 @@ def main(unused_argv): # # declare variables # - x = [solver.IntVar(0, 100, "x%d" % i) for i in range(n)] - cost = solver.IntVar(0, 10000, "cost") + x = [model.NewIntVar(0, 100, "x%d" % i) for i in range(n)] + cost = model.NewIntVar(0, 10000, "cost") # # constraints # - solver.Add(solver.Sum([x[i] * calories[i] for i in range(n)]) >= limits[0]) - solver.Add(solver.Sum([x[i] * chocolate[i] for i in range(n)]) >= limits[1]) - solver.Add(solver.Sum([x[i] * sugar[i] for i in range(n)]) >= limits[2]) - solver.Add(solver.Sum([x[i] * fat[i] for i in range(n)]) >= limits[3]) + model.Add(sum(x[i] * calories[i] for i in range(n)) >= limits[0]) + model.Add(sum(x[i] * chocolate[i] for i in range(n)) >= limits[1]) + model.Add(sum(x[i] * sugar[i] for i in range(n)) >= limits[2]) + model.Add(sum(x[i] * fat[i] for i in range(n)) >= limits[3]) # objective - objective = solver.Minimize(cost, 1) + model.Minimize(cost) - # - # solution - # - solution = solver.Assignment() - solution.AddObjective(cost) - solution.Add(x) + # Solve model. + solver = cp_model.CpSolver() + status = solver.Solve(model) - # last solution since it's a minimization problem - collector = solver.LastSolutionCollector(solution) - search_log = solver.SearchLog(100, cost) - solver.Solve( - solver.Phase(x + [cost], solver.INT_VAR_SIMPLE, solver.ASSIGN_MIN_VALUE), - [objective, search_log, collector]) - - # get the first (and only) solution - - print("cost:", collector.ObjectiveValue(0)) - print([("abcdefghij" [i], collector.Value(0, x[i])) for i in range(n)]) - print() - print("failures:", solver.Failures()) - print("branches:", solver.Branches()) - print("WallTime:", solver.WallTime()) - print() + # Output solution. + if status == cp_model.OPTIMAL: + print("cost:", solver.ObjectiveValue()) + print([("abcdefghij" [i], solver.Value(x[i])) for i in range(n)]) + print() + print(' - status : %s' % solver.StatusName(status)) + print(' - conflicts : %i' % solver.NumConflicts()) + print(' - branches : %i' % solver.NumBranches()) + print(' - wall time : %f ms' % solver.WallTime()) + print() if __name__ == "__main__":