diff --git a/documentation/changes_list.txt b/documentation/changes_list.txt index 151950779b..e1ed90e8cd 100644 --- a/documentation/changes_list.txt +++ b/documentation/changes_list.txt @@ -1,4 +1,22 @@ +v.0.1.13: (2012-09-08 12:51:55) +------------------------------- +The manual has now more than 200 pages. +* Scripts: + generate_manual.py improved. +* Minor enhancements to the manual: + - Intro of chapter 9 to give you an idea of its content. + The links to the tutorial material don't work: this is normal. + + +v.0.1.13: (2012-09-07 14:23:59) +------------------------------- +The manual has now more than 200 pages. +* Scripts: + generate_manual.py improved. +* Minor enhancements to the manual: + + v.0.1.12: (2012-08-31 14:01:23) ------------------------------- * Minor enhancements to the manual: diff --git a/documentation/documentation_hub.html b/documentation/documentation_hub.html index 4d144a5967..03972ad448 100644 --- a/documentation/documentation_hub.html +++ b/documentation/documentation_hub.html @@ -73,12 +73,14 @@ Thank you very much.
Here is a little summary:
-v.0.1.12: (2012-08-31 14:01:23) +v.0.1.13: (2012-09-08 12:51:55) ------------------------------- +The manual has now more than 200 pages. +* Scripts: + generate_manual.py improved. * Minor enhancements to the manual: - - epub: cover and authors added, some corrections. - - minor corrections. - - 5.1, 5.2 and (partially) 5.3 added. + - Intro of chapter 9 to give you an idea of its content. + The links to the tutorial material don't work: this is normal.@@ -101,9 +103,9 @@ We also recommend to use the epub version as it is currently the best available
The third part of this manual deals with Routing Problems: we have a graph[1] and seek +to find a set of routes covering some or all nodes and/or edges/arcs while optimizing an objective function along +the routes[2] (time, goods delivered, etc.) and respecting +certain constraints (number of vehicles, fixed depots, capacities, clients to serve, time windows, etc.).
+| [1] | A graph is a set of vertices (the set ) connected by edges
+(the set ). A directed edge is called an arc. When we have capacities on the edges, we talk
+about a network. |
| [2] | The transportation metaphor is helpful to visualize the problems but the class +of Routing Problems is much broader. The Transportation Problem for instance is really an Assignment Problem. +Networks can be of any type: telephone networks (circuit switching), electronic data +networks (such as the internet), etc. |
To solve these problems, the or-tools offers a dedicated Constraint Programming sub-library: +the Routing Library (RL).
+The next three chapters each deal with one of three broad categories of Routing Problems:
+These three categories of problems share common properties but they all have their +own paradigms and scientific communities.
+In this chapter, we’ll discover the RL with what is probably the most studied problem in Operations Research: +the Travelling Salesman Problem (TSP)[3]. The best algorithms can now routinely +solve TSP instances with then thousands of nodes to optimality[4].
+These problems are out of scope of the Constraint Programming paradigm[5]. CP shines when +you consider complicated side constraints like the addition of time windows: each customer (represented by a node) +has to be visited inside a given time interval.
+| [3] | We use the Canadian (and British) spelling of the verb travelling but you’ll find much more +scientific articles under the American spelling: traveling. |
| [4] | The record at the time of writing is the pla85900 instance in Gerd Reinelt’s +TSPLIB. This instance is a VLSI application +with 85 900 nodes. For many other instances with millions of nodes, solutions can be found that are +guaranteed to be within 1% of an optimal tour! |
| [5] | At least for now and if you try to solve them to optimality. |
Overview:
+We start this chapter by presenting in broad terms the different categories of Routing Problems and describe +the Routing Library (RL) in a nutshell. Next, we introduce the Travelling Salesman Problem (TSP) and the TSPLIB instances. +To better understand the RL, we say a few words about its inner working and the CP model we use. Because most of the +Routing Problems are intractable, we use Local Search. We explain our two phases approach in details and show how +to model the TSP in a few lines. We also show how to solve the TSP to optimality with the RL. Finally, we model and +solve the TSP with Time Windows.
+Prerequisites:
+Files:
+You can find the code in the directory documentation/tutorials/C++/chap9.
+We use the excellent C++[6] ePiX library +to visualize TSP solutions in TSPLIB format and TSPTW solutions in López-Ibáñez-Blum and da Silva-Urrutia formats.
+| [6] | The ePiX library uses the engine to create beautiful graphics. |
The files inside this directory are:
+Content:
To be able to collect only unique solutions (up to a symmetry), we will use SymmetryBreakers -in the section Breaking symmetries with SymmetryBreakers.
+in the section Breaking symmetries (part II): SymmetryBreakers.A boolean gflag FLAGS_use_symmetry allows or disallows the use of SymmetryBreakers. This flag is defined in the header ./nqueens_utilities.h and to be able to use it in our main file, we need to declare it:
DECLARE_bool(use_symmetry);
diff --git a/documentation/user_manual/manual/search_primitives/basic_working1.html b/documentation/user_manual/manual/search_primitives/basic_working1.html
index 1bf77c4517..be08aa78d8 100644
--- a/documentation/user_manual/manual/search_primitives/basic_working1.html
+++ b/documentation/user_manual/manual/search_primitives/basic_working1.html
@@ -82,7 +82,7 @@ when some of the callbacks of the
and a valid index
.
At one node in the search tree, we divide the search space in two exclusive search subspaces by imposing
-
at one branch and
at another branch like in Figure
+
at one branch and
at another branch like in the Figure
The search space is divided in two search sub-trees.
@@ -117,7 +117,7 @@ that is passed as an argument to another code. This is a very common and handy w
example, the search algorithm is low level code. You don’t want to change this code but you would like to change the behaviour of the
search algorithm to your liking. How do you do this? Callbacks are to the rescue! At some places in the low level code,
some functions are called and you can redefine those functions. There are several techniques available. In this section, we redefine
-some virtual functions of an abstract class. In section XXX, we will see yet another similar mechanism.
+some virtual functions of an abstract class. In section XXX, we will see another similar mechanism.
An example will clarify this mechanism. Take a SearchMonitor class. If you want to implement your own search monitor, you
inherit from SearchMonitor and you redefine the methods you need:
class MySearchMonitor: public SearchMonitor {
@@ -158,7 +158,7 @@ A DecisionBuilder is
tree at this node by applying this decision (left branch) and by refuting this decision (right branch).
At the current node, the DecisionBuilder of the current search returns
a Decision. The Decision class basically tells the solver what to do
-going left (Apply()) or right (Refute) as illustrated on the next figure.
+going left (Apply()) or right (Refute()) as illustrated on the next figure.
Apply(): go left, Refute(): go right.
@@ -177,7 +177,7 @@ to implement different variants of the search algorithm.
What is a pre-order traversal of a binary tree?
-The search tree depicted on Figure The actual search tree of our search has
+
The search tree depicted on the Figure The actual search tree of our search has
its node numbered in the order given by a pre-order traversal. There are two other traversals:
in-order and post-order. We invite the curious reader to google pre-order traversal of a tree
to find more. There are a number of applets showing the different traversals.
@@ -578,12 +578,12 @@ algorithm:
case OUTSIDE_SEARCH: {
state_ = IN_ROOT_NODE;
search->BeginInitialPropagation();// SEARCHMONITOR CALLBACKS
- CP_TRY(search) {
+ try {
ProcessConstraints();
search->EndInitialPropagation();// SEARCHMONITOR CALLBACKS
...
state_ = IN_SEARCH;
- } CP_ON_FAIL {
+ } catch(const FailException& e) {
...
state_ = PROBLEM_INFEASIBLE;
return false;
@@ -714,7 +714,8 @@ but these possibilities are not shown here.
-[6] Did we already mention that the try - catch mechanism is not used in the production code?
+[6] Did we already mention that the try - catch mechanism is not used in the production
+code? ;-)
If the Decision pointer fd is not NULL, this means that we have backtracked to the first available (non visited)
diff --git a/documentation/user_manual/manual/search_primitives/breaking_symmetry.html b/documentation/user_manual/manual/search_primitives/breaking_symmetry.html
index 1ff549fe70..ae4fd8a129 100644
--- a/documentation/user_manual/manual/search_primitives/breaking_symmetry.html
+++ b/documentation/user_manual/manual/search_primitives/breaking_symmetry.html
@@ -8,7 +8,7 @@
- 5.8. Breaking symmetries with SymmetryBreakers — or-tools User's Manual
+ 5.8. Breaking symmetries (part II): SymmetryBreakers — or-tools User's Manual
@@ -54,8 +54,8 @@
-
-5.8. Breaking symmetries with SymmetryBreakers
+
+5.8. Breaking symmetries (part II): SymmetryBreakers
@@ -141,7 +141,7 @@ Search:
title="next chapter">5.9. Summary
Current section
-- 5.8. Breaking symmetries with SymmetryBreakers
diff --git a/documentation/user_manual/manual/search_primitives/default_search.html b/documentation/user_manual/manual/search_primitives/default_search.html
index 6511a3c099..2e076fbdc2 100644
--- a/documentation/user_manual/manual/search_primitives/default_search.html
+++ b/documentation/user_manual/manual/search_primitives/default_search.html
@@ -28,7 +28,7 @@
-
+
@@ -39,7 +39,7 @@
index
-
- next |
-
5.6. Customized search primitives
Next section
5.8. Breaking symmetries with SymmetryBreakers
+ title="next chapter">5.8. Breaking symmetries (part II): SymmetryBreakers
@@ -150,7 +150,7 @@ Search:
index
-
- next |
-
-
+