128 lines
5.3 KiB
Plaintext
128 lines
5.3 KiB
Plaintext
{
|
|
"cells": [
|
|
{
|
|
"cell_type": "code",
|
|
"execution_count": null,
|
|
"metadata": {},
|
|
"outputs": [],
|
|
"source": [
|
|
"# Copyright 2010 Hakan Kjellerstrand hakank@gmail.com\n",
|
|
"#\n",
|
|
"# Licensed under the Apache License, Version 2.0 (the \"License\");\n",
|
|
"# you may not use this file except in compliance with the License.\n",
|
|
"# You may obtain a copy of the License at\n",
|
|
"#\n",
|
|
"# http://www.apache.org/licenses/LICENSE-2.0\n",
|
|
"#\n",
|
|
"# Unless required by applicable law or agreed to in writing, software\n",
|
|
"# distributed under the License is distributed on an \"AS IS\" BASIS,\n",
|
|
"# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n",
|
|
"# See the License for the specific language governing permissions and\n",
|
|
"# limitations under the License.\n",
|
|
"\"\"\"\n",
|
|
"\n",
|
|
" Eq 20 in Google CP Solver.\n",
|
|
"\n",
|
|
" Standard benchmark problem.\n",
|
|
"\n",
|
|
" Compare with the following models:\n",
|
|
" * Gecode/R: http://hakank.org/gecode_r/eq20.rb\n",
|
|
" * ECLiPSe: http://hakank.org/eclipse/eq20.ecl\n",
|
|
" * SICStus: http://hakank.org/sicstus/eq20.pl\n",
|
|
"\n",
|
|
" This model was created by Hakan Kjellerstrand (hakank@gmail.com)\n",
|
|
" Also see my other Google CP Solver models:\n",
|
|
" http://www.hakank.org/google_or_tools/\n",
|
|
"\"\"\"\n",
|
|
"from __future__ import print_function\n",
|
|
"from ortools.constraint_solver import pywrapcp\n",
|
|
"\n",
|
|
"\n",
|
|
"\n",
|
|
"# Create the solver.\n",
|
|
"solver = pywrapcp.Solver(\"Eq 20\")\n",
|
|
"\n",
|
|
"#\n",
|
|
"# data\n",
|
|
"#\n",
|
|
"n = 7\n",
|
|
"\n",
|
|
"#\n",
|
|
"# variables\n",
|
|
"#\n",
|
|
"X = [solver.IntVar(0, 10, \"X(%i)\" % i) for i in range(n)]\n",
|
|
"X0, X1, X2, X3, X4, X5, X6 = X\n",
|
|
"\n",
|
|
"#\n",
|
|
"# constraints\n",
|
|
"#\n",
|
|
"solver.Add(-76706 * X0 + 98205 * X1 + 23445 * X2 + 67921 * X3 + 24111 * X4 +\n",
|
|
" -48614 * X5 + -41906 * X6 == 821228)\n",
|
|
"solver.Add(87059 * X0 + -29101 * X1 + -5513 * X2 + -21219 * X3 + 22128 * X4 +\n",
|
|
" 7276 * X5 + 57308 * X6 == 22167)\n",
|
|
"solver.Add(-60113 * X0 + 29475 * X1 + 34421 * X2 + -76870 * X3 + 62646 * X4 +\n",
|
|
" 29278 * X5 + -15212 * X6 == 251591)\n",
|
|
"solver.Add(49149 * X0 + 52871 * X1 + -7132 * X2 + 56728 * X3 + -33576 * X4 +\n",
|
|
" -49530 * X5 + -62089 * X6 == 146074)\n",
|
|
"solver.Add(-10343 * X0 + 87758 * X1 + -11782 * X2 + 19346 * X3 + 70072 * X4 +\n",
|
|
" -36991 * X5 + 44529 * X6 == 740061)\n",
|
|
"solver.Add(85176 * X0 + -95332 * X1 + -1268 * X2 + 57898 * X3 + 15883 * X4 +\n",
|
|
" 50547 * X5 + 83287 * X6 == 373854)\n",
|
|
"solver.Add(-85698 * X0 + 29958 * X1 + 57308 * X2 + 48789 * X3 + -78219 * X4 +\n",
|
|
" 4657 * X5 + 34539 * X6 == 249912)\n",
|
|
"solver.Add(-67456 * X0 + 84750 * X1 + -51553 * X2 + 21239 * X3 + 81675 * X4 +\n",
|
|
" -99395 * X5 + -4254 * X6 == 277271)\n",
|
|
"solver.Add(94016 * X0 + -82071 * X1 + 35961 * X2 + 66597 * X3 + -30705 * X4 +\n",
|
|
" -44404 * X5 + -38304 * X6 == 25334)\n",
|
|
"solver.Add(-60301 * X0 + 31227 * X1 + 93951 * X2 + 73889 * X3 + 81526 * X4 +\n",
|
|
" -72702 * X5 + 68026 * X6 == 1410723)\n",
|
|
"solver.Add(-16835 * X0 + 47385 * X1 + 97715 * X2 + -12640 * X3 + 69028 * X4 +\n",
|
|
" 76212 * X5 + -81102 * X6 == 1244857)\n",
|
|
"solver.Add(-43277 * X0 + 43525 * X1 + 92298 * X2 + 58630 * X3 + 92590 * X4 +\n",
|
|
" -9372 * X5 + -60227 * X6 == 1503588)\n",
|
|
"solver.Add(-64919 * X0 + 80460 * X1 + 90840 * X2 + -59624 * X3 + -75542 * X4 +\n",
|
|
" 25145 * X5 + -47935 * X6 == 18465)\n",
|
|
"solver.Add(-45086 * X0 + 51830 * X1 + -4578 * X2 + 96120 * X3 + 21231 * X4 +\n",
|
|
" 97919 * X5 + 65651 * X6 == 1198280)\n",
|
|
"solver.Add(85268 * X0 + 54180 * X1 + -18810 * X2 + -48219 * X3 + 6013 * X4 +\n",
|
|
" 78169 * X5 + -79785 * X6 == 90614)\n",
|
|
"solver.Add(8874 * X0 + -58412 * X1 + 73947 * X2 + 17147 * X3 + 62335 * X4 +\n",
|
|
" 16005 * X5 + 8632 * X6 == 752447)\n",
|
|
"solver.Add(71202 * X0 + -11119 * X1 + 73017 * X2 + -38875 * X3 + -14413 * X4 +\n",
|
|
" -29234 * X5 + 72370 * X6 == 129768)\n",
|
|
"solver.Add(1671 * X0 + -34121 * X1 + 10763 * X2 + 80609 * X3 + 42532 * X4 +\n",
|
|
" 93520 * X5 + -33488 * X6 == 915683)\n",
|
|
"solver.Add(51637 * X0 + 67761 * X1 + 95951 * X2 + 3834 * X3 + -96722 * X4 +\n",
|
|
" 59190 * X5 + 15280 * X6 == 533909)\n",
|
|
"solver.Add(-16105 * X0 + 62397 * X1 + -6704 * X2 + 43340 * X3 + 95100 * X4 +\n",
|
|
" -68610 * X5 + 58301 * X6 == 876370)\n",
|
|
"\n",
|
|
"#\n",
|
|
"# search and result\n",
|
|
"#\n",
|
|
"db = solver.Phase(X, solver.CHOOSE_FIRST_UNBOUND, solver.ASSIGN_MIN_VALUE)\n",
|
|
"\n",
|
|
"solver.NewSearch(db)\n",
|
|
"\n",
|
|
"num_solutions = 0\n",
|
|
"while solver.NextSolution():\n",
|
|
" num_solutions += 1\n",
|
|
" print(\"X:\", [X[i].Value() for i in range(n)])\n",
|
|
" print()\n",
|
|
"\n",
|
|
"solver.EndSearch()\n",
|
|
"\n",
|
|
"print()\n",
|
|
"print(\"num_solutions:\", num_solutions)\n",
|
|
"print(\"failures:\", solver.Failures())\n",
|
|
"print(\"branches:\", solver.Branches())\n",
|
|
"print(\"WallTime:\", solver.WallTime())\n",
|
|
"\n"
|
|
]
|
|
}
|
|
],
|
|
"metadata": {},
|
|
"nbformat": 4,
|
|
"nbformat_minor": 4
|
|
}
|