diff --git a/.gitignore b/.gitignore index fad35df17c..692491ab1a 100644 --- a/.gitignore +++ b/.gitignore @@ -95,8 +95,6 @@ ortools/dotnet/*/bin ortools/dotnet/*/obj ortools/**/samples/bin ortools/**/samples/obj -examples/tests/bin -examples/tests/obj examples/contrib/bin examples/contrib/obj examples/dotnet/bin diff --git a/CMakeLists.txt b/CMakeLists.txt index 40faaae8eb..69bf10b07b 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -470,6 +470,3 @@ endforeach() foreach(EXAMPLES IN ITEMS contrib cpp dotnet java python) add_subdirectory(examples/${EXAMPLES}) endforeach() - -# Add tests in examples/tests -add_subdirectory(examples/tests) diff --git a/README.md b/README.md index eb614890de..344dfd9abc 100644 --- a/README.md +++ b/README.md @@ -84,7 +84,6 @@ This software suite is composed of the following components: * [python](examples/python) Python examples. * [notebook](examples/notebook) Jupyter/IPython notebooks. * [flatzinc](examples/flatzinc) FlatZinc examples. - * [tests](examples/tests) Unit tests and bug reports. * [tools](tools) Delivery Tools (e.g. Windows GNU binaries, scripts, release dockers) ## Installation diff --git a/cmake/vagrant/freebsd/cpp/Vagrantfile b/cmake/vagrant/freebsd/cpp/Vagrantfile index 5440fd949e..7b268a7297 100644 --- a/cmake/vagrant/freebsd/cpp/Vagrantfile +++ b/cmake/vagrant/freebsd/cpp/Vagrantfile @@ -91,7 +91,6 @@ Vagrant.configure("2") do |config| config.vm.provision "file", source: "../../../../examples/dotnet", destination: "$HOME/project/examples/" config.vm.provision "file", source: "../../../../examples/java", destination: "$HOME/project/examples/" config.vm.provision "file", source: "../../../../examples/python", destination: "$HOME/project/examples/" - config.vm.provision "file", source: "../../../../examples/tests", destination: "$HOME/project/examples/" config.vm.provision "file", source: "../../../../patches", destination: "$HOME/project/" config.vm.provision "file", source: "../../../../Version.txt", destination: "$HOME/project/" diff --git a/cmake/vagrant/freebsd/java/Vagrantfile b/cmake/vagrant/freebsd/java/Vagrantfile index fff3664342..308e783fe4 100644 --- a/cmake/vagrant/freebsd/java/Vagrantfile +++ b/cmake/vagrant/freebsd/java/Vagrantfile @@ -94,7 +94,6 @@ Vagrant.configure("2") do |config| config.vm.provision "file", source: "../../../../examples/dotnet", destination: "$HOME/project/examples/" config.vm.provision "file", source: "../../../../examples/java", destination: "$HOME/project/examples/" config.vm.provision "file", source: "../../../../examples/python", destination: "$HOME/project/examples/" - config.vm.provision "file", source: "../../../../examples/tests", destination: "$HOME/project/examples/" config.vm.provision "file", source: "../../../../patches", destination: "$HOME/project/" config.vm.provision "file", source: "../../../../Version.txt", destination: "$HOME/project/" diff --git a/cmake/vagrant/freebsd/python/Vagrantfile b/cmake/vagrant/freebsd/python/Vagrantfile index 7cd93bd1d5..6808ec1427 100644 --- a/cmake/vagrant/freebsd/python/Vagrantfile +++ b/cmake/vagrant/freebsd/python/Vagrantfile @@ -93,7 +93,6 @@ Vagrant.configure("2") do |config| config.vm.provision "file", source: "../../../../examples/dotnet", destination: "$HOME/project/examples/" config.vm.provision "file", source: "../../../../examples/java", destination: "$HOME/project/examples/" config.vm.provision "file", source: "../../../../examples/python", destination: "$HOME/project/examples/" - config.vm.provision "file", source: "../../../../examples/tests", destination: "$HOME/project/examples/" config.vm.provision "file", source: "../../../../patches", destination: "$HOME/project/" config.vm.provision "file", source: "../../../../LICENSE", destination: "$HOME/project/" config.vm.provision "file", source: "../../../../Version.txt", destination: "$HOME/project/" diff --git a/cmake/vagrant/netbsd/cpp/Vagrantfile b/cmake/vagrant/netbsd/cpp/Vagrantfile index db188d48cc..785262af9b 100644 --- a/cmake/vagrant/netbsd/cpp/Vagrantfile +++ b/cmake/vagrant/netbsd/cpp/Vagrantfile @@ -85,7 +85,6 @@ Vagrant.configure("2") do |config| config.vm.provision "file", source: "../../../../examples/dotnet", destination: "$HOME/project/examples/" config.vm.provision "file", source: "../../../../examples/java", destination: "$HOME/project/examples/" config.vm.provision "file", source: "../../../../examples/python", destination: "$HOME/project/examples/" - config.vm.provision "file", source: "../../../../examples/tests", destination: "$HOME/project/examples/" config.vm.provision "file", source: "../../../../patches", destination: "$HOME/project/" config.vm.provision "file", source: "../../../../Version.txt", destination: "$HOME/project/" diff --git a/cmake/vagrant/netbsd/dotnet/Vagrantfile b/cmake/vagrant/netbsd/dotnet/Vagrantfile index 09ac57e594..b88bd5aa71 100644 --- a/cmake/vagrant/netbsd/dotnet/Vagrantfile +++ b/cmake/vagrant/netbsd/dotnet/Vagrantfile @@ -87,7 +87,6 @@ Vagrant.configure("2") do |config| config.vm.provision "file", source: "../../../../examples/dotnet", destination: "$HOME/project/examples/" config.vm.provision "file", source: "../../../../examples/java", destination: "$HOME/project/examples/" config.vm.provision "file", source: "../../../../examples/python", destination: "$HOME/project/examples/" - config.vm.provision "file", source: "../../../../examples/tests", destination: "$HOME/project/examples/" config.vm.provision "file", source: "../../../../patches", destination: "$HOME/project/" config.vm.provision "file", source: "../../../../Version.txt", destination: "$HOME/project/" config.vm.provision "file", source: "../../../../tools/doc/orLogo.png", destination: "$HOME/project/tools/doc/" diff --git a/cmake/vagrant/netbsd/java/Vagrantfile b/cmake/vagrant/netbsd/java/Vagrantfile index 7c44664b8e..a646decdca 100644 --- a/cmake/vagrant/netbsd/java/Vagrantfile +++ b/cmake/vagrant/netbsd/java/Vagrantfile @@ -88,7 +88,6 @@ Vagrant.configure("2") do |config| config.vm.provision "file", source: "../../../../examples/dotnet", destination: "$HOME/project/examples/" config.vm.provision "file", source: "../../../../examples/java", destination: "$HOME/project/examples/" config.vm.provision "file", source: "../../../../examples/python", destination: "$HOME/project/examples/" - config.vm.provision "file", source: "../../../../examples/tests", destination: "$HOME/project/examples/" config.vm.provision "file", source: "../../../../patches", destination: "$HOME/project/" config.vm.provision "file", source: "../../../../Version.txt", destination: "$HOME/project/" diff --git a/cmake/vagrant/netbsd/python/Vagrantfile b/cmake/vagrant/netbsd/python/Vagrantfile index 86340ab3d0..af297cb076 100644 --- a/cmake/vagrant/netbsd/python/Vagrantfile +++ b/cmake/vagrant/netbsd/python/Vagrantfile @@ -87,7 +87,6 @@ Vagrant.configure("2") do |config| config.vm.provision "file", source: "../../../../examples/dotnet", destination: "$HOME/project/examples/" config.vm.provision "file", source: "../../../../examples/java", destination: "$HOME/project/examples/" config.vm.provision "file", source: "../../../../examples/python", destination: "$HOME/project/examples/" - config.vm.provision "file", source: "../../../../examples/tests", destination: "$HOME/project/examples/" config.vm.provision "file", source: "../../../../patches", destination: "$HOME/project/" config.vm.provision "file", source: "../../../../LICENSE", destination: "$HOME/project/" config.vm.provision "file", source: "../../../../Version.txt", destination: "$HOME/project/" diff --git a/cmake/vagrant/openbsd/cpp/Vagrantfile b/cmake/vagrant/openbsd/cpp/Vagrantfile index 85a99d367b..cc586c9d72 100644 --- a/cmake/vagrant/openbsd/cpp/Vagrantfile +++ b/cmake/vagrant/openbsd/cpp/Vagrantfile @@ -85,7 +85,6 @@ Vagrant.configure("2") do |config| config.vm.provision "file", source: "../../../../examples/dotnet", destination: "$HOME/project/examples/" config.vm.provision "file", source: "../../../../examples/java", destination: "$HOME/project/examples/" config.vm.provision "file", source: "../../../../examples/python", destination: "$HOME/project/examples/" - config.vm.provision "file", source: "../../../../examples/tests", destination: "$HOME/project/examples/" config.vm.provision "file", source: "../../../../patches", destination: "$HOME/project/" config.vm.provision "file", source: "../../../../Version.txt", destination: "$HOME/project/" diff --git a/cmake/vagrant/openbsd/dotnet/Vagrantfile b/cmake/vagrant/openbsd/dotnet/Vagrantfile index b129bca007..a30d368c3a 100644 --- a/cmake/vagrant/openbsd/dotnet/Vagrantfile +++ b/cmake/vagrant/openbsd/dotnet/Vagrantfile @@ -87,7 +87,6 @@ Vagrant.configure("2") do |config| config.vm.provision "file", source: "../../../../examples/dotnet", destination: "$HOME/project/examples/" config.vm.provision "file", source: "../../../../examples/java", destination: "$HOME/project/examples/" config.vm.provision "file", source: "../../../../examples/python", destination: "$HOME/project/examples/" - config.vm.provision "file", source: "../../../../examples/tests", destination: "$HOME/project/examples/" config.vm.provision "file", source: "../../../../patches", destination: "$HOME/project/" config.vm.provision "file", source: "../../../../Version.txt", destination: "$HOME/project/" config.vm.provision "file", source: "../../../../tools/doc/orLogo.png", destination: "$HOME/project/tools/doc/" diff --git a/cmake/vagrant/openbsd/java/Vagrantfile b/cmake/vagrant/openbsd/java/Vagrantfile index c029867471..3a932bcc8b 100644 --- a/cmake/vagrant/openbsd/java/Vagrantfile +++ b/cmake/vagrant/openbsd/java/Vagrantfile @@ -88,7 +88,6 @@ Vagrant.configure("2") do |config| config.vm.provision "file", source: "../../../../examples/dotnet", destination: "$HOME/project/examples/" config.vm.provision "file", source: "../../../../examples/java", destination: "$HOME/project/examples/" config.vm.provision "file", source: "../../../../examples/python", destination: "$HOME/project/examples/" - config.vm.provision "file", source: "../../../../examples/tests", destination: "$HOME/project/examples/" config.vm.provision "file", source: "../../../../patches", destination: "$HOME/project/" config.vm.provision "file", source: "../../../../Version.txt", destination: "$HOME/project/" diff --git a/cmake/vagrant/openbsd/python/Vagrantfile b/cmake/vagrant/openbsd/python/Vagrantfile index d2083458d3..05d4cf967b 100644 --- a/cmake/vagrant/openbsd/python/Vagrantfile +++ b/cmake/vagrant/openbsd/python/Vagrantfile @@ -87,7 +87,6 @@ Vagrant.configure("2") do |config| config.vm.provision "file", source: "../../../../examples/dotnet", destination: "$HOME/project/examples/" config.vm.provision "file", source: "../../../../examples/java", destination: "$HOME/project/examples/" config.vm.provision "file", source: "../../../../examples/python", destination: "$HOME/project/examples/" - config.vm.provision "file", source: "../../../../examples/tests", destination: "$HOME/project/examples/" config.vm.provision "file", source: "../../../../patches", destination: "$HOME/project/" config.vm.provision "file", source: "../../../../LICENSE", destination: "$HOME/project/" config.vm.provision "file", source: "../../../../Version.txt", destination: "$HOME/project/" diff --git a/examples/tests/CMakeLists.txt b/examples/tests/CMakeLists.txt deleted file mode 100644 index df9c94d12a..0000000000 --- a/examples/tests/CMakeLists.txt +++ /dev/null @@ -1,51 +0,0 @@ -# Copyright 2010-2025 Google LLC -# Licensed under the Apache License, Version 2.0 (the "License"); -# you may not use this file except in compliance with the License. -# You may obtain a copy of the License at -# -# http://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, software -# distributed under the License is distributed on an "AS IS" BASIS, -# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -# See the License for the specific language governing permissions and -# limitations under the License. - -if(NOT BUILD_EXAMPLES) - return() -endif() - -if(BUILD_CXX_EXAMPLES) - file(GLOB CXX_SRCS "*.cc") - foreach(_FULL_FILE_NAME IN LISTS CXX_SRCS) - get_filename_component(_NAME ${_FULL_FILE_NAME} NAME_WE) - get_filename_component(_FILE_NAME ${_FULL_FILE_NAME} NAME) - ortools_cxx_test( - NAME - tests_${_NAME} - SOURCES - ${_FULL_FILE_NAME} - ) - endforeach() -endif() - -if(BUILD_PYTHON_EXAMPLES) - file(GLOB PYTHON_SRCS "*.py") - foreach(FILE_NAME IN LISTS PYTHON_SRCS) - add_python_example(FILE_NAME ${FILE_NAME}) - endforeach() -endif() - -if(BUILD_JAVA_EXAMPLES) - file(GLOB JAVA_SRCS "*.java") - foreach(FILE_NAME IN LISTS JAVA_SRCS) - add_java_example(FILE_NAME ${FILE_NAME}) - endforeach() -endif() - -if(BUILD_DOTNET_EXAMPLES) - file(GLOB DOTNET_SRCS "*.cs") - foreach(FILE_NAME IN LISTS DOTNET_SRCS) - add_dotnet_example(FILE_NAME ${FILE_NAME}) - endforeach() -endif() diff --git a/examples/tests/bug_fz1.cc b/examples/tests/bug_fz1.cc deleted file mode 100644 index 0654c3065a..0000000000 --- a/examples/tests/bug_fz1.cc +++ /dev/null @@ -1,74 +0,0 @@ -// Copyright 2011-2012 Google -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. - -#include "absl/flags/parse.h" -#include "ortools/base/hash.h" -#include "ortools/base/map_util.h" -#include "ortools/base/stl_util.h" -#include "ortools/constraint_solver/constraint_solver.h" -#include "ortools/constraint_solver/constraint_solveri.h" -#include "ortools/util/string_array.h" - -namespace operations_research { -void ShoppingBasketBug() { - Solver s("ShoppingBasketBug"); - IntVar* const x15 = s.MakeIntVar(0, 2, "x15"); - IntVar* const x18 = s.MakeIntVar(0, 2, "x18"); - IntVar* const is1 = s.MakeIsEqualCstVar(x15, 2); - IntVar* const is2 = s.MakeIsEqualCstVar(x18, 2); - IntVar* const is_less = s.MakeIsLessOrEqualCstVar( - s.MakeSum(s.MakeProd(is1, 2), s.MakeProd(is2, 2)), 1); - std::vector values1; - values1.push_back(10); - values1.push_back(2); - values1.push_back(12); - IntVar* const elem1 = s.MakeElement(values1, x15)->Var(); - std::vector values2; - values2.push_back(2); - values2.push_back(10); - values2.push_back(5); - IntVar* const elem2 = s.MakeElement(values2, x18)->Var(); - std::vector vars; - vars.push_back(elem1); - vars.push_back(is_less); - vars.push_back(elem2); - std::vector coefs; - coefs.push_back(1); - coefs.push_back(90); - coefs.push_back(1); - IntVar* const obj = s.MakeScalProd(vars, coefs)->Var(); - OptimizeVar* const optimize = s.MakeMinimize(obj, 1); - SearchMonitor* const log = s.MakeSearchLog(10, optimize); - SolutionCollector* const collector = s.MakeLastSolutionCollector(); - collector->Add(x15); - collector->Add(x18); - collector->Add(is_less); - collector->Add(elem1); - collector->Add(elem2); - collector->Add(is1); - collector->Add(is2); - DecisionBuilder* const db1 = - s.MakePhase(x15, x18, Solver::CHOOSE_MAX_SIZE, Solver::ASSIGN_MIN_VALUE); - DecisionBuilder* const db2 = - s.MakePhase(obj, Solver::CHOOSE_FIRST_UNBOUND, Solver::ASSIGN_MIN_VALUE); - DecisionBuilder* const db = s.Compose(db1, db2); - s.Solve(db, optimize, log, collector); - LOG(INFO) << collector->solution(0)->DebugString(); -} -} // namespace operations_research - -int main(int argc, char** argv) { - absl::ParseCommandLine(argc, argv); - operations_research::ShoppingBasketBug(); - return 0; -} diff --git a/examples/tests/cpp11_test.cc b/examples/tests/cpp11_test.cc deleted file mode 100644 index b91d3c0bbb..0000000000 --- a/examples/tests/cpp11_test.cc +++ /dev/null @@ -1,88 +0,0 @@ -#include -#include -#include -#include - -#include "ortools/base/hash.h" - -namespace operations_research { -struct Foo { - Foo() { std::cout << "Foo::Foo\n"; } - ~Foo() { std::cout << "Foo::~Foo\n"; } - void bar() { std::cout << "Foo::bar\n"; } -}; - -void f(const Foo& foo) { std::cout << "f(const Foo&)\n"; } - -void test_unique() { - std::cout << "test_unique" << std::endl; - std::unique_ptr p1(new Foo); // p1 owns Foo - if (p1) p1->bar(); - - { - std::unique_ptr p2(std::move(p1)); // now p2 owns Foo - f(*p2); - - p1 = std::move(p2); // ownership returns to p1 - std::cout << "destroying p2...\n"; - } - - if (p1) p1->bar(); - // Foo instance is destroyed when p1 goes out of scope -} - -void test_auto() { - std::cout << "test_auto" << std::endl; - std::vector numbers; - numbers.push_back(1); - numbers.push_back(2); - numbers.push_back(3); - numbers.push_back(4); - numbers.push_back(5); - numbers.push_back(6); - numbers.push_back(7); - for (int vec : numbers) { - std::cout << vec << std::endl; - } - - std::unordered_map my_map; - my_map["toto"] = 2; - for (auto mm : my_map) { - std::cout << mm.first << " -> " << mm.second << std::endl; - } -} - -void test_chevron() { - std::cout << "test_chevron" << std::endl; - std::vector> toto; - toto.push_back(std::make_pair(2, 4)); -} - -class A { - public: - virtual ~A() {} - virtual int V() const { return 1; } -}; - -class B : public A { - public: - ~B() override {} - int V() const override { return 2; } -}; - -void test_override() { - std::cout << "test_override" << std::endl; - B* b = new B(); - if (b->V() != 2) { - std::cout << "Problem with override" << std::endl; - } -} -} // namespace operations_research - -int main() { - operations_research::test_unique(); - operations_research::test_auto(); - operations_research::test_chevron(); - operations_research::test_override(); - return 0; -} diff --git a/examples/tests/dual_loading.py b/examples/tests/dual_loading.py deleted file mode 100755 index 8ab1c1c88e..0000000000 --- a/examples/tests/dual_loading.py +++ /dev/null @@ -1,12 +0,0 @@ -#!/usr/bin/env python3 -from ortools.constraint_solver import pywrapcp -from ortools.linear_solver import pywraplp - - -def main(): - cp = pywrapcp.Solver("test") - lp = pywraplp.Solver.CreateSolver('GLOP') - - -if __name__ == "__main__": - main() diff --git a/examples/tests/forbidden_intervals_test.cc b/examples/tests/forbidden_intervals_test.cc deleted file mode 100644 index 9cfbe02cdb..0000000000 --- a/examples/tests/forbidden_intervals_test.cc +++ /dev/null @@ -1,160 +0,0 @@ -// Copyright 2011-2012 Google -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. - -#include "absl/flags/parse.h" -#include "ortools/constraint_solver/constraint_solver.h" - -namespace operations_research { - -class ForbiddenIntervalTestSimpleReductionOnBothSide : public DecisionBuilder { - public: - ForbiddenIntervalTestSimpleReductionOnBothSide(IntVar* const var) - : var_(var) {} - ~ForbiddenIntervalTestSimpleReductionOnBothSide() override {} - - Decision* Next(Solver* const s) override { - CHECK_EQ(101, var_->Min()); - CHECK_EQ(899, var_->Max()); - return NULL; - } - - private: - IntVar* const var_; -}; - -class ForbiddenIntervalTestMultipleReductionsOnMin : public DecisionBuilder { - public: - ForbiddenIntervalTestMultipleReductionsOnMin(IntVar* const var) : var_(var) {} - ~ForbiddenIntervalTestMultipleReductionsOnMin() override {} - - Decision* Next(Solver* const s) override { - CHECK_EQ(0, var_->Min()); - CHECK_EQ(1000, var_->Max()); - var_->SetMin(5); - CHECK_EQ(5, var_->Min()); - CHECK_EQ(1000, var_->Max()); - var_->SetMax(995); - CHECK_EQ(5, var_->Min()); - CHECK_EQ(995, var_->Max()); - var_->SetMin(10); - CHECK_EQ(21, var_->Min()); - CHECK_EQ(995, var_->Max()); - var_->SetMin(30); - CHECK_EQ(30, var_->Min()); - CHECK_EQ(995, var_->Max()); - var_->SetMin(505); - CHECK_EQ(511, var_->Min()); - CHECK_EQ(995, var_->Max()); - var_->SetMin(600); - CHECK_EQ(600, var_->Min()); - CHECK_EQ(995, var_->Max()); - var_->SetMin(900); - CHECK_EQ(901, var_->Min()); - CHECK_EQ(995, var_->Max()); - return NULL; - } - - private: - IntVar* const var_; -}; - -class ForbiddenIntervalTestMultipleReductionsOnMax : public DecisionBuilder { - public: - ForbiddenIntervalTestMultipleReductionsOnMax(IntVar* const var) : var_(var) {} - ~ForbiddenIntervalTestMultipleReductionsOnMax() override {} - - Decision* Next(Solver* const s) override { - CHECK_EQ(0, var_->Min()); - CHECK_EQ(1000, var_->Max()); - var_->SetMin(5); - CHECK_EQ(5, var_->Min()); - CHECK_EQ(1000, var_->Max()); - var_->SetMax(995); - CHECK_EQ(5, var_->Min()); - CHECK_EQ(995, var_->Max()); - var_->SetMax(900); - CHECK_EQ(5, var_->Min()); - CHECK_EQ(799, var_->Max()); - var_->SetMax(750); - CHECK_EQ(5, var_->Min()); - CHECK_EQ(750, var_->Max()); - var_->SetMax(505); - CHECK_EQ(5, var_->Min()); - CHECK_EQ(499, var_->Max()); - var_->SetMax(300); - CHECK_EQ(5, var_->Min()); - CHECK_EQ(300, var_->Max()); - var_->SetMax(20); - CHECK_EQ(5, var_->Min()); - CHECK_EQ(9, var_->Max()); - return NULL; - } - - private: - IntVar* const var_; -}; - -class ForbiddenIntervalTest { - public: - void SetUp(std::vector& starts, std::vector& ends) { - solver_.reset(new Solver("ForbiddenIntervalTest")); - var_ = solver_->MakeIntVar(0, 1000, "var"); - CHECK_EQ(starts.size(), ends.size()); - for (std::size_t i = 0; i < starts.size(); ++i) { - var_->RemoveInterval(starts[i], ends[i]); - } - } - - std::unique_ptr solver_; - IntVar* var_; - - void TestSimpleReductionOnBothSide() { - std::cout << "TestSimpleReductionOnBothSide" << std::endl; - std::vector starts = {0, 900}; - std::vector ends = {100, 1000}; - SetUp(starts, ends); - CHECK(solver_->Solve(solver_->RevAlloc( - new ForbiddenIntervalTestSimpleReductionOnBothSide(var_)))); - std::cout << " .. done" << std::endl; - } - - void TestMultipleReductionsOnMin() { - std::cout << "TestMultipleReductionsOnMin" << std::endl; - std::vector starts = {10, 500, 800}; - std::vector ends = {20, 510, 900}; - SetUp(starts, ends); - CHECK(solver_->Solve(solver_->RevAlloc( - new ForbiddenIntervalTestMultipleReductionsOnMin(var_)))); - std::cout << " .. done" << std::endl; - } - - void TestMultipleReductionsOnMax() { - std::cout << "TestMultipleReductionsOnMax" << std::endl; - std::vector starts = {10, 500, 800}; - std::vector ends = {20, 510, 900}; - SetUp(starts, ends); - CHECK(solver_->Solve(solver_->RevAlloc( - new ForbiddenIntervalTestMultipleReductionsOnMax(var_)))); - std::cout << " .. done" << std::endl; - } -}; -} // namespace operations_research - -int main(int argc, char** argv) { - absl::ParseCommandLine(argc, argv); - operations_research::ForbiddenIntervalTest forbidden_intervals_test; - forbidden_intervals_test.TestSimpleReductionOnBothSide(); - forbidden_intervals_test.TestMultipleReductionsOnMin(); - forbidden_intervals_test.TestMultipleReductionsOnMax(); - return 0; -} diff --git a/examples/tests/init_test.cc b/examples/tests/init_test.cc deleted file mode 100644 index ba85469a35..0000000000 --- a/examples/tests/init_test.cc +++ /dev/null @@ -1,53 +0,0 @@ -// Copyright 2010-2025 Google LLC -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. - -#include "ortools/init/init.h" - -#include "absl/strings/str_cat.h" - -namespace operations_research { -void TestLogging() { - LOG(INFO) << "Test Logging"; - CppBridge::InitLogging("init"); - CppBridge::ShutdownLogging(); -} - -void TestFlags() { - LOG(INFO) << "Test Flags"; - auto cpp_flags = CppFlags(); - cpp_flags.log_prefix = true; - cpp_flags.cp_model_dump_prefix = "init"; - cpp_flags.cp_model_dump_models = true; - cpp_flags.cp_model_dump_submodels = true; - cpp_flags.cp_model_dump_response = true; - CppBridge::SetFlags(cpp_flags); -} - -void TestVersion() { - LOG(INFO) << "Test Version"; - using version = OrToolsVersion; - int major = version::MajorNumber(); - int minor = version::MinorNumber(); - int patch = version::PatchNumber(); - std::string vers = absl::StrCat(major, ".", minor, ".", patch); - assert(vers == version::VersionString()); -} - -} // namespace operations_research - -int main(int argc, char** argv) { - operations_research::TestLogging(); - operations_research::TestFlags(); - operations_research::TestVersion(); - return 0; -} diff --git a/examples/tests/issue115.fzn b/examples/tests/issue115.fzn deleted file mode 100644 index d2df535a14..0000000000 --- a/examples/tests/issue115.fzn +++ /dev/null @@ -1,560 +0,0 @@ -array [1..8] of int: X_INTRODUCED_255 = [1,1,1,1,1,1,1,1]; -array [1..4] of int: X_INTRODUCED_419 = [-1,-1,-1,-1]; -array [1..97] of int: X_INTRODUCED_796 = [1,-3,-3,-3,-3,-3,-3,-3,-3,-3,-3,-1,-1,-1,-1,-1,-1,-2,-2,-2,-2,-1,-1,-3,-3,-3,-3,-3,-3,-3,-3,-3,-3,-3,-3,-1,-1,-1,-1,-1,-1,-2,-2,-2,-2,-1,-1,-3,-3,-3,-3,-3,-3,-3,-3,-3,-3,-3,-3,-1,-1,-1,-1,-1,-1,-2,-2,-2,-2,-1,-1,-3,-3,-3,-3,-3,-3,-3,-3,-3,-3,-3,-3,-1,-1,-1,-1,-1,-1,-2,-2,-2,-2,-1,-1,-3,-3]; -var bool: X_INTRODUCED_2; -var bool: X_INTRODUCED_3; -var bool: X_INTRODUCED_6; -var bool: X_INTRODUCED_7; -var bool: X_INTRODUCED_8; -var bool: X_INTRODUCED_9; -var bool: X_INTRODUCED_10; -var bool: X_INTRODUCED_11; -var bool: X_INTRODUCED_12; -var bool: X_INTRODUCED_13; -var bool: X_INTRODUCED_20; -var bool: X_INTRODUCED_21; -var bool: X_INTRODUCED_22; -var bool: X_INTRODUCED_23; -var bool: X_INTRODUCED_24; -var bool: X_INTRODUCED_25; -var bool: X_INTRODUCED_26; -var bool: X_INTRODUCED_27; -var bool: X_INTRODUCED_28; -var bool: X_INTRODUCED_29; -var bool: X_INTRODUCED_32; -var bool: X_INTRODUCED_33; -var bool: X_INTRODUCED_34; -var bool: X_INTRODUCED_35; -var bool: X_INTRODUCED_40; -var bool: X_INTRODUCED_41; -var bool: X_INTRODUCED_46; -var bool: X_INTRODUCED_47; -var bool: X_INTRODUCED_50; -var bool: X_INTRODUCED_51; -var bool: X_INTRODUCED_52; -var bool: X_INTRODUCED_53; -var bool: X_INTRODUCED_58; -var bool: X_INTRODUCED_59; -var bool: X_INTRODUCED_60; -var bool: X_INTRODUCED_61; -var bool: X_INTRODUCED_62; -var bool: X_INTRODUCED_63; -var bool: X_INTRODUCED_66; -var bool: X_INTRODUCED_67; -var bool: X_INTRODUCED_76; -var bool: X_INTRODUCED_77; -var bool: X_INTRODUCED_78; -var bool: X_INTRODUCED_79; -var bool: X_INTRODUCED_82; -var bool: X_INTRODUCED_83; -var bool: X_INTRODUCED_88; -var bool: X_INTRODUCED_89; -var bool: X_INTRODUCED_92; -var bool: X_INTRODUCED_93; -var bool: X_INTRODUCED_102; -var bool: X_INTRODUCED_103; -var bool: X_INTRODUCED_106; -var bool: X_INTRODUCED_107; -var bool: X_INTRODUCED_108; -var bool: X_INTRODUCED_109; -var bool: X_INTRODUCED_116; -var bool: X_INTRODUCED_117; -var bool: X_INTRODUCED_118; -var bool: X_INTRODUCED_119; -var bool: X_INTRODUCED_122; -var bool: X_INTRODUCED_123; -var bool: X_INTRODUCED_126; -var bool: X_INTRODUCED_127; -var bool: X_INTRODUCED_128; -var bool: X_INTRODUCED_129; -var bool: X_INTRODUCED_130; -var bool: X_INTRODUCED_131; -var bool: X_INTRODUCED_132; -var bool: X_INTRODUCED_133; -var 0..144: objective:: output_var:: is_defined_var; -var 0..1: X_INTRODUCED_248 ::var_is_introduced :: is_defined_var; -var 0..1: X_INTRODUCED_249 ::var_is_introduced :: is_defined_var; -var 0..1: X_INTRODUCED_252 ::var_is_introduced :: is_defined_var; -var 0..1: X_INTRODUCED_253 ::var_is_introduced :: is_defined_var; -var 0..1: X_INTRODUCED_257 ::var_is_introduced :: is_defined_var; -var 0..1: X_INTRODUCED_258 ::var_is_introduced :: is_defined_var; -var 0..1: X_INTRODUCED_259 ::var_is_introduced :: is_defined_var; -var 0..1: X_INTRODUCED_260 ::var_is_introduced :: is_defined_var; -var 0..1: X_INTRODUCED_261 ::var_is_introduced :: is_defined_var; -var 0..1: X_INTRODUCED_262 ::var_is_introduced :: is_defined_var; -var 0..1: X_INTRODUCED_271 ::var_is_introduced :: is_defined_var; -var 0..1: X_INTRODUCED_272 ::var_is_introduced :: is_defined_var; -var 0..1: X_INTRODUCED_273 ::var_is_introduced :: is_defined_var; -var 0..1: X_INTRODUCED_274 ::var_is_introduced :: is_defined_var; -var 0..1: X_INTRODUCED_277 ::var_is_introduced :: is_defined_var; -var 0..1: X_INTRODUCED_278 ::var_is_introduced :: is_defined_var; -var 0..1: X_INTRODUCED_279 ::var_is_introduced :: is_defined_var; -var 0..1: X_INTRODUCED_280 ::var_is_introduced :: is_defined_var; -var 0..1: X_INTRODUCED_281 ::var_is_introduced :: is_defined_var; -var 0..1: X_INTRODUCED_282 ::var_is_introduced :: is_defined_var; -var 0..1: X_INTRODUCED_287 ::var_is_introduced :: is_defined_var; -var 0..1: X_INTRODUCED_288 ::var_is_introduced :: is_defined_var; -var 0..1: X_INTRODUCED_289 ::var_is_introduced :: is_defined_var; -var 0..1: X_INTRODUCED_290 ::var_is_introduced :: is_defined_var; -var 0..1: X_INTRODUCED_297 ::var_is_introduced :: is_defined_var; -var 0..1: X_INTRODUCED_298 ::var_is_introduced :: is_defined_var; -var 0..1: X_INTRODUCED_303 ::var_is_introduced :: is_defined_var; -var 0..1: X_INTRODUCED_304 ::var_is_introduced :: is_defined_var; -var 0..1: X_INTRODUCED_309 ::var_is_introduced :: is_defined_var; -var 0..1: X_INTRODUCED_310 ::var_is_introduced :: is_defined_var; -var 0..1: X_INTRODUCED_311 ::var_is_introduced :: is_defined_var; -var 0..1: X_INTRODUCED_312 ::var_is_introduced :: is_defined_var; -var 0..1: X_INTRODUCED_319 ::var_is_introduced :: is_defined_var; -var 0..1: X_INTRODUCED_320 ::var_is_introduced :: is_defined_var; -var 0..1: X_INTRODUCED_321 ::var_is_introduced :: is_defined_var; -var 0..1: X_INTRODUCED_322 ::var_is_introduced :: is_defined_var; -var 0..1: X_INTRODUCED_323 ::var_is_introduced :: is_defined_var; -var 0..1: X_INTRODUCED_324 ::var_is_introduced :: is_defined_var; -var 0..1: X_INTRODUCED_329 ::var_is_introduced :: is_defined_var; -var 0..1: X_INTRODUCED_330 ::var_is_introduced :: is_defined_var; -var 0..1: X_INTRODUCED_341 ::var_is_introduced :: is_defined_var; -var 0..1: X_INTRODUCED_342 ::var_is_introduced :: is_defined_var; -var 0..1: X_INTRODUCED_343 ::var_is_introduced :: is_defined_var; -var 0..1: X_INTRODUCED_344 ::var_is_introduced :: is_defined_var; -var 0..1: X_INTRODUCED_349 ::var_is_introduced :: is_defined_var; -var 0..1: X_INTRODUCED_350 ::var_is_introduced :: is_defined_var; -var 0..1: X_INTRODUCED_357 ::var_is_introduced :: is_defined_var; -var 0..1: X_INTRODUCED_358 ::var_is_introduced :: is_defined_var; -var 0..1: X_INTRODUCED_361 ::var_is_introduced :: is_defined_var; -var 0..1: X_INTRODUCED_362 ::var_is_introduced :: is_defined_var; -var 0..1: X_INTRODUCED_373 ::var_is_introduced :: is_defined_var; -var 0..1: X_INTRODUCED_374 ::var_is_introduced :: is_defined_var; -var 0..1: X_INTRODUCED_379 ::var_is_introduced :: is_defined_var; -var 0..1: X_INTRODUCED_380 ::var_is_introduced :: is_defined_var; -var 0..1: X_INTRODUCED_381 ::var_is_introduced :: is_defined_var; -var 0..1: X_INTRODUCED_382 ::var_is_introduced :: is_defined_var; -var 0..1: X_INTRODUCED_391 ::var_is_introduced :: is_defined_var; -var 0..1: X_INTRODUCED_392 ::var_is_introduced :: is_defined_var; -var 0..1: X_INTRODUCED_393 ::var_is_introduced :: is_defined_var; -var 0..1: X_INTRODUCED_394 ::var_is_introduced :: is_defined_var; -var 0..1: X_INTRODUCED_399 ::var_is_introduced :: is_defined_var; -var 0..1: X_INTRODUCED_400 ::var_is_introduced :: is_defined_var; -var 0..1: X_INTRODUCED_403 ::var_is_introduced :: is_defined_var; -var 0..1: X_INTRODUCED_404 ::var_is_introduced :: is_defined_var; -var 0..1: X_INTRODUCED_407 ::var_is_introduced :: is_defined_var; -var 0..1: X_INTRODUCED_408 ::var_is_introduced :: is_defined_var; -var 0..1: X_INTRODUCED_409 ::var_is_introduced :: is_defined_var; -var 0..1: X_INTRODUCED_410 ::var_is_introduced :: is_defined_var; -var 0..1: X_INTRODUCED_411 ::var_is_introduced :: is_defined_var; -var 0..1: X_INTRODUCED_412 ::var_is_introduced :: is_defined_var; -var -10..1: X_INTRODUCED_492 ::var_is_introduced :: is_defined_var; -var 0..1: X_INTRODUCED_493 ::var_is_introduced ; -var 0..1: X_INTRODUCED_497 ::var_is_introduced ; -var -7..1: X_INTRODUCED_500 ::var_is_introduced :: is_defined_var; -var 0..1: X_INTRODUCED_501 ::var_is_introduced ; -var -4..1: X_INTRODUCED_504 ::var_is_introduced :: is_defined_var; -var 0..1: X_INTRODUCED_505 ::var_is_introduced ; -var -2..1: X_INTRODUCED_508 ::var_is_introduced :: is_defined_var; -var 0..1: X_INTRODUCED_509 ::var_is_introduced ; -var 0..1: X_INTRODUCED_512 ::var_is_introduced ; -var 0..1: X_INTRODUCED_515 ::var_is_introduced ; -var 0..1: X_INTRODUCED_518 ::var_is_introduced ; -var 0..1: X_INTRODUCED_521 ::var_is_introduced ; -var 0..1: X_INTRODUCED_524 ::var_is_introduced ; -var -3..1: X_INTRODUCED_527 ::var_is_introduced :: is_defined_var; -var 0..1: X_INTRODUCED_528 ::var_is_introduced ; -var -3..1: X_INTRODUCED_531 ::var_is_introduced :: is_defined_var; -var 0..1: X_INTRODUCED_532 ::var_is_introduced ; -var -1..1: X_INTRODUCED_535 ::var_is_introduced :: is_defined_var; -var 0..1: X_INTRODUCED_536 ::var_is_introduced ; -var -1..1: X_INTRODUCED_539 ::var_is_introduced :: is_defined_var; -var 0..1: X_INTRODUCED_540 ::var_is_introduced ; -var -15..2: X_INTRODUCED_543 ::var_is_introduced :: is_defined_var; -var 0..2: X_INTRODUCED_544 ::var_is_introduced ; -var -15..2: X_INTRODUCED_547 ::var_is_introduced :: is_defined_var; -var 0..2: X_INTRODUCED_548 ::var_is_introduced ; -var -10..1: X_INTRODUCED_551 ::var_is_introduced :: is_defined_var; -var 0..1: X_INTRODUCED_552 ::var_is_introduced ; -var -4..1: X_INTRODUCED_555 ::var_is_introduced :: is_defined_var; -var 0..1: X_INTRODUCED_556 ::var_is_introduced ; -var -7..1: X_INTRODUCED_559 ::var_is_introduced :: is_defined_var; -var 0..1: X_INTRODUCED_560 ::var_is_introduced ; -var -4..1: X_INTRODUCED_563 ::var_is_introduced :: is_defined_var; -var 0..1: X_INTRODUCED_564 ::var_is_introduced ; -var -2..1: X_INTRODUCED_567 ::var_is_introduced :: is_defined_var; -var 0..1: X_INTRODUCED_568 ::var_is_introduced ; -var 0..1: X_INTRODUCED_570 ::var_is_introduced :: is_defined_var; -var 0..1: X_INTRODUCED_571 ::var_is_introduced ; -var 0..1: X_INTRODUCED_574 ::var_is_introduced ; -var 0..1: X_INTRODUCED_577 ::var_is_introduced ; -var 0..1: X_INTRODUCED_580 ::var_is_introduced ; -var 0..1: X_INTRODUCED_583 ::var_is_introduced ; -var -3..1: X_INTRODUCED_586 ::var_is_introduced :: is_defined_var; -var 0..1: X_INTRODUCED_587 ::var_is_introduced ; -var -3..1: X_INTRODUCED_590 ::var_is_introduced :: is_defined_var; -var 0..1: X_INTRODUCED_591 ::var_is_introduced ; -var -1..1: X_INTRODUCED_594 ::var_is_introduced :: is_defined_var; -var 0..1: X_INTRODUCED_595 ::var_is_introduced ; -var -1..1: X_INTRODUCED_598 ::var_is_introduced :: is_defined_var; -var 0..1: X_INTRODUCED_599 ::var_is_introduced ; -var -15..2: X_INTRODUCED_602 ::var_is_introduced :: is_defined_var; -var 0..2: X_INTRODUCED_603 ::var_is_introduced ; -var -15..2: X_INTRODUCED_606 ::var_is_introduced :: is_defined_var; -var 0..2: X_INTRODUCED_607 ::var_is_introduced ; -var -10..1: X_INTRODUCED_610 ::var_is_introduced :: is_defined_var; -var 0..1: X_INTRODUCED_611 ::var_is_introduced ; -var -4..1: X_INTRODUCED_614 ::var_is_introduced :: is_defined_var; -var 0..1: X_INTRODUCED_615 ::var_is_introduced ; -var -7..1: X_INTRODUCED_618 ::var_is_introduced :: is_defined_var; -var 0..1: X_INTRODUCED_619 ::var_is_introduced ; -var -4..1: X_INTRODUCED_622 ::var_is_introduced :: is_defined_var; -var 0..1: X_INTRODUCED_623 ::var_is_introduced ; -var -2..1: X_INTRODUCED_626 ::var_is_introduced :: is_defined_var; -var 0..1: X_INTRODUCED_627 ::var_is_introduced ; -var 0..1: X_INTRODUCED_629 ::var_is_introduced :: is_defined_var; -var 0..1: X_INTRODUCED_630 ::var_is_introduced ; -var 0..1: X_INTRODUCED_633 ::var_is_introduced ; -var 0..1: X_INTRODUCED_636 ::var_is_introduced ; -var 0..1: X_INTRODUCED_639 ::var_is_introduced ; -var 0..1: X_INTRODUCED_642 ::var_is_introduced ; -var -3..1: X_INTRODUCED_645 ::var_is_introduced :: is_defined_var; -var 0..1: X_INTRODUCED_646 ::var_is_introduced ; -var -3..1: X_INTRODUCED_649 ::var_is_introduced :: is_defined_var; -var 0..1: X_INTRODUCED_650 ::var_is_introduced ; -var -1..1: X_INTRODUCED_653 ::var_is_introduced :: is_defined_var; -var 0..1: X_INTRODUCED_654 ::var_is_introduced ; -var -1..1: X_INTRODUCED_657 ::var_is_introduced :: is_defined_var; -var 0..1: X_INTRODUCED_658 ::var_is_introduced ; -var -15..2: X_INTRODUCED_661 ::var_is_introduced :: is_defined_var; -var 0..2: X_INTRODUCED_662 ::var_is_introduced ; -var -15..2: X_INTRODUCED_665 ::var_is_introduced :: is_defined_var; -var 0..2: X_INTRODUCED_666 ::var_is_introduced ; -var -10..1: X_INTRODUCED_669 ::var_is_introduced :: is_defined_var; -var 0..1: X_INTRODUCED_670 ::var_is_introduced ; -var -4..1: X_INTRODUCED_673 ::var_is_introduced :: is_defined_var; -var 0..1: X_INTRODUCED_674 ::var_is_introduced ; -var -7..1: X_INTRODUCED_677 ::var_is_introduced :: is_defined_var; -var 0..1: X_INTRODUCED_678 ::var_is_introduced ; -var -4..1: X_INTRODUCED_681 ::var_is_introduced :: is_defined_var; -var 0..1: X_INTRODUCED_682 ::var_is_introduced ; -var -2..1: X_INTRODUCED_685 ::var_is_introduced :: is_defined_var; -var 0..1: X_INTRODUCED_686 ::var_is_introduced ; -var 0..1: X_INTRODUCED_689 ::var_is_introduced ; -var 0..1: X_INTRODUCED_691 ::var_is_introduced :: is_defined_var; -var 0..1: X_INTRODUCED_692 ::var_is_introduced ; -var 0..1: X_INTRODUCED_694 ::var_is_introduced :: is_defined_var; -var 0..1: X_INTRODUCED_695 ::var_is_introduced ; -var 0..1: X_INTRODUCED_697 ::var_is_introduced :: is_defined_var; -var 0..1: X_INTRODUCED_698 ::var_is_introduced ; -var 0..1: X_INTRODUCED_700 ::var_is_introduced :: is_defined_var; -var 0..1: X_INTRODUCED_701 ::var_is_introduced ; -var -3..1: X_INTRODUCED_704 ::var_is_introduced :: is_defined_var; -var 0..1: X_INTRODUCED_705 ::var_is_introduced ; -var -3..1: X_INTRODUCED_708 ::var_is_introduced :: is_defined_var; -var 0..1: X_INTRODUCED_709 ::var_is_introduced ; -var 0..1: X_INTRODUCED_713 ::var_is_introduced ; -var 0..1: X_INTRODUCED_717 ::var_is_introduced ; -var -15..2: X_INTRODUCED_720 ::var_is_introduced :: is_defined_var; -var 0..2: X_INTRODUCED_721 ::var_is_introduced ; -var -15..2: X_INTRODUCED_724 ::var_is_introduced :: is_defined_var; -var 0..2: X_INTRODUCED_725 ::var_is_introduced ; -var 0..1: X_INTRODUCED_246 ::var_is_introduced = 0; -var 0..1: X_INTRODUCED_247 ::var_is_introduced = 0; -var 0..1: X_INTRODUCED_250 ::var_is_introduced = 0; -var 0..1: X_INTRODUCED_251 ::var_is_introduced = 0; -var 0..1: X_INTRODUCED_263 ::var_is_introduced = 0; -var 0..1: X_INTRODUCED_264 ::var_is_introduced = 0; -var 0..1: X_INTRODUCED_267 ::var_is_introduced = 0; -var 0..1: X_INTRODUCED_268 ::var_is_introduced = 0; -var 0..1: X_INTRODUCED_269 ::var_is_introduced = 0; -var 0..1: X_INTRODUCED_270 ::var_is_introduced = 0; -var 0..1: X_INTRODUCED_283 ::var_is_introduced = 0; -var 0..1: X_INTRODUCED_284 ::var_is_introduced = 0; -var 0..1: X_INTRODUCED_291 ::var_is_introduced = 0; -var 0..1: X_INTRODUCED_292 ::var_is_introduced = 0; -var 0..1: X_INTRODUCED_293 ::var_is_introduced = 0; -var 0..1: X_INTRODUCED_294 ::var_is_introduced = 0; -var 0..1: X_INTRODUCED_299 ::var_is_introduced = 0; -var 0..1: X_INTRODUCED_300 ::var_is_introduced = 0; -var 0..1: X_INTRODUCED_301 ::var_is_introduced = 0; -var 0..1: X_INTRODUCED_302 ::var_is_introduced = 0; -var 0..1: X_INTRODUCED_307 ::var_is_introduced = 0; -var 0..1: X_INTRODUCED_308 ::var_is_introduced = 0; -var 0..1: X_INTRODUCED_313 ::var_is_introduced = 0; -var 0..1: X_INTRODUCED_314 ::var_is_introduced = 0; -var 0..1: X_INTRODUCED_317 ::var_is_introduced = 0; -var 0..1: X_INTRODUCED_318 ::var_is_introduced = 0; -var 0..1: X_INTRODUCED_327 ::var_is_introduced = 0; -var 0..1: X_INTRODUCED_328 ::var_is_introduced = 0; -var 0..1: X_INTRODUCED_331 ::var_is_introduced = 0; -var 0..1: X_INTRODUCED_332 ::var_is_introduced = 0; -var 0..1: X_INTRODUCED_333 ::var_is_introduced = 0; -var 0..1: X_INTRODUCED_334 ::var_is_introduced = 0; -var 0..1: X_INTRODUCED_337 ::var_is_introduced = 0; -var 0..1: X_INTRODUCED_338 ::var_is_introduced = 0; -var 0..1: X_INTRODUCED_339 ::var_is_introduced = 0; -var 0..1: X_INTRODUCED_340 ::var_is_introduced = 0; -var 0..1: X_INTRODUCED_347 ::var_is_introduced = 0; -var 0..1: X_INTRODUCED_348 ::var_is_introduced = 0; -var 0..1: X_INTRODUCED_351 ::var_is_introduced = 0; -var 0..1: X_INTRODUCED_352 ::var_is_introduced = 0; -var 0..1: X_INTRODUCED_353 ::var_is_introduced = 0; -var 0..1: X_INTRODUCED_354 ::var_is_introduced = 0; -var 0..1: X_INTRODUCED_359 ::var_is_introduced = 0; -var 0..1: X_INTRODUCED_360 ::var_is_introduced = 0; -var 0..1: X_INTRODUCED_363 ::var_is_introduced = 0; -var 0..1: X_INTRODUCED_364 ::var_is_introduced = 0; -var 0..1: X_INTRODUCED_367 ::var_is_introduced = 0; -var 0..1: X_INTRODUCED_368 ::var_is_introduced = 0; -var 0..1: X_INTRODUCED_369 ::var_is_introduced = 0; -var 0..1: X_INTRODUCED_370 ::var_is_introduced = 0; -var 0..1: X_INTRODUCED_371 ::var_is_introduced = 0; -var 0..1: X_INTRODUCED_372 ::var_is_introduced = 0; -var 0..1: X_INTRODUCED_377 ::var_is_introduced = 0; -var 0..1: X_INTRODUCED_378 ::var_is_introduced = 0; -var 0..1: X_INTRODUCED_383 ::var_is_introduced = 0; -var 0..1: X_INTRODUCED_384 ::var_is_introduced = 0; -var 0..1: X_INTRODUCED_387 ::var_is_introduced = 0; -var 0..1: X_INTRODUCED_388 ::var_is_introduced = 0; -var 0..1: X_INTRODUCED_389 ::var_is_introduced = 0; -var 0..1: X_INTRODUCED_390 ::var_is_introduced = 0; -var 0..1: X_INTRODUCED_397 ::var_is_introduced = 0; -var 0..1: X_INTRODUCED_398 ::var_is_introduced = 0; -var 0..1: X_INTRODUCED_401 ::var_is_introduced = 0; -var 0..1: X_INTRODUCED_402 ::var_is_introduced = 0; -var 0..1: X_INTRODUCED_413 ::var_is_introduced = 0; -var 0..1: X_INTRODUCED_414 ::var_is_introduced = 0; -array [1..136] of var bool: Assignment:: output_array([1..17,1..4,1..2]) = [false,false,X_INTRODUCED_2,X_INTRODUCED_3,false,false,X_INTRODUCED_6,X_INTRODUCED_7,X_INTRODUCED_8,X_INTRODUCED_9,X_INTRODUCED_10,X_INTRODUCED_11,X_INTRODUCED_12,X_INTRODUCED_13,false,false,false,false,false,false,X_INTRODUCED_20,X_INTRODUCED_21,X_INTRODUCED_22,X_INTRODUCED_23,X_INTRODUCED_24,X_INTRODUCED_25,X_INTRODUCED_26,X_INTRODUCED_27,X_INTRODUCED_28,X_INTRODUCED_29,false,false,X_INTRODUCED_32,X_INTRODUCED_33,X_INTRODUCED_34,X_INTRODUCED_35,false,false,false,false,X_INTRODUCED_40,X_INTRODUCED_41,false,false,false,false,X_INTRODUCED_46,X_INTRODUCED_47,false,false,X_INTRODUCED_50,X_INTRODUCED_51,X_INTRODUCED_52,X_INTRODUCED_53,false,false,false,false,X_INTRODUCED_58,X_INTRODUCED_59,X_INTRODUCED_60,X_INTRODUCED_61,X_INTRODUCED_62,X_INTRODUCED_63,false,false,X_INTRODUCED_66,X_INTRODUCED_67,false,false,false,false,false,false,false,false,X_INTRODUCED_76,X_INTRODUCED_77,X_INTRODUCED_78,X_INTRODUCED_79,false,false,X_INTRODUCED_82,X_INTRODUCED_83,false,false,false,false,X_INTRODUCED_88,X_INTRODUCED_89,false,false,X_INTRODUCED_92,X_INTRODUCED_93,false,false,false,false,false,false,false,false,X_INTRODUCED_102,X_INTRODUCED_103,false,false,X_INTRODUCED_106,X_INTRODUCED_107,X_INTRODUCED_108,X_INTRODUCED_109,false,false,false,false,false,false,X_INTRODUCED_116,X_INTRODUCED_117,X_INTRODUCED_118,X_INTRODUCED_119,false,false,X_INTRODUCED_122,X_INTRODUCED_123,false,false,X_INTRODUCED_126,X_INTRODUCED_127,X_INTRODUCED_128,X_INTRODUCED_129,X_INTRODUCED_130,X_INTRODUCED_131,X_INTRODUCED_132,X_INTRODUCED_133,false,false]; -array [1..96] of var int: SubjSlack:: output_array([1..4,1..12,1..2]) = [X_INTRODUCED_493,0,0,X_INTRODUCED_497,X_INTRODUCED_501,0,0,X_INTRODUCED_505,0,X_INTRODUCED_509,0,X_INTRODUCED_512,X_INTRODUCED_515,X_INTRODUCED_518,X_INTRODUCED_521,X_INTRODUCED_524,X_INTRODUCED_528,X_INTRODUCED_532,X_INTRODUCED_536,X_INTRODUCED_540,0,X_INTRODUCED_544,X_INTRODUCED_548,0,X_INTRODUCED_552,0,0,X_INTRODUCED_556,X_INTRODUCED_560,0,0,X_INTRODUCED_564,0,X_INTRODUCED_568,0,X_INTRODUCED_571,X_INTRODUCED_574,X_INTRODUCED_577,X_INTRODUCED_580,X_INTRODUCED_583,X_INTRODUCED_587,X_INTRODUCED_591,X_INTRODUCED_595,X_INTRODUCED_599,0,X_INTRODUCED_603,X_INTRODUCED_607,0,X_INTRODUCED_611,0,0,X_INTRODUCED_615,X_INTRODUCED_619,0,0,X_INTRODUCED_623,0,X_INTRODUCED_627,0,X_INTRODUCED_630,X_INTRODUCED_633,X_INTRODUCED_636,X_INTRODUCED_639,X_INTRODUCED_642,X_INTRODUCED_646,X_INTRODUCED_650,X_INTRODUCED_654,X_INTRODUCED_658,0,X_INTRODUCED_662,X_INTRODUCED_666,0,X_INTRODUCED_670,0,0,X_INTRODUCED_674,X_INTRODUCED_678,0,0,X_INTRODUCED_682,0,X_INTRODUCED_686,0,X_INTRODUCED_689,X_INTRODUCED_692,X_INTRODUCED_695,X_INTRODUCED_698,X_INTRODUCED_701,X_INTRODUCED_705,X_INTRODUCED_709,X_INTRODUCED_713,X_INTRODUCED_717,0,X_INTRODUCED_721,X_INTRODUCED_725,0]; -array [1..12] of var int: Target:: output_array([1..12]) = [1,1,1,1,1,1,1,1,1,1,2,2]; -array [1..97] of var int: X_INTRODUCED_795 ::var_is_introduced = [objective,X_INTRODUCED_493,0,0,X_INTRODUCED_497,X_INTRODUCED_501,0,0,X_INTRODUCED_505,0,X_INTRODUCED_509,0,X_INTRODUCED_512,X_INTRODUCED_515,X_INTRODUCED_518,X_INTRODUCED_521,X_INTRODUCED_524,X_INTRODUCED_528,X_INTRODUCED_532,X_INTRODUCED_536,X_INTRODUCED_540,0,X_INTRODUCED_544,X_INTRODUCED_548,0,X_INTRODUCED_552,0,0,X_INTRODUCED_556,X_INTRODUCED_560,0,0,X_INTRODUCED_564,0,X_INTRODUCED_568,0,X_INTRODUCED_571,X_INTRODUCED_574,X_INTRODUCED_577,X_INTRODUCED_580,X_INTRODUCED_583,X_INTRODUCED_587,X_INTRODUCED_591,X_INTRODUCED_595,X_INTRODUCED_599,0,X_INTRODUCED_603,X_INTRODUCED_607,0,X_INTRODUCED_611,0,0,X_INTRODUCED_615,X_INTRODUCED_619,0,0,X_INTRODUCED_623,0,X_INTRODUCED_627,0,X_INTRODUCED_630,X_INTRODUCED_633,X_INTRODUCED_636,X_INTRODUCED_639,X_INTRODUCED_642,X_INTRODUCED_646,X_INTRODUCED_650,X_INTRODUCED_654,X_INTRODUCED_658,0,X_INTRODUCED_662,X_INTRODUCED_666,0,X_INTRODUCED_670,0,0,X_INTRODUCED_674,X_INTRODUCED_678,0,0,X_INTRODUCED_682,0,X_INTRODUCED_686,0,X_INTRODUCED_689,X_INTRODUCED_692,X_INTRODUCED_695,X_INTRODUCED_698,X_INTRODUCED_701,X_INTRODUCED_705,X_INTRODUCED_709,X_INTRODUCED_713,X_INTRODUCED_717,0,X_INTRODUCED_721,X_INTRODUCED_725,0]; -array [1..136] of var bool: X_INTRODUCED_798 ::var_is_introduced = [false,false,X_INTRODUCED_2,X_INTRODUCED_3,false,false,X_INTRODUCED_6,X_INTRODUCED_7,X_INTRODUCED_8,X_INTRODUCED_9,X_INTRODUCED_10,X_INTRODUCED_11,X_INTRODUCED_12,X_INTRODUCED_13,false,false,false,false,false,false,X_INTRODUCED_20,X_INTRODUCED_21,X_INTRODUCED_22,X_INTRODUCED_23,X_INTRODUCED_24,X_INTRODUCED_25,X_INTRODUCED_26,X_INTRODUCED_27,X_INTRODUCED_28,X_INTRODUCED_29,false,false,X_INTRODUCED_32,X_INTRODUCED_33,X_INTRODUCED_34,X_INTRODUCED_35,false,false,false,false,X_INTRODUCED_40,X_INTRODUCED_41,false,false,false,false,X_INTRODUCED_46,X_INTRODUCED_47,false,false,X_INTRODUCED_50,X_INTRODUCED_51,X_INTRODUCED_52,X_INTRODUCED_53,false,false,false,false,X_INTRODUCED_58,X_INTRODUCED_59,X_INTRODUCED_60,X_INTRODUCED_61,X_INTRODUCED_62,X_INTRODUCED_63,false,false,X_INTRODUCED_66,X_INTRODUCED_67,false,false,false,false,false,false,false,false,X_INTRODUCED_76,X_INTRODUCED_77,X_INTRODUCED_78,X_INTRODUCED_79,false,false,X_INTRODUCED_82,X_INTRODUCED_83,false,false,false,false,X_INTRODUCED_88,X_INTRODUCED_89,false,false,X_INTRODUCED_92,X_INTRODUCED_93,false,false,false,false,false,false,false,false,X_INTRODUCED_102,X_INTRODUCED_103,false,false,X_INTRODUCED_106,X_INTRODUCED_107,X_INTRODUCED_108,X_INTRODUCED_109,false,false,false,false,false,false,X_INTRODUCED_116,X_INTRODUCED_117,X_INTRODUCED_118,X_INTRODUCED_119,false,false,X_INTRODUCED_122,X_INTRODUCED_123,false,false,X_INTRODUCED_126,X_INTRODUCED_127,X_INTRODUCED_128,X_INTRODUCED_129,X_INTRODUCED_130,X_INTRODUCED_131,X_INTRODUCED_132,X_INTRODUCED_133,false,false]; -constraint int_lin_eq(X_INTRODUCED_255,[X_INTRODUCED_246,X_INTRODUCED_247,X_INTRODUCED_248,X_INTRODUCED_249,X_INTRODUCED_250,X_INTRODUCED_251,X_INTRODUCED_252,X_INTRODUCED_253],1); -constraint int_lin_eq(X_INTRODUCED_255,[X_INTRODUCED_257,X_INTRODUCED_258,X_INTRODUCED_259,X_INTRODUCED_260,X_INTRODUCED_261,X_INTRODUCED_262,X_INTRODUCED_263,X_INTRODUCED_264],1); -constraint int_lin_eq(X_INTRODUCED_255,[X_INTRODUCED_267,X_INTRODUCED_268,X_INTRODUCED_269,X_INTRODUCED_270,X_INTRODUCED_271,X_INTRODUCED_272,X_INTRODUCED_273,X_INTRODUCED_274],1); -constraint int_lin_eq(X_INTRODUCED_255,[X_INTRODUCED_277,X_INTRODUCED_278,X_INTRODUCED_279,X_INTRODUCED_280,X_INTRODUCED_281,X_INTRODUCED_282,X_INTRODUCED_283,X_INTRODUCED_284],1); -constraint int_lin_eq(X_INTRODUCED_255,[X_INTRODUCED_287,X_INTRODUCED_288,X_INTRODUCED_289,X_INTRODUCED_290,X_INTRODUCED_291,X_INTRODUCED_292,X_INTRODUCED_293,X_INTRODUCED_294],1); -constraint int_lin_eq(X_INTRODUCED_255,[X_INTRODUCED_297,X_INTRODUCED_298,X_INTRODUCED_299,X_INTRODUCED_300,X_INTRODUCED_301,X_INTRODUCED_302,X_INTRODUCED_303,X_INTRODUCED_304],1); -constraint int_lin_eq(X_INTRODUCED_255,[X_INTRODUCED_307,X_INTRODUCED_308,X_INTRODUCED_309,X_INTRODUCED_310,X_INTRODUCED_311,X_INTRODUCED_312,X_INTRODUCED_313,X_INTRODUCED_314],1); -constraint int_lin_eq(X_INTRODUCED_255,[X_INTRODUCED_317,X_INTRODUCED_318,X_INTRODUCED_319,X_INTRODUCED_320,X_INTRODUCED_321,X_INTRODUCED_322,X_INTRODUCED_323,X_INTRODUCED_324],1); -constraint int_lin_eq(X_INTRODUCED_255,[X_INTRODUCED_327,X_INTRODUCED_328,X_INTRODUCED_329,X_INTRODUCED_330,X_INTRODUCED_331,X_INTRODUCED_332,X_INTRODUCED_333,X_INTRODUCED_334],1); -constraint int_lin_eq(X_INTRODUCED_255,[X_INTRODUCED_337,X_INTRODUCED_338,X_INTRODUCED_339,X_INTRODUCED_340,X_INTRODUCED_341,X_INTRODUCED_342,X_INTRODUCED_343,X_INTRODUCED_344],1); -constraint int_lin_eq(X_INTRODUCED_255,[X_INTRODUCED_347,X_INTRODUCED_348,X_INTRODUCED_349,X_INTRODUCED_350,X_INTRODUCED_351,X_INTRODUCED_352,X_INTRODUCED_353,X_INTRODUCED_354],1); -constraint int_lin_eq(X_INTRODUCED_255,[X_INTRODUCED_357,X_INTRODUCED_358,X_INTRODUCED_359,X_INTRODUCED_360,X_INTRODUCED_361,X_INTRODUCED_362,X_INTRODUCED_363,X_INTRODUCED_364],1); -constraint int_lin_eq(X_INTRODUCED_255,[X_INTRODUCED_367,X_INTRODUCED_368,X_INTRODUCED_369,X_INTRODUCED_370,X_INTRODUCED_371,X_INTRODUCED_372,X_INTRODUCED_373,X_INTRODUCED_374],1); -constraint int_lin_eq(X_INTRODUCED_255,[X_INTRODUCED_377,X_INTRODUCED_378,X_INTRODUCED_379,X_INTRODUCED_380,X_INTRODUCED_381,X_INTRODUCED_382,X_INTRODUCED_383,X_INTRODUCED_384],1); -constraint int_lin_eq(X_INTRODUCED_255,[X_INTRODUCED_387,X_INTRODUCED_388,X_INTRODUCED_389,X_INTRODUCED_390,X_INTRODUCED_391,X_INTRODUCED_392,X_INTRODUCED_393,X_INTRODUCED_394],1); -constraint int_lin_eq(X_INTRODUCED_255,[X_INTRODUCED_397,X_INTRODUCED_398,X_INTRODUCED_399,X_INTRODUCED_400,X_INTRODUCED_401,X_INTRODUCED_402,X_INTRODUCED_403,X_INTRODUCED_404],1); -constraint int_lin_eq(X_INTRODUCED_255,[X_INTRODUCED_407,X_INTRODUCED_408,X_INTRODUCED_409,X_INTRODUCED_410,X_INTRODUCED_411,X_INTRODUCED_412,X_INTRODUCED_413,X_INTRODUCED_414],1); -constraint int_lin_le(X_INTRODUCED_419,[X_INTRODUCED_246,X_INTRODUCED_248,X_INTRODUCED_250,X_INTRODUCED_252],0); -constraint int_lin_le(X_INTRODUCED_419,[X_INTRODUCED_247,X_INTRODUCED_249,X_INTRODUCED_251,X_INTRODUCED_253],0); -constraint int_lin_le(X_INTRODUCED_419,[X_INTRODUCED_257,X_INTRODUCED_259,X_INTRODUCED_261,X_INTRODUCED_263],0); -constraint int_lin_le(X_INTRODUCED_419,[X_INTRODUCED_258,X_INTRODUCED_260,X_INTRODUCED_262,X_INTRODUCED_264],0); -constraint int_lin_le(X_INTRODUCED_419,[X_INTRODUCED_267,X_INTRODUCED_269,X_INTRODUCED_271,X_INTRODUCED_273],0); -constraint int_lin_le(X_INTRODUCED_419,[X_INTRODUCED_268,X_INTRODUCED_270,X_INTRODUCED_272,X_INTRODUCED_274],0); -constraint int_lin_le(X_INTRODUCED_419,[X_INTRODUCED_277,X_INTRODUCED_279,X_INTRODUCED_281,X_INTRODUCED_283],0); -constraint int_lin_le(X_INTRODUCED_419,[X_INTRODUCED_278,X_INTRODUCED_280,X_INTRODUCED_282,X_INTRODUCED_284],0); -constraint int_lin_le(X_INTRODUCED_419,[X_INTRODUCED_287,X_INTRODUCED_289,X_INTRODUCED_291,X_INTRODUCED_293],0); -constraint int_lin_le(X_INTRODUCED_419,[X_INTRODUCED_288,X_INTRODUCED_290,X_INTRODUCED_292,X_INTRODUCED_294],0); -constraint int_lin_le(X_INTRODUCED_419,[X_INTRODUCED_297,X_INTRODUCED_299,X_INTRODUCED_301,X_INTRODUCED_303],0); -constraint int_lin_le(X_INTRODUCED_419,[X_INTRODUCED_298,X_INTRODUCED_300,X_INTRODUCED_302,X_INTRODUCED_304],0); -constraint int_lin_le(X_INTRODUCED_419,[X_INTRODUCED_307,X_INTRODUCED_309,X_INTRODUCED_311,X_INTRODUCED_313],0); -constraint int_lin_le(X_INTRODUCED_419,[X_INTRODUCED_308,X_INTRODUCED_310,X_INTRODUCED_312,X_INTRODUCED_314],0); -constraint int_lin_le(X_INTRODUCED_419,[X_INTRODUCED_317,X_INTRODUCED_319,X_INTRODUCED_321,X_INTRODUCED_323],0); -constraint int_lin_le(X_INTRODUCED_419,[X_INTRODUCED_318,X_INTRODUCED_320,X_INTRODUCED_322,X_INTRODUCED_324],0); -constraint int_lin_le(X_INTRODUCED_419,[X_INTRODUCED_327,X_INTRODUCED_329,X_INTRODUCED_331,X_INTRODUCED_333],0); -constraint int_lin_le(X_INTRODUCED_419,[X_INTRODUCED_328,X_INTRODUCED_330,X_INTRODUCED_332,X_INTRODUCED_334],0); -constraint int_lin_le(X_INTRODUCED_419,[X_INTRODUCED_337,X_INTRODUCED_339,X_INTRODUCED_341,X_INTRODUCED_343],0); -constraint int_lin_le(X_INTRODUCED_419,[X_INTRODUCED_338,X_INTRODUCED_340,X_INTRODUCED_342,X_INTRODUCED_344],0); -constraint int_lin_le(X_INTRODUCED_419,[X_INTRODUCED_347,X_INTRODUCED_349,X_INTRODUCED_351,X_INTRODUCED_353],0); -constraint int_lin_le(X_INTRODUCED_419,[X_INTRODUCED_348,X_INTRODUCED_350,X_INTRODUCED_352,X_INTRODUCED_354],0); -constraint int_lin_le(X_INTRODUCED_419,[X_INTRODUCED_357,X_INTRODUCED_359,X_INTRODUCED_361,X_INTRODUCED_363],0); -constraint int_lin_le(X_INTRODUCED_419,[X_INTRODUCED_358,X_INTRODUCED_360,X_INTRODUCED_362,X_INTRODUCED_364],0); -constraint int_lin_le(X_INTRODUCED_419,[X_INTRODUCED_367,X_INTRODUCED_369,X_INTRODUCED_371,X_INTRODUCED_373],0); -constraint int_lin_le(X_INTRODUCED_419,[X_INTRODUCED_368,X_INTRODUCED_370,X_INTRODUCED_372,X_INTRODUCED_374],0); -constraint int_lin_le(X_INTRODUCED_419,[X_INTRODUCED_377,X_INTRODUCED_379,X_INTRODUCED_381,X_INTRODUCED_383],0); -constraint int_lin_le(X_INTRODUCED_419,[X_INTRODUCED_378,X_INTRODUCED_380,X_INTRODUCED_382,X_INTRODUCED_384],0); -constraint int_lin_le(X_INTRODUCED_419,[X_INTRODUCED_387,X_INTRODUCED_389,X_INTRODUCED_391,X_INTRODUCED_393],0); -constraint int_lin_le(X_INTRODUCED_419,[X_INTRODUCED_388,X_INTRODUCED_390,X_INTRODUCED_392,X_INTRODUCED_394],0); -constraint int_lin_le(X_INTRODUCED_419,[X_INTRODUCED_397,X_INTRODUCED_399,X_INTRODUCED_401,X_INTRODUCED_403],0); -constraint int_lin_le(X_INTRODUCED_419,[X_INTRODUCED_398,X_INTRODUCED_400,X_INTRODUCED_402,X_INTRODUCED_404],0); -constraint int_lin_le(X_INTRODUCED_419,[X_INTRODUCED_407,X_INTRODUCED_409,X_INTRODUCED_411,X_INTRODUCED_413],0); -constraint int_lin_le(X_INTRODUCED_419,[X_INTRODUCED_408,X_INTRODUCED_410,X_INTRODUCED_412,X_INTRODUCED_414],0); -constraint int_max(0,X_INTRODUCED_492,X_INTRODUCED_493); -constraint int_max(0,1,X_INTRODUCED_497); -constraint int_max(0,X_INTRODUCED_500,X_INTRODUCED_501); -constraint int_max(0,X_INTRODUCED_504,X_INTRODUCED_505); -constraint int_max(0,X_INTRODUCED_508,X_INTRODUCED_509); -constraint int_max(0,1,X_INTRODUCED_512); -constraint int_max(0,1,X_INTRODUCED_515); -constraint int_max(0,1,X_INTRODUCED_518); -constraint int_max(0,1,X_INTRODUCED_521); -constraint int_max(0,1,X_INTRODUCED_524); -constraint int_max(0,X_INTRODUCED_527,X_INTRODUCED_528); -constraint int_max(0,X_INTRODUCED_531,X_INTRODUCED_532); -constraint int_max(0,X_INTRODUCED_535,X_INTRODUCED_536); -constraint int_max(0,X_INTRODUCED_539,X_INTRODUCED_540); -constraint int_max(0,X_INTRODUCED_543,X_INTRODUCED_544); -constraint int_max(0,X_INTRODUCED_547,X_INTRODUCED_548); -constraint int_max(0,X_INTRODUCED_551,X_INTRODUCED_552); -constraint int_max(0,X_INTRODUCED_555,X_INTRODUCED_556); -constraint int_max(0,X_INTRODUCED_559,X_INTRODUCED_560); -constraint int_max(0,X_INTRODUCED_563,X_INTRODUCED_564); -constraint int_max(0,X_INTRODUCED_567,X_INTRODUCED_568); -constraint int_max(0,X_INTRODUCED_570,X_INTRODUCED_571); -constraint int_max(0,1,X_INTRODUCED_574); -constraint int_max(0,1,X_INTRODUCED_577); -constraint int_max(0,1,X_INTRODUCED_580); -constraint int_max(0,1,X_INTRODUCED_583); -constraint int_max(0,X_INTRODUCED_586,X_INTRODUCED_587); -constraint int_max(0,X_INTRODUCED_590,X_INTRODUCED_591); -constraint int_max(0,X_INTRODUCED_594,X_INTRODUCED_595); -constraint int_max(0,X_INTRODUCED_598,X_INTRODUCED_599); -constraint int_max(0,X_INTRODUCED_602,X_INTRODUCED_603); -constraint int_max(0,X_INTRODUCED_606,X_INTRODUCED_607); -constraint int_max(0,X_INTRODUCED_610,X_INTRODUCED_611); -constraint int_max(0,X_INTRODUCED_614,X_INTRODUCED_615); -constraint int_max(0,X_INTRODUCED_618,X_INTRODUCED_619); -constraint int_max(0,X_INTRODUCED_622,X_INTRODUCED_623); -constraint int_max(0,X_INTRODUCED_626,X_INTRODUCED_627); -constraint int_max(0,X_INTRODUCED_629,X_INTRODUCED_630); -constraint int_max(0,1,X_INTRODUCED_633); -constraint int_max(0,1,X_INTRODUCED_636); -constraint int_max(0,1,X_INTRODUCED_639); -constraint int_max(0,1,X_INTRODUCED_642); -constraint int_max(0,X_INTRODUCED_645,X_INTRODUCED_646); -constraint int_max(0,X_INTRODUCED_649,X_INTRODUCED_650); -constraint int_max(0,X_INTRODUCED_653,X_INTRODUCED_654); -constraint int_max(0,X_INTRODUCED_657,X_INTRODUCED_658); -constraint int_max(0,X_INTRODUCED_661,X_INTRODUCED_662); -constraint int_max(0,X_INTRODUCED_665,X_INTRODUCED_666); -constraint int_max(0,X_INTRODUCED_669,X_INTRODUCED_670); -constraint int_max(0,X_INTRODUCED_673,X_INTRODUCED_674); -constraint int_max(0,X_INTRODUCED_677,X_INTRODUCED_678); -constraint int_max(0,X_INTRODUCED_681,X_INTRODUCED_682); -constraint int_max(0,X_INTRODUCED_685,X_INTRODUCED_686); -constraint int_max(0,1,X_INTRODUCED_689); -constraint int_max(0,X_INTRODUCED_691,X_INTRODUCED_692); -constraint int_max(0,X_INTRODUCED_694,X_INTRODUCED_695); -constraint int_max(0,X_INTRODUCED_697,X_INTRODUCED_698); -constraint int_max(0,X_INTRODUCED_700,X_INTRODUCED_701); -constraint int_max(0,X_INTRODUCED_704,X_INTRODUCED_705); -constraint int_max(0,X_INTRODUCED_708,X_INTRODUCED_709); -constraint int_max(0,1,X_INTRODUCED_713); -constraint int_max(0,1,X_INTRODUCED_717); -constraint int_max(0,X_INTRODUCED_720,X_INTRODUCED_721); -constraint int_max(0,X_INTRODUCED_724,X_INTRODUCED_725); -constraint int_lin_eq(X_INTRODUCED_796,X_INTRODUCED_795,0):: defines_var(objective); -constraint bool2int(X_INTRODUCED_2,X_INTRODUCED_248):: defines_var(X_INTRODUCED_248); -constraint bool2int(X_INTRODUCED_3,X_INTRODUCED_249):: defines_var(X_INTRODUCED_249); -constraint bool2int(X_INTRODUCED_6,X_INTRODUCED_252):: defines_var(X_INTRODUCED_252); -constraint bool2int(X_INTRODUCED_7,X_INTRODUCED_253):: defines_var(X_INTRODUCED_253); -constraint bool2int(X_INTRODUCED_8,X_INTRODUCED_257):: defines_var(X_INTRODUCED_257); -constraint bool2int(X_INTRODUCED_9,X_INTRODUCED_258):: defines_var(X_INTRODUCED_258); -constraint bool2int(X_INTRODUCED_10,X_INTRODUCED_259):: defines_var(X_INTRODUCED_259); -constraint bool2int(X_INTRODUCED_11,X_INTRODUCED_260):: defines_var(X_INTRODUCED_260); -constraint bool2int(X_INTRODUCED_12,X_INTRODUCED_261):: defines_var(X_INTRODUCED_261); -constraint bool2int(X_INTRODUCED_13,X_INTRODUCED_262):: defines_var(X_INTRODUCED_262); -constraint bool2int(X_INTRODUCED_20,X_INTRODUCED_271):: defines_var(X_INTRODUCED_271); -constraint bool2int(X_INTRODUCED_21,X_INTRODUCED_272):: defines_var(X_INTRODUCED_272); -constraint bool2int(X_INTRODUCED_22,X_INTRODUCED_273):: defines_var(X_INTRODUCED_273); -constraint bool2int(X_INTRODUCED_23,X_INTRODUCED_274):: defines_var(X_INTRODUCED_274); -constraint bool2int(X_INTRODUCED_24,X_INTRODUCED_277):: defines_var(X_INTRODUCED_277); -constraint bool2int(X_INTRODUCED_25,X_INTRODUCED_278):: defines_var(X_INTRODUCED_278); -constraint bool2int(X_INTRODUCED_26,X_INTRODUCED_279):: defines_var(X_INTRODUCED_279); -constraint bool2int(X_INTRODUCED_27,X_INTRODUCED_280):: defines_var(X_INTRODUCED_280); -constraint bool2int(X_INTRODUCED_28,X_INTRODUCED_281):: defines_var(X_INTRODUCED_281); -constraint bool2int(X_INTRODUCED_29,X_INTRODUCED_282):: defines_var(X_INTRODUCED_282); -constraint bool2int(X_INTRODUCED_32,X_INTRODUCED_287):: defines_var(X_INTRODUCED_287); -constraint bool2int(X_INTRODUCED_33,X_INTRODUCED_288):: defines_var(X_INTRODUCED_288); -constraint bool2int(X_INTRODUCED_34,X_INTRODUCED_289):: defines_var(X_INTRODUCED_289); -constraint bool2int(X_INTRODUCED_35,X_INTRODUCED_290):: defines_var(X_INTRODUCED_290); -constraint bool2int(X_INTRODUCED_40,X_INTRODUCED_297):: defines_var(X_INTRODUCED_297); -constraint bool2int(X_INTRODUCED_41,X_INTRODUCED_298):: defines_var(X_INTRODUCED_298); -constraint bool2int(X_INTRODUCED_46,X_INTRODUCED_303):: defines_var(X_INTRODUCED_303); -constraint bool2int(X_INTRODUCED_47,X_INTRODUCED_304):: defines_var(X_INTRODUCED_304); -constraint bool2int(X_INTRODUCED_50,X_INTRODUCED_309):: defines_var(X_INTRODUCED_309); -constraint bool2int(X_INTRODUCED_51,X_INTRODUCED_310):: defines_var(X_INTRODUCED_310); -constraint bool2int(X_INTRODUCED_52,X_INTRODUCED_311):: defines_var(X_INTRODUCED_311); -constraint bool2int(X_INTRODUCED_53,X_INTRODUCED_312):: defines_var(X_INTRODUCED_312); -constraint bool2int(X_INTRODUCED_58,X_INTRODUCED_319):: defines_var(X_INTRODUCED_319); -constraint bool2int(X_INTRODUCED_59,X_INTRODUCED_320):: defines_var(X_INTRODUCED_320); -constraint bool2int(X_INTRODUCED_60,X_INTRODUCED_321):: defines_var(X_INTRODUCED_321); -constraint bool2int(X_INTRODUCED_61,X_INTRODUCED_322):: defines_var(X_INTRODUCED_322); -constraint bool2int(X_INTRODUCED_62,X_INTRODUCED_323):: defines_var(X_INTRODUCED_323); -constraint bool2int(X_INTRODUCED_63,X_INTRODUCED_324):: defines_var(X_INTRODUCED_324); -constraint bool2int(X_INTRODUCED_66,X_INTRODUCED_329):: defines_var(X_INTRODUCED_329); -constraint bool2int(X_INTRODUCED_67,X_INTRODUCED_330):: defines_var(X_INTRODUCED_330); -constraint bool2int(X_INTRODUCED_76,X_INTRODUCED_341):: defines_var(X_INTRODUCED_341); -constraint bool2int(X_INTRODUCED_77,X_INTRODUCED_342):: defines_var(X_INTRODUCED_342); -constraint bool2int(X_INTRODUCED_78,X_INTRODUCED_343):: defines_var(X_INTRODUCED_343); -constraint bool2int(X_INTRODUCED_79,X_INTRODUCED_344):: defines_var(X_INTRODUCED_344); -constraint bool2int(X_INTRODUCED_82,X_INTRODUCED_349):: defines_var(X_INTRODUCED_349); -constraint bool2int(X_INTRODUCED_83,X_INTRODUCED_350):: defines_var(X_INTRODUCED_350); -constraint bool2int(X_INTRODUCED_88,X_INTRODUCED_357):: defines_var(X_INTRODUCED_357); -constraint bool2int(X_INTRODUCED_89,X_INTRODUCED_358):: defines_var(X_INTRODUCED_358); -constraint bool2int(X_INTRODUCED_92,X_INTRODUCED_361):: defines_var(X_INTRODUCED_361); -constraint bool2int(X_INTRODUCED_93,X_INTRODUCED_362):: defines_var(X_INTRODUCED_362); -constraint bool2int(X_INTRODUCED_102,X_INTRODUCED_373):: defines_var(X_INTRODUCED_373); -constraint bool2int(X_INTRODUCED_103,X_INTRODUCED_374):: defines_var(X_INTRODUCED_374); -constraint bool2int(X_INTRODUCED_106,X_INTRODUCED_379):: defines_var(X_INTRODUCED_379); -constraint bool2int(X_INTRODUCED_107,X_INTRODUCED_380):: defines_var(X_INTRODUCED_380); -constraint bool2int(X_INTRODUCED_108,X_INTRODUCED_381):: defines_var(X_INTRODUCED_381); -constraint bool2int(X_INTRODUCED_109,X_INTRODUCED_382):: defines_var(X_INTRODUCED_382); -constraint bool2int(X_INTRODUCED_116,X_INTRODUCED_391):: defines_var(X_INTRODUCED_391); -constraint bool2int(X_INTRODUCED_117,X_INTRODUCED_392):: defines_var(X_INTRODUCED_392); -constraint bool2int(X_INTRODUCED_118,X_INTRODUCED_393):: defines_var(X_INTRODUCED_393); -constraint bool2int(X_INTRODUCED_119,X_INTRODUCED_394):: defines_var(X_INTRODUCED_394); -constraint bool2int(X_INTRODUCED_122,X_INTRODUCED_399):: defines_var(X_INTRODUCED_399); -constraint bool2int(X_INTRODUCED_123,X_INTRODUCED_400):: defines_var(X_INTRODUCED_400); -constraint bool2int(X_INTRODUCED_126,X_INTRODUCED_403):: defines_var(X_INTRODUCED_403); -constraint bool2int(X_INTRODUCED_127,X_INTRODUCED_404):: defines_var(X_INTRODUCED_404); -constraint bool2int(X_INTRODUCED_128,X_INTRODUCED_407):: defines_var(X_INTRODUCED_407); -constraint bool2int(X_INTRODUCED_129,X_INTRODUCED_408):: defines_var(X_INTRODUCED_408); -constraint bool2int(X_INTRODUCED_130,X_INTRODUCED_409):: defines_var(X_INTRODUCED_409); -constraint bool2int(X_INTRODUCED_131,X_INTRODUCED_410):: defines_var(X_INTRODUCED_410); -constraint bool2int(X_INTRODUCED_132,X_INTRODUCED_411):: defines_var(X_INTRODUCED_411); -constraint bool2int(X_INTRODUCED_133,X_INTRODUCED_412):: defines_var(X_INTRODUCED_412); -constraint int_lin_eq([-1,-1,-1,-1,-1],[X_INTRODUCED_277,X_INTRODUCED_287,X_INTRODUCED_297,X_INTRODUCED_407,X_INTRODUCED_492],-1):: defines_var(X_INTRODUCED_492); -constraint int_lin_eq([-1,-1,-1,-1,-1,-1],[X_INTRODUCED_257,X_INTRODUCED_277,X_INTRODUCED_297,X_INTRODUCED_357,X_INTRODUCED_407,X_INTRODUCED_500],-1):: defines_var(X_INTRODUCED_500); -constraint int_lin_eq([-1,-1,-1],[X_INTRODUCED_258,X_INTRODUCED_278,X_INTRODUCED_504],-1):: defines_var(X_INTRODUCED_504); -constraint int_lin_eq([-1,-1],[X_INTRODUCED_258,X_INTRODUCED_508],-1):: defines_var(X_INTRODUCED_508); -constraint int_lin_eq([-1,-1,-1],[X_INTRODUCED_277,X_INTRODUCED_297,X_INTRODUCED_527],-1):: defines_var(X_INTRODUCED_527); -constraint int_lin_eq([-1,-1,-1],[X_INTRODUCED_278,X_INTRODUCED_298,X_INTRODUCED_531],-1):: defines_var(X_INTRODUCED_531); -constraint int_lin_eq([-1,-1],[X_INTRODUCED_277,X_INTRODUCED_535],-1):: defines_var(X_INTRODUCED_535); -constraint int_lin_eq([-1,-1],[X_INTRODUCED_278,X_INTRODUCED_539],-1):: defines_var(X_INTRODUCED_539); -constraint int_lin_eq([-1,-1,-1,-1,-1,-1,-1],[X_INTRODUCED_258,X_INTRODUCED_278,X_INTRODUCED_288,X_INTRODUCED_298,X_INTRODUCED_358,X_INTRODUCED_408,X_INTRODUCED_543],-2):: defines_var(X_INTRODUCED_543); -constraint int_lin_eq([-1,-1,-1,-1,-1,-1,-1],[X_INTRODUCED_257,X_INTRODUCED_277,X_INTRODUCED_287,X_INTRODUCED_297,X_INTRODUCED_357,X_INTRODUCED_407,X_INTRODUCED_547],-2):: defines_var(X_INTRODUCED_547); -constraint int_lin_eq([-1,-1,-1,-1,-1,-1,-1,-1,-1],[X_INTRODUCED_248,X_INTRODUCED_279,X_INTRODUCED_289,X_INTRODUCED_309,X_INTRODUCED_349,X_INTRODUCED_379,X_INTRODUCED_399,X_INTRODUCED_409,X_INTRODUCED_551],-1):: defines_var(X_INTRODUCED_551); -constraint int_lin_eq([-1,-1,-1,-1,-1],[X_INTRODUCED_310,X_INTRODUCED_330,X_INTRODUCED_350,X_INTRODUCED_380,X_INTRODUCED_555],-1):: defines_var(X_INTRODUCED_555); -constraint int_lin_eq([-1,-1,-1,-1,-1,-1],[X_INTRODUCED_259,X_INTRODUCED_279,X_INTRODUCED_319,X_INTRODUCED_399,X_INTRODUCED_409,X_INTRODUCED_559],-1):: defines_var(X_INTRODUCED_559); -constraint int_lin_eq([-1,-1,-1,-1,-1],[X_INTRODUCED_260,X_INTRODUCED_280,X_INTRODUCED_310,X_INTRODUCED_320,X_INTRODUCED_563],-1):: defines_var(X_INTRODUCED_563); -constraint int_lin_eq([-1,-1,-1],[X_INTRODUCED_260,X_INTRODUCED_320,X_INTRODUCED_567],-1):: defines_var(X_INTRODUCED_567); -constraint int_lin_eq([-1,-1],[X_INTRODUCED_380,X_INTRODUCED_570],-1):: defines_var(X_INTRODUCED_570); -constraint int_lin_eq([-1,-1,-1],[X_INTRODUCED_279,X_INTRODUCED_379,X_INTRODUCED_586],-1):: defines_var(X_INTRODUCED_586); -constraint int_lin_eq([-1,-1,-1],[X_INTRODUCED_280,X_INTRODUCED_380,X_INTRODUCED_590],-1):: defines_var(X_INTRODUCED_590); -constraint int_lin_eq([-1,-1,-1],[X_INTRODUCED_279,X_INTRODUCED_379,X_INTRODUCED_594],-1):: defines_var(X_INTRODUCED_594); -constraint int_lin_eq([-1,-1,-1],[X_INTRODUCED_280,X_INTRODUCED_380,X_INTRODUCED_598],-1):: defines_var(X_INTRODUCED_598); -constraint int_lin_eq([-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1],[X_INTRODUCED_249,X_INTRODUCED_260,X_INTRODUCED_280,X_INTRODUCED_290,X_INTRODUCED_310,X_INTRODUCED_320,X_INTRODUCED_330,X_INTRODUCED_350,X_INTRODUCED_380,X_INTRODUCED_400,X_INTRODUCED_410,X_INTRODUCED_602],-2):: defines_var(X_INTRODUCED_602); -constraint int_lin_eq([-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1],[X_INTRODUCED_248,X_INTRODUCED_259,X_INTRODUCED_279,X_INTRODUCED_289,X_INTRODUCED_309,X_INTRODUCED_319,X_INTRODUCED_329,X_INTRODUCED_349,X_INTRODUCED_379,X_INTRODUCED_399,X_INTRODUCED_409,X_INTRODUCED_606],-2):: defines_var(X_INTRODUCED_606); -constraint int_lin_eq([-1,-1,-1,-1,-1,-1,-1],[X_INTRODUCED_271,X_INTRODUCED_281,X_INTRODUCED_311,X_INTRODUCED_381,X_INTRODUCED_391,X_INTRODUCED_411,X_INTRODUCED_610],-1):: defines_var(X_INTRODUCED_610); -constraint int_lin_eq([-1,-1,-1,-1],[X_INTRODUCED_312,X_INTRODUCED_342,X_INTRODUCED_382,X_INTRODUCED_614],-1):: defines_var(X_INTRODUCED_614); -constraint int_lin_eq([-1,-1,-1,-1,-1,-1,-1],[X_INTRODUCED_261,X_INTRODUCED_281,X_INTRODUCED_321,X_INTRODUCED_341,X_INTRODUCED_361,X_INTRODUCED_411,X_INTRODUCED_618],-1):: defines_var(X_INTRODUCED_618); -constraint int_lin_eq([-1,-1,-1,-1,-1,-1],[X_INTRODUCED_262,X_INTRODUCED_282,X_INTRODUCED_312,X_INTRODUCED_322,X_INTRODUCED_392,X_INTRODUCED_622],-1):: defines_var(X_INTRODUCED_622); -constraint int_lin_eq([-1,-1,-1,-1],[X_INTRODUCED_262,X_INTRODUCED_322,X_INTRODUCED_342,X_INTRODUCED_626],-1):: defines_var(X_INTRODUCED_626); -constraint int_lin_eq([-1,-1],[X_INTRODUCED_382,X_INTRODUCED_629],-1):: defines_var(X_INTRODUCED_629); -constraint int_lin_eq([-1,-1,-1],[X_INTRODUCED_281,X_INTRODUCED_381,X_INTRODUCED_645],-1):: defines_var(X_INTRODUCED_645); -constraint int_lin_eq([-1,-1,-1],[X_INTRODUCED_282,X_INTRODUCED_382,X_INTRODUCED_649],-1):: defines_var(X_INTRODUCED_649); -constraint int_lin_eq([-1,-1,-1],[X_INTRODUCED_281,X_INTRODUCED_381,X_INTRODUCED_653],-1):: defines_var(X_INTRODUCED_653); -constraint int_lin_eq([-1,-1,-1],[X_INTRODUCED_282,X_INTRODUCED_382,X_INTRODUCED_657],-1):: defines_var(X_INTRODUCED_657); -constraint int_lin_eq([-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1],[X_INTRODUCED_262,X_INTRODUCED_272,X_INTRODUCED_282,X_INTRODUCED_312,X_INTRODUCED_322,X_INTRODUCED_342,X_INTRODUCED_362,X_INTRODUCED_382,X_INTRODUCED_392,X_INTRODUCED_412,X_INTRODUCED_661],-2):: defines_var(X_INTRODUCED_661); -constraint int_lin_eq([-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1],[X_INTRODUCED_261,X_INTRODUCED_271,X_INTRODUCED_281,X_INTRODUCED_311,X_INTRODUCED_321,X_INTRODUCED_341,X_INTRODUCED_361,X_INTRODUCED_381,X_INTRODUCED_391,X_INTRODUCED_411,X_INTRODUCED_665],-2):: defines_var(X_INTRODUCED_665); -constraint int_lin_eq([-1,-1,-1,-1,-1,-1],[X_INTRODUCED_252,X_INTRODUCED_273,X_INTRODUCED_303,X_INTRODUCED_393,X_INTRODUCED_403,X_INTRODUCED_669],-1):: defines_var(X_INTRODUCED_669); -constraint int_lin_eq([-1,-1],[X_INTRODUCED_344,X_INTRODUCED_673],-1):: defines_var(X_INTRODUCED_673); -constraint int_lin_eq([-1,-1,-1,-1,-1],[X_INTRODUCED_303,X_INTRODUCED_323,X_INTRODUCED_343,X_INTRODUCED_403,X_INTRODUCED_677],-1):: defines_var(X_INTRODUCED_677); -constraint int_lin_eq([-1,-1,-1],[X_INTRODUCED_324,X_INTRODUCED_394,X_INTRODUCED_681],-1):: defines_var(X_INTRODUCED_681); -constraint int_lin_eq([-1,-1,-1],[X_INTRODUCED_324,X_INTRODUCED_344,X_INTRODUCED_685],-1):: defines_var(X_INTRODUCED_685); -constraint int_lin_eq([-1,-1],[X_INTRODUCED_373,X_INTRODUCED_691],-1):: defines_var(X_INTRODUCED_691); -constraint int_lin_eq([-1,-1],[X_INTRODUCED_374,X_INTRODUCED_694],-1):: defines_var(X_INTRODUCED_694); -constraint int_lin_eq([-1,-1],[X_INTRODUCED_373,X_INTRODUCED_697],-1):: defines_var(X_INTRODUCED_697); -constraint int_lin_eq([-1,-1],[X_INTRODUCED_374,X_INTRODUCED_700],-1):: defines_var(X_INTRODUCED_700); -constraint int_lin_eq([-1,-1,-1],[X_INTRODUCED_303,X_INTRODUCED_373,X_INTRODUCED_704],-1):: defines_var(X_INTRODUCED_704); -constraint int_lin_eq([-1,-1,-1],[X_INTRODUCED_304,X_INTRODUCED_374,X_INTRODUCED_708],-1):: defines_var(X_INTRODUCED_708); -constraint int_lin_eq([-1,-1,-1,-1,-1,-1,-1,-1,-1],[X_INTRODUCED_253,X_INTRODUCED_274,X_INTRODUCED_304,X_INTRODUCED_324,X_INTRODUCED_344,X_INTRODUCED_374,X_INTRODUCED_394,X_INTRODUCED_404,X_INTRODUCED_720],-2):: defines_var(X_INTRODUCED_720); -constraint int_lin_eq([-1,-1,-1,-1,-1,-1,-1,-1,-1],[X_INTRODUCED_252,X_INTRODUCED_273,X_INTRODUCED_303,X_INTRODUCED_323,X_INTRODUCED_343,X_INTRODUCED_373,X_INTRODUCED_393,X_INTRODUCED_403,X_INTRODUCED_724],-2):: defines_var(X_INTRODUCED_724); -solve :: bool_search(X_INTRODUCED_798,occurrence,indomain_random,complete) minimize objective; \ No newline at end of file diff --git a/examples/tests/issue115b.fzn b/examples/tests/issue115b.fzn deleted file mode 100644 index 3532428e4a..0000000000 --- a/examples/tests/issue115b.fzn +++ /dev/null @@ -1,777 +0,0 @@ -predicate maximum_int(var int: m,array [int] of var int: x); -predicate minimum_int(var int: m,array [int] of var int: x); -array [1..8] of int: X_INTRODUCED_313 = [1,1,1,1,1,1,1,1]; -array [1..4] of int: X_INTRODUCED_538 = [-1,-1,-1,-1]; -array [1..14] of int: X_INTRODUCED_633 = [1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1]; -array [1..7] of int: X_INTRODUCED_657 = [1,-1,-1,-1,-1,-1,-1]; -array [1..11] of int: X_INTRODUCED_675 = [1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1]; -array [1..8] of int: X_INTRODUCED_699 = [1,-1,-1,-1,-1,-1,-1,-1]; -array [1..6] of int: X_INTRODUCED_716 = [1,-1,-1,-1,-1,-1]; -array [1..5] of int: X_INTRODUCED_741 = [1,-1,-1,-1,-1]; -array [1..3] of int: X_INTRODUCED_782 = [1,-1,-1]; -array [1..9] of int: X_INTRODUCED_815 = [1,-1,-1,-1,-1,-1,-1,-1,-1]; -array [1..29] of int: X_INTRODUCED_909 = [1,-3,-3,-3,-3,-3,-3,-3,-3,-3,-3,-1,-1,-1,-1,-1,-1,-2,-2,-2,-2,1,1,1,1,1,1,1,1]; -var bool: X_INTRODUCED_2; -var bool: X_INTRODUCED_3; -var bool: X_INTRODUCED_6; -var bool: X_INTRODUCED_7; -var bool: X_INTRODUCED_8; -var bool: X_INTRODUCED_9; -var bool: X_INTRODUCED_10; -var bool: X_INTRODUCED_11; -var bool: X_INTRODUCED_12; -var bool: X_INTRODUCED_13; -var bool: X_INTRODUCED_20; -var bool: X_INTRODUCED_21; -var bool: X_INTRODUCED_22; -var bool: X_INTRODUCED_23; -var bool: X_INTRODUCED_24; -var bool: X_INTRODUCED_25; -var bool: X_INTRODUCED_26; -var bool: X_INTRODUCED_27; -var bool: X_INTRODUCED_28; -var bool: X_INTRODUCED_29; -var bool: X_INTRODUCED_32; -var bool: X_INTRODUCED_33; -var bool: X_INTRODUCED_34; -var bool: X_INTRODUCED_35; -var bool: X_INTRODUCED_40; -var bool: X_INTRODUCED_41; -var bool: X_INTRODUCED_46; -var bool: X_INTRODUCED_47; -var bool: X_INTRODUCED_50; -var bool: X_INTRODUCED_51; -var bool: X_INTRODUCED_52; -var bool: X_INTRODUCED_53; -var bool: X_INTRODUCED_58; -var bool: X_INTRODUCED_59; -var bool: X_INTRODUCED_60; -var bool: X_INTRODUCED_61; -var bool: X_INTRODUCED_62; -var bool: X_INTRODUCED_63; -var bool: X_INTRODUCED_66; -var bool: X_INTRODUCED_67; -var bool: X_INTRODUCED_76; -var bool: X_INTRODUCED_77; -var bool: X_INTRODUCED_78; -var bool: X_INTRODUCED_79; -var bool: X_INTRODUCED_82; -var bool: X_INTRODUCED_83; -var bool: X_INTRODUCED_88; -var bool: X_INTRODUCED_89; -var bool: X_INTRODUCED_92; -var bool: X_INTRODUCED_93; -var bool: X_INTRODUCED_102; -var bool: X_INTRODUCED_103; -var bool: X_INTRODUCED_106; -var bool: X_INTRODUCED_107; -var bool: X_INTRODUCED_108; -var bool: X_INTRODUCED_109; -var bool: X_INTRODUCED_116; -var bool: X_INTRODUCED_117; -var bool: X_INTRODUCED_118; -var bool: X_INTRODUCED_119; -var bool: X_INTRODUCED_122; -var bool: X_INTRODUCED_123; -var bool: X_INTRODUCED_126; -var bool: X_INTRODUCED_127; -var bool: X_INTRODUCED_128; -var bool: X_INTRODUCED_129; -var bool: X_INTRODUCED_130; -var bool: X_INTRODUCED_131; -var bool: X_INTRODUCED_132; -var bool: X_INTRODUCED_133; -var bool: X_INTRODUCED_138; -var bool: X_INTRODUCED_139; -var bool: X_INTRODUCED_142; -var bool: X_INTRODUCED_143; -var bool: X_INTRODUCED_148; -var bool: X_INTRODUCED_149; -var bool: X_INTRODUCED_152; -var bool: X_INTRODUCED_153; -var bool: X_INTRODUCED_156; -var bool: X_INTRODUCED_157; -var bool: X_INTRODUCED_162; -var bool: X_INTRODUCED_163; -var bool: X_INTRODUCED_166; -var bool: X_INTRODUCED_167; -var bool: X_INTRODUCED_172; -var bool: X_INTRODUCED_173; -var bool: X_INTRODUCED_178; -var bool: X_INTRODUCED_179; -var bool: X_INTRODUCED_182; -var bool: X_INTRODUCED_183; -var 0..13: X_INTRODUCED_184:: is_defined_var; -var 0..13: X_INTRODUCED_185:: is_defined_var; -var 0..13: X_INTRODUCED_186:: is_defined_var; -var 0..13: X_INTRODUCED_187:: is_defined_var; -var 0..13: X_INTRODUCED_188:: is_defined_var; -var 0..13: X_INTRODUCED_189:: is_defined_var; -var 0..13: X_INTRODUCED_190:: is_defined_var; -var 0..13: X_INTRODUCED_191:: is_defined_var; -var 0..6: X_INTRODUCED_192:: is_defined_var; -var 0..6: X_INTRODUCED_193:: is_defined_var; -var 0..6: X_INTRODUCED_194:: is_defined_var; -var 0..6: X_INTRODUCED_195:: is_defined_var; -var 0..6: X_INTRODUCED_196:: is_defined_var; -var 0..6: X_INTRODUCED_197:: is_defined_var; -var 0..6: X_INTRODUCED_198:: is_defined_var; -var 0..6: X_INTRODUCED_199:: is_defined_var; -var 0..10: X_INTRODUCED_200:: is_defined_var; -var 0..10: X_INTRODUCED_201:: is_defined_var; -var 0..10: X_INTRODUCED_202:: is_defined_var; -var 0..10: X_INTRODUCED_203:: is_defined_var; -var 0..10: X_INTRODUCED_204:: is_defined_var; -var 0..10: X_INTRODUCED_205:: is_defined_var; -var 0..10: X_INTRODUCED_206:: is_defined_var; -var 0..10: X_INTRODUCED_207:: is_defined_var; -var 0..7: X_INTRODUCED_208:: is_defined_var; -var 0..7: X_INTRODUCED_209:: is_defined_var; -var 0..7: X_INTRODUCED_210:: is_defined_var; -var 0..7: X_INTRODUCED_211:: is_defined_var; -var 0..7: X_INTRODUCED_212:: is_defined_var; -var 0..7: X_INTRODUCED_213:: is_defined_var; -var 0..7: X_INTRODUCED_214:: is_defined_var; -var 0..7: X_INTRODUCED_215:: is_defined_var; -var 0..5: X_INTRODUCED_216:: is_defined_var; -var 0..5: X_INTRODUCED_217:: is_defined_var; -var 0..5: X_INTRODUCED_218:: is_defined_var; -var 0..5: X_INTRODUCED_219:: is_defined_var; -var 0..5: X_INTRODUCED_220:: is_defined_var; -var 0..5: X_INTRODUCED_221:: is_defined_var; -var 0..5: X_INTRODUCED_222:: is_defined_var; -var 0..5: X_INTRODUCED_223:: is_defined_var; -var 0..4: X_INTRODUCED_232:: is_defined_var; -var 0..4: X_INTRODUCED_233:: is_defined_var; -var 0..4: X_INTRODUCED_234:: is_defined_var; -var 0..4: X_INTRODUCED_235:: is_defined_var; -var 0..4: X_INTRODUCED_236:: is_defined_var; -var 0..4: X_INTRODUCED_237:: is_defined_var; -var 0..4: X_INTRODUCED_238:: is_defined_var; -var 0..4: X_INTRODUCED_239:: is_defined_var; -var 0..4: X_INTRODUCED_240:: is_defined_var; -var 0..4: X_INTRODUCED_241:: is_defined_var; -var 0..4: X_INTRODUCED_242:: is_defined_var; -var 0..4: X_INTRODUCED_243:: is_defined_var; -var 0..4: X_INTRODUCED_244:: is_defined_var; -var 0..4: X_INTRODUCED_245:: is_defined_var; -var 0..4: X_INTRODUCED_246:: is_defined_var; -var 0..4: X_INTRODUCED_247:: is_defined_var; -var 0..4: X_INTRODUCED_248:: is_defined_var; -var 0..4: X_INTRODUCED_249:: is_defined_var; -var 0..4: X_INTRODUCED_250:: is_defined_var; -var 0..4: X_INTRODUCED_251:: is_defined_var; -var 0..4: X_INTRODUCED_252:: is_defined_var; -var 0..4: X_INTRODUCED_253:: is_defined_var; -var 0..4: X_INTRODUCED_254:: is_defined_var; -var 0..4: X_INTRODUCED_255:: is_defined_var; -var 0..2: X_INTRODUCED_256:: is_defined_var; -var 0..2: X_INTRODUCED_257:: is_defined_var; -var 0..2: X_INTRODUCED_258:: is_defined_var; -var 0..2: X_INTRODUCED_259:: is_defined_var; -var 0..2: X_INTRODUCED_260:: is_defined_var; -var 0..2: X_INTRODUCED_261:: is_defined_var; -var 0..2: X_INTRODUCED_262:: is_defined_var; -var 0..2: X_INTRODUCED_263:: is_defined_var; -var int: X_INTRODUCED_264; -var int: X_INTRODUCED_265; -var int: X_INTRODUCED_266; -var int: X_INTRODUCED_267; -var int: X_INTRODUCED_268; -var int: X_INTRODUCED_269; -var int: X_INTRODUCED_270; -var int: X_INTRODUCED_271; -var int: X_INTRODUCED_272; -var int: X_INTRODUCED_273; -var int: X_INTRODUCED_274; -var int: X_INTRODUCED_275; -var int: X_INTRODUCED_276; -var int: X_INTRODUCED_277; -var int: X_INTRODUCED_278; -var int: X_INTRODUCED_279; -var int: X_INTRODUCED_280; -var int: X_INTRODUCED_281; -var int: X_INTRODUCED_282; -var int: X_INTRODUCED_283; -var 0..52: X_INTRODUCED_284:: is_defined_var; -var 0..24: X_INTRODUCED_285:: is_defined_var; -var 0..40: X_INTRODUCED_286:: is_defined_var; -var 0..28: X_INTRODUCED_287:: is_defined_var; -var 0..20: X_INTRODUCED_288:: is_defined_var; -var int: X_INTRODUCED_289:: is_defined_var; -var 0..32: X_INTRODUCED_290:: is_defined_var; -var 0..32: X_INTRODUCED_291:: is_defined_var; -var 0..32: X_INTRODUCED_292:: is_defined_var; -var 0..16: X_INTRODUCED_293:: is_defined_var; -var int: objective:: output_var:: is_defined_var; -var 3..3: target:: output_var; -var 0..1: X_INTRODUCED_306 ::var_is_introduced :: is_defined_var; -var 0..1: X_INTRODUCED_307 ::var_is_introduced :: is_defined_var; -var 0..1: X_INTRODUCED_310 ::var_is_introduced :: is_defined_var; -var 0..1: X_INTRODUCED_311 ::var_is_introduced :: is_defined_var; -var 0..1: X_INTRODUCED_315 ::var_is_introduced :: is_defined_var; -var 0..1: X_INTRODUCED_316 ::var_is_introduced :: is_defined_var; -var 0..1: X_INTRODUCED_317 ::var_is_introduced :: is_defined_var; -var 0..1: X_INTRODUCED_318 ::var_is_introduced :: is_defined_var; -var 0..1: X_INTRODUCED_319 ::var_is_introduced :: is_defined_var; -var 0..1: X_INTRODUCED_320 ::var_is_introduced :: is_defined_var; -var 0..1: X_INTRODUCED_329 ::var_is_introduced :: is_defined_var; -var 0..1: X_INTRODUCED_330 ::var_is_introduced :: is_defined_var; -var 0..1: X_INTRODUCED_331 ::var_is_introduced :: is_defined_var; -var 0..1: X_INTRODUCED_332 ::var_is_introduced :: is_defined_var; -var 0..1: X_INTRODUCED_335 ::var_is_introduced :: is_defined_var; -var 0..1: X_INTRODUCED_336 ::var_is_introduced :: is_defined_var; -var 0..1: X_INTRODUCED_337 ::var_is_introduced :: is_defined_var; -var 0..1: X_INTRODUCED_338 ::var_is_introduced :: is_defined_var; -var 0..1: X_INTRODUCED_339 ::var_is_introduced :: is_defined_var; -var 0..1: X_INTRODUCED_340 ::var_is_introduced :: is_defined_var; -var 0..1: X_INTRODUCED_345 ::var_is_introduced :: is_defined_var; -var 0..1: X_INTRODUCED_346 ::var_is_introduced :: is_defined_var; -var 0..1: X_INTRODUCED_347 ::var_is_introduced :: is_defined_var; -var 0..1: X_INTRODUCED_348 ::var_is_introduced :: is_defined_var; -var 0..1: X_INTRODUCED_355 ::var_is_introduced :: is_defined_var; -var 0..1: X_INTRODUCED_356 ::var_is_introduced :: is_defined_var; -var 0..1: X_INTRODUCED_361 ::var_is_introduced :: is_defined_var; -var 0..1: X_INTRODUCED_362 ::var_is_introduced :: is_defined_var; -var 0..1: X_INTRODUCED_367 ::var_is_introduced :: is_defined_var; -var 0..1: X_INTRODUCED_368 ::var_is_introduced :: is_defined_var; -var 0..1: X_INTRODUCED_369 ::var_is_introduced :: is_defined_var; -var 0..1: X_INTRODUCED_370 ::var_is_introduced :: is_defined_var; -var 0..1: X_INTRODUCED_377 ::var_is_introduced :: is_defined_var; -var 0..1: X_INTRODUCED_378 ::var_is_introduced :: is_defined_var; -var 0..1: X_INTRODUCED_379 ::var_is_introduced :: is_defined_var; -var 0..1: X_INTRODUCED_380 ::var_is_introduced :: is_defined_var; -var 0..1: X_INTRODUCED_381 ::var_is_introduced :: is_defined_var; -var 0..1: X_INTRODUCED_382 ::var_is_introduced :: is_defined_var; -var 0..1: X_INTRODUCED_387 ::var_is_introduced :: is_defined_var; -var 0..1: X_INTRODUCED_388 ::var_is_introduced :: is_defined_var; -var 0..1: X_INTRODUCED_399 ::var_is_introduced :: is_defined_var; -var 0..1: X_INTRODUCED_400 ::var_is_introduced :: is_defined_var; -var 0..1: X_INTRODUCED_401 ::var_is_introduced :: is_defined_var; -var 0..1: X_INTRODUCED_402 ::var_is_introduced :: is_defined_var; -var 0..1: X_INTRODUCED_407 ::var_is_introduced :: is_defined_var; -var 0..1: X_INTRODUCED_408 ::var_is_introduced :: is_defined_var; -var 0..1: X_INTRODUCED_415 ::var_is_introduced :: is_defined_var; -var 0..1: X_INTRODUCED_416 ::var_is_introduced :: is_defined_var; -var 0..1: X_INTRODUCED_419 ::var_is_introduced :: is_defined_var; -var 0..1: X_INTRODUCED_420 ::var_is_introduced :: is_defined_var; -var 0..1: X_INTRODUCED_431 ::var_is_introduced :: is_defined_var; -var 0..1: X_INTRODUCED_432 ::var_is_introduced :: is_defined_var; -var 0..1: X_INTRODUCED_437 ::var_is_introduced :: is_defined_var; -var 0..1: X_INTRODUCED_438 ::var_is_introduced :: is_defined_var; -var 0..1: X_INTRODUCED_439 ::var_is_introduced :: is_defined_var; -var 0..1: X_INTRODUCED_440 ::var_is_introduced :: is_defined_var; -var 0..1: X_INTRODUCED_449 ::var_is_introduced :: is_defined_var; -var 0..1: X_INTRODUCED_450 ::var_is_introduced :: is_defined_var; -var 0..1: X_INTRODUCED_451 ::var_is_introduced :: is_defined_var; -var 0..1: X_INTRODUCED_452 ::var_is_introduced :: is_defined_var; -var 0..1: X_INTRODUCED_457 ::var_is_introduced :: is_defined_var; -var 0..1: X_INTRODUCED_458 ::var_is_introduced :: is_defined_var; -var 0..1: X_INTRODUCED_461 ::var_is_introduced :: is_defined_var; -var 0..1: X_INTRODUCED_462 ::var_is_introduced :: is_defined_var; -var 0..1: X_INTRODUCED_465 ::var_is_introduced :: is_defined_var; -var 0..1: X_INTRODUCED_466 ::var_is_introduced :: is_defined_var; -var 0..1: X_INTRODUCED_467 ::var_is_introduced :: is_defined_var; -var 0..1: X_INTRODUCED_468 ::var_is_introduced :: is_defined_var; -var 0..1: X_INTRODUCED_469 ::var_is_introduced :: is_defined_var; -var 0..1: X_INTRODUCED_470 ::var_is_introduced :: is_defined_var; -var 0..1: X_INTRODUCED_477 ::var_is_introduced :: is_defined_var; -var 0..1: X_INTRODUCED_478 ::var_is_introduced :: is_defined_var; -var 0..1: X_INTRODUCED_481 ::var_is_introduced :: is_defined_var; -var 0..1: X_INTRODUCED_482 ::var_is_introduced :: is_defined_var; -var 0..1: X_INTRODUCED_489 ::var_is_introduced :: is_defined_var; -var 0..1: X_INTRODUCED_490 ::var_is_introduced :: is_defined_var; -var 0..1: X_INTRODUCED_495 ::var_is_introduced :: is_defined_var; -var 0..1: X_INTRODUCED_496 ::var_is_introduced :: is_defined_var; -var 0..1: X_INTRODUCED_499 ::var_is_introduced :: is_defined_var; -var 0..1: X_INTRODUCED_500 ::var_is_introduced :: is_defined_var; -var 0..1: X_INTRODUCED_507 ::var_is_introduced :: is_defined_var; -var 0..1: X_INTRODUCED_508 ::var_is_introduced :: is_defined_var; -var 0..1: X_INTRODUCED_511 ::var_is_introduced :: is_defined_var; -var 0..1: X_INTRODUCED_512 ::var_is_introduced :: is_defined_var; -var 0..1: X_INTRODUCED_519 ::var_is_introduced :: is_defined_var; -var 0..1: X_INTRODUCED_520 ::var_is_introduced :: is_defined_var; -var 0..1: X_INTRODUCED_527 ::var_is_introduced :: is_defined_var; -var 0..1: X_INTRODUCED_528 ::var_is_introduced :: is_defined_var; -var 0..1: X_INTRODUCED_531 ::var_is_introduced :: is_defined_var; -var 0..1: X_INTRODUCED_532 ::var_is_introduced :: is_defined_var; -var -20..3: X_INTRODUCED_823 ::var_is_introduced :: is_defined_var; -var 0..3: X_INTRODUCED_824 ::var_is_introduced ; -var -20..3: X_INTRODUCED_828 ::var_is_introduced :: is_defined_var; -var 0..3: X_INTRODUCED_829 ::var_is_introduced ; -var -20..3: X_INTRODUCED_833 ::var_is_introduced :: is_defined_var; -var 0..3: X_INTRODUCED_834 ::var_is_introduced ; -var -20..3: X_INTRODUCED_838 ::var_is_introduced :: is_defined_var; -var 0..3: X_INTRODUCED_839 ::var_is_introduced ; -var -20..3: X_INTRODUCED_843 ::var_is_introduced :: is_defined_var; -var 0..3: X_INTRODUCED_844 ::var_is_introduced ; -var -20..3: X_INTRODUCED_848 ::var_is_introduced :: is_defined_var; -var 0..3: X_INTRODUCED_849 ::var_is_introduced ; -var -20..3: X_INTRODUCED_853 ::var_is_introduced :: is_defined_var; -var 0..3: X_INTRODUCED_854 ::var_is_introduced ; -var -20..3: X_INTRODUCED_858 ::var_is_introduced :: is_defined_var; -var 0..3: X_INTRODUCED_859 ::var_is_introduced ; -var 0..300: X_INTRODUCED_861 ::var_is_introduced :: is_defined_var; -var 0..100: X_INTRODUCED_863 ::var_is_introduced :: is_defined_var; -var 0..300: X_INTRODUCED_864 ::var_is_introduced :: is_defined_var; -var 0..100: X_INTRODUCED_866 ::var_is_introduced :: is_defined_var; -var 0..300: X_INTRODUCED_867 ::var_is_introduced :: is_defined_var; -var 0..100: X_INTRODUCED_869 ::var_is_introduced :: is_defined_var; -var 0..300: X_INTRODUCED_870 ::var_is_introduced :: is_defined_var; -var 0..100: X_INTRODUCED_872 ::var_is_introduced :: is_defined_var; -var 0..300: X_INTRODUCED_873 ::var_is_introduced :: is_defined_var; -var 0..100: X_INTRODUCED_875 ::var_is_introduced :: is_defined_var; -var 0..300: X_INTRODUCED_876 ::var_is_introduced :: is_defined_var; -var 0..100: X_INTRODUCED_878 ::var_is_introduced :: is_defined_var; -var 0..300: X_INTRODUCED_879 ::var_is_introduced :: is_defined_var; -var 0..100: X_INTRODUCED_881 ::var_is_introduced :: is_defined_var; -var 0..300: X_INTRODUCED_882 ::var_is_introduced :: is_defined_var; -var 0..100: X_INTRODUCED_884 ::var_is_introduced :: is_defined_var; -var 0..1: X_INTRODUCED_304 ::var_is_introduced = 0; -var 0..1: X_INTRODUCED_305 ::var_is_introduced = 0; -var 0..1: X_INTRODUCED_308 ::var_is_introduced = 0; -var 0..1: X_INTRODUCED_309 ::var_is_introduced = 0; -var 0..1: X_INTRODUCED_321 ::var_is_introduced = 0; -var 0..1: X_INTRODUCED_322 ::var_is_introduced = 0; -var 0..1: X_INTRODUCED_325 ::var_is_introduced = 0; -var 0..1: X_INTRODUCED_326 ::var_is_introduced = 0; -var 0..1: X_INTRODUCED_327 ::var_is_introduced = 0; -var 0..1: X_INTRODUCED_328 ::var_is_introduced = 0; -var 0..1: X_INTRODUCED_341 ::var_is_introduced = 0; -var 0..1: X_INTRODUCED_342 ::var_is_introduced = 0; -var 0..1: X_INTRODUCED_349 ::var_is_introduced = 0; -var 0..1: X_INTRODUCED_350 ::var_is_introduced = 0; -var 0..1: X_INTRODUCED_351 ::var_is_introduced = 0; -var 0..1: X_INTRODUCED_352 ::var_is_introduced = 0; -var 0..1: X_INTRODUCED_357 ::var_is_introduced = 0; -var 0..1: X_INTRODUCED_358 ::var_is_introduced = 0; -var 0..1: X_INTRODUCED_359 ::var_is_introduced = 0; -var 0..1: X_INTRODUCED_360 ::var_is_introduced = 0; -var 0..1: X_INTRODUCED_365 ::var_is_introduced = 0; -var 0..1: X_INTRODUCED_366 ::var_is_introduced = 0; -var 0..1: X_INTRODUCED_371 ::var_is_introduced = 0; -var 0..1: X_INTRODUCED_372 ::var_is_introduced = 0; -var 0..1: X_INTRODUCED_375 ::var_is_introduced = 0; -var 0..1: X_INTRODUCED_376 ::var_is_introduced = 0; -var 0..1: X_INTRODUCED_385 ::var_is_introduced = 0; -var 0..1: X_INTRODUCED_386 ::var_is_introduced = 0; -var 0..1: X_INTRODUCED_389 ::var_is_introduced = 0; -var 0..1: X_INTRODUCED_390 ::var_is_introduced = 0; -var 0..1: X_INTRODUCED_391 ::var_is_introduced = 0; -var 0..1: X_INTRODUCED_392 ::var_is_introduced = 0; -var 0..1: X_INTRODUCED_395 ::var_is_introduced = 0; -var 0..1: X_INTRODUCED_396 ::var_is_introduced = 0; -var 0..1: X_INTRODUCED_397 ::var_is_introduced = 0; -var 0..1: X_INTRODUCED_398 ::var_is_introduced = 0; -var 0..1: X_INTRODUCED_405 ::var_is_introduced = 0; -var 0..1: X_INTRODUCED_406 ::var_is_introduced = 0; -var 0..1: X_INTRODUCED_409 ::var_is_introduced = 0; -var 0..1: X_INTRODUCED_410 ::var_is_introduced = 0; -var 0..1: X_INTRODUCED_411 ::var_is_introduced = 0; -var 0..1: X_INTRODUCED_412 ::var_is_introduced = 0; -var 0..1: X_INTRODUCED_417 ::var_is_introduced = 0; -var 0..1: X_INTRODUCED_418 ::var_is_introduced = 0; -var 0..1: X_INTRODUCED_421 ::var_is_introduced = 0; -var 0..1: X_INTRODUCED_422 ::var_is_introduced = 0; -var 0..1: X_INTRODUCED_425 ::var_is_introduced = 0; -var 0..1: X_INTRODUCED_426 ::var_is_introduced = 0; -var 0..1: X_INTRODUCED_427 ::var_is_introduced = 0; -var 0..1: X_INTRODUCED_428 ::var_is_introduced = 0; -var 0..1: X_INTRODUCED_429 ::var_is_introduced = 0; -var 0..1: X_INTRODUCED_430 ::var_is_introduced = 0; -var 0..1: X_INTRODUCED_435 ::var_is_introduced = 0; -var 0..1: X_INTRODUCED_436 ::var_is_introduced = 0; -var 0..1: X_INTRODUCED_441 ::var_is_introduced = 0; -var 0..1: X_INTRODUCED_442 ::var_is_introduced = 0; -var 0..1: X_INTRODUCED_445 ::var_is_introduced = 0; -var 0..1: X_INTRODUCED_446 ::var_is_introduced = 0; -var 0..1: X_INTRODUCED_447 ::var_is_introduced = 0; -var 0..1: X_INTRODUCED_448 ::var_is_introduced = 0; -var 0..1: X_INTRODUCED_455 ::var_is_introduced = 0; -var 0..1: X_INTRODUCED_456 ::var_is_introduced = 0; -var 0..1: X_INTRODUCED_459 ::var_is_introduced = 0; -var 0..1: X_INTRODUCED_460 ::var_is_introduced = 0; -var 0..1: X_INTRODUCED_471 ::var_is_introduced = 0; -var 0..1: X_INTRODUCED_472 ::var_is_introduced = 0; -var 0..1: X_INTRODUCED_475 ::var_is_introduced = 0; -var 0..1: X_INTRODUCED_476 ::var_is_introduced = 0; -var 0..1: X_INTRODUCED_479 ::var_is_introduced = 0; -var 0..1: X_INTRODUCED_480 ::var_is_introduced = 0; -var 0..1: X_INTRODUCED_485 ::var_is_introduced = 0; -var 0..1: X_INTRODUCED_486 ::var_is_introduced = 0; -var 0..1: X_INTRODUCED_487 ::var_is_introduced = 0; -var 0..1: X_INTRODUCED_488 ::var_is_introduced = 0; -var 0..1: X_INTRODUCED_491 ::var_is_introduced = 0; -var 0..1: X_INTRODUCED_492 ::var_is_introduced = 0; -var 0..1: X_INTRODUCED_497 ::var_is_introduced = 0; -var 0..1: X_INTRODUCED_498 ::var_is_introduced = 0; -var 0..1: X_INTRODUCED_501 ::var_is_introduced = 0; -var 0..1: X_INTRODUCED_502 ::var_is_introduced = 0; -var 0..1: X_INTRODUCED_505 ::var_is_introduced = 0; -var 0..1: X_INTRODUCED_506 ::var_is_introduced = 0; -var 0..1: X_INTRODUCED_509 ::var_is_introduced = 0; -var 0..1: X_INTRODUCED_510 ::var_is_introduced = 0; -var 0..1: X_INTRODUCED_515 ::var_is_introduced = 0; -var 0..1: X_INTRODUCED_516 ::var_is_introduced = 0; -var 0..1: X_INTRODUCED_517 ::var_is_introduced = 0; -var 0..1: X_INTRODUCED_518 ::var_is_introduced = 0; -var 0..1: X_INTRODUCED_521 ::var_is_introduced = 0; -var 0..1: X_INTRODUCED_522 ::var_is_introduced = 0; -var 0..1: X_INTRODUCED_525 ::var_is_introduced = 0; -var 0..1: X_INTRODUCED_526 ::var_is_introduced = 0; -var 0..1: X_INTRODUCED_529 ::var_is_introduced = 0; -var 0..1: X_INTRODUCED_530 ::var_is_introduced = 0; -array [1..184] of var bool: Assignment:: output_array([1..23,1..4,1..2]) = [false,false,X_INTRODUCED_2,X_INTRODUCED_3,false,false,X_INTRODUCED_6,X_INTRODUCED_7,X_INTRODUCED_8,X_INTRODUCED_9,X_INTRODUCED_10,X_INTRODUCED_11,X_INTRODUCED_12,X_INTRODUCED_13,false,false,false,false,false,false,X_INTRODUCED_20,X_INTRODUCED_21,X_INTRODUCED_22,X_INTRODUCED_23,X_INTRODUCED_24,X_INTRODUCED_25,X_INTRODUCED_26,X_INTRODUCED_27,X_INTRODUCED_28,X_INTRODUCED_29,false,false,X_INTRODUCED_32,X_INTRODUCED_33,X_INTRODUCED_34,X_INTRODUCED_35,false,false,false,false,X_INTRODUCED_40,X_INTRODUCED_41,false,false,false,false,X_INTRODUCED_46,X_INTRODUCED_47,false,false,X_INTRODUCED_50,X_INTRODUCED_51,X_INTRODUCED_52,X_INTRODUCED_53,false,false,false,false,X_INTRODUCED_58,X_INTRODUCED_59,X_INTRODUCED_60,X_INTRODUCED_61,X_INTRODUCED_62,X_INTRODUCED_63,false,false,X_INTRODUCED_66,X_INTRODUCED_67,false,false,false,false,false,false,false,false,X_INTRODUCED_76,X_INTRODUCED_77,X_INTRODUCED_78,X_INTRODUCED_79,false,false,X_INTRODUCED_82,X_INTRODUCED_83,false,false,false,false,X_INTRODUCED_88,X_INTRODUCED_89,false,false,X_INTRODUCED_92,X_INTRODUCED_93,false,false,false,false,false,false,false,false,X_INTRODUCED_102,X_INTRODUCED_103,false,false,X_INTRODUCED_106,X_INTRODUCED_107,X_INTRODUCED_108,X_INTRODUCED_109,false,false,false,false,false,false,X_INTRODUCED_116,X_INTRODUCED_117,X_INTRODUCED_118,X_INTRODUCED_119,false,false,X_INTRODUCED_122,X_INTRODUCED_123,false,false,X_INTRODUCED_126,X_INTRODUCED_127,X_INTRODUCED_128,X_INTRODUCED_129,X_INTRODUCED_130,X_INTRODUCED_131,X_INTRODUCED_132,X_INTRODUCED_133,false,false,false,false,X_INTRODUCED_138,X_INTRODUCED_139,false,false,X_INTRODUCED_142,X_INTRODUCED_143,false,false,false,false,X_INTRODUCED_148,X_INTRODUCED_149,false,false,X_INTRODUCED_152,X_INTRODUCED_153,false,false,X_INTRODUCED_156,X_INTRODUCED_157,false,false,false,false,X_INTRODUCED_162,X_INTRODUCED_163,false,false,X_INTRODUCED_166,X_INTRODUCED_167,false,false,false,false,X_INTRODUCED_172,X_INTRODUCED_173,false,false,false,false,X_INTRODUCED_178,X_INTRODUCED_179,false,false,X_INTRODUCED_182,X_INTRODUCED_183]; -array [1..80] of var int: Coverage:: output_array([1..10,1..4,1..2]) = [X_INTRODUCED_184,X_INTRODUCED_185,X_INTRODUCED_186,X_INTRODUCED_187,X_INTRODUCED_188,X_INTRODUCED_189,X_INTRODUCED_190,X_INTRODUCED_191,X_INTRODUCED_192,X_INTRODUCED_193,X_INTRODUCED_194,X_INTRODUCED_195,X_INTRODUCED_196,X_INTRODUCED_197,X_INTRODUCED_198,X_INTRODUCED_199,X_INTRODUCED_200,X_INTRODUCED_201,X_INTRODUCED_202,X_INTRODUCED_203,X_INTRODUCED_204,X_INTRODUCED_205,X_INTRODUCED_206,X_INTRODUCED_207,X_INTRODUCED_208,X_INTRODUCED_209,X_INTRODUCED_210,X_INTRODUCED_211,X_INTRODUCED_212,X_INTRODUCED_213,X_INTRODUCED_214,X_INTRODUCED_215,X_INTRODUCED_216,X_INTRODUCED_217,X_INTRODUCED_218,X_INTRODUCED_219,X_INTRODUCED_220,X_INTRODUCED_221,X_INTRODUCED_222,X_INTRODUCED_223,0,0,X_INTRODUCED_437,X_INTRODUCED_438,X_INTRODUCED_439,X_INTRODUCED_440,0,0,X_INTRODUCED_232,X_INTRODUCED_233,X_INTRODUCED_234,X_INTRODUCED_235,X_INTRODUCED_236,X_INTRODUCED_237,X_INTRODUCED_238,X_INTRODUCED_239,X_INTRODUCED_240,X_INTRODUCED_241,X_INTRODUCED_242,X_INTRODUCED_243,X_INTRODUCED_244,X_INTRODUCED_245,X_INTRODUCED_246,X_INTRODUCED_247,X_INTRODUCED_248,X_INTRODUCED_249,X_INTRODUCED_250,X_INTRODUCED_251,X_INTRODUCED_252,X_INTRODUCED_253,X_INTRODUCED_254,X_INTRODUCED_255,X_INTRODUCED_256,X_INTRODUCED_257,X_INTRODUCED_258,X_INTRODUCED_259,X_INTRODUCED_260,X_INTRODUCED_261,X_INTRODUCED_262,X_INTRODUCED_263]; -array [1..10] of var int: MaxTable:: output_array([1..10]) = [X_INTRODUCED_264,X_INTRODUCED_265,X_INTRODUCED_266,X_INTRODUCED_267,X_INTRODUCED_268,X_INTRODUCED_269,X_INTRODUCED_270,X_INTRODUCED_271,X_INTRODUCED_272,X_INTRODUCED_273]; -array [1..10] of var int: MinTable:: output_array([1..10]) = [X_INTRODUCED_274,X_INTRODUCED_275,X_INTRODUCED_276,X_INTRODUCED_277,X_INTRODUCED_278,X_INTRODUCED_279,X_INTRODUCED_280,X_INTRODUCED_281,X_INTRODUCED_282,X_INTRODUCED_283]; -array [1..10] of var int: totalTable:: output_array([1..10]) = [X_INTRODUCED_284,X_INTRODUCED_285,X_INTRODUCED_286,X_INTRODUCED_287,X_INTRODUCED_288,X_INTRODUCED_289,X_INTRODUCED_290,X_INTRODUCED_291,X_INTRODUCED_292,X_INTRODUCED_293]; -array [1..8] of var int: seshSlack:: output_array([1..4,1..2]) = [X_INTRODUCED_824,X_INTRODUCED_829,X_INTRODUCED_834,X_INTRODUCED_839,X_INTRODUCED_844,X_INTRODUCED_849,X_INTRODUCED_854,X_INTRODUCED_859]; -array [1..14] of var int: X_INTRODUCED_632 ::var_is_introduced = [X_INTRODUCED_184,X_INTRODUCED_304,X_INTRODUCED_325,X_INTRODUCED_335,X_INTRODUCED_345,X_INTRODUCED_355,X_INTRODUCED_365,X_INTRODUCED_405,X_INTRODUCED_435,X_INTRODUCED_445,X_INTRODUCED_455,X_INTRODUCED_465,X_INTRODUCED_515,X_INTRODUCED_525]; -array [1..14] of var int: X_INTRODUCED_636 ::var_is_introduced = [X_INTRODUCED_185,X_INTRODUCED_305,X_INTRODUCED_326,X_INTRODUCED_336,X_INTRODUCED_346,X_INTRODUCED_356,X_INTRODUCED_366,X_INTRODUCED_406,X_INTRODUCED_436,X_INTRODUCED_446,X_INTRODUCED_456,X_INTRODUCED_466,X_INTRODUCED_516,X_INTRODUCED_526]; -array [1..14] of var int: X_INTRODUCED_639 ::var_is_introduced = [X_INTRODUCED_186,X_INTRODUCED_306,X_INTRODUCED_327,X_INTRODUCED_337,X_INTRODUCED_347,X_INTRODUCED_357,X_INTRODUCED_367,X_INTRODUCED_407,X_INTRODUCED_437,X_INTRODUCED_447,X_INTRODUCED_457,X_INTRODUCED_467,X_INTRODUCED_517,X_INTRODUCED_527]; -array [1..14] of var int: X_INTRODUCED_642 ::var_is_introduced = [X_INTRODUCED_187,X_INTRODUCED_307,X_INTRODUCED_328,X_INTRODUCED_338,X_INTRODUCED_348,X_INTRODUCED_358,X_INTRODUCED_368,X_INTRODUCED_408,X_INTRODUCED_438,X_INTRODUCED_448,X_INTRODUCED_458,X_INTRODUCED_468,X_INTRODUCED_518,X_INTRODUCED_528]; -array [1..14] of var int: X_INTRODUCED_645 ::var_is_introduced = [X_INTRODUCED_188,X_INTRODUCED_308,X_INTRODUCED_329,X_INTRODUCED_339,X_INTRODUCED_349,X_INTRODUCED_359,X_INTRODUCED_369,X_INTRODUCED_409,X_INTRODUCED_439,X_INTRODUCED_449,X_INTRODUCED_459,X_INTRODUCED_469,X_INTRODUCED_519,X_INTRODUCED_529]; -array [1..14] of var int: X_INTRODUCED_648 ::var_is_introduced = [X_INTRODUCED_189,X_INTRODUCED_309,X_INTRODUCED_330,X_INTRODUCED_340,X_INTRODUCED_350,X_INTRODUCED_360,X_INTRODUCED_370,X_INTRODUCED_410,X_INTRODUCED_440,X_INTRODUCED_450,X_INTRODUCED_460,X_INTRODUCED_470,X_INTRODUCED_520,X_INTRODUCED_530]; -array [1..14] of var int: X_INTRODUCED_651 ::var_is_introduced = [X_INTRODUCED_190,X_INTRODUCED_310,X_INTRODUCED_331,X_INTRODUCED_341,X_INTRODUCED_351,X_INTRODUCED_361,X_INTRODUCED_371,X_INTRODUCED_411,X_INTRODUCED_441,X_INTRODUCED_451,X_INTRODUCED_461,X_INTRODUCED_471,X_INTRODUCED_521,X_INTRODUCED_531]; -array [1..14] of var int: X_INTRODUCED_654 ::var_is_introduced = [X_INTRODUCED_191,X_INTRODUCED_311,X_INTRODUCED_332,X_INTRODUCED_342,X_INTRODUCED_352,X_INTRODUCED_362,X_INTRODUCED_372,X_INTRODUCED_412,X_INTRODUCED_442,X_INTRODUCED_452,X_INTRODUCED_462,X_INTRODUCED_472,X_INTRODUCED_522,X_INTRODUCED_532]; -array [1..11] of var int: X_INTRODUCED_674 ::var_is_introduced = [X_INTRODUCED_200,X_INTRODUCED_315,X_INTRODUCED_335,X_INTRODUCED_355,X_INTRODUCED_375,X_INTRODUCED_395,X_INTRODUCED_415,X_INTRODUCED_455,X_INTRODUCED_465,X_INTRODUCED_475,X_INTRODUCED_525]; -array [1..11] of var int: X_INTRODUCED_678 ::var_is_introduced = [X_INTRODUCED_201,X_INTRODUCED_316,X_INTRODUCED_336,X_INTRODUCED_356,X_INTRODUCED_376,X_INTRODUCED_396,X_INTRODUCED_416,X_INTRODUCED_456,X_INTRODUCED_466,X_INTRODUCED_476,X_INTRODUCED_526]; -array [1..11] of var int: X_INTRODUCED_681 ::var_is_introduced = [X_INTRODUCED_202,X_INTRODUCED_317,X_INTRODUCED_337,X_INTRODUCED_357,X_INTRODUCED_377,X_INTRODUCED_397,X_INTRODUCED_417,X_INTRODUCED_457,X_INTRODUCED_467,X_INTRODUCED_477,X_INTRODUCED_527]; -array [1..11] of var int: X_INTRODUCED_684 ::var_is_introduced = [X_INTRODUCED_203,X_INTRODUCED_318,X_INTRODUCED_338,X_INTRODUCED_358,X_INTRODUCED_378,X_INTRODUCED_398,X_INTRODUCED_418,X_INTRODUCED_458,X_INTRODUCED_468,X_INTRODUCED_478,X_INTRODUCED_528]; -array [1..11] of var int: X_INTRODUCED_687 ::var_is_introduced = [X_INTRODUCED_204,X_INTRODUCED_319,X_INTRODUCED_339,X_INTRODUCED_359,X_INTRODUCED_379,X_INTRODUCED_399,X_INTRODUCED_419,X_INTRODUCED_459,X_INTRODUCED_469,X_INTRODUCED_479,X_INTRODUCED_529]; -array [1..11] of var int: X_INTRODUCED_690 ::var_is_introduced = [X_INTRODUCED_205,X_INTRODUCED_320,X_INTRODUCED_340,X_INTRODUCED_360,X_INTRODUCED_380,X_INTRODUCED_400,X_INTRODUCED_420,X_INTRODUCED_460,X_INTRODUCED_470,X_INTRODUCED_480,X_INTRODUCED_530]; -array [1..11] of var int: X_INTRODUCED_693 ::var_is_introduced = [X_INTRODUCED_206,X_INTRODUCED_321,X_INTRODUCED_341,X_INTRODUCED_361,X_INTRODUCED_381,X_INTRODUCED_401,X_INTRODUCED_421,X_INTRODUCED_461,X_INTRODUCED_471,X_INTRODUCED_481,X_INTRODUCED_531]; -array [1..11] of var int: X_INTRODUCED_696 ::var_is_introduced = [X_INTRODUCED_207,X_INTRODUCED_322,X_INTRODUCED_342,X_INTRODUCED_362,X_INTRODUCED_382,X_INTRODUCED_402,X_INTRODUCED_422,X_INTRODUCED_462,X_INTRODUCED_472,X_INTRODUCED_482,X_INTRODUCED_532]; -array [1..4] of var int: X_INTRODUCED_798 ::var_is_introduced = [X_INTRODUCED_184,X_INTRODUCED_186,X_INTRODUCED_188,X_INTRODUCED_190]; -array [1..4] of var int: X_INTRODUCED_799 ::var_is_introduced = [X_INTRODUCED_193,X_INTRODUCED_195,X_INTRODUCED_197,X_INTRODUCED_199]; -array [1..4] of var int: X_INTRODUCED_800 ::var_is_introduced = [X_INTRODUCED_200,X_INTRODUCED_202,X_INTRODUCED_204,X_INTRODUCED_206]; -array [1..4] of var int: X_INTRODUCED_801 ::var_is_introduced = [X_INTRODUCED_209,X_INTRODUCED_211,X_INTRODUCED_213,X_INTRODUCED_215]; -array [1..4] of var int: X_INTRODUCED_802 ::var_is_introduced = [X_INTRODUCED_217,X_INTRODUCED_219,X_INTRODUCED_221,X_INTRODUCED_223]; -array [1..4] of var int: X_INTRODUCED_803 ::var_is_introduced = [0,X_INTRODUCED_438,X_INTRODUCED_440,0]; -array [1..8] of var int: X_INTRODUCED_804 ::var_is_introduced = [X_INTRODUCED_232,X_INTRODUCED_233,X_INTRODUCED_234,X_INTRODUCED_235,X_INTRODUCED_236,X_INTRODUCED_237,X_INTRODUCED_238,X_INTRODUCED_239]; -array [1..8] of var int: X_INTRODUCED_805 ::var_is_introduced = [X_INTRODUCED_240,X_INTRODUCED_241,X_INTRODUCED_242,X_INTRODUCED_243,X_INTRODUCED_244,X_INTRODUCED_245,X_INTRODUCED_246,X_INTRODUCED_247]; -array [1..8] of var int: X_INTRODUCED_806 ::var_is_introduced = [X_INTRODUCED_248,X_INTRODUCED_249,X_INTRODUCED_250,X_INTRODUCED_251,X_INTRODUCED_252,X_INTRODUCED_253,X_INTRODUCED_254,X_INTRODUCED_255]; -array [1..8] of var int: X_INTRODUCED_807 ::var_is_introduced = [X_INTRODUCED_256,X_INTRODUCED_257,X_INTRODUCED_258,X_INTRODUCED_259,X_INTRODUCED_260,X_INTRODUCED_261,X_INTRODUCED_262,X_INTRODUCED_263]; -array [1..29] of var int: X_INTRODUCED_908 ::var_is_introduced = [objective,X_INTRODUCED_284,X_INTRODUCED_274,X_INTRODUCED_285,X_INTRODUCED_275,X_INTRODUCED_286,X_INTRODUCED_276,X_INTRODUCED_287,X_INTRODUCED_277,X_INTRODUCED_288,X_INTRODUCED_278,X_INTRODUCED_289,X_INTRODUCED_279,X_INTRODUCED_290,X_INTRODUCED_280,X_INTRODUCED_291,X_INTRODUCED_281,X_INTRODUCED_292,X_INTRODUCED_282,X_INTRODUCED_293,X_INTRODUCED_283,X_INTRODUCED_863,X_INTRODUCED_866,X_INTRODUCED_869,X_INTRODUCED_872,X_INTRODUCED_875,X_INTRODUCED_878,X_INTRODUCED_881,X_INTRODUCED_884]; -constraint int_lin_eq(X_INTRODUCED_313,[X_INTRODUCED_304,X_INTRODUCED_305,X_INTRODUCED_306,X_INTRODUCED_307,X_INTRODUCED_308,X_INTRODUCED_309,X_INTRODUCED_310,X_INTRODUCED_311],1); -constraint int_lin_eq(X_INTRODUCED_313,[X_INTRODUCED_315,X_INTRODUCED_316,X_INTRODUCED_317,X_INTRODUCED_318,X_INTRODUCED_319,X_INTRODUCED_320,X_INTRODUCED_321,X_INTRODUCED_322],1); -constraint int_lin_eq(X_INTRODUCED_313,[X_INTRODUCED_325,X_INTRODUCED_326,X_INTRODUCED_327,X_INTRODUCED_328,X_INTRODUCED_329,X_INTRODUCED_330,X_INTRODUCED_331,X_INTRODUCED_332],1); -constraint int_lin_eq(X_INTRODUCED_313,[X_INTRODUCED_335,X_INTRODUCED_336,X_INTRODUCED_337,X_INTRODUCED_338,X_INTRODUCED_339,X_INTRODUCED_340,X_INTRODUCED_341,X_INTRODUCED_342],1); -constraint int_lin_eq(X_INTRODUCED_313,[X_INTRODUCED_345,X_INTRODUCED_346,X_INTRODUCED_347,X_INTRODUCED_348,X_INTRODUCED_349,X_INTRODUCED_350,X_INTRODUCED_351,X_INTRODUCED_352],1); -constraint int_lin_eq(X_INTRODUCED_313,[X_INTRODUCED_355,X_INTRODUCED_356,X_INTRODUCED_357,X_INTRODUCED_358,X_INTRODUCED_359,X_INTRODUCED_360,X_INTRODUCED_361,X_INTRODUCED_362],1); -constraint int_lin_eq(X_INTRODUCED_313,[X_INTRODUCED_365,X_INTRODUCED_366,X_INTRODUCED_367,X_INTRODUCED_368,X_INTRODUCED_369,X_INTRODUCED_370,X_INTRODUCED_371,X_INTRODUCED_372],1); -constraint int_lin_eq(X_INTRODUCED_313,[X_INTRODUCED_375,X_INTRODUCED_376,X_INTRODUCED_377,X_INTRODUCED_378,X_INTRODUCED_379,X_INTRODUCED_380,X_INTRODUCED_381,X_INTRODUCED_382],1); -constraint int_lin_eq(X_INTRODUCED_313,[X_INTRODUCED_385,X_INTRODUCED_386,X_INTRODUCED_387,X_INTRODUCED_388,X_INTRODUCED_389,X_INTRODUCED_390,X_INTRODUCED_391,X_INTRODUCED_392],1); -constraint int_lin_eq(X_INTRODUCED_313,[X_INTRODUCED_395,X_INTRODUCED_396,X_INTRODUCED_397,X_INTRODUCED_398,X_INTRODUCED_399,X_INTRODUCED_400,X_INTRODUCED_401,X_INTRODUCED_402],1); -constraint int_lin_eq(X_INTRODUCED_313,[X_INTRODUCED_405,X_INTRODUCED_406,X_INTRODUCED_407,X_INTRODUCED_408,X_INTRODUCED_409,X_INTRODUCED_410,X_INTRODUCED_411,X_INTRODUCED_412],1); -constraint int_lin_eq(X_INTRODUCED_313,[X_INTRODUCED_415,X_INTRODUCED_416,X_INTRODUCED_417,X_INTRODUCED_418,X_INTRODUCED_419,X_INTRODUCED_420,X_INTRODUCED_421,X_INTRODUCED_422],1); -constraint int_lin_eq(X_INTRODUCED_313,[X_INTRODUCED_425,X_INTRODUCED_426,X_INTRODUCED_427,X_INTRODUCED_428,X_INTRODUCED_429,X_INTRODUCED_430,X_INTRODUCED_431,X_INTRODUCED_432],1); -constraint int_lin_eq(X_INTRODUCED_313,[X_INTRODUCED_435,X_INTRODUCED_436,X_INTRODUCED_437,X_INTRODUCED_438,X_INTRODUCED_439,X_INTRODUCED_440,X_INTRODUCED_441,X_INTRODUCED_442],1); -constraint int_lin_eq(X_INTRODUCED_313,[X_INTRODUCED_445,X_INTRODUCED_446,X_INTRODUCED_447,X_INTRODUCED_448,X_INTRODUCED_449,X_INTRODUCED_450,X_INTRODUCED_451,X_INTRODUCED_452],1); -constraint int_lin_eq(X_INTRODUCED_313,[X_INTRODUCED_455,X_INTRODUCED_456,X_INTRODUCED_457,X_INTRODUCED_458,X_INTRODUCED_459,X_INTRODUCED_460,X_INTRODUCED_461,X_INTRODUCED_462],1); -constraint int_lin_eq(X_INTRODUCED_313,[X_INTRODUCED_465,X_INTRODUCED_466,X_INTRODUCED_467,X_INTRODUCED_468,X_INTRODUCED_469,X_INTRODUCED_470,X_INTRODUCED_471,X_INTRODUCED_472],1); -constraint int_lin_eq(X_INTRODUCED_313,[X_INTRODUCED_475,X_INTRODUCED_476,X_INTRODUCED_477,X_INTRODUCED_478,X_INTRODUCED_479,X_INTRODUCED_480,X_INTRODUCED_481,X_INTRODUCED_482],1); -constraint int_lin_eq(X_INTRODUCED_313,[X_INTRODUCED_485,X_INTRODUCED_486,X_INTRODUCED_487,X_INTRODUCED_488,X_INTRODUCED_489,X_INTRODUCED_490,X_INTRODUCED_491,X_INTRODUCED_492],1); -constraint int_lin_eq(X_INTRODUCED_313,[X_INTRODUCED_495,X_INTRODUCED_496,X_INTRODUCED_497,X_INTRODUCED_498,X_INTRODUCED_499,X_INTRODUCED_500,X_INTRODUCED_501,X_INTRODUCED_502],1); -constraint int_lin_eq(X_INTRODUCED_313,[X_INTRODUCED_505,X_INTRODUCED_506,X_INTRODUCED_507,X_INTRODUCED_508,X_INTRODUCED_509,X_INTRODUCED_510,X_INTRODUCED_511,X_INTRODUCED_512],1); -constraint int_lin_eq(X_INTRODUCED_313,[X_INTRODUCED_515,X_INTRODUCED_516,X_INTRODUCED_517,X_INTRODUCED_518,X_INTRODUCED_519,X_INTRODUCED_520,X_INTRODUCED_521,X_INTRODUCED_522],1); -constraint int_lin_eq(X_INTRODUCED_313,[X_INTRODUCED_525,X_INTRODUCED_526,X_INTRODUCED_527,X_INTRODUCED_528,X_INTRODUCED_529,X_INTRODUCED_530,X_INTRODUCED_531,X_INTRODUCED_532],1); -constraint int_lin_le(X_INTRODUCED_538,[X_INTRODUCED_304,X_INTRODUCED_306,X_INTRODUCED_308,X_INTRODUCED_310],0); -constraint int_lin_le(X_INTRODUCED_538,[X_INTRODUCED_305,X_INTRODUCED_307,X_INTRODUCED_309,X_INTRODUCED_311],0); -constraint int_lin_le(X_INTRODUCED_538,[X_INTRODUCED_315,X_INTRODUCED_317,X_INTRODUCED_319,X_INTRODUCED_321],0); -constraint int_lin_le(X_INTRODUCED_538,[X_INTRODUCED_316,X_INTRODUCED_318,X_INTRODUCED_320,X_INTRODUCED_322],-1); -constraint int_lin_le(X_INTRODUCED_538,[X_INTRODUCED_325,X_INTRODUCED_327,X_INTRODUCED_329,X_INTRODUCED_331],0); -constraint int_lin_le(X_INTRODUCED_538,[X_INTRODUCED_326,X_INTRODUCED_328,X_INTRODUCED_330,X_INTRODUCED_332],0); -constraint int_lin_le(X_INTRODUCED_538,[X_INTRODUCED_335,X_INTRODUCED_337,X_INTRODUCED_339,X_INTRODUCED_341],0); -constraint int_lin_le(X_INTRODUCED_538,[X_INTRODUCED_336,X_INTRODUCED_338,X_INTRODUCED_340,X_INTRODUCED_342],0); -constraint int_lin_le(X_INTRODUCED_538,[X_INTRODUCED_345,X_INTRODUCED_347,X_INTRODUCED_349,X_INTRODUCED_351],0); -constraint int_lin_le(X_INTRODUCED_538,[X_INTRODUCED_346,X_INTRODUCED_348,X_INTRODUCED_350,X_INTRODUCED_352],0); -constraint int_lin_le(X_INTRODUCED_538,[X_INTRODUCED_355,X_INTRODUCED_357,X_INTRODUCED_359,X_INTRODUCED_361],0); -constraint int_lin_le(X_INTRODUCED_538,[X_INTRODUCED_356,X_INTRODUCED_358,X_INTRODUCED_360,X_INTRODUCED_362],0); -constraint int_lin_le(X_INTRODUCED_538,[X_INTRODUCED_365,X_INTRODUCED_367,X_INTRODUCED_369,X_INTRODUCED_371],0); -constraint int_lin_le(X_INTRODUCED_538,[X_INTRODUCED_366,X_INTRODUCED_368,X_INTRODUCED_370,X_INTRODUCED_372],0); -constraint int_lin_le(X_INTRODUCED_538,[X_INTRODUCED_375,X_INTRODUCED_377,X_INTRODUCED_379,X_INTRODUCED_381],0); -constraint int_lin_le(X_INTRODUCED_538,[X_INTRODUCED_376,X_INTRODUCED_378,X_INTRODUCED_380,X_INTRODUCED_382],-1); -constraint int_lin_le(X_INTRODUCED_538,[X_INTRODUCED_385,X_INTRODUCED_387,X_INTRODUCED_389,X_INTRODUCED_391],0); -constraint int_lin_le(X_INTRODUCED_538,[X_INTRODUCED_386,X_INTRODUCED_388,X_INTRODUCED_390,X_INTRODUCED_392],0); -constraint int_lin_le(X_INTRODUCED_538,[X_INTRODUCED_395,X_INTRODUCED_397,X_INTRODUCED_399,X_INTRODUCED_401],0); -constraint int_lin_le(X_INTRODUCED_538,[X_INTRODUCED_396,X_INTRODUCED_398,X_INTRODUCED_400,X_INTRODUCED_402],0); -constraint int_lin_le(X_INTRODUCED_538,[X_INTRODUCED_405,X_INTRODUCED_407,X_INTRODUCED_409,X_INTRODUCED_411],0); -constraint int_lin_le(X_INTRODUCED_538,[X_INTRODUCED_406,X_INTRODUCED_408,X_INTRODUCED_410,X_INTRODUCED_412],0); -constraint int_lin_le(X_INTRODUCED_538,[X_INTRODUCED_415,X_INTRODUCED_417,X_INTRODUCED_419,X_INTRODUCED_421],0); -constraint int_lin_le(X_INTRODUCED_538,[X_INTRODUCED_416,X_INTRODUCED_418,X_INTRODUCED_420,X_INTRODUCED_422],0); -constraint int_lin_le(X_INTRODUCED_538,[X_INTRODUCED_425,X_INTRODUCED_427,X_INTRODUCED_429,X_INTRODUCED_431],0); -constraint int_lin_le(X_INTRODUCED_538,[X_INTRODUCED_426,X_INTRODUCED_428,X_INTRODUCED_430,X_INTRODUCED_432],0); -constraint int_lin_le(X_INTRODUCED_538,[X_INTRODUCED_435,X_INTRODUCED_437,X_INTRODUCED_439,X_INTRODUCED_441],0); -constraint int_lin_le(X_INTRODUCED_538,[X_INTRODUCED_436,X_INTRODUCED_438,X_INTRODUCED_440,X_INTRODUCED_442],0); -constraint int_lin_le(X_INTRODUCED_538,[X_INTRODUCED_445,X_INTRODUCED_447,X_INTRODUCED_449,X_INTRODUCED_451],0); -constraint int_lin_le(X_INTRODUCED_538,[X_INTRODUCED_446,X_INTRODUCED_448,X_INTRODUCED_450,X_INTRODUCED_452],0); -constraint int_lin_le(X_INTRODUCED_538,[X_INTRODUCED_455,X_INTRODUCED_457,X_INTRODUCED_459,X_INTRODUCED_461],0); -constraint int_lin_le(X_INTRODUCED_538,[X_INTRODUCED_456,X_INTRODUCED_458,X_INTRODUCED_460,X_INTRODUCED_462],0); -constraint int_lin_le(X_INTRODUCED_538,[X_INTRODUCED_465,X_INTRODUCED_467,X_INTRODUCED_469,X_INTRODUCED_471],0); -constraint int_lin_le(X_INTRODUCED_538,[X_INTRODUCED_466,X_INTRODUCED_468,X_INTRODUCED_470,X_INTRODUCED_472],0); -constraint int_lin_le(X_INTRODUCED_538,[X_INTRODUCED_475,X_INTRODUCED_477,X_INTRODUCED_479,X_INTRODUCED_481],0); -constraint int_lin_le(X_INTRODUCED_538,[X_INTRODUCED_476,X_INTRODUCED_478,X_INTRODUCED_480,X_INTRODUCED_482],0); -constraint int_lin_le(X_INTRODUCED_538,[X_INTRODUCED_485,X_INTRODUCED_487,X_INTRODUCED_489,X_INTRODUCED_491],0); -constraint int_lin_le(X_INTRODUCED_538,[X_INTRODUCED_486,X_INTRODUCED_488,X_INTRODUCED_490,X_INTRODUCED_492],0); -constraint int_lin_le(X_INTRODUCED_538,[X_INTRODUCED_495,X_INTRODUCED_497,X_INTRODUCED_499,X_INTRODUCED_501],0); -constraint int_lin_le(X_INTRODUCED_538,[X_INTRODUCED_496,X_INTRODUCED_498,X_INTRODUCED_500,X_INTRODUCED_502],0); -constraint int_lin_le(X_INTRODUCED_538,[X_INTRODUCED_505,X_INTRODUCED_507,X_INTRODUCED_509,X_INTRODUCED_511],0); -constraint int_lin_le(X_INTRODUCED_538,[X_INTRODUCED_506,X_INTRODUCED_508,X_INTRODUCED_510,X_INTRODUCED_512],0); -constraint int_lin_le(X_INTRODUCED_538,[X_INTRODUCED_515,X_INTRODUCED_517,X_INTRODUCED_519,X_INTRODUCED_521],-1); -constraint int_lin_le(X_INTRODUCED_538,[X_INTRODUCED_516,X_INTRODUCED_518,X_INTRODUCED_520,X_INTRODUCED_522],0); -constraint int_lin_le(X_INTRODUCED_538,[X_INTRODUCED_525,X_INTRODUCED_527,X_INTRODUCED_529,X_INTRODUCED_531],0); -constraint int_lin_le(X_INTRODUCED_538,[X_INTRODUCED_526,X_INTRODUCED_528,X_INTRODUCED_530,X_INTRODUCED_532],0); -constraint int_lin_eq(X_INTRODUCED_633,X_INTRODUCED_632,0):: defines_var(X_INTRODUCED_184); -constraint int_lin_eq(X_INTRODUCED_633,X_INTRODUCED_636,0):: defines_var(X_INTRODUCED_185); -constraint int_lin_eq(X_INTRODUCED_633,X_INTRODUCED_639,0):: defines_var(X_INTRODUCED_186); -constraint int_lin_eq(X_INTRODUCED_633,X_INTRODUCED_642,0):: defines_var(X_INTRODUCED_187); -constraint int_lin_eq(X_INTRODUCED_633,X_INTRODUCED_645,0):: defines_var(X_INTRODUCED_188); -constraint int_lin_eq(X_INTRODUCED_633,X_INTRODUCED_648,0):: defines_var(X_INTRODUCED_189); -constraint int_lin_eq(X_INTRODUCED_633,X_INTRODUCED_651,0):: defines_var(X_INTRODUCED_190); -constraint int_lin_eq(X_INTRODUCED_633,X_INTRODUCED_654,0):: defines_var(X_INTRODUCED_191); -constraint int_lin_eq(X_INTRODUCED_657,[X_INTRODUCED_192,X_INTRODUCED_365,X_INTRODUCED_385,X_INTRODUCED_395,X_INTRODUCED_405,X_INTRODUCED_435,X_INTRODUCED_525],0):: defines_var(X_INTRODUCED_192); -constraint int_lin_eq(X_INTRODUCED_657,[X_INTRODUCED_193,X_INTRODUCED_366,X_INTRODUCED_386,X_INTRODUCED_396,X_INTRODUCED_406,X_INTRODUCED_436,X_INTRODUCED_526],0):: defines_var(X_INTRODUCED_193); -constraint int_lin_eq(X_INTRODUCED_657,[X_INTRODUCED_194,X_INTRODUCED_367,X_INTRODUCED_387,X_INTRODUCED_397,X_INTRODUCED_407,X_INTRODUCED_437,X_INTRODUCED_527],0):: defines_var(X_INTRODUCED_194); -constraint int_lin_eq(X_INTRODUCED_657,[X_INTRODUCED_195,X_INTRODUCED_368,X_INTRODUCED_388,X_INTRODUCED_398,X_INTRODUCED_408,X_INTRODUCED_438,X_INTRODUCED_528],0):: defines_var(X_INTRODUCED_195); -constraint int_lin_eq(X_INTRODUCED_657,[X_INTRODUCED_196,X_INTRODUCED_369,X_INTRODUCED_389,X_INTRODUCED_399,X_INTRODUCED_409,X_INTRODUCED_439,X_INTRODUCED_529],0):: defines_var(X_INTRODUCED_196); -constraint int_lin_eq(X_INTRODUCED_657,[X_INTRODUCED_197,X_INTRODUCED_370,X_INTRODUCED_390,X_INTRODUCED_400,X_INTRODUCED_410,X_INTRODUCED_440,X_INTRODUCED_530],0):: defines_var(X_INTRODUCED_197); -constraint int_lin_eq(X_INTRODUCED_657,[X_INTRODUCED_198,X_INTRODUCED_371,X_INTRODUCED_391,X_INTRODUCED_401,X_INTRODUCED_411,X_INTRODUCED_441,X_INTRODUCED_531],0):: defines_var(X_INTRODUCED_198); -constraint int_lin_eq(X_INTRODUCED_657,[X_INTRODUCED_199,X_INTRODUCED_372,X_INTRODUCED_392,X_INTRODUCED_402,X_INTRODUCED_412,X_INTRODUCED_442,X_INTRODUCED_532],0):: defines_var(X_INTRODUCED_199); -constraint int_lin_eq(X_INTRODUCED_675,X_INTRODUCED_674,0):: defines_var(X_INTRODUCED_200); -constraint int_lin_eq(X_INTRODUCED_675,X_INTRODUCED_678,0):: defines_var(X_INTRODUCED_201); -constraint int_lin_eq(X_INTRODUCED_675,X_INTRODUCED_681,0):: defines_var(X_INTRODUCED_202); -constraint int_lin_eq(X_INTRODUCED_675,X_INTRODUCED_684,0):: defines_var(X_INTRODUCED_203); -constraint int_lin_eq(X_INTRODUCED_675,X_INTRODUCED_687,0):: defines_var(X_INTRODUCED_204); -constraint int_lin_eq(X_INTRODUCED_675,X_INTRODUCED_690,0):: defines_var(X_INTRODUCED_205); -constraint int_lin_eq(X_INTRODUCED_675,X_INTRODUCED_693,0):: defines_var(X_INTRODUCED_206); -constraint int_lin_eq(X_INTRODUCED_675,X_INTRODUCED_696,0):: defines_var(X_INTRODUCED_207); -constraint int_lin_eq(X_INTRODUCED_699,[X_INTRODUCED_208,X_INTRODUCED_315,X_INTRODUCED_335,X_INTRODUCED_365,X_INTRODUCED_375,X_INTRODUCED_445,X_INTRODUCED_475,X_INTRODUCED_485],0):: defines_var(X_INTRODUCED_208); -constraint int_lin_eq(X_INTRODUCED_699,[X_INTRODUCED_209,X_INTRODUCED_316,X_INTRODUCED_336,X_INTRODUCED_366,X_INTRODUCED_376,X_INTRODUCED_446,X_INTRODUCED_476,X_INTRODUCED_486],0):: defines_var(X_INTRODUCED_209); -constraint int_lin_eq(X_INTRODUCED_699,[X_INTRODUCED_210,X_INTRODUCED_317,X_INTRODUCED_337,X_INTRODUCED_367,X_INTRODUCED_377,X_INTRODUCED_447,X_INTRODUCED_477,X_INTRODUCED_487],0):: defines_var(X_INTRODUCED_210); -constraint int_lin_eq(X_INTRODUCED_699,[X_INTRODUCED_211,X_INTRODUCED_318,X_INTRODUCED_338,X_INTRODUCED_368,X_INTRODUCED_378,X_INTRODUCED_448,X_INTRODUCED_478,X_INTRODUCED_488],0):: defines_var(X_INTRODUCED_211); -constraint int_lin_eq(X_INTRODUCED_699,[X_INTRODUCED_212,X_INTRODUCED_319,X_INTRODUCED_339,X_INTRODUCED_369,X_INTRODUCED_379,X_INTRODUCED_449,X_INTRODUCED_479,X_INTRODUCED_489],0):: defines_var(X_INTRODUCED_212); -constraint int_lin_eq(X_INTRODUCED_699,[X_INTRODUCED_213,X_INTRODUCED_320,X_INTRODUCED_340,X_INTRODUCED_370,X_INTRODUCED_380,X_INTRODUCED_450,X_INTRODUCED_480,X_INTRODUCED_490],0):: defines_var(X_INTRODUCED_213); -constraint int_lin_eq(X_INTRODUCED_699,[X_INTRODUCED_214,X_INTRODUCED_321,X_INTRODUCED_341,X_INTRODUCED_371,X_INTRODUCED_381,X_INTRODUCED_451,X_INTRODUCED_481,X_INTRODUCED_491],0):: defines_var(X_INTRODUCED_214); -constraint int_lin_eq(X_INTRODUCED_699,[X_INTRODUCED_215,X_INTRODUCED_322,X_INTRODUCED_342,X_INTRODUCED_372,X_INTRODUCED_382,X_INTRODUCED_452,X_INTRODUCED_482,X_INTRODUCED_492],0):: defines_var(X_INTRODUCED_215); -constraint int_lin_eq(X_INTRODUCED_716,[X_INTRODUCED_216,X_INTRODUCED_315,X_INTRODUCED_375,X_INTRODUCED_395,X_INTRODUCED_475,X_INTRODUCED_485],0):: defines_var(X_INTRODUCED_216); -constraint int_lin_eq(X_INTRODUCED_716,[X_INTRODUCED_217,X_INTRODUCED_316,X_INTRODUCED_376,X_INTRODUCED_396,X_INTRODUCED_476,X_INTRODUCED_486],0):: defines_var(X_INTRODUCED_217); -constraint int_lin_eq(X_INTRODUCED_716,[X_INTRODUCED_218,X_INTRODUCED_317,X_INTRODUCED_377,X_INTRODUCED_397,X_INTRODUCED_477,X_INTRODUCED_487],0):: defines_var(X_INTRODUCED_218); -constraint int_lin_eq(X_INTRODUCED_716,[X_INTRODUCED_219,X_INTRODUCED_318,X_INTRODUCED_378,X_INTRODUCED_398,X_INTRODUCED_478,X_INTRODUCED_488],0):: defines_var(X_INTRODUCED_219); -constraint int_lin_eq(X_INTRODUCED_716,[X_INTRODUCED_220,X_INTRODUCED_319,X_INTRODUCED_379,X_INTRODUCED_399,X_INTRODUCED_479,X_INTRODUCED_489],0):: defines_var(X_INTRODUCED_220); -constraint int_lin_eq(X_INTRODUCED_716,[X_INTRODUCED_221,X_INTRODUCED_320,X_INTRODUCED_380,X_INTRODUCED_400,X_INTRODUCED_480,X_INTRODUCED_490],0):: defines_var(X_INTRODUCED_221); -constraint int_lin_eq(X_INTRODUCED_716,[X_INTRODUCED_222,X_INTRODUCED_321,X_INTRODUCED_381,X_INTRODUCED_401,X_INTRODUCED_481,X_INTRODUCED_491],0):: defines_var(X_INTRODUCED_222); -constraint int_lin_eq(X_INTRODUCED_716,[X_INTRODUCED_223,X_INTRODUCED_322,X_INTRODUCED_382,X_INTRODUCED_402,X_INTRODUCED_482,X_INTRODUCED_492],0):: defines_var(X_INTRODUCED_223); -constraint int_lin_eq(X_INTRODUCED_741,[X_INTRODUCED_232,X_INTRODUCED_425,X_INTRODUCED_495,X_INTRODUCED_505,X_INTRODUCED_515],0):: defines_var(X_INTRODUCED_232); -constraint int_lin_eq(X_INTRODUCED_741,[X_INTRODUCED_233,X_INTRODUCED_426,X_INTRODUCED_496,X_INTRODUCED_506,X_INTRODUCED_516],0):: defines_var(X_INTRODUCED_233); -constraint int_lin_eq(X_INTRODUCED_741,[X_INTRODUCED_234,X_INTRODUCED_427,X_INTRODUCED_497,X_INTRODUCED_507,X_INTRODUCED_517],0):: defines_var(X_INTRODUCED_234); -constraint int_lin_eq(X_INTRODUCED_741,[X_INTRODUCED_235,X_INTRODUCED_428,X_INTRODUCED_498,X_INTRODUCED_508,X_INTRODUCED_518],0):: defines_var(X_INTRODUCED_235); -constraint int_lin_eq(X_INTRODUCED_741,[X_INTRODUCED_236,X_INTRODUCED_429,X_INTRODUCED_499,X_INTRODUCED_509,X_INTRODUCED_519],0):: defines_var(X_INTRODUCED_236); -constraint int_lin_eq(X_INTRODUCED_741,[X_INTRODUCED_237,X_INTRODUCED_430,X_INTRODUCED_500,X_INTRODUCED_510,X_INTRODUCED_520],0):: defines_var(X_INTRODUCED_237); -constraint int_lin_eq(X_INTRODUCED_741,[X_INTRODUCED_238,X_INTRODUCED_431,X_INTRODUCED_501,X_INTRODUCED_511,X_INTRODUCED_521],0):: defines_var(X_INTRODUCED_238); -constraint int_lin_eq(X_INTRODUCED_741,[X_INTRODUCED_239,X_INTRODUCED_432,X_INTRODUCED_502,X_INTRODUCED_512,X_INTRODUCED_522],0):: defines_var(X_INTRODUCED_239); -constraint int_lin_eq(X_INTRODUCED_741,[X_INTRODUCED_240,X_INTRODUCED_425,X_INTRODUCED_495,X_INTRODUCED_505,X_INTRODUCED_515],0):: defines_var(X_INTRODUCED_240); -constraint int_lin_eq(X_INTRODUCED_741,[X_INTRODUCED_241,X_INTRODUCED_426,X_INTRODUCED_496,X_INTRODUCED_506,X_INTRODUCED_516],0):: defines_var(X_INTRODUCED_241); -constraint int_lin_eq(X_INTRODUCED_741,[X_INTRODUCED_242,X_INTRODUCED_427,X_INTRODUCED_497,X_INTRODUCED_507,X_INTRODUCED_517],0):: defines_var(X_INTRODUCED_242); -constraint int_lin_eq(X_INTRODUCED_741,[X_INTRODUCED_243,X_INTRODUCED_428,X_INTRODUCED_498,X_INTRODUCED_508,X_INTRODUCED_518],0):: defines_var(X_INTRODUCED_243); -constraint int_lin_eq(X_INTRODUCED_741,[X_INTRODUCED_244,X_INTRODUCED_429,X_INTRODUCED_499,X_INTRODUCED_509,X_INTRODUCED_519],0):: defines_var(X_INTRODUCED_244); -constraint int_lin_eq(X_INTRODUCED_741,[X_INTRODUCED_245,X_INTRODUCED_430,X_INTRODUCED_500,X_INTRODUCED_510,X_INTRODUCED_520],0):: defines_var(X_INTRODUCED_245); -constraint int_lin_eq(X_INTRODUCED_741,[X_INTRODUCED_246,X_INTRODUCED_431,X_INTRODUCED_501,X_INTRODUCED_511,X_INTRODUCED_521],0):: defines_var(X_INTRODUCED_246); -constraint int_lin_eq(X_INTRODUCED_741,[X_INTRODUCED_247,X_INTRODUCED_432,X_INTRODUCED_502,X_INTRODUCED_512,X_INTRODUCED_522],0):: defines_var(X_INTRODUCED_247); -constraint int_lin_eq(X_INTRODUCED_741,[X_INTRODUCED_248,X_INTRODUCED_335,X_INTRODUCED_355,X_INTRODUCED_425,X_INTRODUCED_435],0):: defines_var(X_INTRODUCED_248); -constraint int_lin_eq(X_INTRODUCED_741,[X_INTRODUCED_249,X_INTRODUCED_336,X_INTRODUCED_356,X_INTRODUCED_426,X_INTRODUCED_436],0):: defines_var(X_INTRODUCED_249); -constraint int_lin_eq(X_INTRODUCED_741,[X_INTRODUCED_250,X_INTRODUCED_337,X_INTRODUCED_357,X_INTRODUCED_427,X_INTRODUCED_437],0):: defines_var(X_INTRODUCED_250); -constraint int_lin_eq(X_INTRODUCED_741,[X_INTRODUCED_251,X_INTRODUCED_338,X_INTRODUCED_358,X_INTRODUCED_428,X_INTRODUCED_438],0):: defines_var(X_INTRODUCED_251); -constraint int_lin_eq(X_INTRODUCED_741,[X_INTRODUCED_252,X_INTRODUCED_339,X_INTRODUCED_359,X_INTRODUCED_429,X_INTRODUCED_439],0):: defines_var(X_INTRODUCED_252); -constraint int_lin_eq(X_INTRODUCED_741,[X_INTRODUCED_253,X_INTRODUCED_340,X_INTRODUCED_360,X_INTRODUCED_430,X_INTRODUCED_440],0):: defines_var(X_INTRODUCED_253); -constraint int_lin_eq(X_INTRODUCED_741,[X_INTRODUCED_254,X_INTRODUCED_341,X_INTRODUCED_361,X_INTRODUCED_431,X_INTRODUCED_441],0):: defines_var(X_INTRODUCED_254); -constraint int_lin_eq(X_INTRODUCED_741,[X_INTRODUCED_255,X_INTRODUCED_342,X_INTRODUCED_362,X_INTRODUCED_432,X_INTRODUCED_442],0):: defines_var(X_INTRODUCED_255); -constraint int_lin_eq(X_INTRODUCED_782,[X_INTRODUCED_256,X_INTRODUCED_335,X_INTRODUCED_435],0):: defines_var(X_INTRODUCED_256); -constraint int_lin_eq(X_INTRODUCED_782,[X_INTRODUCED_257,X_INTRODUCED_336,X_INTRODUCED_436],0):: defines_var(X_INTRODUCED_257); -constraint int_lin_eq(X_INTRODUCED_782,[X_INTRODUCED_258,X_INTRODUCED_337,X_INTRODUCED_437],0):: defines_var(X_INTRODUCED_258); -constraint int_lin_eq(X_INTRODUCED_782,[X_INTRODUCED_259,X_INTRODUCED_338,X_INTRODUCED_438],0):: defines_var(X_INTRODUCED_259); -constraint int_lin_eq(X_INTRODUCED_782,[X_INTRODUCED_260,X_INTRODUCED_339,X_INTRODUCED_439],0):: defines_var(X_INTRODUCED_260); -constraint int_lin_eq(X_INTRODUCED_782,[X_INTRODUCED_261,X_INTRODUCED_340,X_INTRODUCED_440],0):: defines_var(X_INTRODUCED_261); -constraint int_lin_eq(X_INTRODUCED_782,[X_INTRODUCED_262,X_INTRODUCED_341,X_INTRODUCED_441],0):: defines_var(X_INTRODUCED_262); -constraint int_lin_eq(X_INTRODUCED_782,[X_INTRODUCED_263,X_INTRODUCED_342,X_INTRODUCED_442],0):: defines_var(X_INTRODUCED_263); -constraint maximum_int(X_INTRODUCED_264,X_INTRODUCED_798); -constraint maximum_int(X_INTRODUCED_265,X_INTRODUCED_799); -constraint maximum_int(X_INTRODUCED_266,X_INTRODUCED_800); -constraint maximum_int(X_INTRODUCED_267,X_INTRODUCED_801); -constraint maximum_int(X_INTRODUCED_268,X_INTRODUCED_802); -constraint maximum_int(X_INTRODUCED_269,X_INTRODUCED_803); -constraint maximum_int(X_INTRODUCED_270,X_INTRODUCED_804); -constraint maximum_int(X_INTRODUCED_271,X_INTRODUCED_805); -constraint maximum_int(X_INTRODUCED_272,X_INTRODUCED_806); -constraint maximum_int(X_INTRODUCED_273,X_INTRODUCED_807); -constraint minimum_int(X_INTRODUCED_274,X_INTRODUCED_798); -constraint minimum_int(X_INTRODUCED_275,X_INTRODUCED_799); -constraint minimum_int(X_INTRODUCED_276,X_INTRODUCED_800); -constraint minimum_int(X_INTRODUCED_277,X_INTRODUCED_801); -constraint minimum_int(X_INTRODUCED_278,X_INTRODUCED_802); -constraint minimum_int(X_INTRODUCED_279,X_INTRODUCED_803); -constraint minimum_int(X_INTRODUCED_280,X_INTRODUCED_804); -constraint minimum_int(X_INTRODUCED_281,X_INTRODUCED_805); -constraint minimum_int(X_INTRODUCED_282,X_INTRODUCED_806); -constraint minimum_int(X_INTRODUCED_283,X_INTRODUCED_807); -constraint int_lin_eq(X_INTRODUCED_741,[X_INTRODUCED_284,X_INTRODUCED_184,X_INTRODUCED_186,X_INTRODUCED_188,X_INTRODUCED_190],0):: defines_var(X_INTRODUCED_284); -constraint int_lin_eq(X_INTRODUCED_741,[X_INTRODUCED_285,X_INTRODUCED_193,X_INTRODUCED_195,X_INTRODUCED_197,X_INTRODUCED_199],0):: defines_var(X_INTRODUCED_285); -constraint int_lin_eq(X_INTRODUCED_741,[X_INTRODUCED_286,X_INTRODUCED_200,X_INTRODUCED_202,X_INTRODUCED_204,X_INTRODUCED_206],0):: defines_var(X_INTRODUCED_286); -constraint int_lin_eq(X_INTRODUCED_741,[X_INTRODUCED_287,X_INTRODUCED_209,X_INTRODUCED_211,X_INTRODUCED_213,X_INTRODUCED_215],0):: defines_var(X_INTRODUCED_287); -constraint int_lin_eq(X_INTRODUCED_741,[X_INTRODUCED_288,X_INTRODUCED_217,X_INTRODUCED_219,X_INTRODUCED_221,X_INTRODUCED_223],0):: defines_var(X_INTRODUCED_288); -constraint int_lin_eq([1,-1,-1],[X_INTRODUCED_289,X_INTRODUCED_438,X_INTRODUCED_440],0):: defines_var(X_INTRODUCED_289); -constraint int_lin_eq(X_INTRODUCED_815,[X_INTRODUCED_290,X_INTRODUCED_232,X_INTRODUCED_233,X_INTRODUCED_234,X_INTRODUCED_235,X_INTRODUCED_236,X_INTRODUCED_237,X_INTRODUCED_238,X_INTRODUCED_239],0):: defines_var(X_INTRODUCED_290); -constraint int_lin_eq(X_INTRODUCED_815,[X_INTRODUCED_291,X_INTRODUCED_240,X_INTRODUCED_241,X_INTRODUCED_242,X_INTRODUCED_243,X_INTRODUCED_244,X_INTRODUCED_245,X_INTRODUCED_246,X_INTRODUCED_247],0):: defines_var(X_INTRODUCED_291); -constraint int_lin_eq(X_INTRODUCED_815,[X_INTRODUCED_292,X_INTRODUCED_248,X_INTRODUCED_249,X_INTRODUCED_250,X_INTRODUCED_251,X_INTRODUCED_252,X_INTRODUCED_253,X_INTRODUCED_254,X_INTRODUCED_255],0):: defines_var(X_INTRODUCED_292); -constraint int_lin_eq(X_INTRODUCED_815,[X_INTRODUCED_293,X_INTRODUCED_256,X_INTRODUCED_257,X_INTRODUCED_258,X_INTRODUCED_259,X_INTRODUCED_260,X_INTRODUCED_261,X_INTRODUCED_262,X_INTRODUCED_263],0):: defines_var(X_INTRODUCED_293); -constraint int_max(0,X_INTRODUCED_823,X_INTRODUCED_824); -constraint int_max(0,X_INTRODUCED_828,X_INTRODUCED_829); -constraint int_max(0,X_INTRODUCED_833,X_INTRODUCED_834); -constraint int_max(0,X_INTRODUCED_838,X_INTRODUCED_839); -constraint int_max(0,X_INTRODUCED_843,X_INTRODUCED_844); -constraint int_max(0,X_INTRODUCED_848,X_INTRODUCED_849); -constraint int_max(0,X_INTRODUCED_853,X_INTRODUCED_854); -constraint int_max(0,X_INTRODUCED_858,X_INTRODUCED_859); -constraint int_div(X_INTRODUCED_861,3,X_INTRODUCED_863):: defines_var(X_INTRODUCED_863); -constraint int_div(X_INTRODUCED_864,3,X_INTRODUCED_866):: defines_var(X_INTRODUCED_866); -constraint int_div(X_INTRODUCED_867,3,X_INTRODUCED_869):: defines_var(X_INTRODUCED_869); -constraint int_div(X_INTRODUCED_870,3,X_INTRODUCED_872):: defines_var(X_INTRODUCED_872); -constraint int_div(X_INTRODUCED_873,3,X_INTRODUCED_875):: defines_var(X_INTRODUCED_875); -constraint int_div(X_INTRODUCED_876,3,X_INTRODUCED_878):: defines_var(X_INTRODUCED_878); -constraint int_div(X_INTRODUCED_879,3,X_INTRODUCED_881):: defines_var(X_INTRODUCED_881); -constraint int_div(X_INTRODUCED_882,3,X_INTRODUCED_884):: defines_var(X_INTRODUCED_884); -constraint int_lin_eq(X_INTRODUCED_909,X_INTRODUCED_908,0):: defines_var(objective); -constraint int_le(0,0); -constraint int_le(0,0); -constraint int_le(0,0); -constraint int_le(0,0); -constraint int_le(0,X_INTRODUCED_264); -constraint int_le(0,X_INTRODUCED_265); -constraint int_le(0,X_INTRODUCED_266); -constraint int_le(0,X_INTRODUCED_267); -constraint int_le(0,X_INTRODUCED_268); -constraint int_le(0,X_INTRODUCED_269); -constraint int_le(0,X_INTRODUCED_270); -constraint int_le(0,X_INTRODUCED_271); -constraint int_le(0,X_INTRODUCED_272); -constraint int_le(0,X_INTRODUCED_273); -constraint int_le(0,X_INTRODUCED_274); -constraint int_le(0,X_INTRODUCED_275); -constraint int_le(0,X_INTRODUCED_276); -constraint int_le(0,X_INTRODUCED_277); -constraint int_le(0,X_INTRODUCED_278); -constraint int_le(0,X_INTRODUCED_279); -constraint int_le(0,X_INTRODUCED_280); -constraint int_le(0,X_INTRODUCED_281); -constraint int_le(0,X_INTRODUCED_282); -constraint int_le(0,X_INTRODUCED_283); -constraint int_le(0,X_INTRODUCED_289); -constraint int_le(0,objective); -constraint bool2int(X_INTRODUCED_2,X_INTRODUCED_306):: defines_var(X_INTRODUCED_306); -constraint bool2int(X_INTRODUCED_3,X_INTRODUCED_307):: defines_var(X_INTRODUCED_307); -constraint bool2int(X_INTRODUCED_6,X_INTRODUCED_310):: defines_var(X_INTRODUCED_310); -constraint bool2int(X_INTRODUCED_7,X_INTRODUCED_311):: defines_var(X_INTRODUCED_311); -constraint bool2int(X_INTRODUCED_8,X_INTRODUCED_315):: defines_var(X_INTRODUCED_315); -constraint bool2int(X_INTRODUCED_9,X_INTRODUCED_316):: defines_var(X_INTRODUCED_316); -constraint bool2int(X_INTRODUCED_10,X_INTRODUCED_317):: defines_var(X_INTRODUCED_317); -constraint bool2int(X_INTRODUCED_11,X_INTRODUCED_318):: defines_var(X_INTRODUCED_318); -constraint bool2int(X_INTRODUCED_12,X_INTRODUCED_319):: defines_var(X_INTRODUCED_319); -constraint bool2int(X_INTRODUCED_13,X_INTRODUCED_320):: defines_var(X_INTRODUCED_320); -constraint bool2int(X_INTRODUCED_20,X_INTRODUCED_329):: defines_var(X_INTRODUCED_329); -constraint bool2int(X_INTRODUCED_21,X_INTRODUCED_330):: defines_var(X_INTRODUCED_330); -constraint bool2int(X_INTRODUCED_22,X_INTRODUCED_331):: defines_var(X_INTRODUCED_331); -constraint bool2int(X_INTRODUCED_23,X_INTRODUCED_332):: defines_var(X_INTRODUCED_332); -constraint bool2int(X_INTRODUCED_24,X_INTRODUCED_335):: defines_var(X_INTRODUCED_335); -constraint bool2int(X_INTRODUCED_25,X_INTRODUCED_336):: defines_var(X_INTRODUCED_336); -constraint bool2int(X_INTRODUCED_26,X_INTRODUCED_337):: defines_var(X_INTRODUCED_337); -constraint bool2int(X_INTRODUCED_27,X_INTRODUCED_338):: defines_var(X_INTRODUCED_338); -constraint bool2int(X_INTRODUCED_28,X_INTRODUCED_339):: defines_var(X_INTRODUCED_339); -constraint bool2int(X_INTRODUCED_29,X_INTRODUCED_340):: defines_var(X_INTRODUCED_340); -constraint bool2int(X_INTRODUCED_32,X_INTRODUCED_345):: defines_var(X_INTRODUCED_345); -constraint bool2int(X_INTRODUCED_33,X_INTRODUCED_346):: defines_var(X_INTRODUCED_346); -constraint bool2int(X_INTRODUCED_34,X_INTRODUCED_347):: defines_var(X_INTRODUCED_347); -constraint bool2int(X_INTRODUCED_35,X_INTRODUCED_348):: defines_var(X_INTRODUCED_348); -constraint bool2int(X_INTRODUCED_40,X_INTRODUCED_355):: defines_var(X_INTRODUCED_355); -constraint bool2int(X_INTRODUCED_41,X_INTRODUCED_356):: defines_var(X_INTRODUCED_356); -constraint bool2int(X_INTRODUCED_46,X_INTRODUCED_361):: defines_var(X_INTRODUCED_361); -constraint bool2int(X_INTRODUCED_47,X_INTRODUCED_362):: defines_var(X_INTRODUCED_362); -constraint bool2int(X_INTRODUCED_50,X_INTRODUCED_367):: defines_var(X_INTRODUCED_367); -constraint bool2int(X_INTRODUCED_51,X_INTRODUCED_368):: defines_var(X_INTRODUCED_368); -constraint bool2int(X_INTRODUCED_52,X_INTRODUCED_369):: defines_var(X_INTRODUCED_369); -constraint bool2int(X_INTRODUCED_53,X_INTRODUCED_370):: defines_var(X_INTRODUCED_370); -constraint bool2int(X_INTRODUCED_58,X_INTRODUCED_377):: defines_var(X_INTRODUCED_377); -constraint bool2int(X_INTRODUCED_59,X_INTRODUCED_378):: defines_var(X_INTRODUCED_378); -constraint bool2int(X_INTRODUCED_60,X_INTRODUCED_379):: defines_var(X_INTRODUCED_379); -constraint bool2int(X_INTRODUCED_61,X_INTRODUCED_380):: defines_var(X_INTRODUCED_380); -constraint bool2int(X_INTRODUCED_62,X_INTRODUCED_381):: defines_var(X_INTRODUCED_381); -constraint bool2int(X_INTRODUCED_63,X_INTRODUCED_382):: defines_var(X_INTRODUCED_382); -constraint bool2int(X_INTRODUCED_66,X_INTRODUCED_387):: defines_var(X_INTRODUCED_387); -constraint bool2int(X_INTRODUCED_67,X_INTRODUCED_388):: defines_var(X_INTRODUCED_388); -constraint bool2int(X_INTRODUCED_76,X_INTRODUCED_399):: defines_var(X_INTRODUCED_399); -constraint bool2int(X_INTRODUCED_77,X_INTRODUCED_400):: defines_var(X_INTRODUCED_400); -constraint bool2int(X_INTRODUCED_78,X_INTRODUCED_401):: defines_var(X_INTRODUCED_401); -constraint bool2int(X_INTRODUCED_79,X_INTRODUCED_402):: defines_var(X_INTRODUCED_402); -constraint bool2int(X_INTRODUCED_82,X_INTRODUCED_407):: defines_var(X_INTRODUCED_407); -constraint bool2int(X_INTRODUCED_83,X_INTRODUCED_408):: defines_var(X_INTRODUCED_408); -constraint bool2int(X_INTRODUCED_88,X_INTRODUCED_415):: defines_var(X_INTRODUCED_415); -constraint bool2int(X_INTRODUCED_89,X_INTRODUCED_416):: defines_var(X_INTRODUCED_416); -constraint bool2int(X_INTRODUCED_92,X_INTRODUCED_419):: defines_var(X_INTRODUCED_419); -constraint bool2int(X_INTRODUCED_93,X_INTRODUCED_420):: defines_var(X_INTRODUCED_420); -constraint bool2int(X_INTRODUCED_102,X_INTRODUCED_431):: defines_var(X_INTRODUCED_431); -constraint bool2int(X_INTRODUCED_103,X_INTRODUCED_432):: defines_var(X_INTRODUCED_432); -constraint bool2int(X_INTRODUCED_106,X_INTRODUCED_437):: defines_var(X_INTRODUCED_437); -constraint bool2int(X_INTRODUCED_107,X_INTRODUCED_438):: defines_var(X_INTRODUCED_438); -constraint bool2int(X_INTRODUCED_108,X_INTRODUCED_439):: defines_var(X_INTRODUCED_439); -constraint bool2int(X_INTRODUCED_109,X_INTRODUCED_440):: defines_var(X_INTRODUCED_440); -constraint bool2int(X_INTRODUCED_116,X_INTRODUCED_449):: defines_var(X_INTRODUCED_449); -constraint bool2int(X_INTRODUCED_117,X_INTRODUCED_450):: defines_var(X_INTRODUCED_450); -constraint bool2int(X_INTRODUCED_118,X_INTRODUCED_451):: defines_var(X_INTRODUCED_451); -constraint bool2int(X_INTRODUCED_119,X_INTRODUCED_452):: defines_var(X_INTRODUCED_452); -constraint bool2int(X_INTRODUCED_122,X_INTRODUCED_457):: defines_var(X_INTRODUCED_457); -constraint bool2int(X_INTRODUCED_123,X_INTRODUCED_458):: defines_var(X_INTRODUCED_458); -constraint bool2int(X_INTRODUCED_126,X_INTRODUCED_461):: defines_var(X_INTRODUCED_461); -constraint bool2int(X_INTRODUCED_127,X_INTRODUCED_462):: defines_var(X_INTRODUCED_462); -constraint bool2int(X_INTRODUCED_128,X_INTRODUCED_465):: defines_var(X_INTRODUCED_465); -constraint bool2int(X_INTRODUCED_129,X_INTRODUCED_466):: defines_var(X_INTRODUCED_466); -constraint bool2int(X_INTRODUCED_130,X_INTRODUCED_467):: defines_var(X_INTRODUCED_467); -constraint bool2int(X_INTRODUCED_131,X_INTRODUCED_468):: defines_var(X_INTRODUCED_468); -constraint bool2int(X_INTRODUCED_132,X_INTRODUCED_469):: defines_var(X_INTRODUCED_469); -constraint bool2int(X_INTRODUCED_133,X_INTRODUCED_470):: defines_var(X_INTRODUCED_470); -constraint bool2int(X_INTRODUCED_138,X_INTRODUCED_477):: defines_var(X_INTRODUCED_477); -constraint bool2int(X_INTRODUCED_139,X_INTRODUCED_478):: defines_var(X_INTRODUCED_478); -constraint bool2int(X_INTRODUCED_142,X_INTRODUCED_481):: defines_var(X_INTRODUCED_481); -constraint bool2int(X_INTRODUCED_143,X_INTRODUCED_482):: defines_var(X_INTRODUCED_482); -constraint bool2int(X_INTRODUCED_148,X_INTRODUCED_489):: defines_var(X_INTRODUCED_489); -constraint bool2int(X_INTRODUCED_149,X_INTRODUCED_490):: defines_var(X_INTRODUCED_490); -constraint bool2int(X_INTRODUCED_152,X_INTRODUCED_495):: defines_var(X_INTRODUCED_495); -constraint bool2int(X_INTRODUCED_153,X_INTRODUCED_496):: defines_var(X_INTRODUCED_496); -constraint bool2int(X_INTRODUCED_156,X_INTRODUCED_499):: defines_var(X_INTRODUCED_499); -constraint bool2int(X_INTRODUCED_157,X_INTRODUCED_500):: defines_var(X_INTRODUCED_500); -constraint bool2int(X_INTRODUCED_162,X_INTRODUCED_507):: defines_var(X_INTRODUCED_507); -constraint bool2int(X_INTRODUCED_163,X_INTRODUCED_508):: defines_var(X_INTRODUCED_508); -constraint bool2int(X_INTRODUCED_166,X_INTRODUCED_511):: defines_var(X_INTRODUCED_511); -constraint bool2int(X_INTRODUCED_167,X_INTRODUCED_512):: defines_var(X_INTRODUCED_512); -constraint bool2int(X_INTRODUCED_172,X_INTRODUCED_519):: defines_var(X_INTRODUCED_519); -constraint bool2int(X_INTRODUCED_173,X_INTRODUCED_520):: defines_var(X_INTRODUCED_520); -constraint bool2int(X_INTRODUCED_178,X_INTRODUCED_527):: defines_var(X_INTRODUCED_527); -constraint bool2int(X_INTRODUCED_179,X_INTRODUCED_528):: defines_var(X_INTRODUCED_528); -constraint bool2int(X_INTRODUCED_182,X_INTRODUCED_531):: defines_var(X_INTRODUCED_531); -constraint bool2int(X_INTRODUCED_183,X_INTRODUCED_532):: defines_var(X_INTRODUCED_532); -constraint int_lin_eq([-1,-1,-1,-1,-1,-1,-1,-1],[X_INTRODUCED_315,X_INTRODUCED_335,X_INTRODUCED_345,X_INTRODUCED_355,X_INTRODUCED_415,X_INTRODUCED_465,X_INTRODUCED_495,X_INTRODUCED_823],-3):: defines_var(X_INTRODUCED_823); -constraint int_lin_eq([-1,-1,-1,-1,-1,-1,-1,-1],[X_INTRODUCED_316,X_INTRODUCED_336,X_INTRODUCED_346,X_INTRODUCED_356,X_INTRODUCED_416,X_INTRODUCED_466,X_INTRODUCED_496,X_INTRODUCED_828],-3):: defines_var(X_INTRODUCED_828); -constraint int_lin_eq([-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1],[X_INTRODUCED_306,X_INTRODUCED_317,X_INTRODUCED_337,X_INTRODUCED_347,X_INTRODUCED_367,X_INTRODUCED_377,X_INTRODUCED_387,X_INTRODUCED_407,X_INTRODUCED_437,X_INTRODUCED_457,X_INTRODUCED_467,X_INTRODUCED_477,X_INTRODUCED_507,X_INTRODUCED_527,X_INTRODUCED_833],-3):: defines_var(X_INTRODUCED_833); -constraint int_lin_eq([-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1],[X_INTRODUCED_307,X_INTRODUCED_318,X_INTRODUCED_338,X_INTRODUCED_348,X_INTRODUCED_368,X_INTRODUCED_378,X_INTRODUCED_388,X_INTRODUCED_408,X_INTRODUCED_438,X_INTRODUCED_458,X_INTRODUCED_468,X_INTRODUCED_478,X_INTRODUCED_508,X_INTRODUCED_528,X_INTRODUCED_838],-3):: defines_var(X_INTRODUCED_838); -constraint int_lin_eq([-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1],[X_INTRODUCED_319,X_INTRODUCED_329,X_INTRODUCED_339,X_INTRODUCED_369,X_INTRODUCED_379,X_INTRODUCED_399,X_INTRODUCED_419,X_INTRODUCED_439,X_INTRODUCED_449,X_INTRODUCED_469,X_INTRODUCED_489,X_INTRODUCED_499,X_INTRODUCED_519,X_INTRODUCED_843],-3):: defines_var(X_INTRODUCED_843); -constraint int_lin_eq([-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1],[X_INTRODUCED_320,X_INTRODUCED_330,X_INTRODUCED_340,X_INTRODUCED_370,X_INTRODUCED_380,X_INTRODUCED_400,X_INTRODUCED_420,X_INTRODUCED_440,X_INTRODUCED_450,X_INTRODUCED_470,X_INTRODUCED_490,X_INTRODUCED_500,X_INTRODUCED_520,X_INTRODUCED_848],-3):: defines_var(X_INTRODUCED_848); -constraint int_lin_eq([-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1],[X_INTRODUCED_310,X_INTRODUCED_331,X_INTRODUCED_361,X_INTRODUCED_381,X_INTRODUCED_401,X_INTRODUCED_431,X_INTRODUCED_451,X_INTRODUCED_461,X_INTRODUCED_481,X_INTRODUCED_511,X_INTRODUCED_531,X_INTRODUCED_853],-3):: defines_var(X_INTRODUCED_853); -constraint int_lin_eq([-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1],[X_INTRODUCED_311,X_INTRODUCED_332,X_INTRODUCED_362,X_INTRODUCED_382,X_INTRODUCED_402,X_INTRODUCED_432,X_INTRODUCED_452,X_INTRODUCED_462,X_INTRODUCED_482,X_INTRODUCED_512,X_INTRODUCED_532,X_INTRODUCED_858],-3):: defines_var(X_INTRODUCED_858); -constraint int_lin_eq([100,-1],[X_INTRODUCED_824,X_INTRODUCED_861],0):: defines_var(X_INTRODUCED_861); -constraint int_lin_eq([100,-1],[X_INTRODUCED_829,X_INTRODUCED_864],0):: defines_var(X_INTRODUCED_864); -constraint int_lin_eq([100,-1],[X_INTRODUCED_834,X_INTRODUCED_867],0):: defines_var(X_INTRODUCED_867); -constraint int_lin_eq([100,-1],[X_INTRODUCED_839,X_INTRODUCED_870],0):: defines_var(X_INTRODUCED_870); -constraint int_lin_eq([100,-1],[X_INTRODUCED_844,X_INTRODUCED_873],0):: defines_var(X_INTRODUCED_873); -constraint int_lin_eq([100,-1],[X_INTRODUCED_849,X_INTRODUCED_876],0):: defines_var(X_INTRODUCED_876); -constraint int_lin_eq([100,-1],[X_INTRODUCED_854,X_INTRODUCED_879],0):: defines_var(X_INTRODUCED_879); -constraint int_lin_eq([100,-1],[X_INTRODUCED_859,X_INTRODUCED_882],0):: defines_var(X_INTRODUCED_882); -solve maximize objective; \ No newline at end of file diff --git a/examples/tests/issue117.py b/examples/tests/issue117.py deleted file mode 100755 index 68ec9d59a4..0000000000 --- a/examples/tests/issue117.py +++ /dev/null @@ -1,65 +0,0 @@ -#!/usr/bin/env python3 -from collections import namedtuple -from ortools.constraint_solver import pywrapcp - -VEHICLE_COUNT = 30 -VEHICLE_CAPACITY = 200 -Customer = namedtuple("Customer", ['index', 'demand', 'x', 'y']) - -print('Init') - -customers = list() -customers.append(Customer(0, 0, 0, 0)) -customers.append(Customer(1, 1, 1.0, 1.0)) -customers.append(Customer(1, 1, 2.0, 2.0)) -customer_count = len(customers) - -manager = pywrapcp.RoutingIndexManager(3, VEHICLE_COUNT, 0) -routing = pywrapcp.RoutingModel(manager) - -print('Demand Constraint') -demands = [] -for i in range(0, customer_count): - demands.append(customers[i][1]) -routing.AddVectorDimension(demands, VEHICLE_CAPACITY, True, "Demand") - -print('Adding Costs') - - -def distance_callback(from_index, to_index): - #static just for the sake of the example - return 1 - -transit_callback_index = routing.RegisterTransitCallback(distance_callback) -routing.SetArcCostEvaluatorOfAllVehicles(transit_callback_index) - -routing.CloseModel() - -assignment = routing.Solve(None) - -# Inspect solution and extract routes -routes = [] -for i in range(0, routing.vehicles()): - - route_number = i - routes.append([]) - node = routing.Start(route_number) - route = [] - route.append(0) - if routing.IsVehicleUsed(assignment, i): - while True: - node = assignment.Value(routing.NextVar(node)) - - if not routing.IsEnd(node): - route.append(int(node)) - else: - break - - route.append(0) - routes[route_number].append(route) - -#This are the routes as list of lists -routes = [el[0] for el in routes] - -#Now try to read the routes into a new assigment object fails -assignment2 = routing.ReadAssignmentFromRoutes(routes, True) diff --git a/examples/tests/issue1231.py b/examples/tests/issue1231.py deleted file mode 100755 index e78a2dc933..0000000000 --- a/examples/tests/issue1231.py +++ /dev/null @@ -1,79 +0,0 @@ -#!/usr/bin/env python3 -# Copyright 2010-2025 Google -# Licensed under the Apache License, Version 2.0 (the "License"); -# you may not use this file except in compliance with the License. -# You may obtain a copy of the License at -# -# http://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, software -# distributed under the License is distributed on an "AS IS" BASIS, -# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -# See the License for the specific language governing permissions and -# limitations under the License. - -""" -Cryptarithmetic puzzle - -First attempt to solve equation CP + IS + FUN = TRUE -where each letter represents a unique digit. - -This problem has 72 different solutions in base 10. -""" - -from ortools.constraint_solver import pywrapcp -from os import abort - -def CPIsFun(): - # Constraint programming engine - solver = pywrapcp.Solver('CP is fun!'); - - kBase = 10 - - # Decision variables. - digits = list(range(0, kBase)) - digits_without_zero = list(range(1, kBase)) - - c = solver.IntVar(digits_without_zero, 'C'); - p = solver.IntVar(digits, 'P'); - i = solver.IntVar(digits_without_zero, 'I'); - s = solver.IntVar(digits, 'S'); - f = solver.IntVar(digits_without_zero, 'F'); - u = solver.IntVar(digits, 'U'); - n = solver.IntVar(digits, 'N'); - t = solver.IntVar(digits_without_zero, 'T'); - r = solver.IntVar(digits, 'R'); - e = solver.IntVar(digits, 'E'); - - # We need to group variables in a list to use the constraint AllDifferent. - letters = [c, p, i, s, f, u, n, t, r, e] - - # Verify that we have enough digits. - assert kBase >= len(letters) - - # Define constraints. - solver.Add(solver.AllDifferent(letters)) - - # CP + IS + FUN = TRUE - solver.Add (p + s + n + kBase * (c + i + u) + kBase * kBase * f == - e + kBase * u + kBase * kBase * r + kBase * kBase * kBase * t) - - db = solver.Phase(letters, solver.INT_VAR_DEFAULT, - solver.INT_VALUE_DEFAULT) - solver.NewSearch(db) - - while solver.NextSolution(): - print(letters) - # Is CP + IS + FUN = TRUE? - assert (kBase*c.Value() + p.Value() + kBase*i.Value() + s.Value() + - kBase*kBase*f.Value() + kBase*u.Value() + n.Value() == - kBase*kBase*kBase*t.Value() + kBase*kBase*r.Value() + - kBase*u.Value() + e.Value()) - - solver.EndSearch() - - return - - -if __name__ == '__main__': - CPIsFun() diff --git a/examples/tests/issue128.py b/examples/tests/issue128.py deleted file mode 100755 index 71286d5cf4..0000000000 --- a/examples/tests/issue128.py +++ /dev/null @@ -1,157 +0,0 @@ -#!/usr/bin/env python3 -from ortools.constraint_solver import pywrapcp - -def test_v0(): - print('test_v0') - solver = pywrapcp.Solver('') - - # we have two tasks of durations 4 and 7 - task1 = solver.FixedDurationIntervalVar(0, 5, 4, False, "task1") - task2 = solver.FixedDurationIntervalVar(0, 5, 7, False, "task2") - tasks = [task1, task2] - - # to each task, a post task of duration 64 is attached - postTask1 = solver.FixedDurationIntervalVar(4, 74 + 64, 64, False, "postTask1") - postTask2 = solver.FixedDurationIntervalVar(4, 77 + 64, 64, False, "postTask2") - postTasks = [postTask1, postTask2] - - solver.Add(postTask1.StartsAtEnd(task1)) - solver.Add(postTask2.StartsAtEnd(task2)) - - # two resources are available for the post tasks. There are binary indicator - # variables to determine which task uses which resource - postTask1UsesRes1 = solver.IntVar(0, 1, "post task 1 using resource 1") - postTask1UsesRes2 = solver.IntVar(0, 1, "post task 1 using resource 2") - postTask2UsesRes1 = solver.IntVar(0, 1, "post task 2 using resource 1") - postTask2UsesRes2 = solver.IntVar(0, 1, "post task 2 using resource 2") - - indicators = [postTask1UsesRes1, postTask1UsesRes2, postTask2UsesRes1, postTask2UsesRes2] - - # each post task needs exactly one resource - solver.Add(postTask1UsesRes1 + postTask1UsesRes2 == 1) - solver.Add(postTask2UsesRes1 + postTask2UsesRes2 == 1) - - # each resource cannot be used simultaneously by more than one post task - solver.Add(solver.Cumulative(postTasks, [postTask1UsesRes1, postTask2UsesRes1], 1, "cumul1")) - solver.Add(solver.Cumulative(postTasks, [postTask1UsesRes2, postTask2UsesRes2], 1, "cumul2")) - - # using constant demands instead, the correct solution is found - # solver.Add(solver.Cumulative(postTasks, [0, 1], 1, "")) - # solver.Add(solver.Cumulative(postTasks, [1, 0], 1, "")) - - - # search setup and solving - dbInterval = solver.Phase(tasks + postTasks, solver.INTERVAL_DEFAULT) - dbInt = solver.Phase(indicators, solver.INT_VAR_DEFAULT, solver.INT_VALUE_DEFAULT) - - makespan = solver.Max([task1.EndExpr().Var(), task2.EndExpr().Var()]) - optimize = solver.Optimize(False, makespan, 1) - - solution = solver.Assignment() - solution.Add([t for t in (tasks + postTasks)]) - solution.Add(indicators) - collector = solver.LastSolutionCollector(solution) - phase = solver.Compose([dbInt, dbInterval]) - solver.Solve(phase, [collector, optimize]) - - if collector.SolutionCount() > 0: - for i, task in enumerate(tasks): - print("task {} runs from {} to {}".format( - i, - collector.StartValue(0, task), - collector.EndValue(0, task))) - for i, task in enumerate(postTasks): - print("postTask {} starts at {}".format(i, collector.StartValue(0, task))) - for indicator in indicators: - print('{} -> {}'.format(indicator.Name(), collector.Value(0, indicator))) - else: - print('No solution') - -def test_v1(): - print('test_v1') - solver = pywrapcp.Solver('') - - # we have two tasks of durations 4 and 7 - task1 = solver.FixedDurationIntervalVar(0, 5, 4, False, "task1") - task2 = solver.FixedDurationIntervalVar(0, 5, 7, False, "task2") - tasks = [task1, task2] - # Create copies for each resource - task1_r1 = solver.FixedDurationIntervalVar(0, 5, 4, True, "task1_1") - task2_r1 = solver.FixedDurationIntervalVar(0, 5, 7, True, "task2_1") - tasks_r1 = [task1_r1, task2_r1] - task1_r2 = solver.FixedDurationIntervalVar(0, 5, 4, True, "task1_2") - task2_r2 = solver.FixedDurationIntervalVar(0, 5, 7, True, "task2_2") - tasks_r2 = [task1_r2, task2_r2] - - - # to each task, a post task of duration 64 is attached - postTask1 = solver.FixedDurationStartSyncedOnEndIntervalVar(task1, 64, 0) - postTask2 = solver.FixedDurationStartSyncedOnEndIntervalVar(task2, 64, 0) - postTasks = [postTask1, postTask2] - - # Create copies for each resource - postTask1_r1 = solver.FixedDurationIntervalVar(4, 9, 64, True, "pTask1_1") - postTask2_r1 = solver.FixedDurationIntervalVar(4, 11, 64, True, "pTask2_1") - postTask1_r2 = solver.FixedDurationIntervalVar(4, 9, 64, True, "pTask1_2") - postTask2_r2 = solver.FixedDurationIntervalVar(4, 11, 64, True, "pTask2_2") - - copies = [ task1_r1, task2_r1, task1_r2, task2_r2, - postTask1_r1, postTask1_r2, postTask2_r1, postTask2_r2 ] - - # each resource cannot be used simultaneously by more than one post task - solver.Add(solver.DisjunctiveConstraint( - [task1_r1, task2_r1, postTask1_r1, postTask2_r1], "disj1")) - solver.Add(solver.DisjunctiveConstraint( - [task1_r2, task2_r2, postTask1_r2, postTask2_r2], "disj1")) - - # Only one resource available - solver.Add(task1_r1.PerformedExpr() + task1_r2.PerformedExpr() == 1) - solver.Add(task2_r1.PerformedExpr() + task2_r2.PerformedExpr() == 1) - solver.Add(postTask1_r1.PerformedExpr() + postTask1_r2.PerformedExpr() == 1) - solver.Add(postTask2_r1.PerformedExpr() + postTask2_r2.PerformedExpr() == 1) - - # Sync main task with copies - solver.Add(solver.Cover([task1_r1, task1_r2], task1)) - solver.Add(solver.Cover([task2_r1, task2_r2], task2)) - solver.Add(solver.Cover([postTask1_r1, postTask1_r2], postTask1)) - solver.Add(solver.Cover([postTask2_r1, postTask2_r2], postTask2)) - - # Indicators (no need to add both as they are constrained together) - indicators = [ - task1_r1.PerformedExpr(), task2_r1.PerformedExpr(), - postTask1_r1.PerformedExpr(), postTask2_r1.PerformedExpr()] - - # search setup and solving - dbInterval = solver.Phase(tasks + postTasks, solver.INTERVAL_DEFAULT) - dbInt = solver.Phase( - indicators, solver.INT_VAR_DEFAULT, solver.INT_VALUE_DEFAULT) - - makespan = solver.Max([task1.EndExpr(), task2.EndExpr()]) - optimize = solver.Minimize(makespan, 1) - - solution = solver.Assignment() - solution.Add(tasks) - solution.Add(postTasks) - solution.Add(copies) - solution.AddObjective(makespan) - collector = solver.LastSolutionCollector(solution) - phase = solver.Compose([dbInt, dbInterval]) - solver.Solve(phase, [collector, optimize]) - - if collector.SolutionCount() > 0: - print('solution with makespan', collector.ObjectiveValue(0)) - for task in tasks: - print("task {} runs from {} to {}".format( - task.Name(), - collector.StartValue(0, task), - collector.EndValue(0, task))) - for task in postTasks: - print("postTask {} starts at {}".format( - task.Name(), collector.StartValue(0, task))) - for task in copies: - print(task.Name(), collector.PerformedValue(0, task)) - else: - print('No solution') - -test_v0() -test_v1() diff --git a/examples/tests/issue1303.cc b/examples/tests/issue1303.cc deleted file mode 100644 index 197e36fffa..0000000000 --- a/examples/tests/issue1303.cc +++ /dev/null @@ -1,29 +0,0 @@ -// Copyright 2011-2014 Google -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. - -#include "absl/flags/parse.h" -#include "ortools/base/logging.h" -#include "ortools/base/version.h" - -namespace operations_research { -void PrintVersion() { - LOG(INFO) << "Version = " << OrToolsMajorVersion() << "." - << OrToolsMinorVersion(); -} -} // namespace operations_research - -int main(int argc, char** argv) { - absl::ParseCommandLine(argc, argv); - operations_research::PrintVersion(); - return 0; -} diff --git a/examples/tests/issue139.fzn b/examples/tests/issue139.fzn deleted file mode 100644 index eb098a4607..0000000000 --- a/examples/tests/issue139.fzn +++ /dev/null @@ -1,243 +0,0 @@ -predicate inverse(array [int] of var int: f,array [int] of var int: invf); -predicate array_int_maximum(var int: m,array [int] of var int: x); -array [1..2] of int: X_INTRODUCED_54 = [1,-1]; -array [1..2] of int: X_INTRODUCED_81 = [-1,1]; -array [1..3] of int: X_INTRODUCED_96 = [1,-2,-2]; -array [1..2] of int: X_INTRODUCED_127 = [1,-2]; -array [1..4] of int: X_INTRODUCED_158 = [1,-2,-2,-2]; -var 1..18: X_INTRODUCED_0; -var 1..18: X_INTRODUCED_1; -var 1..18: X_INTRODUCED_2; -var 1..18: X_INTRODUCED_3; -var 1..18: X_INTRODUCED_4; -var 1..18: X_INTRODUCED_5; -var 1..18: X_INTRODUCED_6; -var 1..18: X_INTRODUCED_7; -var 1..18: X_INTRODUCED_8; -var 1..18: X_INTRODUCED_9; -var 1..18: X_INTRODUCED_10; -var 1..18: X_INTRODUCED_11; -var 1..18: X_INTRODUCED_12; -var 1..18: X_INTRODUCED_13; -var 1..18: X_INTRODUCED_14; -var 1..18: X_INTRODUCED_15; -var 1..18: X_INTRODUCED_16; -var 1..18: X_INTRODUCED_17; -var bool: X_INTRODUCED_55 ::var_is_introduced :: is_defined_var; -var 0..1: X_INTRODUCED_56 ::var_is_introduced :: is_defined_var; -var bool: X_INTRODUCED_57 ::var_is_introduced :: is_defined_var; -var 0..1: X_INTRODUCED_58 ::var_is_introduced :: is_defined_var; -var bool: X_INTRODUCED_59 ::var_is_introduced :: is_defined_var; -var 0..1: X_INTRODUCED_60 ::var_is_introduced :: is_defined_var; -var bool: X_INTRODUCED_61 ::var_is_introduced :: is_defined_var; -var 0..1: X_INTRODUCED_62 ::var_is_introduced :: is_defined_var; -var bool: X_INTRODUCED_63 ::var_is_introduced :: is_defined_var; -var 0..1: X_INTRODUCED_64 ::var_is_introduced :: is_defined_var; -var bool: X_INTRODUCED_65 ::var_is_introduced :: is_defined_var; -var 0..1: X_INTRODUCED_66 ::var_is_introduced :: is_defined_var; -var bool: X_INTRODUCED_67 ::var_is_introduced :: is_defined_var; -var 0..1: X_INTRODUCED_68 ::var_is_introduced :: is_defined_var; -var bool: X_INTRODUCED_69 ::var_is_introduced :: is_defined_var; -var 0..1: X_INTRODUCED_70 ::var_is_introduced :: is_defined_var; -var bool: X_INTRODUCED_71 ::var_is_introduced :: is_defined_var; -var 0..1: X_INTRODUCED_72 ::var_is_introduced :: is_defined_var; -var bool: X_INTRODUCED_73 ::var_is_introduced :: is_defined_var; -var 0..1: X_INTRODUCED_74 ::var_is_introduced :: is_defined_var; -var bool: X_INTRODUCED_75 ::var_is_introduced :: is_defined_var; -var 0..1: X_INTRODUCED_76 ::var_is_introduced :: is_defined_var; -var bool: X_INTRODUCED_77 ::var_is_introduced :: is_defined_var; -var 0..1: X_INTRODUCED_78 ::var_is_introduced :: is_defined_var; -var int: X_INTRODUCED_80 ::var_is_introduced ; -var bool: X_INTRODUCED_82 ::var_is_introduced :: is_defined_var; -var 0..1: X_INTRODUCED_83 ::var_is_introduced :: is_defined_var; -var bool: X_INTRODUCED_84 ::var_is_introduced :: is_defined_var; -var 0..1: X_INTRODUCED_85 ::var_is_introduced :: is_defined_var; -var 1..18: X_INTRODUCED_90 ::var_is_introduced ; -var bool: X_INTRODUCED_91 ::var_is_introduced :: is_defined_var; -var 1..18: X_INTRODUCED_93 ::var_is_introduced ; -var bool: X_INTRODUCED_94 ::var_is_introduced :: is_defined_var; -var bool: X_INTRODUCED_95 ::var_is_introduced :: is_defined_var; -var bool: X_INTRODUCED_97 ::var_is_introduced :: is_defined_var; -var bool: X_INTRODUCED_98 ::var_is_introduced :: is_defined_var; -var bool: X_INTRODUCED_99 ::var_is_introduced :: is_defined_var; -var bool: X_INTRODUCED_100 ::var_is_introduced :: is_defined_var; -var int: X_INTRODUCED_101 ::var_is_introduced ; -var bool: X_INTRODUCED_102 ::var_is_introduced :: is_defined_var; -var 0..1: X_INTRODUCED_103 ::var_is_introduced :: is_defined_var; -var bool: X_INTRODUCED_104 ::var_is_introduced :: is_defined_var; -var 0..1: X_INTRODUCED_105 ::var_is_introduced :: is_defined_var; -var 1..18: X_INTRODUCED_109 ::var_is_introduced ; -var bool: X_INTRODUCED_110 ::var_is_introduced :: is_defined_var; -var 1..18: X_INTRODUCED_112 ::var_is_introduced ; -var bool: X_INTRODUCED_113 ::var_is_introduced :: is_defined_var; -var 1..18: X_INTRODUCED_115 ::var_is_introduced ; -var bool: X_INTRODUCED_116 ::var_is_introduced :: is_defined_var; -var bool: X_INTRODUCED_117 ::var_is_introduced :: is_defined_var; -var bool: X_INTRODUCED_118 ::var_is_introduced :: is_defined_var; -var bool: X_INTRODUCED_119 ::var_is_introduced :: is_defined_var; -var bool: X_INTRODUCED_120 ::var_is_introduced :: is_defined_var; -var bool: X_INTRODUCED_121 ::var_is_introduced :: is_defined_var; -var int: X_INTRODUCED_122 ::var_is_introduced ; -var bool: X_INTRODUCED_123 ::var_is_introduced :: is_defined_var; -var 0..1: X_INTRODUCED_124 ::var_is_introduced :: is_defined_var; -var bool: X_INTRODUCED_126 ::var_is_introduced :: is_defined_var; -var bool: X_INTRODUCED_128 ::var_is_introduced :: is_defined_var; -var bool: X_INTRODUCED_129 ::var_is_introduced :: is_defined_var; -var bool: X_INTRODUCED_130 ::var_is_introduced :: is_defined_var; -var bool: X_INTRODUCED_131 ::var_is_introduced :: is_defined_var; -var int: X_INTRODUCED_132 ::var_is_introduced ; -var bool: X_INTRODUCED_133 ::var_is_introduced :: is_defined_var; -var 0..1: X_INTRODUCED_134 ::var_is_introduced :: is_defined_var; -var bool: X_INTRODUCED_135 ::var_is_introduced :: is_defined_var; -var 0..1: X_INTRODUCED_136 ::var_is_introduced :: is_defined_var; -var bool: X_INTRODUCED_139 ::var_is_introduced :: is_defined_var; -var bool: X_INTRODUCED_140 ::var_is_introduced :: is_defined_var; -var bool: X_INTRODUCED_141 ::var_is_introduced :: is_defined_var; -var bool: X_INTRODUCED_142 ::var_is_introduced :: is_defined_var; -var bool: X_INTRODUCED_143 ::var_is_introduced :: is_defined_var; -var int: X_INTRODUCED_144 ::var_is_introduced ; -var bool: X_INTRODUCED_145 ::var_is_introduced :: is_defined_var; -var 0..1: X_INTRODUCED_146 ::var_is_introduced :: is_defined_var; -var bool: X_INTRODUCED_147 ::var_is_introduced :: is_defined_var; -var 0..1: X_INTRODUCED_148 ::var_is_introduced :: is_defined_var; -var bool: X_INTRODUCED_149 ::var_is_introduced :: is_defined_var; -var 0..1: X_INTRODUCED_150 ::var_is_introduced :: is_defined_var; -var bool: X_INTRODUCED_153 ::var_is_introduced :: is_defined_var; -var 1..18: X_INTRODUCED_155 ::var_is_introduced ; -var bool: X_INTRODUCED_156 ::var_is_introduced :: is_defined_var; -var bool: X_INTRODUCED_157 ::var_is_introduced :: is_defined_var; -var bool: X_INTRODUCED_159 ::var_is_introduced :: is_defined_var; -var bool: X_INTRODUCED_160 ::var_is_introduced :: is_defined_var; -var bool: X_INTRODUCED_161 ::var_is_introduced :: is_defined_var; -var bool: X_INTRODUCED_162 ::var_is_introduced :: is_defined_var; -var int: X_INTRODUCED_163 ::var_is_introduced ; -var bool: X_INTRODUCED_164 ::var_is_introduced :: is_defined_var; -var 0..1: X_INTRODUCED_165 ::var_is_introduced :: is_defined_var; -var bool: X_INTRODUCED_166 ::var_is_introduced :: is_defined_var; -var 0..1: X_INTRODUCED_167 ::var_is_introduced :: is_defined_var; -var bool: X_INTRODUCED_170 ::var_is_introduced :: is_defined_var; -var bool: X_INTRODUCED_171 ::var_is_introduced :: is_defined_var; -var bool: X_INTRODUCED_172 ::var_is_introduced :: is_defined_var; -var bool: X_INTRODUCED_173 ::var_is_introduced :: is_defined_var; -var bool: X_INTRODUCED_174 ::var_is_introduced :: is_defined_var; -var int: X_INTRODUCED_178 ::var_is_introduced :: is_defined_var; -array [1..18] of var int: interview = [X_INTRODUCED_0,X_INTRODUCED_1,X_INTRODUCED_2,X_INTRODUCED_3,X_INTRODUCED_4,X_INTRODUCED_5,X_INTRODUCED_6,X_INTRODUCED_7,X_INTRODUCED_8,X_INTRODUCED_9,X_INTRODUCED_10,X_INTRODUCED_11,X_INTRODUCED_12,X_INTRODUCED_13,X_INTRODUCED_14,X_INTRODUCED_15,X_INTRODUCED_16,X_INTRODUCED_17]; -array [1..18] of var int: order:: output_array([1..18]) = [18,8,17,3,16,7,12,4,15,6,14,5,13,9,1,11,2,10]; -array [1..18] of var int: points:: output_array([1..18]) = [X_INTRODUCED_80,X_INTRODUCED_56,X_INTRODUCED_58,X_INTRODUCED_101,X_INTRODUCED_60,X_INTRODUCED_62,X_INTRODUCED_122,X_INTRODUCED_64,X_INTRODUCED_132,X_INTRODUCED_66,X_INTRODUCED_68,X_INTRODUCED_144,X_INTRODUCED_70,X_INTRODUCED_72,X_INTRODUCED_74,X_INTRODUCED_163,X_INTRODUCED_76,X_INTRODUCED_78]; -array [1..3] of var int: X_INTRODUCED_89 ::var_is_introduced = [X_INTRODUCED_3,X_INTRODUCED_4,X_INTRODUCED_5]; -array [1..4] of var int: X_INTRODUCED_92 ::var_is_introduced = [X_INTRODUCED_11,X_INTRODUCED_12,X_INTRODUCED_13,X_INTRODUCED_14]; -array [1..3] of var int: X_INTRODUCED_108 ::var_is_introduced = [X_INTRODUCED_0,X_INTRODUCED_1,X_INTRODUCED_2]; -array [1..3] of var int: X_INTRODUCED_114 ::var_is_introduced = [X_INTRODUCED_8,X_INTRODUCED_9,X_INTRODUCED_10]; -array [1..3] of var int: X_INTRODUCED_154 ::var_is_introduced = [X_INTRODUCED_15,X_INTRODUCED_16,X_INTRODUCED_17]; -constraint inverse(interview,order); -constraint array_int_maximum(X_INTRODUCED_90,X_INTRODUCED_89); -constraint array_int_maximum(X_INTRODUCED_93,X_INTRODUCED_92); -constraint bool_clause([X_INTRODUCED_97],[X_INTRODUCED_95]); -constraint bool_clause([X_INTRODUCED_95,X_INTRODUCED_99],[X_INTRODUCED_98]); -constraint array_bool_or([X_INTRODUCED_95,X_INTRODUCED_98,X_INTRODUCED_100],true); -constraint array_int_maximum(X_INTRODUCED_109,X_INTRODUCED_108); -constraint int_max(X_INTRODUCED_6,X_INTRODUCED_7,X_INTRODUCED_112); -constraint array_int_maximum(X_INTRODUCED_115,X_INTRODUCED_114); -constraint bool_clause([X_INTRODUCED_118],[X_INTRODUCED_117]); -constraint bool_clause([X_INTRODUCED_117,X_INTRODUCED_120],[X_INTRODUCED_119]); -constraint array_bool_or([X_INTRODUCED_117,X_INTRODUCED_119,X_INTRODUCED_121],true); -constraint bool_clause([X_INTRODUCED_128],[X_INTRODUCED_126]); -constraint bool_clause([X_INTRODUCED_126,X_INTRODUCED_130],[X_INTRODUCED_129]); -constraint array_bool_or([X_INTRODUCED_126,X_INTRODUCED_129,X_INTRODUCED_131],true); -constraint bool_clause([X_INTRODUCED_140],[X_INTRODUCED_139]); -constraint bool_clause([X_INTRODUCED_139,X_INTRODUCED_142],[X_INTRODUCED_141]); -constraint array_bool_or([X_INTRODUCED_139,X_INTRODUCED_141,X_INTRODUCED_143],true); -constraint array_int_maximum(X_INTRODUCED_155,X_INTRODUCED_154); -constraint bool_clause([X_INTRODUCED_159],[X_INTRODUCED_157]); -constraint bool_clause([X_INTRODUCED_157,X_INTRODUCED_161],[X_INTRODUCED_160]); -constraint array_bool_or([X_INTRODUCED_157,X_INTRODUCED_160,X_INTRODUCED_162],true); -constraint bool_clause([X_INTRODUCED_171],[X_INTRODUCED_170]); -constraint bool_clause([X_INTRODUCED_170,X_INTRODUCED_173],[X_INTRODUCED_172]); -constraint array_bool_or([X_INTRODUCED_170,X_INTRODUCED_172,X_INTRODUCED_174],true); -constraint int_lin_le_reif(X_INTRODUCED_54,[X_INTRODUCED_1,X_INTRODUCED_0],-1,X_INTRODUCED_55):: defines_var(X_INTRODUCED_55); -constraint bool2int(X_INTRODUCED_55,X_INTRODUCED_56):: defines_var(X_INTRODUCED_56); -constraint int_lin_le_reif(X_INTRODUCED_54,[X_INTRODUCED_2,X_INTRODUCED_0],-1,X_INTRODUCED_57):: defines_var(X_INTRODUCED_57); -constraint bool2int(X_INTRODUCED_57,X_INTRODUCED_58):: defines_var(X_INTRODUCED_58); -constraint int_lin_le_reif(X_INTRODUCED_54,[X_INTRODUCED_4,X_INTRODUCED_3],-1,X_INTRODUCED_59):: defines_var(X_INTRODUCED_59); -constraint bool2int(X_INTRODUCED_59,X_INTRODUCED_60):: defines_var(X_INTRODUCED_60); -constraint int_lin_le_reif(X_INTRODUCED_54,[X_INTRODUCED_5,X_INTRODUCED_3],-1,X_INTRODUCED_61):: defines_var(X_INTRODUCED_61); -constraint bool2int(X_INTRODUCED_61,X_INTRODUCED_62):: defines_var(X_INTRODUCED_62); -constraint int_lin_le_reif(X_INTRODUCED_54,[X_INTRODUCED_7,X_INTRODUCED_6],-1,X_INTRODUCED_63):: defines_var(X_INTRODUCED_63); -constraint bool2int(X_INTRODUCED_63,X_INTRODUCED_64):: defines_var(X_INTRODUCED_64); -constraint int_lin_le_reif(X_INTRODUCED_54,[X_INTRODUCED_9,X_INTRODUCED_8],-1,X_INTRODUCED_65):: defines_var(X_INTRODUCED_65); -constraint bool2int(X_INTRODUCED_65,X_INTRODUCED_66):: defines_var(X_INTRODUCED_66); -constraint int_lin_le_reif(X_INTRODUCED_54,[X_INTRODUCED_10,X_INTRODUCED_8],-1,X_INTRODUCED_67):: defines_var(X_INTRODUCED_67); -constraint bool2int(X_INTRODUCED_67,X_INTRODUCED_68):: defines_var(X_INTRODUCED_68); -constraint int_lin_le_reif(X_INTRODUCED_54,[X_INTRODUCED_12,X_INTRODUCED_11],-1,X_INTRODUCED_69):: defines_var(X_INTRODUCED_69); -constraint bool2int(X_INTRODUCED_69,X_INTRODUCED_70):: defines_var(X_INTRODUCED_70); -constraint int_lin_le_reif(X_INTRODUCED_54,[X_INTRODUCED_13,X_INTRODUCED_11],-1,X_INTRODUCED_71):: defines_var(X_INTRODUCED_71); -constraint bool2int(X_INTRODUCED_71,X_INTRODUCED_72):: defines_var(X_INTRODUCED_72); -constraint int_lin_le_reif(X_INTRODUCED_54,[X_INTRODUCED_14,X_INTRODUCED_11],-1,X_INTRODUCED_73):: defines_var(X_INTRODUCED_73); -constraint bool2int(X_INTRODUCED_73,X_INTRODUCED_74):: defines_var(X_INTRODUCED_74); -constraint int_lin_le_reif(X_INTRODUCED_54,[X_INTRODUCED_16,X_INTRODUCED_15],-1,X_INTRODUCED_75):: defines_var(X_INTRODUCED_75); -constraint bool2int(X_INTRODUCED_75,X_INTRODUCED_76):: defines_var(X_INTRODUCED_76); -constraint int_lin_le_reif(X_INTRODUCED_54,[X_INTRODUCED_17,X_INTRODUCED_15],-1,X_INTRODUCED_77):: defines_var(X_INTRODUCED_77); -constraint bool2int(X_INTRODUCED_77,X_INTRODUCED_78):: defines_var(X_INTRODUCED_78); -constraint int_lin_le_reif(X_INTRODUCED_81,[X_INTRODUCED_1,X_INTRODUCED_0],-1,X_INTRODUCED_82):: defines_var(X_INTRODUCED_82); -constraint bool2int(X_INTRODUCED_82,X_INTRODUCED_83):: defines_var(X_INTRODUCED_83); -constraint int_lin_le_reif(X_INTRODUCED_81,[X_INTRODUCED_2,X_INTRODUCED_0],-1,X_INTRODUCED_84):: defines_var(X_INTRODUCED_84); -constraint bool2int(X_INTRODUCED_84,X_INTRODUCED_85):: defines_var(X_INTRODUCED_85); -constraint int_lin_le_reif(X_INTRODUCED_81,[X_INTRODUCED_0,X_INTRODUCED_90],-1,X_INTRODUCED_91):: defines_var(X_INTRODUCED_91); -constraint int_lin_le_reif(X_INTRODUCED_81,[X_INTRODUCED_0,X_INTRODUCED_93],-1,X_INTRODUCED_94):: defines_var(X_INTRODUCED_94); -constraint array_bool_or([X_INTRODUCED_91,X_INTRODUCED_94],X_INTRODUCED_95):: defines_var(X_INTRODUCED_95); -constraint int_lin_eq_reif(X_INTRODUCED_96,[X_INTRODUCED_80,X_INTRODUCED_83,X_INTRODUCED_85],3,X_INTRODUCED_97):: defines_var(X_INTRODUCED_97); -constraint int_le_reif(X_INTRODUCED_0,8,X_INTRODUCED_98):: defines_var(X_INTRODUCED_98); -constraint int_eq_reif(X_INTRODUCED_80,3,X_INTRODUCED_99):: defines_var(X_INTRODUCED_99); -constraint int_eq_reif(X_INTRODUCED_80,0,X_INTRODUCED_100):: defines_var(X_INTRODUCED_100); -constraint int_lin_le_reif(X_INTRODUCED_81,[X_INTRODUCED_4,X_INTRODUCED_3],-1,X_INTRODUCED_102):: defines_var(X_INTRODUCED_102); -constraint bool2int(X_INTRODUCED_102,X_INTRODUCED_103):: defines_var(X_INTRODUCED_103); -constraint int_lin_le_reif(X_INTRODUCED_81,[X_INTRODUCED_5,X_INTRODUCED_3],-1,X_INTRODUCED_104):: defines_var(X_INTRODUCED_104); -constraint bool2int(X_INTRODUCED_104,X_INTRODUCED_105):: defines_var(X_INTRODUCED_105); -constraint int_lin_le_reif(X_INTRODUCED_81,[X_INTRODUCED_3,X_INTRODUCED_109],-1,X_INTRODUCED_110):: defines_var(X_INTRODUCED_110); -constraint int_lin_le_reif(X_INTRODUCED_81,[X_INTRODUCED_3,X_INTRODUCED_112],-1,X_INTRODUCED_113):: defines_var(X_INTRODUCED_113); -constraint int_lin_le_reif(X_INTRODUCED_81,[X_INTRODUCED_3,X_INTRODUCED_115],-1,X_INTRODUCED_116):: defines_var(X_INTRODUCED_116); -constraint array_bool_or([X_INTRODUCED_110,X_INTRODUCED_113,X_INTRODUCED_116],X_INTRODUCED_117):: defines_var(X_INTRODUCED_117); -constraint int_lin_eq_reif(X_INTRODUCED_96,[X_INTRODUCED_101,X_INTRODUCED_103,X_INTRODUCED_105],3,X_INTRODUCED_118):: defines_var(X_INTRODUCED_118); -constraint int_le_reif(X_INTRODUCED_3,8,X_INTRODUCED_119):: defines_var(X_INTRODUCED_119); -constraint int_eq_reif(X_INTRODUCED_101,3,X_INTRODUCED_120):: defines_var(X_INTRODUCED_120); -constraint int_eq_reif(X_INTRODUCED_101,0,X_INTRODUCED_121):: defines_var(X_INTRODUCED_121); -constraint int_lin_le_reif(X_INTRODUCED_81,[X_INTRODUCED_7,X_INTRODUCED_6],-1,X_INTRODUCED_123):: defines_var(X_INTRODUCED_123); -constraint bool2int(X_INTRODUCED_123,X_INTRODUCED_124):: defines_var(X_INTRODUCED_124); -constraint int_lin_le_reif(X_INTRODUCED_81,[X_INTRODUCED_6,X_INTRODUCED_90],-1,X_INTRODUCED_126):: defines_var(X_INTRODUCED_126); -constraint int_lin_eq_reif(X_INTRODUCED_127,[X_INTRODUCED_122,X_INTRODUCED_124],3,X_INTRODUCED_128):: defines_var(X_INTRODUCED_128); -constraint int_le_reif(X_INTRODUCED_6,8,X_INTRODUCED_129):: defines_var(X_INTRODUCED_129); -constraint int_eq_reif(X_INTRODUCED_122,3,X_INTRODUCED_130):: defines_var(X_INTRODUCED_130); -constraint int_eq_reif(X_INTRODUCED_122,0,X_INTRODUCED_131):: defines_var(X_INTRODUCED_131); -constraint int_lin_le_reif(X_INTRODUCED_81,[X_INTRODUCED_9,X_INTRODUCED_8],-1,X_INTRODUCED_133):: defines_var(X_INTRODUCED_133); -constraint bool2int(X_INTRODUCED_133,X_INTRODUCED_134):: defines_var(X_INTRODUCED_134); -constraint int_lin_le_reif(X_INTRODUCED_81,[X_INTRODUCED_10,X_INTRODUCED_8],-1,X_INTRODUCED_135):: defines_var(X_INTRODUCED_135); -constraint bool2int(X_INTRODUCED_135,X_INTRODUCED_136):: defines_var(X_INTRODUCED_136); -constraint int_lin_le_reif(X_INTRODUCED_81,[X_INTRODUCED_8,X_INTRODUCED_90],-1,X_INTRODUCED_139):: defines_var(X_INTRODUCED_139); -constraint int_lin_eq_reif(X_INTRODUCED_96,[X_INTRODUCED_132,X_INTRODUCED_134,X_INTRODUCED_136],3,X_INTRODUCED_140):: defines_var(X_INTRODUCED_140); -constraint int_le_reif(X_INTRODUCED_8,8,X_INTRODUCED_141):: defines_var(X_INTRODUCED_141); -constraint int_eq_reif(X_INTRODUCED_132,3,X_INTRODUCED_142):: defines_var(X_INTRODUCED_142); -constraint int_eq_reif(X_INTRODUCED_132,0,X_INTRODUCED_143):: defines_var(X_INTRODUCED_143); -constraint int_lin_le_reif(X_INTRODUCED_81,[X_INTRODUCED_12,X_INTRODUCED_11],-1,X_INTRODUCED_145):: defines_var(X_INTRODUCED_145); -constraint bool2int(X_INTRODUCED_145,X_INTRODUCED_146):: defines_var(X_INTRODUCED_146); -constraint int_lin_le_reif(X_INTRODUCED_81,[X_INTRODUCED_13,X_INTRODUCED_11],-1,X_INTRODUCED_147):: defines_var(X_INTRODUCED_147); -constraint bool2int(X_INTRODUCED_147,X_INTRODUCED_148):: defines_var(X_INTRODUCED_148); -constraint int_lin_le_reif(X_INTRODUCED_81,[X_INTRODUCED_14,X_INTRODUCED_11],-1,X_INTRODUCED_149):: defines_var(X_INTRODUCED_149); -constraint bool2int(X_INTRODUCED_149,X_INTRODUCED_150):: defines_var(X_INTRODUCED_150); -constraint int_lin_le_reif(X_INTRODUCED_81,[X_INTRODUCED_11,X_INTRODUCED_109],-1,X_INTRODUCED_153):: defines_var(X_INTRODUCED_153); -constraint int_lin_le_reif(X_INTRODUCED_81,[X_INTRODUCED_11,X_INTRODUCED_155],-1,X_INTRODUCED_156):: defines_var(X_INTRODUCED_156); -constraint array_bool_or([X_INTRODUCED_153,X_INTRODUCED_156],X_INTRODUCED_157):: defines_var(X_INTRODUCED_157); -constraint int_lin_eq_reif(X_INTRODUCED_158,[X_INTRODUCED_144,X_INTRODUCED_146,X_INTRODUCED_148,X_INTRODUCED_150],3,X_INTRODUCED_159):: defines_var(X_INTRODUCED_159); -constraint int_le_reif(X_INTRODUCED_11,8,X_INTRODUCED_160):: defines_var(X_INTRODUCED_160); -constraint int_eq_reif(X_INTRODUCED_144,3,X_INTRODUCED_161):: defines_var(X_INTRODUCED_161); -constraint int_eq_reif(X_INTRODUCED_144,0,X_INTRODUCED_162):: defines_var(X_INTRODUCED_162); -constraint int_lin_le_reif(X_INTRODUCED_81,[X_INTRODUCED_16,X_INTRODUCED_15],-1,X_INTRODUCED_164):: defines_var(X_INTRODUCED_164); -constraint bool2int(X_INTRODUCED_164,X_INTRODUCED_165):: defines_var(X_INTRODUCED_165); -constraint int_lin_le_reif(X_INTRODUCED_81,[X_INTRODUCED_17,X_INTRODUCED_15],-1,X_INTRODUCED_166):: defines_var(X_INTRODUCED_166); -constraint bool2int(X_INTRODUCED_166,X_INTRODUCED_167):: defines_var(X_INTRODUCED_167); -constraint int_lin_le_reif(X_INTRODUCED_81,[X_INTRODUCED_15,X_INTRODUCED_93],-1,X_INTRODUCED_170):: defines_var(X_INTRODUCED_170); -constraint int_lin_eq_reif(X_INTRODUCED_96,[X_INTRODUCED_163,X_INTRODUCED_165,X_INTRODUCED_167],3,X_INTRODUCED_171):: defines_var(X_INTRODUCED_171); -constraint int_le_reif(X_INTRODUCED_15,8,X_INTRODUCED_172):: defines_var(X_INTRODUCED_172); -constraint int_eq_reif(X_INTRODUCED_163,3,X_INTRODUCED_173):: defines_var(X_INTRODUCED_173); -constraint int_eq_reif(X_INTRODUCED_163,0,X_INTRODUCED_174):: defines_var(X_INTRODUCED_174); -constraint int_lin_eq([1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,-1],[X_INTRODUCED_80,X_INTRODUCED_56,X_INTRODUCED_58,X_INTRODUCED_101,X_INTRODUCED_60,X_INTRODUCED_62,X_INTRODUCED_122,X_INTRODUCED_64,X_INTRODUCED_132,X_INTRODUCED_66,X_INTRODUCED_68,X_INTRODUCED_144,X_INTRODUCED_70,X_INTRODUCED_72,X_INTRODUCED_74,X_INTRODUCED_163,X_INTRODUCED_76,X_INTRODUCED_78,X_INTRODUCED_178],0):: defines_var(X_INTRODUCED_178); -solve maximize X_INTRODUCED_178; diff --git a/examples/tests/issue173.cc b/examples/tests/issue173.cc deleted file mode 100644 index 01bb4cf3fd..0000000000 --- a/examples/tests/issue173.cc +++ /dev/null @@ -1,36 +0,0 @@ -#include "ortools/base/commandlineflags.h" -#include "ortools/base/logging.h" -#include "ortools/linear_solver/linear_solver.h" - -namespace operations_research { -void SolveLP() { - // Create the linear solver with the GLOP backend. - std::unique_ptr solver(MPSolver::CreateSolver("CBC")); - if (!solver) { - return; - } - const double kInfinity = solver->infinity(); - MPVariable* const x = solver->MakeNumVar(-kInfinity, kInfinity, "x"); - - MPObjective* const objective = solver->MutableObjective(); - objective->SetMaximization(); - objective->SetCoefficient(x, 1); - - MPConstraint* const constraint = solver->MakeRowConstraint(0, 5); - constraint->SetCoefficient(x, 1); - - solver->Solve(); -} - -void BreakLoop() { - for (int i = 0; i < 500; i++) { - SolveLP(); - } -} -} // namespace operations_research - -int main(int argc, char** argv) { - absl::ParseCommandLine(argc, argv); - operations_research::BreakLoop(); - return 0; -} diff --git a/examples/tests/issue18.cs b/examples/tests/issue18.cs deleted file mode 100644 index a0f895a70d..0000000000 --- a/examples/tests/issue18.cs +++ /dev/null @@ -1,60 +0,0 @@ -// Copyright 2010-2025 Google LLC -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. - -using System; -using System.Collections.Generic; -using Google.OrTools.ConstraintSolver; - -public class Issue18 -{ - public static void NewSearchTest() - { - Solver solver = new Google.OrTools.ConstraintSolver.Solver("p"); - - // creating dummy variables - List vars = new List(); - for (int i = 0; i < 100000; i++) - { - vars.Add(solver.MakeIntVar(0, 1)); - } - - IntExpr globalSum = solver.MakeSum(vars.ToArray()); - - DecisionBuilder db = solver.MakePhase(vars.ToArray(), Google.OrTools.ConstraintSolver.Solver.INT_VAR_SIMPLE, - Google.OrTools.ConstraintSolver.Solver.INT_VALUE_SIMPLE); - - solver.NewSearch(db, new OptimizeVar(solver, true, globalSum.Var(), 100)); - - // force Garbage Collector - GC.Collect(); - GC.WaitForPendingFinalizers(); - - // Try to read all solutions - int count = 0; - while (solver.NextSolution()) - { - count++; - Console.WriteLine("solution " + count + " found"); - // Console.WriteLine("solution " + globalSum.Var().Value()); - if (count > 10) - { - break; - } - } - Console.WriteLine("Solutions: " + count); - } - static void Main() - { - NewSearchTest(); - } -} diff --git a/examples/tests/issue2.py b/examples/tests/issue2.py deleted file mode 100755 index c6d36b1da2..0000000000 --- a/examples/tests/issue2.py +++ /dev/null @@ -1,42 +0,0 @@ -#!/usr/bin/env python3 -from ortools.constraint_solver import pywrapcp - -# Control-C test. Hit Control-C during execution of this program. - -def main(): - solver = pywrapcp.Solver("time limit test") - n = 10 - x = [solver.IntVar(1, n, "x[%i]" % i) for i in range(n)] - solver.Add(solver.AllDifferent(x, True)) - - solution = solver.Assignment() - solution.Add(x) - - db = solver.Phase(x, - solver.CHOOSE_FIRST_UNBOUND, - solver.ASSIGN_MIN_VALUE) - - time_limit = 2000 - branch_limit = 100000000 - failures_limit = 100000000 - solutions_limit = 10000000 - limits = ( - solver.Limit( - time_limit, branch_limit, failures_limit, solutions_limit, True)) - - search_log = solver.SearchLog(1000) - assignment = solver.Assignment() - assignment.Add(x) - collector = solver.LastSolutionCollector(assignment) - try: - solver.Solve(db, [limits, search_log, collector]) - except KeyboardInterrupt: - print("Control-C caught") - - print("failures:", solver.Failures()) - print("branches:", solver.Branches()) - print("wall_time:", solver.WallTime()) - - -if __name__ == "__main__": - main() diff --git a/examples/tests/issue22.cs b/examples/tests/issue22.cs deleted file mode 100644 index a1cffd7fb3..0000000000 --- a/examples/tests/issue22.cs +++ /dev/null @@ -1,84 +0,0 @@ -// Copyright 2010-2025 Google LLC -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. - -using System; -using System.Collections; -using System.Collections.Generic; -using System.IO; -using System.Text.RegularExpressions; -using Google.OrTools.ConstraintSolver; - -public class Issue22Test -{ - private static long Solve(long num_buses_check = 0) - { - ConstraintSolverParameters sPrm = Solver.DefaultSolverParameters(); - sPrm.CompressTrail = 0; - Solver solver = new Solver("OrTools", sPrm); - - // this works - // IntVar[,] x = solver.MakeIntVarMatrix(2,2, new int[] {-2,0,1,2}, "x"); - - // this doesn't work - IntVar[,] x = solver.MakeIntVarMatrix(2, 2, new int[] { 0, 1, 2 }, "x"); - - for (int w = 0; w < 2; w++) - { - IntVar[] b = new IntVar[2]; - for (int i = 0; i < 2; i++) - { - b[i] = solver.MakeIsEqualCstVar(x[w, i], 0); - } - solver.Add(solver.MakeSumGreaterOrEqual(b, 2)); - } - - IntVar[] x_flat = x.Flatten(); - DecisionBuilder db = solver.MakePhase(x_flat, Solver.CHOOSE_FIRST_UNBOUND, Solver.ASSIGN_MIN_VALUE); - solver.NewSearch(db); - while (solver.NextSolution()) - { - Console.WriteLine("x: "); - for (int j = 0; j < 2; j++) - { - Console.Write("worker" + (j + 1).ToString() + ":"); - for (int i = 0; i < 2; i++) - { - Console.Write(" {0,2} ", x[j, i].Value()); - } - Console.Write("\n"); - } - Console.WriteLine("End at---->" + DateTime.Now); - } - - Console.WriteLine("\nSolutions: {0}", solver.Solutions()); - Console.WriteLine("WallTime: {0}ms", solver.WallTime()); - Console.WriteLine("Failures: {0}", solver.Failures()); - Console.WriteLine("Branches: {0} ", solver.Branches()); - - solver.EndSearch(); - return 1; - } - - public static void InitialPropagateTest() - { - Console.WriteLine("Check for minimum number of buses: "); - long num_buses = Solve(); - Console.WriteLine("\n... got {0} as minimal value.", num_buses); - Console.WriteLine("\nAll solutions: ", num_buses); - } - - static void Main() - { - InitialPropagateTest(); - } -} diff --git a/examples/tests/issue3.py b/examples/tests/issue3.py deleted file mode 100755 index c74b1853db..0000000000 --- a/examples/tests/issue3.py +++ /dev/null @@ -1,74 +0,0 @@ -#!/usr/bin/env python3 -# Copyright 2010 Pierre Schaus pschaus@gmail.com -# -# Licensed under the Apache License, Version 2.0 (the "License"); -# you may not use this file except in compliance with the License. -# You may obtain a copy of the License at -# -# http://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, software -# distributed under the License is distributed on an "AS IS" BASIS, -# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -# See the License for the specific language governing permissions and -# limitations under the License. - - -from ortools.constraint_solver import pywrapcp -from time import time -from random import randint - -#----------------helper for binpacking posting---------------- - - -def binpacking(cp, binvars, weights, loadvars): - """post the connstraints forall j: loadvars[j] == sum_i (binvars[i] == j) * weights[i])""" - - nbins = len(loadvars) - nitems = len(binvars) - for j in range(nbins): - b = [cp.BoolVar(str(i)) for i in range(nitems)] - for i in range(nitems): - cp.Add(cp.IsEqualCstCt(binvars[i], j, b[i])) - cp.Add(solver.Sum([b[i] * weights[i] for i in range(nitems)]) == l[j]) - cp.Add(solver.Sum(loadvars) == sum(weights)) - -#------------------------------data reading------------------- - -maxcapa = 44 -weights = [4, 22, 9, 5, 8, 3, 3, 4, 7, 7, 3] -loss = [ - 0, 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, 1, 0, 1, 0, 2, 1, 0, 0, 0, 0, 2, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 1, 0, 2, 1, 0, 3, 2, 1, 0, 2, 1, 0, 0, 0] -nbslab = 11 - -#------------------solver and variable declaration------------- - -solver = pywrapcp.Solver('Steel Mill Slab') -x = [solver.IntVar(0, nbslab-1, 'x' + str(i)) for i in range(nbslab)] -l = [solver.IntVar(0, maxcapa, 'l' + str(i)) for i in range(nbslab)] -obj = solver.IntVar(0, nbslab * maxcapa, 'obj') - -#-------------------post of the constraints-------------- - - -binpacking(solver, x, weights[:nbslab], l) -solver.Add(solver.Sum([solver.Element(loss, l[s]) - for s in range(nbslab)]) == obj) - -sol = [2, 0, 0, 0, 0, 1, 2, 2, 1, 1, 2] - -#------------start the search and optimization----------- - -objective = solver.Minimize(obj, 1) -db = solver.Phase(x, solver.INT_VAR_DEFAULT, - solver.INT_VALUE_DEFAULT) -# solver.NewSearch(db,[objective]) #segfault if I comment this - -while solver.NextSolution(): - print(obj, 'check:', sum([loss[l[s].Min()] for s in range(nbslab)])) - print(l) -solver.EndSearch() - -print('#fails: ', solver.Failures()) -print('time: ', solver.WallTime()) diff --git a/examples/tests/issue33.cs b/examples/tests/issue33.cs deleted file mode 100644 index 2e888ca207..0000000000 --- a/examples/tests/issue33.cs +++ /dev/null @@ -1,676 +0,0 @@ -// Authors: Johan Wessén -// Copyright 2010-2025 Google LLC -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. - -using Google.OrTools.ConstraintSolver; -using System.Collections.Generic; -using System.Diagnostics; -using System.IO; -using System.Linq; -using System.Text; -using System.Threading.Tasks; -using System; - -public class Task -{ - public int Id { get; private set; } - public int TaskType { get; private set; } - public int LocationId { get; private set; } - public Dictionary Durations { get; private set; } - public int TaskPosition { get; private set; } - - public Task(int id, int taskType, int locationIndex, int taskPosition, Dictionary durations) - { - Id = id; - TaskType = taskType; - LocationId = locationIndex; - Durations = durations; - TaskPosition = taskPosition; - } - - public Task(int id, int taskType, int locationIndex, int taskPosition) - { - Id = id; - TaskType = taskType; - LocationId = locationIndex; - TaskPosition = taskPosition; - Durations = new Dictionary(); - } -} - -public class WorkLocation -{ - public int Id { get; private set; } - public int NbTasks - { - get { - Debug.Assert(Tasks != null); - return Tasks.Length; - } - set { - Debug.Assert(Tasks == null); - Tasks = new Task[value]; - } - } - public Task[] Tasks { get; private set; } - - public WorkLocation(int index) - { - Id = index; - } -} - -public class Tool -{ - public int Id { get; private set; } - public HashSet TaskTypes { get; set; } - public int[,] TravellingTime { get; set; } - public int InitialLocationId { get; set; } - - public Tool(int index, int initialLocation = 0) - { - Id = index; - InitialLocationId = initialLocation; - TaskTypes = new HashSet(); - } - - public void AddTaskType(int t) - { - TaskTypes.Add(t); - } - - public bool CanPerformTaskType(int taskType) - { - return TaskTypes.Contains(taskType); - } -} - -public class FactoryDescription -{ - public Tool[] Tools { get; private set; } - public WorkLocation[] Locations { get; private set; } - - public int NbWorkLocations - { - get { - return Locations.Length; - } - } - public int NbTools - { - get { - return Tools.Length; - } - } - - public int NbTaskPerCycle { get; private set; } - // TaskType go typically from 0 to 6. InspectionType indicates which - // is the TaskType that correspond to Inspection. - public int Inspection { get; private set; } - // All the time within the schedule horizon in which the blast can start. - public long[] InspectionStarts { get; private set; } - - public int Horizon { get; private set; } - - // horizon equal to 2 weeks (in minutes). - public FactoryDescription(int nbTools, int nbLocations, int nbTaskPerCycle, int horizon = 14 * 24 * 60) - { - Debug.Assert(nbTools > 0); - Debug.Assert(nbLocations > 0); - Debug.Assert(nbTaskPerCycle > 0); - Debug.Assert(horizon > 0); - NbTaskPerCycle = nbTaskPerCycle; - Inspection = NbTaskPerCycle - 1; - Tools = new Tool[nbTools]; - Horizon = horizon; - for (int i = 0; i < nbTools; i++) - Tools[i] = new Tool(i); - Locations = new WorkLocation[nbLocations]; - for (int i = 0; i < nbLocations; i++) - Locations[i] = new WorkLocation(i); - - InspectionStarts = new long[] { -1, 600, 1200, 1800, 2400, 2800 }; - } - - public Tool[] getToolPerTaskType(int taskType) - { - var elements = from tool in Tools - where tool.CanPerformTaskType(taskType) select tool; - return elements.ToArray(); - } - - public Task[] getFlatTaskList() - { - return (from location in Locations from task in location.Tasks orderby task.Id select task).ToArray(); - } - - public int[] getTaskTypes() - { - return (from location in Locations from task in location.Tasks select task.TaskType).Distinct().ToArray(); - } - - // TODO: This should be enhanced - public void SanityCheck() - { - foreach (Tool tool in Tools) - { - Debug.Assert(tool.TravellingTime.GetLength(0) == NbWorkLocations); - Debug.Assert(tool.TravellingTime.GetLength(1) == NbWorkLocations); - for (int i = 0; i < NbWorkLocations; i++) - Debug.Assert(tool.TravellingTime[i, i] == 0); - } - } -} - -interface DataReader -{ - FactoryDescription FetchData(); -} - -public class SmallSyntheticData : DataReader -{ - public SmallSyntheticData() - { - } - - public FactoryDescription FetchData() - { - // deterministic seed for result reproducibility - Random randomDuration = new Random(2); - - // FactoryDescription(nbTools, nblocations, nbTasks per cycle) - FactoryDescription factoryDescription = new FactoryDescription(5, 4, 3); - - // Travelling time and distance are temporarily identical and they - // are no different for different tools - int[,] travellingTime = new int[factoryDescription.NbWorkLocations, factoryDescription.NbWorkLocations]; - for (int i = 0; i < travellingTime.GetLength(0); i++) - { - for (int j = 0; j < travellingTime.GetLength(1); j++) - { - if (i == j) - travellingTime[i, j] = 0; - else - travellingTime[i, j] = (5 * Math.Abs(i - j)) * 10; - } - } - - factoryDescription.Tools[0].AddTaskType(0); - factoryDescription.Tools[1].AddTaskType(0); - factoryDescription.Tools[2].AddTaskType(1); - factoryDescription.Tools[3].AddTaskType(1); - factoryDescription.Tools[4].AddTaskType(2); - factoryDescription.Tools[1].AddTaskType(1); - - foreach (Tool tool in factoryDescription.Tools) - tool.TravellingTime = travellingTime; - - int c = 0; - int nbCyclePerWorkLocation = 2; - int[] boll = new int[100]; - for (int i = 0; i < factoryDescription.NbWorkLocations; i++) - { - factoryDescription.Locations[i].NbTasks = nbCyclePerWorkLocation * factoryDescription.NbTaskPerCycle; - for (int j = 0; j < nbCyclePerWorkLocation; j++) - { - for (int k = 0; k < factoryDescription.NbTaskPerCycle; k++) - { - Task t = new Task(c, k, i, k + j * factoryDescription.NbTaskPerCycle); - - // Filling in tool-dependent durations - Tool[] compatibleTools = factoryDescription.getToolPerTaskType(k); - foreach (Tool tool in compatibleTools) - { - boll[c] = randomDuration.Next(13, 17) * 10; - ; - t.Durations[tool.Id] = boll[c]; - } - factoryDescription.Locations[i].Tasks[t.TaskPosition] = t; - c++; - } - } - } - - factoryDescription.SanityCheck(); - return factoryDescription; - } -} - -public class RandomSelectToolHeuristic : NetDecisionBuilder -{ - private FactoryScheduling factoryScheduling; - private Random rnd; - - public RandomSelectToolHeuristic(FactoryScheduling factoryScheduling, int seed) - { - this.factoryScheduling = factoryScheduling; - // deterministic seed for result reproducibility - this.rnd = new Random(seed); - } - - public override Decision Next(Solver solver) - { - foreach (IntVar var in factoryScheduling.SelectedTool) - { - if (!var.Bound()) - { - int min = (int)var.Min(); - int max = (int)var.Max(); - int rndVal = rnd.Next(min, max + 1); - while (!var.Contains(rndVal)) - rndVal = rnd.Next(min, max + 1); - return solver.MakeAssignVariableValue(var, rndVal); - } - } - return null; - } -} - -class TaskAlternative -{ - public Task Task { get; private set; } - public IntVar ToolVar { get; set; } - public List Intervals { get; private set; } - - public TaskAlternative(Task t) - { - Task = t; - Intervals = new List(); - } -} - -public class FactoryScheduling -{ - private FactoryDescription factoryData; - private Solver solver; - - private Task[] tasks; - private int[] taskTypes; - - /* Flat list of all the tasks */ - private TaskAlternative[] taskStructures; - - /* Task per WorkLocation: location2Task[d][i]: the i-th task of the - * d-th location */ - private TaskAlternative[][] location2Task; - - /* Task per Tool: tool2Task[t][i]: the i-th task of the t-th tool. - Note that it does NOT imply that the it will be the i-th - executed. In other words, it should be considered as an unordered - set. Furthermore, tool2Task[t][i] can also be *unperformed* */ - private List[] tool2Task; - - /* All the transition times for the tools. - tool2TransitionTimes[t][i]: the transition time of the t-th tool - from the i-th task to the next */ - private List[] tool2TransitionTimes; - - /* Map between the interval var of a tool to its related task id. - toolIntervalVar2TaskId[t][k] = i: in the t-th tool, the k-th - interval var correspond to tasks[i] */ - private List[] toolIntervalVar2TaskId; - - /* Tools per task type: taskType2Tool[tt][t]: the t-th tool capable - * of doing the tt-th task type */ - private List[] taskType2Tool; - - /* For each task which tools is performed upon */ - private List selectedTool; - public List SelectedTool - { - get { - return selectedTool; - } - } - - /* Sequence of task for each tool */ - private SequenceVar[] allToolSequences; - public SequenceVar[] AllToolSequences - { - get { - return allToolSequences; - } - } - - /* Makespan var */ - private IntVar makespan; - - /* Objective */ - private OptimizeVar objective; - - /* maximum horizon */ - private int horizon; - - /* Start & End times of IntervalVars*/ - IntVar[][] startingTimes; - IntVar[][] endTimes; - - public FactoryScheduling(FactoryDescription data) - { - factoryData = data; - } - - private void Init() - { - horizon = factoryData.Horizon; - solver = new Solver("Factory Scheduling"); - tasks = factoryData.getFlatTaskList(); - taskTypes = factoryData.getTaskTypes(); - taskStructures = new TaskAlternative[tasks.Length]; - location2Task = new TaskAlternative[factoryData.NbWorkLocations][]; - tool2Task = new List[factoryData.NbTools]; - toolIntervalVar2TaskId = new List[factoryData.NbTools]; - tool2TransitionTimes = new List[factoryData.NbTools]; - - taskType2Tool = new List[taskTypes.Length]; - selectedTool = new List(); - for (int tt = 0; tt < taskTypes.Length; tt++) - taskType2Tool[tt] = new List(); - - foreach (Tool tool in factoryData.Tools) - foreach (int taskType in tool.TaskTypes) - taskType2Tool[taskType].Add(tool); - for (int d = 0; d < factoryData.NbWorkLocations; d++) - location2Task[d] = new TaskAlternative[factoryData.Locations[d].NbTasks]; - for (int t = 0; t < factoryData.NbTools; t++) - { - tool2Task[t] = new List(); - toolIntervalVar2TaskId[t] = new List(); - tool2TransitionTimes[t] = new List(); - } - - allToolSequences = new SequenceVar[factoryData.NbTools - 1]; - - startingTimes = new IntVar[factoryData.NbTools - 1][]; - endTimes = new IntVar[factoryData.NbTools - 1][]; - } - - private void PostTransitionTimeConstraints(int t, bool postTransitionsConstraint = true) - { - Tool tool = factoryData.Tools[t]; - // if it is a inspection, we make sure there are no transitiontimes - if (tool.CanPerformTaskType(factoryData.Inspection)) - tool2TransitionTimes[t].Add(null); - else - { - int[,] tt = tool.TravellingTime; - - SequenceVar seq = allToolSequences[t]; - long s = seq.Size(); - IntVar[] nextLocation = new IntVar[s + 1]; - - // The seq.Next(i) represents the task performed after the i-th - // task in the sequence seq.Next(0) represents the first task - // performed for extracting travelling times we need to get the - // related location In case a task is not performed (seq.Next(i) - // == i), i.e. it's pointing to itself The last performed task - // (or pre-start task, if no tasks are performed) will have - // seq.Next(i) == s + 1 therefore we add a virtual location - // whose travelling time is equal to 0 - // - // NOTE: The index of a SequenceVar are 0..n, but the domain - // range is 1..(n+1), this is due to that the start node = 0 is - // a dummy node, and the node where seq.Next(i) == n+1 is the - // end node - - // Extra elements for the unreachable start node (0), and the - // end node whose next task takes place in a virtual location - int[] taskIndex2locationId = new int[s + 2]; - taskIndex2locationId[0] = -10; - for (int i = 0; i < s; i++) - taskIndex2locationId[i + 1] = tasks[toolIntervalVar2TaskId[t][i]].LocationId; - - // this is the virtual location for unperformed tasks - taskIndex2locationId[s + 1] = factoryData.NbWorkLocations; - - // Build the travelling time matrix with the additional virtual location - int[][] ttWithVirtualLocation = new int [factoryData.NbWorkLocations + 1][]; - for (int d1 = 0; d1 < ttWithVirtualLocation.Length; d1++) - { - ttWithVirtualLocation[d1] = new int[factoryData.NbWorkLocations + 1]; - for (int d2 = 0; d2 < ttWithVirtualLocation.Length; d2++) - if (d1 == factoryData.NbWorkLocations) - { - ttWithVirtualLocation[d1][d2] = 0; - } - else - { - ttWithVirtualLocation[d1][d2] = (d2 == factoryData.NbWorkLocations) ? 0 : tt[d1, d2]; - } - } - - for (int i = 0; i < nextLocation.Length; i++) - { - // this is the next-location associated with the i-th task - nextLocation[i] = solver.MakeElement(taskIndex2locationId, seq.Next(i)).Var(); - - int d = (i == 0) ? tool.InitialLocationId : tasks[toolIntervalVar2TaskId[t][i - 1]].LocationId; - if (i == 0) - { - // To be changed - right now we don't have meaningful indata - // of previous location Ugly way of setting initial travel - // time to = 0, as this is how we find common grounds - // between benchmark algorithm and this - tool2TransitionTimes[t].Add( - solver.MakeElement(new int[ttWithVirtualLocation[d].Length], nextLocation[i]).Var()); - } - else - { - tool2TransitionTimes[t].Add(solver.MakeElement(ttWithVirtualLocation[d], nextLocation[i]).Var()); - } - } - - // Extra elements for the unreachable start node (0), and the - // end node whose next task takes place in a virtual location - startingTimes[t] = new IntVar[s + 2]; - endTimes[t] = new IntVar[s + 2]; - - startingTimes[t][0] = solver.MakeIntConst(0); - // Tbd: Set this endtime to the estimated time of finishing - // previous task for the current tool - endTimes[t][0] = solver.MakeIntConst(0); - - for (int i = 0; i < s; i++) - { - startingTimes[t][i + 1] = tool2Task[t][i].SafeStartExpr(-1).Var(); - endTimes[t][i + 1] = tool2Task[t][i].SafeEndExpr(-1).Var(); - } - startingTimes[t][s + 1] = solver.MakeIntConst(factoryData.Horizon); - endTimes[t][s + 1] = solver.MakeIntConst(factoryData.Horizon); - - // Enforce (or not) that each task is separated by the - // transition time to the next task - for (int i = 0; i < nextLocation.Length; i++) - { - IntVar nextStart = solver.MakeElement(startingTimes[t], seq.Next(i).Var()).Var(); - if (postTransitionsConstraint) - solver.Add(endTimes[t][i] + tool2TransitionTimes[t][i] <= nextStart); - } - } - } - - private void Model() - { - /* Building basic task data structures */ - for (int i = 0; i < tasks.Length; i++) - { - /* Create a new set of possible IntervalVars & IntVar to decide - * which one (and only 1) is performed */ - taskStructures[i] = new TaskAlternative(tasks[i]); - - /* Container to use when posting constraints */ - location2Task[tasks[i].LocationId][tasks[i].TaskPosition] = taskStructures[i]; - - /* Get task type */ - int taskType = tasks[i].TaskType; - - /* Possible tool for this task */ - List tools = taskType2Tool[taskType]; - bool optional = tools.Count > 1; - - /* List of boolean variables. If performedOnTool[t] == true then - * the task is performed on tool t */ - List performedOnTool = new List(); - for (int t = 0; t < tools.Count; t++) - { - /* Creating an IntervalVar. If tools.Count > 1 the intervalVar - * is *OPTIONAL* */ - int toolId = tools[t].Id; - Debug.Assert(tasks[i].Durations.ContainsKey(toolId)); - int duration = tasks[i].Durations[toolId]; - string name = "J " + tasks[i].Id + " [" + toolId + "]"; - - IntervalVar intervalVar; - if (taskType == factoryData.Inspection) - { - /* We set a 0 time if the task is an inspection */ - duration = 0; - intervalVar = solver.MakeFixedDurationIntervalVar(0, horizon, duration, optional, name); - IntVar start = intervalVar.SafeStartExpr(-1).Var(); - - intervalVar.SafeStartExpr(-1).Var().SetValues(factoryData.InspectionStarts); - } - else - { - intervalVar = solver.MakeFixedDurationIntervalVar(0, horizon, duration, optional, name); - } - - taskStructures[i].Intervals.Add(intervalVar); - tool2Task[toolId].Add(intervalVar); - toolIntervalVar2TaskId[toolId].Add(i); - - /* Collecting all the bool vars, even if they are optional */ - performedOnTool.Add(intervalVar.PerformedExpr().Var()); - } - - /* Linking the bool var to a single integer variable: */ - /* if alternativeToolVar == t <=> performedOnTool[t] == true */ - string alternativeName = "J " + tasks[i].Id; - IntVar alternativeToolVar = solver.MakeIntVar(0, tools.Count - 1, alternativeName); - taskStructures[i].ToolVar = alternativeToolVar; - - solver.Add(solver.MakeMapDomain(alternativeToolVar, performedOnTool.ToArray())); - Debug.Assert(performedOnTool.ToArray().Length == alternativeToolVar.Max() + 1); - - selectedTool.Add(alternativeToolVar); - } - - /* Creates precedences on a work Location in order to enforce a - * fully ordered set within the same location - */ - for (int d = 0; d < location2Task.Length; d++) - { - for (int i = 0; i < location2Task[d].Length - 1; i++) - { - TaskAlternative task1 = location2Task[d][i]; - TaskAlternative task2 = location2Task[d][i + 1]; - /* task1 must end before task2 starts */ - /* Adding precedence for each possible alternative pair */ - for (int t1 = 0; t1 < task1.Intervals.Count(); t1++) - { - IntervalVar task1Alternative = task1.Intervals[t1]; - for (int t2 = 0; t2 < task2.Intervals.Count(); t2++) - { - IntervalVar task2Alternative = task2.Intervals[t2]; - Constraint precedence = - solver.MakeIntervalVarRelation(task2Alternative, Solver.STARTS_AFTER_END, task1Alternative); - solver.Add(precedence); - } - } - } - } - - /* Adds disjunctive constraints on unary resources, and creates - * sequence variables. */ - for (int t = 0; t < factoryData.NbTools; t++) - { - string name = "Tool " + t; - - if (!factoryData.Tools[t].CanPerformTaskType(factoryData.Inspection)) - { - DisjunctiveConstraint ct = solver.MakeDisjunctiveConstraint(tool2Task[t].ToArray(), name); - solver.Add(ct); - allToolSequences[t] = ct.SequenceVar(); - } - PostTransitionTimeConstraints(t, true); - } - - /* Collecting all tasks end for makespan objective function */ - List intervalEnds = new List(); - for (int i = 0; i < tasks.Length; i++) - foreach (IntervalVar var in taskStructures[i].Intervals) - intervalEnds.Add(var.SafeEndExpr(-1).Var()); - - /* Objective: minimize the makespan (maximum end times of all tasks) */ - makespan = solver.MakeMax(intervalEnds.ToArray()).Var(); - objective = solver.MakeMinimize(makespan, 1); - } - - private void Search() - { - int seed = 2; // This is a good seed to show the crash - - /* Assigning first tools */ - DecisionBuilder myToolAssignmentPhase = new RandomSelectToolHeuristic(this, seed); - - /* Ranking of the tools */ - DecisionBuilder sequencingPhase = solver.MakePhase(allToolSequences, Solver.SEQUENCE_DEFAULT); - - /* Then fixing time of tasks as early as possible */ - DecisionBuilder timingPhase = solver.MakePhase(makespan, Solver.CHOOSE_FIRST_UNBOUND, Solver.ASSIGN_MIN_VALUE); - - /* Overall phase */ - DecisionBuilder mainPhase = solver.Compose(myToolAssignmentPhase, sequencingPhase, timingPhase); - - /* Logging */ - const int logFrequency = 1000000; - SearchMonitor searchLog = solver.MakeSearchLog(logFrequency, objective); - - /* Restarts */ - SearchMonitor searchRestart = solver.MakeLubyRestart(100); - - /* Search Limit in ms */ - SearchLimit limit = solver.MakeTimeLimit(180 * 1000); - - /* Collecting best solution */ - SolutionCollector collector = solver.MakeLastSolutionCollector(); - collector.AddObjective(makespan); - - // collector.Add( pile.ToArray() ); - solver.NewSearch(mainPhase, searchLog, searchRestart, objective, limit); - while (solver.NextSolution()) - { - Console.WriteLine("MAKESPAN: " + makespan.Value()); - } - } - - public void Solve() - { - Init(); - Model(); - Search(); - } -} - -public class Issue33Test -{ - public static void FactorySchedulingTest() - { - FactoryScheduling scheduling = new FactoryScheduling(new SmallSyntheticData().FetchData()); - scheduling.Solve(); - } - static void Main() - { - FactorySchedulingTest(); - } -} diff --git a/examples/tests/issue4.py b/examples/tests/issue4.py deleted file mode 100755 index 870328ad27..0000000000 --- a/examples/tests/issue4.py +++ /dev/null @@ -1,42 +0,0 @@ -#!/usr/bin/env python3 -from ortools.constraint_solver import pywrapcp - - -def main(): - solver = pywrapcp.Solver("time limit test") - n = 10 - x = [solver.IntVar(1, n, "x[%i]" % i) for i in range(n)] - solver.Add(solver.AllDifferent(x, True)) - - solution = solver.Assignment() - solution.Add(x) - - db = solver.Phase(x, - solver.CHOOSE_FIRST_UNBOUND, - solver.ASSIGN_MIN_VALUE) - - time_limit = 2000 - branch_limit = 100000000 - failures_limit = 100000000 - solutions_limit = 10000000 - limits = ( - solver.Limit( - time_limit, branch_limit, failures_limit, solutions_limit, True)) - - search_log = solver.SearchLog(1000) - - solver.NewSearch(db, [limits, search_log]) - num_solutions = 0 - while solver.NextSolution(): - print("x:", [x[i].Value() for i in range(n)]) - num_solutions += 1 - solver.EndSearch() - - print("num_solutions:", num_solutions) - print("failures:", solver.Failures()) - print("branches:", solver.Branches()) - print("wall_time:", solver.WallTime()) - - -if __name__ == "__main__": - main() diff --git a/examples/tests/issue46.py b/examples/tests/issue46.py deleted file mode 100755 index 338cb72f37..0000000000 --- a/examples/tests/issue46.py +++ /dev/null @@ -1,94 +0,0 @@ -#!/usr/bin/env python3 -# Copyright 2010-2025 Google LLC -# Licensed under the Apache License, Version 2.0 (the "License"); -# you may not use this file except in compliance with the License. -# You may obtain a copy of the License at -# -# http://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, software -# distributed under the License is distributed on an "AS IS" BASIS, -# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -# See the License for the specific language governing permissions and -# limitations under the License. -"""Code for issue 46 in or-tools.""" - -from ortools.constraint_solver import pywrapcp - - -class AssignToStartMin(pywrapcp.PyDecisionBuilder): - def __init__(self, intervals): - pywrapcp.PyDecisionBuilder.__init__(self) - self.__intervals = intervals - - def Next(self, solver): - for interval in self.__intervals: - interval.SetStartMax(interval.StartMin()) - return None - - def DebugString(self): - return 'CustomDecisionBuilder' - - -def NoSequence(): - print('NoSequence') - solver = pywrapcp.Solver('Ordo') - tasks = [] - [ - tasks.append( - solver.FixedDurationIntervalVar(0, 25, 5, False, 'Tasks%i' % i)) - for i in range(3) - ] - print(tasks) - disj = solver.DisjunctiveConstraint(tasks, 'Disjunctive') - solver.Add(disj) - collector = solver.AllSolutionCollector() - collector.Add(tasks) - intervalPhase = solver.Phase(tasks, solver.INTERVAL_DEFAULT) - solver.Solve(intervalPhase, [collector]) - print(collector.SolutionCount()) - for i in range(collector.SolutionCount()): - print("Solution ", i) - print(collector.ObjectiveValue(i)) - print([collector.StartValue(i, tasks[j]) for j in range(3)]) - print([collector.EndValue(i, tasks[j]) for j in range(3)]) - - -def Sequence(): - print('Sequence') - solver = pywrapcp.Solver('Ordo') - tasks = [] - [ - tasks.append( - solver.FixedDurationIntervalVar(0, 25, 5, False, 'Tasks%i' % i)) - for i in range(3) - ] - print(tasks) - disj = solver.DisjunctiveConstraint(tasks, 'Disjunctive') - solver.Add(disj) - sequence = [] - sequence.append(disj.SequenceVar()) - sequence[0].RankFirst(0) - collector = solver.AllSolutionCollector() - collector.Add(sequence) - collector.Add(tasks) - sequencePhase = solver.Phase(sequence, solver.SEQUENCE_DEFAULT) - intervalPhase = AssignToStartMin(tasks) - # intervalPhase = solver.Phase(tasks, solver.INTERVAL_DEFAULT) - mainPhase = solver.Compose([sequencePhase, intervalPhase]) - solver.Solve(mainPhase, [collector]) - print(collector.SolutionCount()) - for i in range(collector.SolutionCount()): - print("Solution ", i) - print(collector.ObjectiveValue(i)) - print([collector.StartValue(i, tasks[j]) for j in range(3)]) - print([collector.EndValue(i, tasks[j]) for j in range(3)]) - - -def main(): - NoSequence() - Sequence() - - -if __name__ == '__main__': - main() diff --git a/examples/tests/issue5.py b/examples/tests/issue5.py deleted file mode 100755 index d12a3e97c3..0000000000 --- a/examples/tests/issue5.py +++ /dev/null @@ -1,180 +0,0 @@ -#!/usr/bin/env python3 -# Copyright 2010 Hakan Kjellerstrand hakank@bonetmail.com -# -# Licensed under the Apache License, Version 2.0 (the 'License'); -# you may not use this file except in compliance with the License. -# You may obtain a copy of the License at -# -# http://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, software -# distributed under the License is distributed on an 'AS IS' BASIS, -# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -# See the License for the specific language governing permissions and -# limitations under the License. - -''' - A programming puzzle from Einav in Google CP Solver. - - From - 'A programming puzzle from Einav' - http://gcanyon.wordpress.com/2009/10/28/a-programming-puzzle-from-einav/ - - My friend Einav gave me this programming puzzle to work on. Given - this array of positive and negative numbers: - 33 30 -10 -6 18 7 -11 -23 6 - ... - -25 4 16 30 33 -23 -4 4 -23 - - You can flip the sign of entire rows and columns, as many of them - as you like. The goal is to make all the rows and columns sum to positive - numbers (or zero), and then to find the solution (there are more than one) - that has the smallest overall sum. So for example, for this array: - 33 30 -10 - -16 19 9 - -17 -12 -14 - You could flip the sign for the bottom row to get this array: - 33 30 -10 - -16 19 9 - 17 12 14 - Now all the rows and columns have positive sums, and the overall total is - 108. - But you could instead flip the second and third columns, and the second - row, to get this array: - 33 -30 10 - 16 19 9 - -17 12 14 - All the rows and columns still total positive, and the overall sum is just - 66. So this solution is better (I don't know if it's the best) - A pure brute force solution would have to try over 30 billion solutions. - I wrote code to solve this in J. I'll post that separately. - - Compare with the following models: - * MiniZinc http://www.hakank.org/minizinc/einav_puzzle.mzn - * SICStus: http://hakank.org/sicstus/einav_puzzle.pl - - - This model was created by Hakan Kjellerstrand (hakank@bonetmail.com) - Also see my other Google CP Solver models: - http://www.hakank.org/google_or_tools/ -''' - -from ortools.constraint_solver import pywrapcp - - -def main(): - # Create the solver. - solver = pywrapcp.Solver('Einav puzzle') - - # - # data - # - - # small problem -# data = [ -# [ 33, 30, -10], -# [-16, 19, 9], -# [-17, -12, -14] -# ] - - data = [[33, 30, 10, -6, 18, -7, -11, 23, -6], - [16, -19, 9, -26, -8, -19, -8, -21, -14], - [17, 12, -14, 31, -30, 13, -13, 19, 16], - [-6, -11, 1, 17, -12, -4, -7, 14, -21], - [18, -31, 34, -22, 17, -19, 20, 24, 6], - [33, -18, 17, -15, 31, -5, 3, 27, -3], - [-18, -20, -18, 31, 6, 4, -2, -12, 24], - [27, 14, 4, -29, -3, 5, -29, 8, -12], - [-15, -7, -23, 23, -9, -8, 6, 8, -12], - [33, -23, -19, -4, -8, -7, 11, -12, 31], - [-20, 19, -15, -30, 11, 32, 7, 14, -5], - [-23, 18, -32, -2, -31, -7, 8, 24, 16], - [32, -4, -10, -14, -6, -1, 0, 23, 23], - [25, 0, -23, 22, 12, 28, -27, 15, 4], - [-30, -13, -16, -3, -3, -32, -3, 27, -31], - [22, 1, 26, 4, -2, -13, 26, 17, 14], - [-9, -18, 3, -20, -27, -32, -11, 27, 13], - [-17, 33, -7, 19, -32, 13, -31, -2, -24], - [-31, 27, -31, -29, 15, 2, 29, -15, 33], - [-18, -23, 15, 28, 0, 30, -4, 12, -32], - [-3, 34, 27, -25, -18, 26, 1, 34, 26], - [-21, -31, -10, -13, -30, -17, -12, -26, 31], - [23, -31, -19, 21, -17, -10, 2, -23, 23], - [-3, 6, 0, -3, -32, 0, -10, -25, 14], - [-19, 9, 14, -27, 20, 15, -5, -27, 18], - [11, -6, 24, 7, -17, 26, 20, -31, -25], - [-25, 4, -16, 30, 33, 23, -4, -4, 23]] - - rows = len(data) - cols = len(data[0]) - - # - # variables - # - x = {} - for i in range(rows): - for j in range(cols): - x[i, j] = solver.IntVar(-100, 100, 'x[%i,%i]' % (i, j)) - - row_signs = [solver.IntVar([-1, 1], 'row_signs(%i)' % i) - for i in range(rows)] - col_signs = [solver.IntVar([-1, 1], 'col_signs(%i)' % j) - for j in range(cols)] - - # - # constraints - # - for i in range(rows): - for j in range(cols): - solver.Add(x[i, j] == data[i][j] * row_signs[i] * col_signs[j]) - - total_sum = solver.Sum([x[i, j] for i in range(rows) for j in range(cols)]) - - # row sums - row_sums = [solver.Sum([x[i, j] for j in range(cols)]).Var() - for i in range(rows)] - # >= 0 - for i in range(rows): - row_sums[i].SetMin(0) - - # column sums - col_sums = [solver.Sum([x[i, j] for i in range(rows)]).Var() - for j in range(cols)] - for j in range(cols): - col_sums[j].SetMin(0) - - # objective - objective = solver.Minimize(total_sum, 1) - - # - # search and result - # - db = solver.Phase(col_signs + row_signs, - solver.CHOOSE_FIRST_UNBOUND, - solver.ASSIGN_MIN_VALUE) - - search_log = solver.SearchLog(100000, total_sum) - solver.NewSearch(db, [objective, search_log]) - - num_solutions = 0 - while solver.NextSolution(): - num_solutions += 1 - print('Sum =', objective.Best()) - print('row_sums:', [row_sums[i].Value() for i in range(rows)]) - print('col_sums:', [col_sums[j].Value() for j in range(cols)]) - for i in range(rows): - for j in range(cols): - print(x[i, j].Value(),', ') - print('\n') - print('\n') - - solver.EndSearch() - - print('num_solutions:', num_solutions) - print('failures:', solver.Failures()) - print('branches:', solver.Branches()) - print('wall_time:', solver.WallTime(), 'ms') - - -if __name__ == '__main__': - main() diff --git a/examples/tests/issue57.cc b/examples/tests/issue57.cc deleted file mode 100644 index ffd0c0ec55..0000000000 --- a/examples/tests/issue57.cc +++ /dev/null @@ -1,39 +0,0 @@ -// Copyright 2011-2014 Google -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. - -#include "absl/flags/parse.h" -#include "ortools/base/hash.h" -#include "ortools/base/map_util.h" -#include "ortools/base/stl_util.h" -#include "ortools/constraint_solver/constraint_solver.h" -#include "ortools/constraint_solver/constraint_solveri.h" -#include "ortools/util/string_array.h" - -namespace operations_research { -void OverflowTest() { - // It works on mac-clang, but fails with gcc. - Solver solver("OverflowTest"); - IntVar* const x = solver.MakeIntVar(kint64min, kint64max, "x"); - IntVar* const y = solver.MakeIntVar(kint64min, kint64max, "y"); - IntExpr* const z = solver.MakeDifference(x, y); - LOG(INFO) << z->DebugString(); - Constraint* const ct = solver.MakeGreaterOrEqual(z, 10); - LOG(INFO) << ct->DebugString(); -} -} // namespace operations_research - -int main(int argc, char** argv) { - absl::ParseCommandLine(argc, argv); - operations_research::OverflowTest(); - return 0; -} diff --git a/examples/tests/issue62.py b/examples/tests/issue62.py deleted file mode 100755 index afb6e0b2ca..0000000000 --- a/examples/tests/issue62.py +++ /dev/null @@ -1,29 +0,0 @@ -#!/usr/bin/env python3 -from ortools.constraint_solver import pywrapcp - - -def main(): - solver = pywrapcp.Solver('Ordo') - tasks = [solver.FixedDurationIntervalVar(0, 25, 5, False, 'Tasks%i' %i) - for i in range(3)] - print(tasks) - disj = solver.DisjunctiveConstraint(tasks, 'Disjunctive') - sequence = [] - sequence.append(disj.SequenceVar()) - solver.Add(disj) - collector = solver.AllSolutionCollector() - collector.Add(sequence) - collector.Add(tasks) - sequencePhase = solver.Phase(sequence, solver.SEQUENCE_DEFAULT) - intervalPhase = solver.Phase(tasks, solver.INTERVAL_DEFAULT) - mainPhase = solver.Compose([sequencePhase, intervalPhase]) - solver.Solve(mainPhase, [ collector]) - print(collector.SolutionCount()) - for i in range(collector.SolutionCount()): - print("Solution " , i) - print([collector.StartValue(i, tasks[j]) for j in range(3)]) - print([collector.EndValue(i, tasks[j]) for j in range(3)]) - - -if __name__ == '__main__': - main() diff --git a/examples/tests/lp_test.cc b/examples/tests/lp_test.cc deleted file mode 100644 index c15d3a0db3..0000000000 --- a/examples/tests/lp_test.cc +++ /dev/null @@ -1,232 +0,0 @@ -// Copyright 2010-2025 Google LLC -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. - -// Linear programming example that shows how to use the API. - -#include "ortools/base/init_google.h" -#include "ortools/base/logging.h" -#include "ortools/linear_solver/linear_solver.h" -#include "ortools/linear_solver/linear_solver.pb.h" - -namespace operations_research { -void SolveAndPrint(MPSolver& solver, std::vector variables, - std::vector constraints, bool is_continuous) { - LOG(INFO) << "Number of variables = " << solver.NumVariables(); - LOG(INFO) << "Number of constraints = " << solver.NumConstraints(); - - const MPSolver::ResultStatus result_status = solver.Solve(); - // Check that the problem has an optimal solution. - if (result_status != MPSolver::OPTIMAL) { - LOG(FATAL) << "The problem does not have an optimal solution!"; - } - LOG(INFO) << "Solution:"; - for (const auto& i : variables) { - LOG(INFO) << i->name() << " = " << i->solution_value(); - } - LOG(INFO) << "Optimal objective value = " << solver.Objective().Value(); - LOG(INFO) << ""; - LOG(INFO) << "Advanced usage:"; - LOG(INFO) << "Problem solved in " << solver.wall_time() << " milliseconds"; - if (solver.ProblemType() != MPSolver::BOP_INTEGER_PROGRAMMING) - LOG(INFO) << "Problem solved in " << solver.iterations() << " iterations"; - if (is_continuous) { - for (const auto& i : variables) { - LOG(INFO) << i->name() << ": reduced cost " << i->reduced_cost(); - } - - const std::vector activities = solver.ComputeConstraintActivities(); - for (const auto& i : constraints) { - LOG(INFO) << i->name() << ": dual value = " << i->dual_value() - << " activity = " << activities[i->index()]; - } - } -} - -void RunLinearProgrammingExample( - MPSolver::OptimizationProblemType optimization_problem_type) { - MPSolver solver("LinearProgrammingExample", optimization_problem_type); - const double infinity = solver.infinity(); - // x and y are continuous non-negative variables. - MPVariable* const x = solver.MakeNumVar(0.0, infinity, "x"); - MPVariable* const y = solver.MakeNumVar(0.0, infinity, "y"); - - // Objectif function: Maximize 3x + 4y. - MPObjective* const objective = solver.MutableObjective(); - objective->SetCoefficient(x, 3); - objective->SetCoefficient(y, 4); - objective->SetMaximization(); - - // x + 2y <= 14. - MPConstraint* const c0 = solver.MakeRowConstraint(-infinity, 14.0, "c0"); - c0->SetCoefficient(x, 1); - c0->SetCoefficient(y, 2); - - // 3x - y >= 0. - MPConstraint* const c1 = solver.MakeRowConstraint(0.0, infinity, "c1"); - c1->SetCoefficient(x, 3); - c1->SetCoefficient(y, -1); - - // x - y <= 2. - MPConstraint* const c2 = solver.MakeRowConstraint(-infinity, 2.0, "c2"); - c2->SetCoefficient(x, 1); - c2->SetCoefficient(y, -1); - - SolveAndPrint(solver, {x, y}, {c0, c1, c2}, true); -} - -void RunMixedIntegerProgrammingExample( - MPSolver::OptimizationProblemType optimization_problem_type) { - MPSolver solver("MixedIntegerProgrammingExample", optimization_problem_type); - const double infinity = solver.infinity(); - // x and y are integers non-negative variables. - MPVariable* const x = solver.MakeIntVar(0.0, infinity, "x"); - MPVariable* const y = solver.MakeIntVar(0.0, infinity, "y"); - - // Objective function: Maximize x + 10 * y. - MPObjective* const objective = solver.MutableObjective(); - objective->SetCoefficient(x, 1); - objective->SetCoefficient(y, 10); - objective->SetMaximization(); - - // x + 7 * y <= 17.5 - MPConstraint* const c0 = solver.MakeRowConstraint(-infinity, 17.5, "c0"); - c0->SetCoefficient(x, 1); - c0->SetCoefficient(y, 7); - - // x <= 3.5 - MPConstraint* const c1 = solver.MakeRowConstraint(-infinity, 3.5, "c1"); - c1->SetCoefficient(x, 1); - c1->SetCoefficient(y, 0); - - SolveAndPrint(solver, {x, y}, {c0, c1}, false); -} - -void RunBooleanProgrammingExample( - MPSolver::OptimizationProblemType optimization_problem_type) { - MPSolver solver("BooleanProgrammingExample", optimization_problem_type); - const double infinity = solver.infinity(); - // x and y are boolean variables. - MPVariable* const x = solver.MakeBoolVar("x"); - MPVariable* const y = solver.MakeBoolVar("y"); - - // Objective function: Minimize 2 * x + y. - MPObjective* const objective = solver.MutableObjective(); - objective->SetCoefficient(x, 2); - objective->SetCoefficient(y, 1); - objective->SetMinimization(); - - // 1 <= x + 2 * y <= 3. - MPConstraint* const c0 = solver.MakeRowConstraint(1, 3, "c0"); - c0->SetCoefficient(x, 1); - c0->SetCoefficient(y, 2); - - SolveAndPrint(solver, {x, y}, {c0}, false); -} - -void MutableObjectiveCrash() { - LOG(INFO) << "MutableObjectiveCrash"; - // Create the linear solver with the GLOP backend. - std::unique_ptr solver(MPSolver::CreateSolver("GLOP")); - - // Create the variables x and y. - MPVariable* const x = solver->MakeNumVar(0.0, 1, "x"); - MPVariable* const y = solver->MakeNumVar(0.0, 2, "y"); - - LOG(INFO) << "Number of variables = " << solver->NumVariables(); - - // Create a linear constraint, 0 <= x + y <= 2. - MPConstraint* const ct = solver->MakeRowConstraint(0.0, 2.0, "ct"); - ct->SetCoefficient(x, 1); - ct->SetCoefficient(y, 1); - - LOG(INFO) << "Number of constraints = " << solver->NumConstraints(); - - // Create the objective function, 3 * x + y. - MPObjective* const objective = solver->MutableObjective(); - objective->SetCoefficient(x, 3); - objective->SetCoefficient(y, 1); - objective->SetMaximization(); - - solver->Solve(); - - LOG(INFO) << "Solution:" << std::endl; - LOG(INFO) << "Objective value = " << objective->Value(); - LOG(INFO) << "x = " << x->solution_value(); - LOG(INFO) << "y = " << y->solution_value(); -} - -void RunAllExamples() { - // Linear programming problems -#if defined(USE_CLP) - LOG(INFO) << "---- Linear programming example with CLP ----"; - RunLinearProgrammingExample(MPSolver::CLP_LINEAR_PROGRAMMING); -#endif // USE_CLP -#if defined(USE_GLPK) - LOG(INFO) << "---- Linear programming example with GLPK ----"; - RunLinearProgrammingExample(MPSolver::GLPK_LINEAR_PROGRAMMING); -#endif // USE_GLPK -#if defined(USE_GLOP) - LOG(INFO) << "---- Linear programming example with GLOP ----"; - RunLinearProgrammingExample(MPSolver::GLOP_LINEAR_PROGRAMMING); -#endif // USE_GLOP -#if defined(USE_PDLP) - LOG(INFO) << "---- Linear programming example with PDLP ----"; - RunLinearProgrammingExample(MPSolver::PDLP_LINEAR_PROGRAMMING); -#endif // USE_PDLP -#if defined(USE_GUROBI) - LOG(INFO) << "---- Linear programming example with Gurobi ----"; - RunLinearProgrammingExample(MPSolver::GUROBI_LINEAR_PROGRAMMING); -#endif // USE_GUROBI -#if defined(USE_CPLEX) - LOG(INFO) << "---- Linear programming example with CPLEX ----"; - RunLinearProgrammingExample(MPSolver::CPLEX_LINEAR_PROGRAMMING); -#endif // USE_CPLEX - - // Integer programming problems -#if defined(USE_SCIP) - LOG(INFO) << "---- Mixed Integer programming example with SCIP ----"; - RunMixedIntegerProgrammingExample(MPSolver::SCIP_MIXED_INTEGER_PROGRAMMING); -#endif // USE_SCIP -#if defined(USE_GLPK) - LOG(INFO) << "---- Mixed Integer programming example with GLPK ----"; - RunMixedIntegerProgrammingExample(MPSolver::GLPK_MIXED_INTEGER_PROGRAMMING); -#endif // USE_GLPK -#if defined(USE_CBC) - LOG(INFO) << "---- Mixed Integer programming example with CBC ----"; - RunMixedIntegerProgrammingExample(MPSolver::CBC_MIXED_INTEGER_PROGRAMMING); -#endif // USE_CBC -#if defined(USE_GUROBI) - LOG(INFO) << "---- Mixed Integer programming example with GUROBI ----"; - RunMixedIntegerProgrammingExample(MPSolver::GUROBI_MIXED_INTEGER_PROGRAMMING); -#endif // USE_GUROBI -#if defined(USE_CPLEX) - LOG(INFO) << "---- Mixed Integer programming example with CPLEX ----"; - RunMixedIntegerProgrammingExample(MPSolver::CPLEX_MIXED_INTEGER_PROGRAMMING); -#endif // USE_CPLEX - - // Boolean integer programming problems -#if defined(USE_BOP) - LOG(INFO) << "---- Boolean Integer programming example with BOP ----"; - RunBooleanProgrammingExample(MPSolver::BOP_INTEGER_PROGRAMMING); -#endif // USE_BOP - - MutableObjectiveCrash(); -} -} // namespace operations_research - -int main(int argc, char** argv) { - google::InitGoogleLogging(argv[0]); - absl::SetStderrThreshold(absl::LogSeverityAtLeast::kInfo); - operations_research::RunAllExamples(); - return 0; -} diff --git a/examples/tests/min_max_test.cc b/examples/tests/min_max_test.cc deleted file mode 100644 index 2c905adecf..0000000000 --- a/examples/tests/min_max_test.cc +++ /dev/null @@ -1,407 +0,0 @@ -// Copyright 2011-2012 Google -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. - -#include "absl/flags/parse.h" -#include "ortools/base/hash.h" -#include "ortools/base/logging.h" -#include "ortools/base/map_util.h" -#include "ortools/base/stl_util.h" -#include "ortools/constraint_solver/constraint_solver.h" -#include "ortools/constraint_solver/constraint_solveri.h" -#include "ortools/util/string_array.h" - -namespace operations_research { - -class NullDemon : public Demon { - virtual void Run(Solver* const s) {} -}; - -// ----- Min Array Test ----- - -class MinArrayCtTestSetToMin : public DecisionBuilder { - public: - MinArrayCtTestSetToMin(IntExpr* const min, const std::vector& vars) - : min_(min), vars_(vars) {} - virtual ~MinArrayCtTestSetToMin() {} - - virtual Decision* Next(Solver* const s) { - min_->SetMax(0); - CHECK(vars_[0]->Bound()) << "var not bound"; - CHECK_EQ(0, vars_[0]->Min()) << "var not bound to the correct value"; - return NULL; - } - - private: - IntExpr* const min_; - const std::vector& vars_; -}; - -class MinArrayCtTestSetToMax : public DecisionBuilder { - public: - MinArrayCtTestSetToMax(IntExpr* const min, const std::vector& vars) - : min_(min), vars_(vars) {} - virtual ~MinArrayCtTestSetToMax() {} - - virtual Decision* Next(Solver* const s) { - min_->SetMin(5); - CHECK(vars_[0]->Bound()) << "var not bound"; - CHECK_EQ(5, vars_[0]->Min()) << "var not bound to the correct value"; - return NULL; - } - - private: - IntExpr* const min_; - const std::vector& vars_; -}; - -class MinArrayCtTestSetOneVar : public DecisionBuilder { - public: - MinArrayCtTestSetOneVar(IntExpr* const min, const std::vector& vars) - : min_(min), vars_(vars) {} - virtual ~MinArrayCtTestSetOneVar() {} - - virtual Decision* Next(Solver* const s) { - vars_[0]->SetValue(5); - CHECK_EQ(1, min_->Min()) << "bad computed min in min_array"; - CHECK_EQ(5, min_->Max()) << "bad computed max in min_array"; - return NULL; - } - - private: - IntExpr* const min_; - const std::vector& vars_; -}; - -class MinArrayCtTest { - public: - void SetUp() { - solver_.reset(new Solver("MinConstraintTest")); - vars_.clear(); - vars_.resize(10); - for (int i = 0; i < 10; ++i) { - vars_[i] = solver_->MakeIntVar(i, 2 * i + 5); - } - min_ = solver_->MakeMin(vars_)->Var(); - } - - std::unique_ptr solver_; - std::vector vars_; - IntExpr* min_; - - void TestAlternateCtor() { - SetUp(); - std::vector vars; - for (int i = 0; i < 4; ++i) { - vars.push_back(solver_->MakeIntVar(i, 2 * i)); - } - IntExpr* emin = solver_->MakeMin(vars); - CHECK(!emin->DebugString().empty()); - } - - void TestBounds() { - SetUp(); - CHECK_EQ(0LL, min_->Min()) << "bad computed min in min_array"; - CHECK_EQ(5, min_->Max()) << "bad computed min in min_array"; - } - - void TestSetToMin() { - SetUp(); - solver_->Solve(solver_->RevAlloc(new MinArrayCtTestSetToMin(min_, vars_))); - } - - void TestSetToMax() { - SetUp(); - solver_->Solve(solver_->RevAlloc(new MinArrayCtTestSetToMax(min_, vars_))); - } - - void TestSetOneVar() { - SetUp(); - solver_->Solve(solver_->RevAlloc(new MinArrayCtTestSetOneVar(min_, vars_))); - } - - void TestWhen() { - SetUp(); - Demon* const d = solver_->RevAlloc(new NullDemon()); - min_->WhenRange(d); - } - - void TestBigMinVector() { - SetUp(); - std::vector vars; - for (int i = 0; i < 1001; ++i) { - vars.push_back( - solver_->MakeIntVar(i, 3000 - i, absl::StrFormat("x%d", i))); - } - IntExpr* expr = solver_->MakeMin(vars); - CHECK_EQ(2000, expr->Max()); - CHECK_EQ(0, expr->Min()); - } - - void TestBigMinArray() { - SetUp(); - std::vector vars; - vars.reserve(1001); - for (int i = 0; i < 1001; ++i) { - vars.push_back( - solver_->MakeIntVar(i, 3000 - i, absl::StrFormat("x%d", i))); - } - IntExpr* expr = solver_->MakeMin(vars); - CHECK_EQ(2000, expr->Max()); - CHECK_EQ(0, expr->Min()); - } - - void TestSmallMinVector() { - SetUp(); - std::vector vars; - IntExpr* expr = solver_->MakeMin(vars); - CHECK_EQ(kint64max, expr->Min()); - CHECK_EQ(kint64max, expr->Max()); - vars.push_back(solver_->MakeIntVar(1, 10, "x0")); - expr = solver_->MakeMin(vars); - CHECK_EQ(1, expr->Min()); - CHECK_EQ(10, expr->Max()); - vars.push_back(solver_->MakeIntVar(2, 9, "x1")); - expr = solver_->MakeMin(vars); - CHECK_EQ(1, expr->Min()); - CHECK_EQ(9, expr->Max()); - vars.push_back(solver_->MakeIntVar(3, 8, "x2")); - expr = solver_->MakeMin(vars); - CHECK_EQ(1, expr->Min()); - CHECK_EQ(8, expr->Max()); - } - - void TestSmallMinArray() { - SetUp(); - std::vector vars; - vars.reserve(3); - IntExpr* expr = solver_->MakeMin(vars); - CHECK_EQ(kint64max, expr->Min()); - CHECK_EQ(kint64max, expr->Max()); - vars.push_back(solver_->MakeIntVar(1, 10, absl::StrFormat("x%d", 0))); - expr = solver_->MakeMin(vars); - CHECK_EQ(1, expr->Min()); - CHECK_EQ(10, expr->Max()); - vars.push_back(solver_->MakeIntVar(1, 9, absl::StrFormat("x%d", 1))); - expr = solver_->MakeMin(vars); - CHECK_EQ(1, expr->Min()); - CHECK_EQ(9, expr->Max()); - vars.push_back(solver_->MakeIntVar(1, 8, absl::StrFormat("x%d", 2))); - expr = solver_->MakeMin(vars); - CHECK_EQ(1, expr->Min()); - CHECK_EQ(8, expr->Max()); - } -}; - -// ----- Max Array Test ----- - -class MaxArrayCtTestSetToMin : public DecisionBuilder { - public: - MaxArrayCtTestSetToMin(IntExpr* const max, const std::vector& vars) - : max_(max), vars_(vars) {} - virtual ~MaxArrayCtTestSetToMin() {} - - virtual Decision* Next(Solver* const s) { - max_->SetMin(23); - CHECK(vars_[9]->Bound()) << "var not bound"; - CHECK_EQ(23, vars_[9]->Min()) << "var not bound to the correct value"; - return NULL; - } - - private: - IntExpr* const max_; - const std::vector& vars_; -}; - -class MaxArrayCtTestSetToMax : public DecisionBuilder { - public: - MaxArrayCtTestSetToMax(IntExpr* const max, const std::vector& vars) - : max_(max), vars_(vars) {} - virtual ~MaxArrayCtTestSetToMax() {} - - virtual Decision* Next(Solver* const s) { - max_->SetMax(9); - CHECK(vars_[9]->Bound()) << "var not bound"; - CHECK_EQ(9, vars_[9]->Min()) << "var not bound to the correct value"; - return NULL; - } - - private: - IntExpr* const max_; - const std::vector& vars_; -}; - -class MaxArrayCtTestSetOneVar : public DecisionBuilder { - public: - MaxArrayCtTestSetOneVar(IntExpr* const max, const std::vector& vars) - : max_(max), vars_(vars) {} - virtual ~MaxArrayCtTestSetOneVar() {} - - virtual Decision* Next(Solver* const s) { - vars_[9]->SetValue(18); - CHECK_EQ(18, max_->Min()) << "bad computed min in max_array"; - CHECK_EQ(21, max_->Max()) << "bad computed max in max_array"; - return NULL; - } - - private: - IntExpr* const max_; - const std::vector& vars_; -}; - -class MaxArrayCtTest { - public: - void SetUp() { - solver_.reset(new Solver("MaxArrayCtTest")); - vars_.resize(10); - for (int i = 0; i < 10; ++i) { - vars_[i] = solver_->MakeIntVar(i, 2 * i + 5); - } - max_ = solver_->MakeMax(vars_)->Var(); - } - - std::unique_ptr solver_; - std::vector vars_; - IntExpr* max_; - - void TestAlternateCtor() { - SetUp(); - std::vector vars; - for (int i = 0; i < 4; ++i) { - vars.push_back(solver_->MakeIntVar(i, 2 * i)); - } - IntExpr* emax = solver_->MakeMax(vars); - CHECK(!emax->DebugString().empty()); - } - - void TestBounds() { - SetUp(); - CHECK_EQ(9, max_->Min()) << "bad computed min in max_array"; - CHECK_EQ(23, max_->Max()) << "bad computed min in max_array"; - } - - void TestSetToMin() { - SetUp(); - solver_->Solve(solver_->RevAlloc(new MaxArrayCtTestSetToMin(max_, vars_))); - } - - void TestSetToMax() { - SetUp(); - solver_->Solve(solver_->RevAlloc(new MaxArrayCtTestSetToMax(max_, vars_))); - } - - void TestSetOneVar() { - SetUp(); - solver_->Solve(solver_->RevAlloc(new MaxArrayCtTestSetOneVar(max_, vars_))); - } - - void TestWhen() { - SetUp(); - Demon* d = solver_->RevAlloc(new NullDemon()); - max_->WhenRange(d); - } - - void TestBigMaxVector() { - SetUp(); - std::vector vars; - vars.reserve(1001); - for (int i = 0; i < 1001; ++i) { - vars.push_back( - solver_->MakeIntVar(i, 3000 - i, absl::StrFormat("x%d", i))); - } - IntExpr* expr = solver_->MakeMax(vars); - CHECK_EQ(3000, expr->Max()); - CHECK_EQ(1000, expr->Min()); - } - - void TestBigMaxArray() { - SetUp(); - std::vector vars; - for (int i = 0; i < 1001; ++i) { - vars.push_back( - solver_->MakeIntVar(i, 3000 - i, absl::StrFormat("x%d", i))); - } - IntExpr* expr = solver_->MakeMax(vars); - CHECK_EQ(3000, expr->Max()); - CHECK_EQ(1000, expr->Min()); - } - - void TestSmallMaxVector() { - SetUp(); - std::vector vars; - IntExpr* expr = solver_->MakeMax(vars); - CHECK_EQ(kint64min, expr->Min()); - CHECK_EQ(kint64min, expr->Max()); - vars.push_back(solver_->MakeIntVar(1, 10, "x0")); - expr = solver_->MakeMax(vars); - CHECK_EQ(1, expr->Min()); - CHECK_EQ(10, expr->Max()); - vars.push_back(solver_->MakeIntVar(2, 9, "x1")); - expr = solver_->MakeMax(vars); - CHECK_EQ(2, expr->Min()); - CHECK_EQ(10, expr->Max()); - vars.push_back(solver_->MakeIntVar(3, 8, "x2")); - expr = solver_->MakeMax(vars); - CHECK_EQ(3, expr->Min()); - CHECK_EQ(10, expr->Max()); - } - - void TestSmallMaxArray() { - SetUp(); - std::vector vars; - IntExpr* expr = solver_->MakeMax(vars); - CHECK_EQ(kint64min, expr->Min()); - CHECK_EQ(kint64min, expr->Max()); - vars.push_back(solver_->MakeIntVar(1, 10, absl::StrFormat("x%d", 0))); - expr = solver_->MakeMax(vars); - CHECK_EQ(1, expr->Min()); - CHECK_EQ(10, expr->Max()); - vars.push_back(solver_->MakeIntVar(2, 10, absl::StrFormat("x%d", 1))); - expr = solver_->MakeMax(vars); - CHECK_EQ(2, expr->Min()); - CHECK_EQ(10, expr->Max()); - vars.push_back(solver_->MakeIntVar(3, 10, absl::StrFormat("x%d", 2))); - expr = solver_->MakeMax(vars); - CHECK_EQ(3, expr->Min()); - CHECK_EQ(10, expr->Max()); - } -}; -} // namespace operations_research - -int main(int argc, char** argv) { - absl::ParseCommandLine(argc, argv); - operations_research::MinArrayCtTest min_test; - min_test.TestAlternateCtor(); - min_test.TestBounds(); - min_test.TestSetToMin(); - min_test.TestSetToMax(); - min_test.TestSetOneVar(); - min_test.TestWhen(); - min_test.TestBigMinVector(); - min_test.TestBigMinArray(); - min_test.TestSmallMinVector(); - min_test.TestSmallMinArray(); - - operations_research::MaxArrayCtTest max_test; - max_test.TestAlternateCtor(); - max_test.TestBounds(); - max_test.TestSetToMin(); - max_test.TestSetToMax(); - max_test.TestSetOneVar(); - max_test.TestWhen(); - max_test.TestBigMaxVector(); - max_test.TestBigMaxArray(); - max_test.TestSmallMaxVector(); - max_test.TestSmallMaxArray(); - - return 0; -} diff --git a/examples/tests/remote/Makefile b/examples/tests/remote/Makefile deleted file mode 100644 index 770bb2bec9..0000000000 --- a/examples/tests/remote/Makefile +++ /dev/null @@ -1,18 +0,0 @@ -OR_TOOLS_TOP=$(CURDIR)/../../.. -include $(OR_TOOLS_TOP)/Makefile - -tsp.$O: tsp.cc $(OR_TOOLS_TOP)/src/constraint_solver/routing.h - $(CCC) $(CFLAGS) -c tsp.cc $(OBJ_OUT)tsp.$O - -tsp$E: $(DYNAMIC_ROUTING_DEPS) tsp.$O - $(CCC) $(CFLAGS) tsp.$O $(DYNAMIC_ROUTING_LNK) $(DYNAMIC_LD_FLAGS) $(EXE_OUT)tsp$E - -linear_programming.$O: linear_programming.cc $(OR_TOOLS_TOP)/src/constraint_solver/routing.h - $(CCC) $(CFLAGS) -c linear_programming.cc $(OBJ_OUT)linear_programming.$O - -linear_programming$E: $(DYNAMIC_LP_DEPS) linear_programming.$O - $(CCC) $(CFLAGS) linear_programming.$O $(DYNAMIC_LP_LNK) $(DYNAMIC_LD_FLAGS) $(EXE_OUT)linear_programming$E - -local_clean: - rm tsp.$O tsp$E linear_programming.$O linear_programming$E - diff --git a/examples/tests/remote/linear_programming.cc b/examples/tests/remote/linear_programming.cc deleted file mode 100644 index 2175231075..0000000000 --- a/examples/tests/remote/linear_programming.cc +++ /dev/null @@ -1,115 +0,0 @@ -// Copyright 2010-2025 Google -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. -// -// Linear programming example that shows how to use the API. - -#include "base/commandlineflags.h" -#include "base/logging.h" -#include "linear_solver/linear_solver.h" -#include "linear_solver/linear_solver.pb.h" - -namespace operations_research { -void RunLinearProgrammingExample( - MPSolver::OptimizationProblemType optimization_problem_type) { - MPSolver solver("LinearProgrammingExample", optimization_problem_type); - const double infinity = solver.infinity(); - // x1, x2 and x3 are continuous non-negative variables. - MPVariable* const x1 = solver.MakeNumVar(0.0, infinity, "x1"); - MPVariable* const x2 = solver.MakeNumVar(0.0, infinity, "x2"); - MPVariable* const x3 = solver.MakeNumVar(0.0, infinity, "x3"); - - // Maximize 10 * x1 + 6 * x2 + 4 * x3. - MPObjective* const objective = solver.MutableObjective(); - objective->SetCoefficient(x1, 10); - objective->SetCoefficient(x2, 6); - objective->SetCoefficient(x3, 4); - objective->SetMaximization(); - - // x1 + x2 + x3 <= 100. - MPConstraint* const c0 = solver.MakeRowConstraint(-infinity, 100.0); - c0->SetCoefficient(x1, 1); - c0->SetCoefficient(x2, 1); - c0->SetCoefficient(x3, 1); - - // 10 * x1 + 4 * x2 + 5 * x3 <= 600. - MPConstraint* const c1 = solver.MakeRowConstraint(-infinity, 600.0); - c1->SetCoefficient(x1, 10); - c1->SetCoefficient(x2, 4); - c1->SetCoefficient(x3, 5); - - // 2 * x1 + 2 * x2 + 6 * x3 <= 300. - MPConstraint* const c2 = solver.MakeRowConstraint(-infinity, 300.0); - c2->SetCoefficient(x1, 2); - c2->SetCoefficient(x2, 2); - c2->SetCoefficient(x3, 6); - - // TODO(user): Change example to show = and >= constraints. - - LOG(INFO) << "Number of variables = " << solver.NumVariables(); - LOG(INFO) << "Number of constraints = " << solver.NumConstraints(); - - const MPSolver::ResultStatus result_status = solver.Solve(); - - // Check that the problem has an optimal solution. - if (result_status != MPSolver::OPTIMAL) { - LOG(FATAL) << "The problem does not have an optimal solution!"; - } - - LOG(INFO) << "Problem solved in " << solver.wall_time() << " milliseconds"; - - // The objective value of the solution. - LOG(INFO) << "Optimal objective value = " << objective->Value(); - - // The value of each variable in the solution. - LOG(INFO) << "x1 = " << x1->solution_value(); - LOG(INFO) << "x2 = " << x2->solution_value(); - LOG(INFO) << "x3 = " << x3->solution_value(); - - LOG(INFO) << "Advanced usage:"; - LOG(INFO) << "Problem solved in " << solver.iterations() << " iterations"; - LOG(INFO) << "x1: reduced cost = " << x1->reduced_cost(); - LOG(INFO) << "x2: reduced cost = " << x2->reduced_cost(); - LOG(INFO) << "x3: reduced cost = " << x3->reduced_cost(); - LOG(INFO) << "c0: dual value = " << c0->dual_value() - << " activity = " << c0->activity(); - LOG(INFO) << "c1: dual value = " << c1->dual_value() - << " activity = " << c1->activity(); - LOG(INFO) << "c2: dual value = " << c2->dual_value() - << " activity = " << c2->activity(); -} - -void RunAllExamples() { -#if defined(USE_GLPK) - LOG(INFO) << "---- Linear programming example with GLPK ----"; - RunLinearProgrammingExample(MPSolver::GLPK_LINEAR_PROGRAMMING); -#endif // USE_GLPK -#if defined(USE_CLP) - LOG(INFO) << "---- Linear programming example with CLP ----"; - RunLinearProgrammingExample(MPSolver::CLP_LINEAR_PROGRAMMING); -#endif // USE_CLP -#if defined(USE_SLM) - LOG(INFO) << "---- Linear programming example with Sulum ----"; - RunLinearProgrammingExample(MPSolver::SULUM_LINEAR_PROGRAMMING); -#endif // USE_SLM -#if defined(USE_GUROBI) - LOG(INFO) << "---- Linear programming example with Gurobi ----"; - RunLinearProgrammingExample(MPSolver::GUROBI_LINEAR_PROGRAMMING); -#endif // USE_GUROBI -} -} // namespace operations_research - -int main(int argc, char** argv) { - google::ParseCommandLineFlags(&argc, &argv, true); - operations_research::RunAllExamples(); - return 0; -} diff --git a/examples/tests/remote/tsp.cc b/examples/tests/remote/tsp.cc deleted file mode 100644 index 7493725256..0000000000 --- a/examples/tests/remote/tsp.cc +++ /dev/null @@ -1,164 +0,0 @@ -// Copyright 2010-2025 Google -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. -// -// Traveling Salesman Sample. -// -// This is a sample using the routing library to solve a Traveling Salesman -// Problem. -// The description of the problem can be found here: -// http://en.wikipedia.org/wiki/Travelling_salesman_problem. -// For small problems one can use the hamiltonian path library directly (cf -// graph/hamiltonian_path.h). -// The optimization engine uses local search to improve solutions, first -// solutions being generated using a cheapest addition heuristic. -// Optionally one can randomly forbid a set of random connections between nodes -// (forbidden arcs). - -#include "base/callback.h" -#include "base/commandlineflags.h" -#include "base/join.h" -#include "base/random.h" -#include "base/types.h" -#include "base/unique_ptr.h" -#include "constraint_solver/routing.h" - -using operations_research::ACMRandom; -using operations_research::Assignment; -using operations_research::RoutingModel; -using operations_research::scoped_ptr; -using operations_research::StrCat; - -DEFINE_int32(tsp_size, 10, "Size of Traveling Salesman Problem instance."); -DEFINE_bool(tsp_use_random_matrix, true, "Use random cost matrix."); -DEFINE_int32(tsp_random_forbidden_connections, 0, - "Number of random forbidden connections."); -DEFINE_bool(tsp_use_deterministic_random_seed, false, - "Use deterministic random seeds."); -DECLARE_string(routing_first_solution); -DECLARE_bool(routing_no_lns); - -// Random seed generator. -int32_t GetSeed() { - if (absl::GetFlag(FLAGS_tsp_use_deterministic_random_seed)) { - return ACMRandom::DeterministicSeed(); - } else { - return ACMRandom::HostnamePidTimeSeed(); - } -} - -// Cost/distance functions. - -// Sample function. -int64_t MyDistance(RoutingModel::NodeIndex from, RoutingModel::NodeIndex to) { - // Put your distance code here. - return (from + to).value(); // for instance -} - -// Random matrix. -class RandomMatrix { - public: - explicit RandomMatrix(int size) : size_(size) {} - void Initialize() { - matrix_.reset(new int64_t[size_ * size_]); - const int64_t kDistanceMax = 100; - ACMRandom randomizer(GetSeed()); - for (RoutingModel::NodeIndex from = RoutingModel::kFirstNode; from < size_; - ++from) { - for (RoutingModel::NodeIndex to = RoutingModel::kFirstNode; to < size_; - ++to) { - if (to != from) { - matrix_[MatrixIndex(from, to)] = randomizer.Uniform(kDistanceMax); - } else { - matrix_[MatrixIndex(from, to)] = 0LL; - } - } - } - } - int64_t Distance(RoutingModel::NodeIndex from, - RoutingModel::NodeIndex to) const { - return matrix_[MatrixIndex(from, to)]; - } - - private: - int64_t MatrixIndex(RoutingModel::NodeIndex from, - RoutingModel::NodeIndex to) const { - return (from * size_ + to).value(); - } - std::unique_ptr matrix_; - const int size_; -}; - -int main(int argc, char** argv) { - google::ParseCommandLineFlags(&argc, &argv, true); - if (absl::GetFlag(FLAGS_tsp_size) > 0) { - // TSP of size absl::GetFlag(FLAGS_tsp_size). - // Second argument = 1 to build a single tour (it's a TSP). - // Nodes are indexed from 0 to absl::GetFlag(FLAGS_tsp_size) - 1, by default - // the start of the route is node 0. - RoutingModel routing(absl::GetFlag(FLAGS_tsp_size), 1); - // Setting first solution heuristic (cheapest addition). - absl::GetFlag(FLAGS_routing_first_solution) = "PathCheapestArc"; - // Disabling Large Neighborhood Search, comment out to activate it. - absl::GetFlag(FLAGS_routing_no_lns) = true; - - // Setting the cost function. - // Put a permanent callback to the distance accessor here. The callback - // has the following signature: ResultCallback2. - // The two arguments are the from and to node inidices. - RandomMatrix matrix(absl::GetFlag(FLAGS_tsp_size)); - if (absl::GetFlag(FLAGS_tsp_use_random_matrix)) { - matrix.Initialize(); - routing.SetArcCostEvaluatorOfAllVehicles( - NewPermanentCallback(&matrix, &RandomMatrix::Distance)); - } else { - routing.SetArcCostEvaluatorOfAllVehicles( - NewPermanentCallback(MyDistance)); - } - // Forbid node connections (randomly). - ACMRandom randomizer(GetSeed()); - int64_t forbidden_connections = 0; - while (forbidden_connections < - absl::GetFlag(FLAGS_tsp_random_forbidden_connections)) { - const int64_t from = - randomizer.Uniform(absl::GetFlag(FLAGS_tsp_size) - 1); - const int64_t to = - randomizer.Uniform(absl::GetFlag(FLAGS_tsp_size) - 1) + 1; - if (routing.NextVar(from)->Contains(to)) { - LOG(INFO) << "Forbidding connection " << from << " -> " << to; - routing.NextVar(from)->RemoveValue(to); - ++forbidden_connections; - } - } - // Solve, returns a solution if any (owned by RoutingModel). - const Assignment* solution = routing.Solve(); - if (solution != NULL) { - // Solution cost. - LOG(INFO) << "Cost " << solution->ObjectiveValue(); - // Inspect solution. - // Only one route here; otherwise iterate from 0 to routing.vehicles() - 1 - const int route_number = 0; - std::string route; - for (int64_t node = routing.Start(route_number); !routing.IsEnd(node); - node = solution->Value(routing.NextVar(node))) { - route = StrCat(route, StrCat(node, " -> ")); - } - route = StrCat(route, "0"); - LOG(INFO) << route; - } else { - LOG(INFO) << "No solution found."; - } - } else { - LOG(INFO) << "Specify an instance size greater than 0."; - } - return 0; -}