- Currently not implemented... Add abseil patch - Add patches/absl-config.cmake Makefile: Add abseil-cpp on unix - Force abseil-cpp SHA1 to 45221cc note: Just before the PR #136 which break all CMake Makefile: Add abseil-cpp on windows - Force abseil-cpp SHA1 to 45221cc note: Just before the PR #136 which break all CMake CMake: Add abseil-cpp - Force abseil-cpp SHA1 to 45221cc note: Just before the PR #136 which break all CMake port to absl: C++ Part - Fix warning with the use of ABSL_MUST_USE_RESULT > The macro must appear as the very first part of a function declaration or definition: ... Note: past advice was to place the macro after the argument list. src: dependencies/sources/abseil-cpp-master/absl/base/attributes.h:418 - Rename enum after windows clash - Remove non compact table constraints - Change index type from int64 to int in routing library - Fix file_nonport compilation on windows - Fix another naming conflict with windows (NO_ERROR is a macro) - Cleanup hash containers; work on sat internals - Add optional_boolean sub-proto Sync cpp examples with internal code - reenable issue173 after reducing number of loops port to absl: Python Part - Add back cp_model.INT32_MIN|MAX for examples Update Python examples - Add random_tsp.py - Run words_square example - Run magic_square in python tests port to absl: Java Part - Fix compilation of the new routing parameters in java - Protect some code from SWIG parsing Update Java Examples port to absl: .Net Part Update .Net examples work on sat internals; Add C++ CP-SAT CpModelBuilder API; update sample code and recipes to use the new API; sync with internal code Remove VS 2015 in Appveyor-CI - abseil-cpp does not support VS 2015... improve tables upgrade C++ sat examples to use the new API; work on sat internals update license dates rewrite jobshop_ft06_distance.py to use the CP-SAT solver rename last example revert last commit more work on SAT internals fix
139 lines
6.3 KiB
Protocol Buffer
139 lines
6.3 KiB
Protocol Buffer
// Copyright 2010-2018 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.
|
|
|
|
// Enums used to define routing parameters.
|
|
|
|
syntax = "proto3";
|
|
option java_package = "com.google.ortools.constraintsolver";
|
|
option java_multiple_files = true;
|
|
option csharp_namespace = "Google.OrTools.ConstraintSolver";
|
|
|
|
package operations_research;
|
|
|
|
// First solution strategies, used as starting point of local search.
|
|
message FirstSolutionStrategy {
|
|
enum Value {
|
|
// See the homonymous value in LocalSearchMetaheuristic.
|
|
UNSET = 0;
|
|
|
|
// Lets the solver detect which strategy to use according to the model being
|
|
// solved.
|
|
AUTOMATIC = 15;
|
|
|
|
// --- Path addition heuristics ---
|
|
// Starting from a route "start" node, connect it to the node which produces
|
|
// the cheapest route segment, then extend the route by iterating on the
|
|
// last node added to the route.
|
|
PATH_CHEAPEST_ARC = 3;
|
|
// Same as PATH_CHEAPEST_ARC, but arcs are evaluated with a comparison-based
|
|
// selector which will favor the most constrained arc first. To assign a
|
|
// selector to the routing model, see
|
|
// RoutingModel::ArcIsMoreConstrainedThanArc() in routing.h for details.
|
|
PATH_MOST_CONSTRAINED_ARC = 4;
|
|
// Same as PATH_CHEAPEST_ARC, except that arc costs are evaluated using the
|
|
// function passed to RoutingModel::SetFirstSolutionEvaluator()
|
|
// (cf. routing.h).
|
|
EVALUATOR_STRATEGY = 5;
|
|
// Savings algorithm (Clarke & Wright).
|
|
// Reference: Clarke, G. & Wright, J.W.:
|
|
// "Scheduling of Vehicles from a Central Depot to a Number of Delivery
|
|
// Points", Operations Research, Vol. 12, 1964, pp. 568-581
|
|
SAVINGS = 10;
|
|
// Sweep algorithm (Wren & Holliday).
|
|
// Reference: Anthony Wren & Alan Holliday: Computer Scheduling of Vehicles
|
|
// from One or More Depots to a Number of Delivery Points Operational
|
|
// Research Quarterly (1970-1977),
|
|
// Vol. 23, No. 3 (Sep., 1972), pp. 333-344
|
|
SWEEP = 11;
|
|
// Christofides algorithm (actually a variant of the Christofides algorithm
|
|
// using a maximal matching instead of a maximum matching, which does
|
|
// not guarantee the 3/2 factor of the approximation on a metric travelling
|
|
// salesman). Works on generic vehicle routing models by extending a route
|
|
// until no nodes can be inserted on it.
|
|
// Reference: Nicos Christofides, Worst-case analysis of a new heuristic for
|
|
// the travelling salesman problem, Report 388, Graduate School of
|
|
// Industrial Administration, CMU, 1976.
|
|
CHRISTOFIDES = 13;
|
|
|
|
// --- Path insertion heuristics ---
|
|
// Make all nodes inactive. Only finds a solution if nodes are optional (are
|
|
// element of a disjunction constraint with a finite penalty cost).
|
|
ALL_UNPERFORMED = 6;
|
|
// Iteratively build a solution by inserting the cheapest node at its
|
|
// cheapest position; the cost of insertion is based on the global cost
|
|
// function of the routing model. As of 2/2012, only works on models with
|
|
// optional nodes (with finite penalty costs).
|
|
BEST_INSERTION = 7;
|
|
// Iteratively build a solution by inserting the cheapest node at its
|
|
// cheapest position; the cost of insertion is based on the arc cost
|
|
// function. Is faster than BEST_INSERTION.
|
|
PARALLEL_CHEAPEST_INSERTION = 8;
|
|
// Iteratively build a solution by constructing routes sequentially, for
|
|
// each route inserting the cheapest node at its cheapest position until the
|
|
// route is completed; the cost of insertion is based on the arc cost
|
|
// function. Is faster than PARALLEL_CHEAPEST_INSERTION.
|
|
SEQUENTIAL_CHEAPEST_INSERTION = 14;
|
|
// Iteratively build a solution by inserting each node at its cheapest
|
|
// position; the cost of insertion is based on the arc cost function.
|
|
// Differs from PARALLEL_CHEAPEST_INSERTION by the node selected for
|
|
// insertion; here nodes are considered in decreasing order of distance to
|
|
// the start/ends of the routes, i.e. farthest nodes are inserted first.
|
|
// Is faster than SEQUENTIAL_CHEAPEST_INSERTION.
|
|
LOCAL_CHEAPEST_INSERTION = 9;
|
|
|
|
// --- Variable-based heuristics ---
|
|
// Iteratively connect two nodes which produce the cheapest route segment.
|
|
GLOBAL_CHEAPEST_ARC = 1;
|
|
// Select the first node with an unbound successor and connect it to the
|
|
// node which produces the cheapest route segment.
|
|
LOCAL_CHEAPEST_ARC = 2;
|
|
// Select the first node with an unbound successor and connect it to the
|
|
// first available node.
|
|
// This is equivalent to the CHOOSE_FIRST_UNBOUND strategy combined with
|
|
// ASSIGN_MIN_VALUE (cf. constraint_solver.h).
|
|
FIRST_UNBOUND_MIN_VALUE = 12;
|
|
}
|
|
}
|
|
|
|
// Local search metaheuristics used to guide the search. Apart from greedy
|
|
// descent, they will try to escape local minima.
|
|
message LocalSearchMetaheuristic {
|
|
enum Value {
|
|
// Means "not set". If the solver sees that, it'll behave like for
|
|
// AUTOMATIC. But this value won't override others upon a proto MergeFrom(),
|
|
// whereas "AUTOMATIC" will.
|
|
UNSET = 0;
|
|
|
|
// Lets the solver select the metaheuristic.
|
|
AUTOMATIC = 6;
|
|
|
|
// Accepts improving (cost-reducing) local search neighbors until a local
|
|
// minimum is reached.
|
|
GREEDY_DESCENT = 1;
|
|
// Uses guided local search to escape local minima
|
|
// (cf. http://en.wikipedia.org/wiki/Guided_Local_Search); this is generally
|
|
// the most efficient metaheuristic for vehicle routing.
|
|
GUIDED_LOCAL_SEARCH = 2;
|
|
// Uses simulated annealing to escape local minima
|
|
// (cf. http://en.wikipedia.org/wiki/Simulated_annealing).
|
|
SIMULATED_ANNEALING = 3;
|
|
// Uses tabu search to escape local minima
|
|
// (cf. http://en.wikipedia.org/wiki/Tabu_search).
|
|
TABU_SEARCH = 4;
|
|
// Uses tabu search on a list of variables to escape local minima. The list
|
|
// of variables to use must be provided via the SetTabuVarsCallback
|
|
// callback.
|
|
GENERIC_TABU_SEARCH = 5;
|
|
}
|
|
}
|