diff --git a/documentation/changes_list.txt b/documentation/changes_list.txt index 30fda5b329..d235897d50 100644 --- a/documentation/changes_list.txt +++ b/documentation/changes_list.txt @@ -1,4 +1,24 @@ +v.0.1.5: (2012-04-30 12:46:04) +------------------------------ +* Major changes in the scripts to generate the doc: + - the scripts have been completely rewritten and the directories + completely rearranged. +* Minor enhancements to the manual: + - html version: several graphic enhancements. + - preface: comments from Hakan (Thanks again and again! ;-) ) + - chap2: + + table with cryptarithmetic puzzle improved in both version. + + figures "at a glance" done anew. + + comments from Hakan. +* FAQ: + - several graphic enhancements. +* Tutorials: + - few corrections in the C++ code. +* Lab sessions: + - chap2: questions posted. + + v.0.1.4: (2012-04-23 22:55:42) ------------------------------ * Major changes in the scripts to generate the doc: diff --git a/documentation/documentation_hub.html b/documentation/documentation_hub.html index 95f66e42fe..425e64f714 100644 --- a/documentation/documentation_hub.html +++ b/documentation/documentation_hub.html @@ -72,17 +72,24 @@ Thank you very much.

What's new?


Here is a little summary:

-
v.0.1.4: (2012-04-23 22:55:42)
+
v.0.1.5: (2012-04-30 12:46:04)
 ------------------------------
 * Major changes in the scripts to generate the doc:
   - the scripts have been completely rewritten and the directories
     completely rearranged.
 * Minor enhancements to the manual:
-  chap3:
-  - a lots of small improvements from Hakan (Thanks again!).
-  - some images resized in html version.
+  - html version: several graphic enhancements.
+  - preface: comments from Hakan (Thanks again and again! ;-) )
+  - chap2:
+    + table with cryptarithmetic puzzle improved in both version.
+    + figures "at a glance" done anew.
+    + comments from Hakan.
+* FAQ:
+  - several graphic enhancements.
 * Tutorials:
   - few corrections in the C++ code.
+* Lab sessions:
+  - chap2: questions posted.
 
 
@@ -97,9 +104,9 @@ Thank you very much.

Progress at a glance:

@@ -341,8 +348,8 @@ Thank you very much. Documentation hub
-
- 95% +
+ 100%
diff --git a/documentation/user_manual/_images/anatomy1.png b/documentation/user_manual/_images/anatomy1.png deleted file mode 100644 index 9bf50db843..0000000000 Binary files a/documentation/user_manual/_images/anatomy1.png and /dev/null differ diff --git a/documentation/user_manual/_images/anatomy1_2.png b/documentation/user_manual/_images/anatomy1_2.png new file mode 100644 index 0000000000..bf416a3101 Binary files /dev/null and b/documentation/user_manual/_images/anatomy1_2.png differ diff --git a/documentation/user_manual/_images/anatomy2.png b/documentation/user_manual/_images/anatomy2.png deleted file mode 100644 index 73b7de157c..0000000000 Binary files a/documentation/user_manual/_images/anatomy2.png and /dev/null differ diff --git a/documentation/user_manual/_images/anatomy3_4.png b/documentation/user_manual/_images/anatomy3_4.png new file mode 100644 index 0000000000..c9f47968ec Binary files /dev/null and b/documentation/user_manual/_images/anatomy3_4.png differ diff --git a/documentation/user_manual/_images/math/02a1f06ac5198ee9c1210aaf6cda82150d29c04c.png b/documentation/user_manual/_images/math/02a1f06ac5198ee9c1210aaf6cda82150d29c04c.png index fdfd803e1a..914f49b1c3 100644 Binary files a/documentation/user_manual/_images/math/02a1f06ac5198ee9c1210aaf6cda82150d29c04c.png and b/documentation/user_manual/_images/math/02a1f06ac5198ee9c1210aaf6cda82150d29c04c.png differ diff --git a/documentation/user_manual/_images/math/0d9f85ba90d8b2b497781f983ddd845cec6a2df2.png b/documentation/user_manual/_images/math/0d9f85ba90d8b2b497781f983ddd845cec6a2df2.png new file mode 100644 index 0000000000..1f122238f3 Binary files /dev/null and b/documentation/user_manual/_images/math/0d9f85ba90d8b2b497781f983ddd845cec6a2df2.png differ diff --git a/documentation/user_manual/_images/math/174fadd07fd54c9afe288e96558c92e0c1da733a.png b/documentation/user_manual/_images/math/174fadd07fd54c9afe288e96558c92e0c1da733a.png index 78341a609e..b8e90cbb6e 100644 Binary files a/documentation/user_manual/_images/math/174fadd07fd54c9afe288e96558c92e0c1da733a.png and b/documentation/user_manual/_images/math/174fadd07fd54c9afe288e96558c92e0c1da733a.png differ diff --git a/documentation/user_manual/_images/math/1802156f8c045c22ccbfaead68d03f8bb45d2659.png b/documentation/user_manual/_images/math/1802156f8c045c22ccbfaead68d03f8bb45d2659.png index 321b3732cc..87bf04dae0 100644 Binary files a/documentation/user_manual/_images/math/1802156f8c045c22ccbfaead68d03f8bb45d2659.png and b/documentation/user_manual/_images/math/1802156f8c045c22ccbfaead68d03f8bb45d2659.png differ diff --git a/documentation/user_manual/_images/math/1819f547a53f667e1a44a49ba2bec08c28d7f222.png b/documentation/user_manual/_images/math/1819f547a53f667e1a44a49ba2bec08c28d7f222.png index 27a5f9cea4..737a45147a 100644 Binary files a/documentation/user_manual/_images/math/1819f547a53f667e1a44a49ba2bec08c28d7f222.png and b/documentation/user_manual/_images/math/1819f547a53f667e1a44a49ba2bec08c28d7f222.png differ diff --git a/documentation/user_manual/_images/math/21ef0b34f891eda9d44a9ec8f96fb7f860d55925.png b/documentation/user_manual/_images/math/21ef0b34f891eda9d44a9ec8f96fb7f860d55925.png index eb6ee1bfdc..f3ac62ef2f 100644 Binary files a/documentation/user_manual/_images/math/21ef0b34f891eda9d44a9ec8f96fb7f860d55925.png and b/documentation/user_manual/_images/math/21ef0b34f891eda9d44a9ec8f96fb7f860d55925.png differ diff --git a/documentation/user_manual/_images/math/22b701bc2dd899be5eb627e42bb246b79917eadb.png b/documentation/user_manual/_images/math/22b701bc2dd899be5eb627e42bb246b79917eadb.png index 71d78d9e20..ce96a32f58 100644 Binary files a/documentation/user_manual/_images/math/22b701bc2dd899be5eb627e42bb246b79917eadb.png and b/documentation/user_manual/_images/math/22b701bc2dd899be5eb627e42bb246b79917eadb.png differ diff --git a/documentation/user_manual/_images/math/26e627f0930e19476169f5e4c5c18251e33668b3.png b/documentation/user_manual/_images/math/26e627f0930e19476169f5e4c5c18251e33668b3.png index a5cefadbea..dec5daaa37 100644 Binary files a/documentation/user_manual/_images/math/26e627f0930e19476169f5e4c5c18251e33668b3.png and b/documentation/user_manual/_images/math/26e627f0930e19476169f5e4c5c18251e33668b3.png differ diff --git a/documentation/user_manual/_images/math/29679f51e9632ea0ee4845b2e4b3ec86ae837bec.png b/documentation/user_manual/_images/math/29679f51e9632ea0ee4845b2e4b3ec86ae837bec.png index 79a546fd4c..1c94b877cf 100644 Binary files a/documentation/user_manual/_images/math/29679f51e9632ea0ee4845b2e4b3ec86ae837bec.png and b/documentation/user_manual/_images/math/29679f51e9632ea0ee4845b2e4b3ec86ae837bec.png differ diff --git a/documentation/user_manual/_images/math/2d3b9cf7c6dea44441c0051389430ee8280f4fa7.png b/documentation/user_manual/_images/math/2d3b9cf7c6dea44441c0051389430ee8280f4fa7.png index 2f7754f850..04495b5645 100644 Binary files a/documentation/user_manual/_images/math/2d3b9cf7c6dea44441c0051389430ee8280f4fa7.png and b/documentation/user_manual/_images/math/2d3b9cf7c6dea44441c0051389430ee8280f4fa7.png differ diff --git a/documentation/user_manual/_images/math/3667c72efcf1abf0a7359a5c297d4affd54b3ed2.png b/documentation/user_manual/_images/math/3667c72efcf1abf0a7359a5c297d4affd54b3ed2.png index ab29a14f85..af50d8a08b 100644 Binary files a/documentation/user_manual/_images/math/3667c72efcf1abf0a7359a5c297d4affd54b3ed2.png and b/documentation/user_manual/_images/math/3667c72efcf1abf0a7359a5c297d4affd54b3ed2.png differ diff --git a/documentation/user_manual/_images/math/3831ee0b9c15616fc1a764b6bd148fda9de9dc70.png b/documentation/user_manual/_images/math/3831ee0b9c15616fc1a764b6bd148fda9de9dc70.png index 1416dd4e75..fea3f3a144 100644 Binary files a/documentation/user_manual/_images/math/3831ee0b9c15616fc1a764b6bd148fda9de9dc70.png and b/documentation/user_manual/_images/math/3831ee0b9c15616fc1a764b6bd148fda9de9dc70.png differ diff --git a/documentation/user_manual/_images/math/39cf3e35a4981583288d2a7c4b34989916fb7360.png b/documentation/user_manual/_images/math/39cf3e35a4981583288d2a7c4b34989916fb7360.png index a03b6c1bb7..13b20635c9 100644 Binary files a/documentation/user_manual/_images/math/39cf3e35a4981583288d2a7c4b34989916fb7360.png and b/documentation/user_manual/_images/math/39cf3e35a4981583288d2a7c4b34989916fb7360.png differ diff --git a/documentation/user_manual/_images/math/3e8c243f94f4e13ca158395f188c47b288c31ebf.png b/documentation/user_manual/_images/math/3e8c243f94f4e13ca158395f188c47b288c31ebf.png index 2aa779874e..4e7e94d497 100644 Binary files a/documentation/user_manual/_images/math/3e8c243f94f4e13ca158395f188c47b288c31ebf.png and b/documentation/user_manual/_images/math/3e8c243f94f4e13ca158395f188c47b288c31ebf.png differ diff --git a/documentation/user_manual/_images/math/443ce50b2e8d8a56d1051f51a2ead55eb19e8591.png b/documentation/user_manual/_images/math/443ce50b2e8d8a56d1051f51a2ead55eb19e8591.png index 7023ec396d..7ee2d33fd3 100644 Binary files a/documentation/user_manual/_images/math/443ce50b2e8d8a56d1051f51a2ead55eb19e8591.png and b/documentation/user_manual/_images/math/443ce50b2e8d8a56d1051f51a2ead55eb19e8591.png differ diff --git a/documentation/user_manual/_images/math/4eb116b498702e1fcf175d2b1e5641edfe5d0221.png b/documentation/user_manual/_images/math/4eb116b498702e1fcf175d2b1e5641edfe5d0221.png index fcd4427411..e9161f322b 100644 Binary files a/documentation/user_manual/_images/math/4eb116b498702e1fcf175d2b1e5641edfe5d0221.png and b/documentation/user_manual/_images/math/4eb116b498702e1fcf175d2b1e5641edfe5d0221.png differ diff --git a/documentation/user_manual/_images/math/50ae01c5c3fe117c6009a8784cd517f8036e6639.png b/documentation/user_manual/_images/math/50ae01c5c3fe117c6009a8784cd517f8036e6639.png index e9ccca38ec..07a2d5a6ea 100644 Binary files a/documentation/user_manual/_images/math/50ae01c5c3fe117c6009a8784cd517f8036e6639.png and b/documentation/user_manual/_images/math/50ae01c5c3fe117c6009a8784cd517f8036e6639.png differ diff --git a/documentation/user_manual/_images/math/5218af40079081e694d8b82eeac2d368ef6ea76a.png b/documentation/user_manual/_images/math/5218af40079081e694d8b82eeac2d368ef6ea76a.png index a03b6c1bb7..13b20635c9 100644 Binary files a/documentation/user_manual/_images/math/5218af40079081e694d8b82eeac2d368ef6ea76a.png and b/documentation/user_manual/_images/math/5218af40079081e694d8b82eeac2d368ef6ea76a.png differ diff --git a/documentation/user_manual/_images/math/53404ad4af12519f95b03c74a1c7af0d609baa8e.png b/documentation/user_manual/_images/math/53404ad4af12519f95b03c74a1c7af0d609baa8e.png index 7850542fb3..1240f2a18a 100644 Binary files a/documentation/user_manual/_images/math/53404ad4af12519f95b03c74a1c7af0d609baa8e.png and b/documentation/user_manual/_images/math/53404ad4af12519f95b03c74a1c7af0d609baa8e.png differ diff --git a/documentation/user_manual/_images/math/601a7806cbfad68196c43a4665871f8c3186802e.png b/documentation/user_manual/_images/math/601a7806cbfad68196c43a4665871f8c3186802e.png index 92ce32b315..59ba406fbd 100644 Binary files a/documentation/user_manual/_images/math/601a7806cbfad68196c43a4665871f8c3186802e.png and b/documentation/user_manual/_images/math/601a7806cbfad68196c43a4665871f8c3186802e.png differ diff --git a/documentation/user_manual/_images/math/6322338c6a88c2c42320ad37bef583ffeb23b0bb.png b/documentation/user_manual/_images/math/6322338c6a88c2c42320ad37bef583ffeb23b0bb.png index 9449cdbd00..954c7a6355 100644 Binary files a/documentation/user_manual/_images/math/6322338c6a88c2c42320ad37bef583ffeb23b0bb.png and b/documentation/user_manual/_images/math/6322338c6a88c2c42320ad37bef583ffeb23b0bb.png differ diff --git a/documentation/user_manual/_images/math/656f4355e5c978684a86169e5444aed14fd00735.png b/documentation/user_manual/_images/math/656f4355e5c978684a86169e5444aed14fd00735.png index 36f58b5830..aaa395fc28 100644 Binary files a/documentation/user_manual/_images/math/656f4355e5c978684a86169e5444aed14fd00735.png and b/documentation/user_manual/_images/math/656f4355e5c978684a86169e5444aed14fd00735.png differ diff --git a/documentation/user_manual/_images/math/65b572143ef64e24707414197ab3ff0acaf95aa3.png b/documentation/user_manual/_images/math/65b572143ef64e24707414197ab3ff0acaf95aa3.png index 985e94f3af..98344ab813 100644 Binary files a/documentation/user_manual/_images/math/65b572143ef64e24707414197ab3ff0acaf95aa3.png and b/documentation/user_manual/_images/math/65b572143ef64e24707414197ab3ff0acaf95aa3.png differ diff --git a/documentation/user_manual/_images/math/67c4555c837d711a45a3e1af64caafc004600eee.png b/documentation/user_manual/_images/math/67c4555c837d711a45a3e1af64caafc004600eee.png index c4230308c9..cf7cd22fd8 100644 Binary files a/documentation/user_manual/_images/math/67c4555c837d711a45a3e1af64caafc004600eee.png and b/documentation/user_manual/_images/math/67c4555c837d711a45a3e1af64caafc004600eee.png differ diff --git a/documentation/user_manual/_images/math/6c3eabdda7802e47a6fb72984f523bf152ef5dfd.png b/documentation/user_manual/_images/math/6c3eabdda7802e47a6fb72984f523bf152ef5dfd.png index 392e20c604..6cd5f8ee39 100644 Binary files a/documentation/user_manual/_images/math/6c3eabdda7802e47a6fb72984f523bf152ef5dfd.png and b/documentation/user_manual/_images/math/6c3eabdda7802e47a6fb72984f523bf152ef5dfd.png differ diff --git a/documentation/user_manual/_images/math/70b2051e92267b47e16baf8a4805f448e79b8f98.png b/documentation/user_manual/_images/math/70b2051e92267b47e16baf8a4805f448e79b8f98.png index cacbbcbc15..5f3401c2c4 100644 Binary files a/documentation/user_manual/_images/math/70b2051e92267b47e16baf8a4805f448e79b8f98.png and b/documentation/user_manual/_images/math/70b2051e92267b47e16baf8a4805f448e79b8f98.png differ diff --git a/documentation/user_manual/_images/math/71b9c607ad0e3dce5f1994abf9cb7779e17f1b91.png b/documentation/user_manual/_images/math/71b9c607ad0e3dce5f1994abf9cb7779e17f1b91.png index db9ac5295e..853261a5c4 100644 Binary files a/documentation/user_manual/_images/math/71b9c607ad0e3dce5f1994abf9cb7779e17f1b91.png and b/documentation/user_manual/_images/math/71b9c607ad0e3dce5f1994abf9cb7779e17f1b91.png differ diff --git a/documentation/user_manual/_images/math/73cd37e4a19d777de33d09845672bf7430b7f2c9.png b/documentation/user_manual/_images/math/73cd37e4a19d777de33d09845672bf7430b7f2c9.png index 1fdfaeedb8..2adaf94100 100644 Binary files a/documentation/user_manual/_images/math/73cd37e4a19d777de33d09845672bf7430b7f2c9.png and b/documentation/user_manual/_images/math/73cd37e4a19d777de33d09845672bf7430b7f2c9.png differ diff --git a/documentation/user_manual/_images/math/78ba869bfa5df8e9b54022e31800ae646342ca84.png b/documentation/user_manual/_images/math/78ba869bfa5df8e9b54022e31800ae646342ca84.png index 2da218eca7..520982bc8e 100644 Binary files a/documentation/user_manual/_images/math/78ba869bfa5df8e9b54022e31800ae646342ca84.png and b/documentation/user_manual/_images/math/78ba869bfa5df8e9b54022e31800ae646342ca84.png differ diff --git a/documentation/user_manual/_images/math/79069377f91364c2f87a64e5f9f562a091c8a6c1.png b/documentation/user_manual/_images/math/79069377f91364c2f87a64e5f9f562a091c8a6c1.png index 764ee17cec..a4062a9542 100644 Binary files a/documentation/user_manual/_images/math/79069377f91364c2f87a64e5f9f562a091c8a6c1.png and b/documentation/user_manual/_images/math/79069377f91364c2f87a64e5f9f562a091c8a6c1.png differ diff --git a/documentation/user_manual/_images/math/7955459cf8b75c3ac12c23c393024177d7d56412.png b/documentation/user_manual/_images/math/7955459cf8b75c3ac12c23c393024177d7d56412.png index 13d2268213..0b93e11b77 100644 Binary files a/documentation/user_manual/_images/math/7955459cf8b75c3ac12c23c393024177d7d56412.png and b/documentation/user_manual/_images/math/7955459cf8b75c3ac12c23c393024177d7d56412.png differ diff --git a/documentation/user_manual/_images/math/7a03116e0235065914fdb54d1b30c5d6383cdf43.png b/documentation/user_manual/_images/math/7a03116e0235065914fdb54d1b30c5d6383cdf43.png index abbe3f2804..a07a4ef705 100644 Binary files a/documentation/user_manual/_images/math/7a03116e0235065914fdb54d1b30c5d6383cdf43.png and b/documentation/user_manual/_images/math/7a03116e0235065914fdb54d1b30c5d6383cdf43.png differ diff --git a/documentation/user_manual/_images/math/7ca098493594079f39bf0a7b50d859d1d8a7decc.png b/documentation/user_manual/_images/math/7ca098493594079f39bf0a7b50d859d1d8a7decc.png index f81759d691..7583991576 100644 Binary files a/documentation/user_manual/_images/math/7ca098493594079f39bf0a7b50d859d1d8a7decc.png and b/documentation/user_manual/_images/math/7ca098493594079f39bf0a7b50d859d1d8a7decc.png differ diff --git a/documentation/user_manual/_images/math/7f3c0d03225cdc3cc82b59a8f511bfdd34dcadcc.png b/documentation/user_manual/_images/math/7f3c0d03225cdc3cc82b59a8f511bfdd34dcadcc.png index 22407eb005..6eedfa6ae8 100644 Binary files a/documentation/user_manual/_images/math/7f3c0d03225cdc3cc82b59a8f511bfdd34dcadcc.png and b/documentation/user_manual/_images/math/7f3c0d03225cdc3cc82b59a8f511bfdd34dcadcc.png differ diff --git a/documentation/user_manual/_images/math/80184e4cfaf5d02abb6c882519ae7ce64e8d8587.png b/documentation/user_manual/_images/math/80184e4cfaf5d02abb6c882519ae7ce64e8d8587.png index a7201639f1..1113da8dd8 100644 Binary files a/documentation/user_manual/_images/math/80184e4cfaf5d02abb6c882519ae7ce64e8d8587.png and b/documentation/user_manual/_images/math/80184e4cfaf5d02abb6c882519ae7ce64e8d8587.png differ diff --git a/documentation/user_manual/_images/math/811408a46dd1a6f44fbc9f58c8b41b5f0f40f2df.png b/documentation/user_manual/_images/math/811408a46dd1a6f44fbc9f58c8b41b5f0f40f2df.png index afe5268ac2..c5a1964337 100644 Binary files a/documentation/user_manual/_images/math/811408a46dd1a6f44fbc9f58c8b41b5f0f40f2df.png and b/documentation/user_manual/_images/math/811408a46dd1a6f44fbc9f58c8b41b5f0f40f2df.png differ diff --git a/documentation/user_manual/_images/math/884c12c8169b77e2bb8f0b522112c34aa5c41ac4.png b/documentation/user_manual/_images/math/884c12c8169b77e2bb8f0b522112c34aa5c41ac4.png index e93172f9a6..18376d5caf 100644 Binary files a/documentation/user_manual/_images/math/884c12c8169b77e2bb8f0b522112c34aa5c41ac4.png and b/documentation/user_manual/_images/math/884c12c8169b77e2bb8f0b522112c34aa5c41ac4.png differ diff --git a/documentation/user_manual/_images/math/887919dfbc86eebc29e0373f98f97dbf23a0ae23.png b/documentation/user_manual/_images/math/887919dfbc86eebc29e0373f98f97dbf23a0ae23.png index 300312044d..271f9424c9 100644 Binary files a/documentation/user_manual/_images/math/887919dfbc86eebc29e0373f98f97dbf23a0ae23.png and b/documentation/user_manual/_images/math/887919dfbc86eebc29e0373f98f97dbf23a0ae23.png differ diff --git a/documentation/user_manual/_images/math/8f6f6f3b9065e970e7d5f9b684f7022229dcbd91.png b/documentation/user_manual/_images/math/8f6f6f3b9065e970e7d5f9b684f7022229dcbd91.png index e7b8af597d..f287d4256c 100644 Binary files a/documentation/user_manual/_images/math/8f6f6f3b9065e970e7d5f9b684f7022229dcbd91.png and b/documentation/user_manual/_images/math/8f6f6f3b9065e970e7d5f9b684f7022229dcbd91.png differ diff --git a/documentation/user_manual/_images/math/8f76a4c9b2e1d0a7eb2016aefa4a26a464143d12.png b/documentation/user_manual/_images/math/8f76a4c9b2e1d0a7eb2016aefa4a26a464143d12.png index 94c62ad962..884705bb3b 100644 Binary files a/documentation/user_manual/_images/math/8f76a4c9b2e1d0a7eb2016aefa4a26a464143d12.png and b/documentation/user_manual/_images/math/8f76a4c9b2e1d0a7eb2016aefa4a26a464143d12.png differ diff --git a/documentation/user_manual/_images/math/907352b70265a69f82789ffe38e58913c04dced6.png b/documentation/user_manual/_images/math/907352b70265a69f82789ffe38e58913c04dced6.png index a04c6a6279..329fe05af0 100644 Binary files a/documentation/user_manual/_images/math/907352b70265a69f82789ffe38e58913c04dced6.png and b/documentation/user_manual/_images/math/907352b70265a69f82789ffe38e58913c04dced6.png differ diff --git a/documentation/user_manual/_images/math/90fb0c8e5c45e248d9a1f8b1d1e76022f55307d2.png b/documentation/user_manual/_images/math/90fb0c8e5c45e248d9a1f8b1d1e76022f55307d2.png index d858e53f89..934764769d 100644 Binary files a/documentation/user_manual/_images/math/90fb0c8e5c45e248d9a1f8b1d1e76022f55307d2.png and b/documentation/user_manual/_images/math/90fb0c8e5c45e248d9a1f8b1d1e76022f55307d2.png differ diff --git a/documentation/user_manual/_images/math/91b57f317a08928150981174b55863495f6b6d67.png b/documentation/user_manual/_images/math/91b57f317a08928150981174b55863495f6b6d67.png index fd0e61ad83..221fec51c4 100644 Binary files a/documentation/user_manual/_images/math/91b57f317a08928150981174b55863495f6b6d67.png and b/documentation/user_manual/_images/math/91b57f317a08928150981174b55863495f6b6d67.png differ diff --git a/documentation/user_manual/_images/math/9854f9ef09e2887ed125452d67e9d1c0879df9a5.png b/documentation/user_manual/_images/math/9854f9ef09e2887ed125452d67e9d1c0879df9a5.png index 9ff3fe999e..4a5f9be89c 100644 Binary files a/documentation/user_manual/_images/math/9854f9ef09e2887ed125452d67e9d1c0879df9a5.png and b/documentation/user_manual/_images/math/9854f9ef09e2887ed125452d67e9d1c0879df9a5.png differ diff --git a/documentation/user_manual/_images/math/9cecbbeba63daadf452b55fc1c51e38e31c10ac0.png b/documentation/user_manual/_images/math/9cecbbeba63daadf452b55fc1c51e38e31c10ac0.png index 8c965ac8ee..0427929e13 100644 Binary files a/documentation/user_manual/_images/math/9cecbbeba63daadf452b55fc1c51e38e31c10ac0.png and b/documentation/user_manual/_images/math/9cecbbeba63daadf452b55fc1c51e38e31c10ac0.png differ diff --git a/documentation/user_manual/_images/math/a2008d79b75cc529cf35323b1a166a899f7dc312.png b/documentation/user_manual/_images/math/a2008d79b75cc529cf35323b1a166a899f7dc312.png index d62614ffd7..9b32052cbe 100644 Binary files a/documentation/user_manual/_images/math/a2008d79b75cc529cf35323b1a166a899f7dc312.png and b/documentation/user_manual/_images/math/a2008d79b75cc529cf35323b1a166a899f7dc312.png differ diff --git a/documentation/user_manual/_images/math/a972d7535636c34ce7a0b44e80109d15288a72f6.png b/documentation/user_manual/_images/math/a972d7535636c34ce7a0b44e80109d15288a72f6.png index 762e06c549..c7fc54cc07 100644 Binary files a/documentation/user_manual/_images/math/a972d7535636c34ce7a0b44e80109d15288a72f6.png and b/documentation/user_manual/_images/math/a972d7535636c34ce7a0b44e80109d15288a72f6.png differ diff --git a/documentation/user_manual/_images/math/af653c84a8859ae2494c58e015ad9e94231eb505.png b/documentation/user_manual/_images/math/af653c84a8859ae2494c58e015ad9e94231eb505.png deleted file mode 100644 index 3eb6bd5d4d..0000000000 Binary files a/documentation/user_manual/_images/math/af653c84a8859ae2494c58e015ad9e94231eb505.png and /dev/null differ diff --git a/documentation/user_manual/_images/math/b859ee6fa1ef60123e1bbaa50dfc6e982077ea87.png b/documentation/user_manual/_images/math/b859ee6fa1ef60123e1bbaa50dfc6e982077ea87.png index 80eb88b03f..5833485ac2 100644 Binary files a/documentation/user_manual/_images/math/b859ee6fa1ef60123e1bbaa50dfc6e982077ea87.png and b/documentation/user_manual/_images/math/b859ee6fa1ef60123e1bbaa50dfc6e982077ea87.png differ diff --git a/documentation/user_manual/_images/math/bc1f9d9bf8a1b606a4188b5ce9a2af1809e27a89.png b/documentation/user_manual/_images/math/bc1f9d9bf8a1b606a4188b5ce9a2af1809e27a89.png index e901518396..5c2b0d6d9f 100644 Binary files a/documentation/user_manual/_images/math/bc1f9d9bf8a1b606a4188b5ce9a2af1809e27a89.png and b/documentation/user_manual/_images/math/bc1f9d9bf8a1b606a4188b5ce9a2af1809e27a89.png differ diff --git a/documentation/user_manual/_images/math/bda00d9a38a0c6bd9aac2512c6d065581882d43c.png b/documentation/user_manual/_images/math/bda00d9a38a0c6bd9aac2512c6d065581882d43c.png index 1ee1163dc7..6aee81827a 100644 Binary files a/documentation/user_manual/_images/math/bda00d9a38a0c6bd9aac2512c6d065581882d43c.png and b/documentation/user_manual/_images/math/bda00d9a38a0c6bd9aac2512c6d065581882d43c.png differ diff --git a/documentation/user_manual/_images/math/bf2c9074b396e3af0dea52d792660eea1c77f10f.png b/documentation/user_manual/_images/math/bf2c9074b396e3af0dea52d792660eea1c77f10f.png index c0fcc1be68..81acbdee67 100644 Binary files a/documentation/user_manual/_images/math/bf2c9074b396e3af0dea52d792660eea1c77f10f.png and b/documentation/user_manual/_images/math/bf2c9074b396e3af0dea52d792660eea1c77f10f.png differ diff --git a/documentation/user_manual/_images/math/bf6fccb6e87ec7d41e0a872e346bc93e18b1f192.png b/documentation/user_manual/_images/math/bf6fccb6e87ec7d41e0a872e346bc93e18b1f192.png index 72dfd96975..f3e321e965 100644 Binary files a/documentation/user_manual/_images/math/bf6fccb6e87ec7d41e0a872e346bc93e18b1f192.png and b/documentation/user_manual/_images/math/bf6fccb6e87ec7d41e0a872e346bc93e18b1f192.png differ diff --git a/documentation/user_manual/_images/math/c0ee9fc05714a1e6c25908878d9b33acffbbb2c1.png b/documentation/user_manual/_images/math/c0ee9fc05714a1e6c25908878d9b33acffbbb2c1.png index 681e5c5063..a28c8f6022 100644 Binary files a/documentation/user_manual/_images/math/c0ee9fc05714a1e6c25908878d9b33acffbbb2c1.png and b/documentation/user_manual/_images/math/c0ee9fc05714a1e6c25908878d9b33acffbbb2c1.png differ diff --git a/documentation/user_manual/_images/math/c1d952598000cf900d21f6e5054c1fc4237d2282.png b/documentation/user_manual/_images/math/c1d952598000cf900d21f6e5054c1fc4237d2282.png index 572e223078..2e31e3616f 100644 Binary files a/documentation/user_manual/_images/math/c1d952598000cf900d21f6e5054c1fc4237d2282.png and b/documentation/user_manual/_images/math/c1d952598000cf900d21f6e5054c1fc4237d2282.png differ diff --git a/documentation/user_manual/_images/math/c33e393c537ec80d03521b53644847c12de37c66.png b/documentation/user_manual/_images/math/c33e393c537ec80d03521b53644847c12de37c66.png index ef1aaca3ed..3ae762d658 100644 Binary files a/documentation/user_manual/_images/math/c33e393c537ec80d03521b53644847c12de37c66.png and b/documentation/user_manual/_images/math/c33e393c537ec80d03521b53644847c12de37c66.png differ diff --git a/documentation/user_manual/_images/math/c6878713578626763c38433b3f4c8c2205ad0c15.png b/documentation/user_manual/_images/math/c6878713578626763c38433b3f4c8c2205ad0c15.png index 4a3c0a624f..e7815111ee 100644 Binary files a/documentation/user_manual/_images/math/c6878713578626763c38433b3f4c8c2205ad0c15.png and b/documentation/user_manual/_images/math/c6878713578626763c38433b3f4c8c2205ad0c15.png differ diff --git a/documentation/user_manual/_images/math/c7cab1a05e1e0c1d51a6a219d96577a16b7abf9d.png b/documentation/user_manual/_images/math/c7cab1a05e1e0c1d51a6a219d96577a16b7abf9d.png index cd0991813c..68059a1c05 100644 Binary files a/documentation/user_manual/_images/math/c7cab1a05e1e0c1d51a6a219d96577a16b7abf9d.png and b/documentation/user_manual/_images/math/c7cab1a05e1e0c1d51a6a219d96577a16b7abf9d.png differ diff --git a/documentation/user_manual/_images/math/cb446ee2b5cf82811436022be4db770e5b32ca1c.png b/documentation/user_manual/_images/math/cb446ee2b5cf82811436022be4db770e5b32ca1c.png index 239507931d..b55599a21d 100644 Binary files a/documentation/user_manual/_images/math/cb446ee2b5cf82811436022be4db770e5b32ca1c.png and b/documentation/user_manual/_images/math/cb446ee2b5cf82811436022be4db770e5b32ca1c.png differ diff --git a/documentation/user_manual/_images/math/cdb5a7c36506631cce673e83f91f85c5ae55c604.png b/documentation/user_manual/_images/math/cdb5a7c36506631cce673e83f91f85c5ae55c604.png index 5d622d1ada..1931a5529c 100644 Binary files a/documentation/user_manual/_images/math/cdb5a7c36506631cce673e83f91f85c5ae55c604.png and b/documentation/user_manual/_images/math/cdb5a7c36506631cce673e83f91f85c5ae55c604.png differ diff --git a/documentation/user_manual/_images/math/ce58e4af225c93d08606c26554caaa5ae32edeba.png b/documentation/user_manual/_images/math/ce58e4af225c93d08606c26554caaa5ae32edeba.png index b18a12dc99..8f2ad62d4d 100644 Binary files a/documentation/user_manual/_images/math/ce58e4af225c93d08606c26554caaa5ae32edeba.png and b/documentation/user_manual/_images/math/ce58e4af225c93d08606c26554caaa5ae32edeba.png differ diff --git a/documentation/user_manual/_images/math/d021efbf1bdc3991bcae725ecf641e473a84ad6a.png b/documentation/user_manual/_images/math/d021efbf1bdc3991bcae725ecf641e473a84ad6a.png index 6ea4853a7d..5f848589a2 100644 Binary files a/documentation/user_manual/_images/math/d021efbf1bdc3991bcae725ecf641e473a84ad6a.png and b/documentation/user_manual/_images/math/d021efbf1bdc3991bcae725ecf641e473a84ad6a.png differ diff --git a/documentation/user_manual/_images/math/d1e635eb590829b488cf300af12cf0bdda6dae03.png b/documentation/user_manual/_images/math/d1e635eb590829b488cf300af12cf0bdda6dae03.png index 01396a4ee7..f1a3425570 100644 Binary files a/documentation/user_manual/_images/math/d1e635eb590829b488cf300af12cf0bdda6dae03.png and b/documentation/user_manual/_images/math/d1e635eb590829b488cf300af12cf0bdda6dae03.png differ diff --git a/documentation/user_manual/_images/math/de3d6be914b10a36aa1a46bdc0d2b7587b58ebf0.png b/documentation/user_manual/_images/math/de3d6be914b10a36aa1a46bdc0d2b7587b58ebf0.png index c05e646c97..88ae0f6420 100644 Binary files a/documentation/user_manual/_images/math/de3d6be914b10a36aa1a46bdc0d2b7587b58ebf0.png and b/documentation/user_manual/_images/math/de3d6be914b10a36aa1a46bdc0d2b7587b58ebf0.png differ diff --git a/documentation/user_manual/_images/math/e4654b3881c9f67ba35785b1027bc4e5f11de0a9.png b/documentation/user_manual/_images/math/e4654b3881c9f67ba35785b1027bc4e5f11de0a9.png index ce26a17618..d0f450767c 100644 Binary files a/documentation/user_manual/_images/math/e4654b3881c9f67ba35785b1027bc4e5f11de0a9.png and b/documentation/user_manual/_images/math/e4654b3881c9f67ba35785b1027bc4e5f11de0a9.png differ diff --git a/documentation/user_manual/_images/math/eb643c8ee8f3686fbaa86cf68eb7e8d4b281db6e.png b/documentation/user_manual/_images/math/eb643c8ee8f3686fbaa86cf68eb7e8d4b281db6e.png index 7850542fb3..1240f2a18a 100644 Binary files a/documentation/user_manual/_images/math/eb643c8ee8f3686fbaa86cf68eb7e8d4b281db6e.png and b/documentation/user_manual/_images/math/eb643c8ee8f3686fbaa86cf68eb7e8d4b281db6e.png differ diff --git a/documentation/user_manual/_images/math/ec8733fe984f502b1c6bb5f70c9c048765130193.png b/documentation/user_manual/_images/math/ec8733fe984f502b1c6bb5f70c9c048765130193.png index d45dd8709e..d54200b06c 100644 Binary files a/documentation/user_manual/_images/math/ec8733fe984f502b1c6bb5f70c9c048765130193.png and b/documentation/user_manual/_images/math/ec8733fe984f502b1c6bb5f70c9c048765130193.png differ diff --git a/documentation/user_manual/_images/math/eec74ab2ca83865096af94ada03733d24295a2f2.png b/documentation/user_manual/_images/math/eec74ab2ca83865096af94ada03733d24295a2f2.png index 7f4924acec..cd5a5d3ddd 100644 Binary files a/documentation/user_manual/_images/math/eec74ab2ca83865096af94ada03733d24295a2f2.png and b/documentation/user_manual/_images/math/eec74ab2ca83865096af94ada03733d24295a2f2.png differ diff --git a/documentation/user_manual/_images/math/fc53204fb8443e399c9cdd4a4d1008c574c1d87a.png b/documentation/user_manual/_images/math/fc53204fb8443e399c9cdd4a4d1008c574c1d87a.png index 9f47d5b116..3f474829b2 100644 Binary files a/documentation/user_manual/_images/math/fc53204fb8443e399c9cdd4a4d1008c574c1d87a.png and b/documentation/user_manual/_images/math/fc53204fb8443e399c9cdd4a4d1008c574c1d87a.png differ diff --git a/documentation/user_manual/index.html b/documentation/user_manual/index.html index 3d97ed314b..a808221b35 100644 --- a/documentation/user_manual/index.html +++ b/documentation/user_manual/index.html @@ -169,7 +169,7 @@ and how to use the full potential of our library.

What you will not learn in this document

This document is by no means a tutorial on Operations Research nor on Contraint Programming. It is also NOT a reference manual (refer to the documentation hub to find the reference manual). -There are way too many methods, parameters, functions, . . . to explain them all in details. Once +There are way too many methods, parameters, functions, etc. to explain them all in details. Once you understand the concepts and methods explained in this manual, you shouldn’t have any trouble scanning the reference manual and find the right method, parameter, function, . . . or code them yourselves!

@@ -177,7 +177,8 @@ them yourselves!

questions about the non-CP part of the library, don’t hesitate to ask them on the mailing list. See the section How to reach us? below.

This document will not describe how to use the library (and the syntactic sugar introduced when -possible) with Python, Java nor C#. This could possibly change in the future.

+possible) with Python, Java nor C#. This could possibly change in the future. The tutorial examples +(see below) exist also in Python, Java and C# though.

How to read this document?

@@ -190,7 +191,7 @@ probably the most efficient and rewarding one!

That said, the manual is kept short so that you can read it in its entirety. The first part (Basics) is an introduction on how to use the CP solver to solve small problems. For real problems, you need to customize your search and this is explained in the second part (Customization). If you are -interested in the routing part of the library, the third part if for you (Routing). Finally, some utilities +interested in the routing part of the library, the third part is for you (Routing). Finally, some utilities and tricks are explained in the appendices.

diff --git a/documentation/user_manual/manual/first_steps.html b/documentation/user_manual/manual/first_steps.html index 0ad533e95c..482b587102 100644 --- a/documentation/user_manual/manual/first_steps.html +++ b/documentation/user_manual/manual/first_steps.html @@ -71,8 +71,8 @@ about the other supported languages (Python, Java and C#).

steps to write a basic program.

Prerequisites:

Files:

You can find the code in the directory documentation/tutorials/C++/chap2.

diff --git a/documentation/user_manual/manual/first_steps/anatomy.html b/documentation/user_manual/manual/first_steps/anatomy.html index 6d793e920d..fea0a09fea 100644 --- a/documentation/user_manual/manual/first_steps/anatomy.html +++ b/documentation/user_manual/manual/first_steps/anatomy.html @@ -63,8 +63,8 @@ the cryptarithmetic puzzle in C++. In the next chapters, we will cover some of t in more details.

2.3.1. At a glance

-../../_images/anatomy1.png -../../_images/anatomy2.png +../../_images/anatomy1_2.png +../../_images/anatomy3_4.png

2.3.2. Headers

@@ -75,7 +75,13 @@ in more details.

The header logging.h is needed for some logging facilities and some assert-like macros. The header constraint_solver.h is the main entry point -to the CP solver and must be includedfootnote{Directly or indirectly when it is included in another header you include.} whenever you intend to use it.

+to the CP solver and must be included[1] whenever you intend to use it.

+ + + + + +
[1]Directly or indirectly when it is included in another header you include.

2.3.3. The namespace operations_research

@@ -95,7 +101,7 @@ the same convention in all our examples and code inside this namespace:

MakeBaseLine2, MakeBaseLine3 and MakeBaseLine4 are helper functions to create the model.

We detail these functions later in Constraints but for the moment, let’s concentrate on CPIsFun() where all the magic happens.

-

It is called from the main[1] +

It is called from the main[2] function:

int main(int argc, char **argv) {
   operations_research::CPIsFun();
@@ -106,7 +112,7 @@ function:

- @@ -135,11 +141,11 @@ functionalities.

IntVar*conste=solver.MakeIntVar(0,kBase-1,"E"); -

For each letter, we create an integer variable IntVar whose domain is [0,\mathtt{kBase} - 1] +

For each letter, we create an integer variable IntVar whose domain is [0,\mathtt{kBase} - 1] except for the variables c, i, f and t that cannot take the value 0. The MakeIntVar(i, j, name) method is a factory method that creates an integer variable whose domain is [i,j]=\{i, i+1, \dotsc
-, j-1, j\} and has a name name. It returns a pointer to an IntVar. The declaration IntVar* const c +, j-1, j\}" style="vertical-align: -5px"/> and has a name name. It returns a pointer to an IntVar. The declaration IntVar* const c may seem a little be complicated at first. It is easier to understand if read from right to left: c is a constant pointer to an IntVar. We can modify the object pointed by c but this pointer, because it is constant, always refers to the same object.

@@ -154,12 +160,12 @@ them appropriately.

Warning

Never delete explicitly an object created by a factory method! First, the solver deletes all the objects for you. -Second, deleting a pointer twice in C++ gives undefined behaviour[2]!

+Second, deleting a pointer twice in C++ gives undefined behaviour[3]!

[1]The main function does not lie inside the namespace +
[2]The main function does not lie inside the namespace operations_research, hence the use of the operations_research identifier to call the function CPIsFun().
- +
[2]It is possible to bypass the undefined behaviour but you don’t know what the solver needs to do, so keep your hands off of the object pointers! ;-)
[3]It is possible to bypass the undefined behaviour but you don’t know what the solver needs to do, so keep your hands off of the object pointers! ;-)

Beside integer variables, the solver provides factory methods to create @@ -184,13 +190,14 @@ Aborted

In Asserting, we cover assert-like macros in more details.

-

2.3.7. Constraints

-

To create a integer linear constraint, we need to know how to multiply an integer variable +

2.3.7. Constraints

+

To create an integer linear constraint, we need to know how to multiply an integer variable with an integer constant and how to add two integer variables. We have seen that the solver creates a variable and only provides a pointer to that variable. The solver also provides factory methods to multiply an integer coefficient by an IntVar given by a pointer:

IntVar* const var1 = solver.MakeIntVar(0, 1, "Var1");
+// var2 = var1 * 36
 IntVar* const var2 = solver.MakeProd(var1,36)->Var();
 
@@ -202,7 +209,8 @@ any integer expression.

to an IntVar and then the integer constant.

To add two IntVar given by their respective pointers, the solver provides again a factory method:

-
IntVar* const var3 = solver.MakeSum(var1,var2)->Var();
+
//var3 = var1 + var2
+IntVar* const var3 = solver.MakeSum(var1,var2)->Var();
 
diff --git a/documentation/user_manual/manual/first_steps/cryptarithmetic.html b/documentation/user_manual/manual/first_steps/cryptarithmetic.html index 843e2426fa..d6a722db38 100644 --- a/documentation/user_manual/manual/first_steps/cryptarithmetic.html +++ b/documentation/user_manual/manual/first_steps/cryptarithmetic.html @@ -110,7 +110,7 @@ have different values in a feasible solution. Second, it is implicit that the fi digit of a number can not be 0. Letters C, I, F and T can thus not represent 0. Third, there are 10 letters, so we need at least 10 different digits. The traditional decimal base is sufficient but let’s be more general -and allow for a bigger base. We will use a constant kBase. This last constraint is not a CP constraint. +and allow for a bigger base. We will use a constant kBase. The fact that we need at least 10 digits is not really a CP constraint. After all, the base is not a variable but a given integer that is chosen once and for all for the whole program[2].

@@ -127,17 +127,20 @@ puzzle has less than xFor each letter, we have a decision variable (we keep the same letters to name the variables). Given a base b, digits range from 0 to b-1. Remember that variables corresponding to C, I, F and T should be different -from 0. Thus C, I, F and T have [1,\mathtt{b}-1] as domain and P, S, U, N, R and E -have [0,\mathtt{b}-1] as domain. Another possibility is to keep the same domain [0,\mathtt{b}-1] for all -variables and force C, I, F and T to be different from 0 by adding inequalities. However, restraining the domain to [1,\mathtt{b}-1] is more efficient.

+from 0. Thus C, I, F and T have [1,\mathtt{b}-1] as domain and P, S, U, N, R and E +have [0,\mathtt{b}-1] as domain. Another possibility is to keep the same domain [0,\mathtt{b}-1] for all +variables and force C, I, F and T to be different from 0 by adding inequalities. However, restraining the domain to [1,\mathtt{b}-1] is more efficient.

To model the sum constraint in any base b, we add the linear equation:

-

\begin{align*}
-     &                                  &   &                                  &   & {\color{blue}{\mathtt{C}}} \cdot \mathtt{b} & + & {\color{blue}{\mathtt{P}}}\\
-   + &                                  &   &                                  &   & {\color{blue}{\mathtt{I}}} \cdot \mathtt{b} & + & {\color{blue}{\mathtt{S}}}\\
-   + &                                  &   & {\color{blue}{\mathtt{F}}} \cdot \mathtt{b}^2 & + & {\color{blue}{\mathtt{U}}} \cdot \mathtt{b} & + & {\color{blue}{\mathtt{N}}}\\
-   = & {\color{blue}{\mathtt{T}}} \cdot \mathtt{b}^3 & + & {\color{blue}{\mathtt{R}}} \cdot \mathtt{b}^2 & + & {\color{blue}{\mathtt{U}}} \cdot \mathtt{b} & + & {\color{blue}{\mathtt{E}}}.
-\end{align*}

+

\begin{center}
+\begin{tabular}{cccccccc}
+     &                                         &   &                                        & + & ${\color{blue}{\mathtt{C}}} \cdot b$ & + & ${\color{blue}{\mathtt{P}}}$\\
+     &                                         &   &                                        & + & ${\color{blue}{\mathtt{I}}} \cdot b$ & + & ${\color{blue}{\mathtt{S}}}$\\
+     &                                         & + & ${\color{blue}{\mathtt{F}}} \cdot b^2$ & + & ${\color{blue}{\mathtt{U}}} \cdot b$ & + & ${\color{blue}{\mathtt{N}}}$\BStrut\\
+ \hline
+   = & ${\color{blue}{\mathtt{T}}} \cdot b^3$ & + & ${\color{blue}{\mathtt{R}}} \cdot b^2$ & + & ${\color{blue}{\mathtt{U}}} \cdot b$ & + & ${\color{blue}{\mathtt{E}}}\TStrut$
+\end{tabular}
+\end{center}

The global constraint AllDifferent springs to mind to model that variables must all have different values:

AllDifferent(C,P,I,S,F,U,N,T,R,E)
 
diff --git a/documentation/user_manual/manual/first_steps/monitors.html b/documentation/user_manual/manual/first_steps/monitors.html index b372fb3d80..1dd2797be5 100644 --- a/documentation/user_manual/manual/first_steps/monitors.html +++ b/documentation/user_manual/manual/first_steps/monitors.html @@ -200,8 +200,8 @@ also additional information. You can also act on some of the variables for insta LOG(INFO) << "Number of solutions: " << number_solutions << std::endl; for (int index = 0; index < number_solutions; ++index) { - Assignment* const solution = all_solutions->solution(index); - LOG(INFO) << "Solution found:"; + Assignment* const solution = all_solutions->solution(index); + LOG(INFO) << "Solution found:"; LOG(INFO) << "v1=" << solution->Value(v1); }
diff --git a/documentation/user_manual/manual/objectives.html b/documentation/user_manual/manual/objectives.html index 0aff19fa94..69ac8579ad 100644 --- a/documentation/user_manual/manual/objectives.html +++ b/documentation/user_manual/manual/objectives.html @@ -89,11 +89,11 @@ In fact, you can completely skip them if you wish. The basic ideas behind these

You can find the code in the directory documentation/tutorials/C++/chap3.

The files inside this directory are:

    -
  • golomb1.cc: A first implementation. We show how to tell the solver to optimize an objective function. We use the \frac{n(n-1)}{2} differences as variables.
  • +
  • golomb1.cc: A first implementation. We show how to tell the solver to optimize an objective function. We use the \frac{n(n-1)}{2} differences as variables.
  • golomb2.cc: Same file as golomb1.cc but with some global statistics about the search added so we can see how well or bad a model behave.
  • golomb3.cc: A second implementation. This time, we only use the marks as variables and introduce the quaternary inequality constraints.
  • -
  • golomb4.cc: We improve the second implementation by reintroducing the \frac{n(n-1)}{2} differences variables.
  • +
  • golomb4.cc: We improve the second implementation by reintroducing the \frac{n(n-1)}{2} differences variables.
  • golomb5.cc: In this third implementation, we replace the inequality constraints by the more powerful globlal AllDifferent constraint.
  • golomb6.cc: The last implementation is a tightening of the model used in the third implementation. We add better upper and lower bounds and break a symmetry in the search tree.
diff --git a/documentation/user_manual/manual/objectives/content_model.html b/documentation/user_manual/manual/objectives/content_model.html index 414f6bd221..22b6139bcc 100644 --- a/documentation/user_manual/manual/objectives/content_model.html +++ b/documentation/user_manual/manual/objectives/content_model.html @@ -64,7 +64,7 @@

Most of the mathematical classes in or-tools inherit from the BaseObject class. Its only public method is a virtual DebugString(). If you are curious or just in doubt about the object you just constructed, DebugString() is for you.

-

Let’s have a closer look at the constraints that model the inner structure of the Golomb ruler of order 5:

+

Let’s have a closer look at the constraints that model the inner structure of the Golomb ruler of order 5:

const int n = 5;
 ...
 for (int i = 2; i <= n - 1; ++i) {
@@ -136,7 +136,7 @@ the object you just constructed, 
                                                                 (2..48))
 
-

The cast to transform the sum Y_1 + Y_0 into an IntVar.

+

The cast to transform the sum Y_1 + Y_0 into an IntVar.

And then:

...: Y_4(1..24) == Var<(Y_1(1..24) + Y_0(1..24))>(2..48)
 ...: Y_5(1..24) == Var<(Y_2(1..24) + Y_1(1..24))>(2..48)
diff --git a/documentation/user_manual/manual/objectives/data_search.html b/documentation/user_manual/manual/objectives/data_search.html
index e592d320b3..cfbc50f021 100644
--- a/documentation/user_manual/manual/objectives/data_search.html
+++ b/documentation/user_manual/manual/objectives/data_search.html
@@ -80,7 +80,7 @@ library offers a basic but portable timer. This timer starts to measure the time
 

As its name implies, the time measured is the wall time, i.e. ... TO BE COMPLETED.

-

For instance, on my computer, the program in golomb1.cc for n = 9 takes

+

For instance, on my computer, the program in golomb1.cc for n = 9 takes

Time: 4,773 seconds
 
diff --git a/documentation/user_manual/manual/objectives/first_implementation.html b/documentation/user_manual/manual/objectives/first_implementation.html index 816a4abda8..049ef8bfa8 100644 --- a/documentation/user_manual/manual/objectives/first_implementation.html +++ b/documentation/user_manual/manual/objectives/first_implementation.html @@ -65,18 +65,18 @@

3.3.1. An upper bound

Several upper bounds exist on Golomb rulers. -For instance, we could take n^3 - 2n^2+ 2n -1. Indeed, it can be +For instance, we could take n^3 - 2n^2+ 2n -1. Indeed, it can be shown that the sequence

\Phi(a) = na^2 + a \qquad 0 \leqslant a < n.

-

forms a Golomb ruler. As its largest member is n^3 - 2n^2+ 2n -1 (when a = n - 1), we have -an upper bound on the length of a Golomb ruler of order n:

+

forms a Golomb ruler. As its largest member is n^3 - 2n^2+ 2n -1 (when a = n - 1), we have +an upper bound on the length of a Golomb ruler of order n:

G(n) \leqslant n^3 - 2n^2+ 2n -1.

Most bounds are really bad and this one isn’t an exception. The great mathematician Paul Erdös conjectured that

G(n) < n^2.

-

This conjecture hasn’t been proved yet but computational evidence has shown that the conjecture holds for n < 65000 (see [Dimitromanolakis2002]).

+

This conjecture hasn’t been proved yet but computational evidence has shown that the conjecture holds for n < 65000 (see [Dimitromanolakis2002]).

diff --git a/documentation/user_manual/manual/objectives/golomb_first_model.html b/documentation/user_manual/manual/objectives/golomb_first_model.html index b8f784857f..c77e3199bf 100644 --- a/documentation/user_manual/manual/objectives/golomb_first_model.html +++ b/documentation/user_manual/manual/objectives/golomb_first_model.html @@ -73,21 +73,21 @@ illustrates a Golomb ruler of order 4 and all its - distinct - differences.

A non optimal Golomb ruler of order 4.

A non optimal Golomb ruler of order 4.

-

The Golomb ruler is \{0, 2, 7, 11\} and its length is 11. Because -we are interested in Golomb rulers with minimal length, we can fix the first mark to 0.

+

The Golomb ruler is \{0, 2, 7, 11\} and its length is 11. Because +we are interested in Golomb rulers with minimal length, we can fix the first mark to 0.

Figure An optimal Golomb ruler of order 4. illustrates an optimal Golomb ruler of order 4 and all its - distinct - differences.

An optimal Golomb ruler of order 4.

An optimal Golomb ruler of order 4.

-

Its length, 6, is optimal: it is not possible to construct a Golomb ruler with 4 marks with -a length smaller than 6. We denote this optimal value by G(4) = 6. More generally, for a -Golomb ruler of order n, we denote by G(n) its optimal value. The Golomb Ruler Problem (GRP) is to find, for a given -order n, the smallest Golomb ruler with n marks.

+

Its length, 6, is optimal: it is not possible to construct a Golomb ruler with 4 marks with +a length smaller than 6. We denote this optimal value by G(4) = 6. More generally, for a +Golomb ruler of order n, we denote by G(n) its optimal value. The Golomb Ruler Problem (GRP) is to find, for a given +order n, the smallest Golomb ruler with n marks.

You might be surprised to learn that -the largest order for which the experts have found an optimal Golomb ruler so far is... 26. And it was a huge hunt involving hundreds of people! -The next table compares the number of days, the number of participants on the Internet and the number of visited nodes in the search tree to find and prove G(24), G(25) and G(26)[2][3][4].

+the largest order for which the experts have found an optimal Golomb ruler so far is... 26. And it was a huge hunt involving hundreds of people! +The next table compares the number of days, the number of participants on the Internet and the number of visited nodes in the search tree to find and prove G(24), G(25) and G(26)[2][3][4].

@@ -120,7 +120,7 @@ The next table compares the number of days, the number of participants on the In
-

The search for G(27) started on February 24, 2009 and at that time was expected to take... 7 years! +

The search for G(27) started on February 24, 2009 and at that time was expected to take... 7 years! Still think it is an easy[1] problem? You too can participate: The OGR Project.

You can find all the known optimal Golomb rulers and more information on Wikipedia.

@@ -168,35 +168,35 @@ of a Golomb ruler. In information theory, Golomb rulers are used for error detec

3.2.2.1. Describe

What is the goal of the Golomb Ruler Problem? To find a minimal Golomb ruler for a given -order n. Our objective function is the length of the ruler or the largest +order n. Our objective function is the length of the ruler or the largest integer in the Golomb ruler sequence.

What are the decision variables (unknowns)? We have at least two choices. We can either view the unknowns as the marks of the ruler (and retrieve all the differences from these variables) or choose the unknowns to be the differences (and retrieve the marks). Let’s try this second approach and use the efficient AllDifferent constraint. -There are \frac{n (n-1)}{2} such differences.

+There are \frac{n (n-1)}{2} such differences.

What are the constraints? Using the differences as variables, we need to construct a Golomb ruler, i.e. the structure of the Golomb ruler has to be respected (see next section).

3.2.2.2. Model

For each positive difference, we have a decision variable. We collect them in -an array Y\hspace{-0.1cm}. Let’s order the differences so that we know which difference is represented by Y[i].

+an array Y\hspace{-0.1cm}. Let’s order the differences so that we know which difference is represented by Y[i].

Figure An ordered sequence of differences for the Golomb ruler of order 4. illustrates an ordered sequence of differences for a Golomb ruler of order 4.

An ordered sequence of differences for the Golomb ruler of order 4.

An ordered sequence of differences for the Golomb ruler of order 4.

-

We want to minimize the last difference in Y i.e. Y[\frac{n (n-1)}{2}-1] since the first index of an array is 0. -When the order is n = 4, we want to optimize Y[\frac{4 (4-1)}{2}-1] = Y[5] which represents the 6^\textrm{th} difference. Instead of writing Y[i], we will also use the more convenient notation Y_i.

+

We want to minimize the last difference in Y i.e. Y[\frac{n (n-1)}{2}-1] since the first index of an array is 0. +When the order is n = 4, we want to optimize Y[\frac{4 (4-1)}{2}-1] = Y[5] which represents the 6^\textrm{th} difference. Instead of writing Y[i], we will also use the more convenient notation Y_i.

Figure The inner structure of a Golomb ruler of order 5. illustrates the structure than must be respected for a Golomb ruler of order 5. To impose the inner structure of the Golomb Ruler, -we force Y_4 = Y_0 + Y_1, Y_5 = Y_1 + Y_2 and so on as illustrated in Figure The inner structure of a Golomb ruler of order 5..

+we force Y_4 = Y_0 + Y_1, Y_5 = Y_1 + Y_2 and so on as illustrated in Figure The inner structure of a Golomb ruler of order 5..

The inner structure of a Golomb ruler of order 5.

The inner structure of a Golomb ruler of order 5.

-

An easy way to construct these equality constraints is to use an index index going from 4 to 9[5], an +

An easy way to construct these equality constraints is to use an index index going from 4 to 9[5], an index i to count the number of terms in a given equality and an index j to indicate the rank of the starting term in each equality:

int index = n - 2;
@@ -212,7 +212,7 @@ equality:

+(n-1) to the index of the last difference \left( \frac{n(n-1)}{2} - 1 \right).
[5]Or more generally from the index of the first difference that is the sum of two differences in our sequence -(n-1) to the index of the last difference \left( \frac{n(n-1)}{2} - 1 \right).
diff --git a/documentation/user_manual/manual/objectives/second_implementation.html b/documentation/user_manual/manual/objectives/second_implementation.html index 6e8798c49b..cdea5e1a14 100644 --- a/documentation/user_manual/manual/objectives/second_implementation.html +++ b/documentation/user_manual/manual/objectives/second_implementation.html @@ -56,8 +56,8 @@

3.6. A second model and its implementation

-

Our first model is really bad. One of the reasons is that we use too many variables: \frac{n (n-1)}{2} differences. -What happens if we only consider the n marks as variables instead of the differences?

+

Our first model is really bad. One of the reasons is that we use too many variables: \frac{n (n-1)}{2} differences. +What happens if we only consider the n marks as variables instead of the differences?

3.6.1. Variables

You can find the code in the file tutorials/C++/chap3/golomb3.cc

@@ -70,7 +70,7 @@ In the same vain, we redefine the array

We use an std::vector slightly bigger (by one more element) than absolutely necessary. Because the solver doesn’t allow NULL pointers, we have -to assign a value to X[0]. The first mark X[1] is 0. We use again n^2 - 1 as an upper bound for the marks:

+to assign a value to X[0]. The first mark X[1] is 0. We use again n^2 - 1 as an upper bound for the marks:

// Upper bound on G(n), only valid for n <= 65 000
 CHECK_LE(n, 65000);
 const int64 max = n * n - 1;
@@ -93,15 +93,15 @@ to assign a value to X[0]<
 [1]Quaternary constraints is just a fancy way to say that the constraints each involves four variables.
 
 
-

We don’t need all combinations of (i,j,k,l) with i \neq k and j \neq l. For instance, combination (3,2,6,4) -and combination (2,3,4,6) would both give the same constraint. One way to avoid such redundancy is to impose an order on unique positive differences[2].

+

We don’t need all combinations of (i,j,k,l) with i \neq k and j \neq l. For instance, combination (3,2,6,4) +and combination (2,3,4,6) would both give the same constraint. One way to avoid such redundancy is to impose an order on unique positive differences[2].

[2]In section Breaking symmetries we’ll use another trick.
-

Take again n=4 and define the sequence of differences as in Figure Another ordered sequence of differences for the Golomb ruler of order 4..

+

Take again n=4 and define the sequence of differences as in Figure Another ordered sequence of differences for the Golomb ruler of order 4..

Another ordered sequence of differences for the Golomb ruler of order 4.

Another ordered sequence of differences for the Golomb ruler of order 4.

@@ -119,7 +119,7 @@ and so on as suggested in Figure

How to generate the quaternary constraints, part II.

-

We define a helper function that, given a difference (i,j) corresponding to an interval X[j] - X[i] computes the next difference in the sequence:

+

We define a helper function that, given a difference (i,j) corresponding to an interval X[j] - X[i] computes the next difference in the sequence:

bool next_interval(const int n, const int i, const int j, int* next_i,
                                                          int* next_j)  {
   CHECK_LT(i, n);
@@ -171,10 +171,10 @@ and so on as suggested in Figure [3]Remember again the remark at the beginning of this chapter about the tricky sums.
 
 
-

Note that we set the minimum value of the difference to 1, diff1->SetMin(1), to ensure that the differences are positive and \geqslant 1. Note also that the method +

Note that we set the minimum value of the difference to 1, diff1->SetMin(1), to ensure that the differences are positive and \geqslant 1. Note also that the method MakeDifference() doesn’t allow us to give a name to the new variable, which is normal as this new variable is the difference of two existing variables. Its name is simply name1 - name2.

-

Let’s compare the first and second implementation. The next table compares some global indicators about the search for G(9).

+

Let’s compare the first and second implementation. The next table compares some global indicators about the search for G(9).

@@ -236,7 +236,7 @@ existing variables. Its name is simply } -

and compare this improved version with the two others, again to compute G(9):

+

and compare this improved version with the two others, again to compute G(9):

diff --git a/documentation/user_manual/manual/objectives/summary.html b/documentation/user_manual/manual/objectives/summary.html index 14461c12cf..8a286df8d9 100644 --- a/documentation/user_manual/manual/objectives/summary.html +++ b/documentation/user_manual/manual/objectives/summary.html @@ -56,7 +56,7 @@

3.10. Summary

-

Not a good approach. For example with our tightened implementation 3 we need 35.679 seconds to solve G(11).

+

Not a good approach. For example with our tightened implementation 3 we need 35.679 seconds to solve G(11).

Further reading: see [SmithEtAl]

diff --git a/documentation/user_manual/manual/objectives/third_implementation.html b/documentation/user_manual/manual/objectives/third_implementation.html index 6e4bc48a3f..b89cabb014 100644 --- a/documentation/user_manual/manual/objectives/third_implementation.html +++ b/documentation/user_manual/manual/objectives/third_implementation.html @@ -71,7 +71,7 @@ propagations of the “quaternary constraints”. But these constraints s.AddConstraint(s.MakeAllDifferent(Y)); -

and compare our three implementations, again to compute G(9):

+

and compare our three implementations, again to compute G(9):

diff --git a/documentation/user_manual/manual/objectives/tighten_model.html b/documentation/user_manual/manual/objectives/tighten_model.html index fb85613431..46a6dbcdc1 100644 --- a/documentation/user_manual/manual/objectives/tighten_model.html +++ b/documentation/user_manual/manual/objectives/tighten_model.html @@ -117,8 +117,8 @@ representing the marks of a Golomb ruler, we implicitly took for granted that
[3]Declaring variables in an std::vector doesn’t tell anything about their respective values!
-

Thanks to diff1->SetMin(1) and diff2->SetMin(1) and the two for loops, the ordered variables X[1], X[2], X[3], X[4] -have only increasing values, i.e. if i \leqslant j then X[i] \leqslant X[j]. Solutions (1) and (2) are said to be symmetric and avoiding the second one while accepting the first one is called breaking symmetry.

+

Thanks to diff1->SetMin(1) and diff2->SetMin(1) and the two for loops, the ordered variables X[1], X[2], X[3], X[4] +have only increasing values, i.e. if i \leqslant j then X[i] \leqslant X[j]. Solutions (1) and (2) are said to be symmetric and avoiding the second one while accepting the first one is called breaking symmetry.

There is a well-known symmetry in the Golomb Ruler Problem that we didn’t break. Whenever you have a Golomb ruler, there exist another Golomb ruler with the same length that is called the mirror ruler.

Figure Two mirror Golomb rulers of order 4. @@ -127,7 +127,7 @@ illustrates two mirror Golomb rulers of order 4.

Two mirror Golomb rulers of order 4.

Two mirror Golomb rulers of order 4.

-

Golomb ruler \{0,1,4,6\} has \{0,2,5,6\} as mirror Golomb ruler. Both have exactly the same length and can be considered symmetric solutions. To break this symmetry and allow the search for the first one but not the second one, just add X[2]-X[1] < X[n] - X[n-1]:

+

Golomb ruler \{0,1,4,6\} has \{0,2,5,6\} as mirror Golomb ruler. Both have exactly the same length and can be considered symmetric solutions. To break this symmetry and allow the search for the first one but not the second one, just add X[2]-X[1] < X[n] - X[n-1]:

s.AddConstraint(s.MakeLess(s.MakeDifference(X[2],X[1])->Var(),
                            s.MakeDifference(X[n],X[n-1])->Var()));
 
@@ -135,7 +135,7 @@ illustrates two mirror Golomb rulers of order 4.

3.8.2. Better bounds helps

-

In all implementations, we used n^2 - 1 as an upper bound on G(n). In the case of the Golomb Ruler Problem, finding good upper bounds is a false problem. Very efficient techniques exist to find optimal or near optimal upper bounds. If we use those bounds, we reduce dramatically the domains of the variables. We can actually use G(n) as an upper bound for n \leqslant 25 as these bounds can be obtained by projective and affine projections in the plane[4].

+

In all implementations, we used n^2 - 1 as an upper bound on G(n). In the case of the Golomb Ruler Problem, finding good upper bounds is a false problem. Very efficient techniques exist to find optimal or near optimal upper bounds. If we use those bounds, we reduce dramatically the domains of the variables. We can actually use G(n) as an upper bound for n \leqslant 25 as these bounds can be obtained by projective and affine projections in the plane[4].

@@ -159,7 +159,7 @@ See } -

where kG[n] is G(n).

+

where kG[n] is G(n).

The AllDifferent constraint doesn’t take a 2-dimensional array as parameter but it is easy to create one by flattening the array:

The differences on the right hand side of this expression are a set of different integers and there are n-1-j+i of them. +If we minimize the sum of these consecutive differences, we actually maximize the right hand side, i.e. we bound Y[i][j] from above:

We can add:

@@ -195,7 +195,7 @@ If we minimize the sum of these consecutive differences, we actually maximize th } -

Let’s compare our tightened third implementation with the rest, again to compute G(9):

+

Let’s compare our tightened third implementation with the rest, again to compute G(9):