Remove examples/tests folder (#4971)
This folder was mostly used to store reproducers for issues but were never proper tests.
This commit is contained in:
committed by
Corentin Le Molgat
parent
30a7baee6d
commit
caab346d4d
2
.gitignore
vendored
2
.gitignore
vendored
@@ -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
|
||||
|
||||
@@ -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)
|
||||
|
||||
@@ -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
|
||||
|
||||
1
cmake/vagrant/freebsd/cpp/Vagrantfile
vendored
1
cmake/vagrant/freebsd/cpp/Vagrantfile
vendored
@@ -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/"
|
||||
|
||||
|
||||
1
cmake/vagrant/freebsd/java/Vagrantfile
vendored
1
cmake/vagrant/freebsd/java/Vagrantfile
vendored
@@ -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/"
|
||||
|
||||
|
||||
1
cmake/vagrant/freebsd/python/Vagrantfile
vendored
1
cmake/vagrant/freebsd/python/Vagrantfile
vendored
@@ -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/"
|
||||
|
||||
1
cmake/vagrant/netbsd/cpp/Vagrantfile
vendored
1
cmake/vagrant/netbsd/cpp/Vagrantfile
vendored
@@ -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/"
|
||||
|
||||
|
||||
1
cmake/vagrant/netbsd/dotnet/Vagrantfile
vendored
1
cmake/vagrant/netbsd/dotnet/Vagrantfile
vendored
@@ -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/"
|
||||
|
||||
1
cmake/vagrant/netbsd/java/Vagrantfile
vendored
1
cmake/vagrant/netbsd/java/Vagrantfile
vendored
@@ -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/"
|
||||
|
||||
|
||||
1
cmake/vagrant/netbsd/python/Vagrantfile
vendored
1
cmake/vagrant/netbsd/python/Vagrantfile
vendored
@@ -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/"
|
||||
|
||||
1
cmake/vagrant/openbsd/cpp/Vagrantfile
vendored
1
cmake/vagrant/openbsd/cpp/Vagrantfile
vendored
@@ -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/"
|
||||
|
||||
|
||||
1
cmake/vagrant/openbsd/dotnet/Vagrantfile
vendored
1
cmake/vagrant/openbsd/dotnet/Vagrantfile
vendored
@@ -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/"
|
||||
|
||||
1
cmake/vagrant/openbsd/java/Vagrantfile
vendored
1
cmake/vagrant/openbsd/java/Vagrantfile
vendored
@@ -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/"
|
||||
|
||||
|
||||
1
cmake/vagrant/openbsd/python/Vagrantfile
vendored
1
cmake/vagrant/openbsd/python/Vagrantfile
vendored
@@ -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/"
|
||||
|
||||
@@ -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()
|
||||
@@ -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<int64_t> values1;
|
||||
values1.push_back(10);
|
||||
values1.push_back(2);
|
||||
values1.push_back(12);
|
||||
IntVar* const elem1 = s.MakeElement(values1, x15)->Var();
|
||||
std::vector<int64_t> values2;
|
||||
values2.push_back(2);
|
||||
values2.push_back(10);
|
||||
values2.push_back(5);
|
||||
IntVar* const elem2 = s.MakeElement(values2, x18)->Var();
|
||||
std::vector<IntVar*> vars;
|
||||
vars.push_back(elem1);
|
||||
vars.push_back(is_less);
|
||||
vars.push_back(elem2);
|
||||
std::vector<int64_t> 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;
|
||||
}
|
||||
@@ -1,88 +0,0 @@
|
||||
#include <iostream>
|
||||
#include <memory>
|
||||
#include <unordered_map>
|
||||
#include <vector>
|
||||
|
||||
#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<Foo> p1(new Foo); // p1 owns Foo
|
||||
if (p1) p1->bar();
|
||||
|
||||
{
|
||||
std::unique_ptr<Foo> 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<int> 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<std::string, int> 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<std::pair<int, int>> 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;
|
||||
}
|
||||
@@ -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()
|
||||
@@ -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<int64_t>& starts, std::vector<int64_t>& 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> solver_;
|
||||
IntVar* var_;
|
||||
|
||||
void TestSimpleReductionOnBothSide() {
|
||||
std::cout << "TestSimpleReductionOnBothSide" << std::endl;
|
||||
std::vector<int64_t> starts = {0, 900};
|
||||
std::vector<int64_t> 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<int64_t> starts = {10, 500, 800};
|
||||
std::vector<int64_t> 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<int64_t> starts = {10, 500, 800};
|
||||
std::vector<int64_t> 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;
|
||||
}
|
||||
@@ -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;
|
||||
}
|
||||
@@ -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;
|
||||
@@ -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;
|
||||
@@ -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)
|
||||
@@ -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()
|
||||
@@ -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()
|
||||
@@ -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;
|
||||
}
|
||||
@@ -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;
|
||||
@@ -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<MPSolver> 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;
|
||||
}
|
||||
@@ -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<IntVar> vars = new List<IntVar>();
|
||||
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();
|
||||
}
|
||||
}
|
||||
@@ -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()
|
||||
@@ -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();
|
||||
}
|
||||
}
|
||||
@@ -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())
|
||||
@@ -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<int, int> Durations { get; private set; }
|
||||
public int TaskPosition { get; private set; }
|
||||
|
||||
public Task(int id, int taskType, int locationIndex, int taskPosition, Dictionary<int, int> 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<int, int>();
|
||||
}
|
||||
}
|
||||
|
||||
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<int> 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<int>();
|
||||
}
|
||||
|
||||
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<IntervalVar> Intervals { get; private set; }
|
||||
|
||||
public TaskAlternative(Task t)
|
||||
{
|
||||
Task = t;
|
||||
Intervals = new List<IntervalVar>();
|
||||
}
|
||||
}
|
||||
|
||||
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<IntervalVar>[] 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<IntVar>[] 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<int>[] toolIntervalVar2TaskId;
|
||||
|
||||
/* Tools per task type: taskType2Tool[tt][t]: the t-th tool capable
|
||||
* of doing the tt-th task type */
|
||||
private List<Tool>[] taskType2Tool;
|
||||
|
||||
/* For each task which tools is performed upon */
|
||||
private List<IntVar> selectedTool;
|
||||
public List<IntVar> 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<IntervalVar>[factoryData.NbTools];
|
||||
toolIntervalVar2TaskId = new List<int>[factoryData.NbTools];
|
||||
tool2TransitionTimes = new List<IntVar>[factoryData.NbTools];
|
||||
|
||||
taskType2Tool = new List<Tool>[taskTypes.Length];
|
||||
selectedTool = new List<IntVar>();
|
||||
for (int tt = 0; tt < taskTypes.Length; tt++)
|
||||
taskType2Tool[tt] = new List<Tool>();
|
||||
|
||||
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<IntervalVar>();
|
||||
toolIntervalVar2TaskId[t] = new List<int>();
|
||||
tool2TransitionTimes[t] = new List<IntVar>();
|
||||
}
|
||||
|
||||
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<Tool> 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<IntVar> performedOnTool = new List<IntVar>();
|
||||
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<IntVar> intervalEnds = new List<IntVar>();
|
||||
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();
|
||||
}
|
||||
}
|
||||
@@ -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()
|
||||
@@ -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()
|
||||
@@ -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()
|
||||
@@ -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;
|
||||
}
|
||||
@@ -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()
|
||||
@@ -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<MPVariable*> variables,
|
||||
std::vector<MPConstraint*> 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<double> 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<MPSolver> 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;
|
||||
}
|
||||
@@ -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<IntVar*>& 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<IntVar*>& vars_;
|
||||
};
|
||||
|
||||
class MinArrayCtTestSetToMax : public DecisionBuilder {
|
||||
public:
|
||||
MinArrayCtTestSetToMax(IntExpr* const min, const std::vector<IntVar*>& 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<IntVar*>& vars_;
|
||||
};
|
||||
|
||||
class MinArrayCtTestSetOneVar : public DecisionBuilder {
|
||||
public:
|
||||
MinArrayCtTestSetOneVar(IntExpr* const min, const std::vector<IntVar*>& 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<IntVar*>& 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> solver_;
|
||||
std::vector<IntVar*> vars_;
|
||||
IntExpr* min_;
|
||||
|
||||
void TestAlternateCtor() {
|
||||
SetUp();
|
||||
std::vector<IntVar*> 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<IntVar*> 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<IntVar*> 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<IntVar*> 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<IntVar*> 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<IntVar*>& 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<IntVar*>& vars_;
|
||||
};
|
||||
|
||||
class MaxArrayCtTestSetToMax : public DecisionBuilder {
|
||||
public:
|
||||
MaxArrayCtTestSetToMax(IntExpr* const max, const std::vector<IntVar*>& 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<IntVar*>& vars_;
|
||||
};
|
||||
|
||||
class MaxArrayCtTestSetOneVar : public DecisionBuilder {
|
||||
public:
|
||||
MaxArrayCtTestSetOneVar(IntExpr* const max, const std::vector<IntVar*>& 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<IntVar*>& 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> solver_;
|
||||
std::vector<IntVar*> vars_;
|
||||
IntExpr* max_;
|
||||
|
||||
void TestAlternateCtor() {
|
||||
SetUp();
|
||||
std::vector<IntVar*> 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<IntVar*> 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<IntVar*> 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<IntVar*> 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<IntVar*> 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;
|
||||
}
|
||||
@@ -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
|
||||
|
||||
@@ -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;
|
||||
}
|
||||
@@ -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<int64_t[]> 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<int64_t, int64_t, int64_t>.
|
||||
// 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;
|
||||
}
|
||||
Reference in New Issue
Block a user