From c0e5ffcf0d9169a3afeef4710ee4d8b9af3ee867 Mon Sep 17 00:00:00 2001 From: jhumeau Date: Fri, 6 Feb 2009 09:34:46 +0000 Subject: [PATCH] git-svn-id: svn://scm.gforge.inria.fr/svnroot/paradiseo@1407 331e1502-861f-0410-8da2-ba01fb791d7f --- contribution/branches/MOLS/CMakeLists.txt | 2 +- .../branches/MOLS/flowshop/CMakeLists.txt | 17 + .../MOLS/flowshop/benchs/020_05_01.txt | 63 ++ .../MOLS/flowshop/benchs/020_05_02.txt | 63 ++ .../MOLS/flowshop/benchs/020_10_01.txt | 63 ++ .../MOLS/flowshop/benchs/020_10_02.txt | 63 ++ .../MOLS/flowshop/benchs/020_20_01.txt | 63 ++ .../MOLS/flowshop/benchs/050_05_01.txt | 153 +++++ .../MOLS/flowshop/benchs/050_10_01.txt | 153 +++++ .../MOLS/flowshop/benchs/050_20_01.txt | 153 +++++ .../MOLS/flowshop/benchs/100_05_01.txt | 303 +++++++++ .../MOLS/flowshop/benchs/100_10_01.txt | 303 +++++++++ .../MOLS/flowshop/benchs/100_20_01.txt | 303 +++++++++ .../MOLS/flowshop/benchs/200_10_01.txt | 603 ++++++++++++++++++ .../branches/MOLS/flowshop/benchs/README | 1 + .../MOLS/flowshop/build/lib/libflowshop.a | Bin 0 -> 208974 bytes .../branches/MOLS/flowshop/src/CMakeLists.txt | 33 + .../branches/MOLS/flowshop/src/FlowShop.cpp | 43 ++ .../branches/MOLS/flowshop/src/FlowShop.h | 58 ++ .../flowshop/src/FlowShopBenchmarkParser.cpp | 131 ++++ .../flowshop/src/FlowShopBenchmarkParser.h | 109 ++++ .../MOLS/flowshop/src/FlowShopEval.cpp | 90 +++ .../branches/MOLS/flowshop/src/FlowShopEval.h | 104 +++ .../MOLS/flowshop/src/FlowShopInit.cpp | 64 ++ .../branches/MOLS/flowshop/src/FlowShopInit.h | 49 ++ .../flowshop/src/FlowShopObjectiveVector.h | 49 ++ .../src/FlowShopObjectiveVectorTraits.cpp | 57 ++ .../src/FlowShopObjectiveVectorTraits.h | 71 +++ .../flowshop/src/FlowShopOpCrossoverQuad.cpp | 110 ++++ .../flowshop/src/FlowShopOpCrossoverQuad.h | 78 +++ .../flowshop/src/FlowShopOpMutationExchange.h | 49 ++ .../flowshop/src/FlowShopOpMutationShift.h | 49 ++ .../MOLS/flowshop/src/exchange_move.cpp | 67 ++ .../MOLS/flowshop/src/exchange_move.h | 28 + .../MOLS/flowshop/src/exchange_move_init.cpp | 13 + .../MOLS/flowshop/src/exchange_move_init.h | 20 + .../MOLS/flowshop/src/exchange_move_next.cpp | 30 + .../MOLS/flowshop/src/exchange_move_next.h | 22 + .../MOLS/flowshop/src/make_eval_FlowShop.h | 81 +++ .../flowshop/src/make_genotype_FlowShop.h | 74 +++ .../MOLS/flowshop/src/make_op_FlowShop.h | 132 ++++ contribution/branches/MOLS/install.cmake | 5 +- 42 files changed, 3919 insertions(+), 3 deletions(-) create mode 100755 contribution/branches/MOLS/flowshop/CMakeLists.txt create mode 100755 contribution/branches/MOLS/flowshop/benchs/020_05_01.txt create mode 100755 contribution/branches/MOLS/flowshop/benchs/020_05_02.txt create mode 100755 contribution/branches/MOLS/flowshop/benchs/020_10_01.txt create mode 100755 contribution/branches/MOLS/flowshop/benchs/020_10_02.txt create mode 100755 contribution/branches/MOLS/flowshop/benchs/020_20_01.txt create mode 100755 contribution/branches/MOLS/flowshop/benchs/050_05_01.txt create mode 100755 contribution/branches/MOLS/flowshop/benchs/050_10_01.txt create mode 100755 contribution/branches/MOLS/flowshop/benchs/050_20_01.txt create mode 100755 contribution/branches/MOLS/flowshop/benchs/100_05_01.txt create mode 100755 contribution/branches/MOLS/flowshop/benchs/100_10_01.txt create mode 100755 contribution/branches/MOLS/flowshop/benchs/100_20_01.txt create mode 100755 contribution/branches/MOLS/flowshop/benchs/200_10_01.txt create mode 100755 contribution/branches/MOLS/flowshop/benchs/README create mode 100644 contribution/branches/MOLS/flowshop/build/lib/libflowshop.a create mode 100755 contribution/branches/MOLS/flowshop/src/CMakeLists.txt create mode 100755 contribution/branches/MOLS/flowshop/src/FlowShop.cpp create mode 100755 contribution/branches/MOLS/flowshop/src/FlowShop.h create mode 100755 contribution/branches/MOLS/flowshop/src/FlowShopBenchmarkParser.cpp create mode 100755 contribution/branches/MOLS/flowshop/src/FlowShopBenchmarkParser.h create mode 100755 contribution/branches/MOLS/flowshop/src/FlowShopEval.cpp create mode 100755 contribution/branches/MOLS/flowshop/src/FlowShopEval.h create mode 100755 contribution/branches/MOLS/flowshop/src/FlowShopInit.cpp create mode 100755 contribution/branches/MOLS/flowshop/src/FlowShopInit.h create mode 100755 contribution/branches/MOLS/flowshop/src/FlowShopObjectiveVector.h create mode 100755 contribution/branches/MOLS/flowshop/src/FlowShopObjectiveVectorTraits.cpp create mode 100755 contribution/branches/MOLS/flowshop/src/FlowShopObjectiveVectorTraits.h create mode 100755 contribution/branches/MOLS/flowshop/src/FlowShopOpCrossoverQuad.cpp create mode 100755 contribution/branches/MOLS/flowshop/src/FlowShopOpCrossoverQuad.h create mode 100755 contribution/branches/MOLS/flowshop/src/FlowShopOpMutationExchange.h create mode 100755 contribution/branches/MOLS/flowshop/src/FlowShopOpMutationShift.h create mode 100755 contribution/branches/MOLS/flowshop/src/exchange_move.cpp create mode 100755 contribution/branches/MOLS/flowshop/src/exchange_move.h create mode 100755 contribution/branches/MOLS/flowshop/src/exchange_move_init.cpp create mode 100755 contribution/branches/MOLS/flowshop/src/exchange_move_init.h create mode 100755 contribution/branches/MOLS/flowshop/src/exchange_move_next.cpp create mode 100755 contribution/branches/MOLS/flowshop/src/exchange_move_next.h create mode 100755 contribution/branches/MOLS/flowshop/src/make_eval_FlowShop.h create mode 100755 contribution/branches/MOLS/flowshop/src/make_genotype_FlowShop.h create mode 100755 contribution/branches/MOLS/flowshop/src/make_op_FlowShop.h diff --git a/contribution/branches/MOLS/CMakeLists.txt b/contribution/branches/MOLS/CMakeLists.txt index 8ee57041b..8dfbc91fa 100644 --- a/contribution/branches/MOLS/CMakeLists.txt +++ b/contribution/branches/MOLS/CMakeLists.txt @@ -100,7 +100,7 @@ ENDFOREACH (path ${REQUIRED_PATHS}) ### 6) Where must cmake go now ? ###################################################################################### -SUBDIRS(src test doc) +SUBDIRS(flowshop src doc test) ###################################################################################### diff --git a/contribution/branches/MOLS/flowshop/CMakeLists.txt b/contribution/branches/MOLS/flowshop/CMakeLists.txt new file mode 100755 index 000000000..85a6748ec --- /dev/null +++ b/contribution/branches/MOLS/flowshop/CMakeLists.txt @@ -0,0 +1,17 @@ +###################################################################################### +### 1) Where must cmake go now ? +###################################################################################### + +ADD_CUSTOM_TARGET(install DEPENDS ${SOURCES_DIR}/flowshop/benchs) +ADD_CUSTOM_COMMAND( + TARGET install + POST_BUILD + COMMAND ${CMAKE_COMMAND} + ARGS -E copy_directory + ${SOURCES_DIR}/flowshop/benchs + ${INSTALL_DIR}/flowshop/benchs) + +SUBDIRS(src) + +###################################################################################### + diff --git a/contribution/branches/MOLS/flowshop/benchs/020_05_01.txt b/contribution/branches/MOLS/flowshop/benchs/020_05_01.txt new file mode 100755 index 000000000..2c2f78d86 --- /dev/null +++ b/contribution/branches/MOLS/flowshop/benchs/020_05_01.txt @@ -0,0 +1,63 @@ +20 +5 +873654221 +0 +468 +54 79 16 66 58 +1 +325 +83 3 89 58 56 +2 +923 +15 11 49 31 20 +3 +513 +71 99 15 68 85 +4 +1070 +77 56 89 78 53 +5 +690 +36 70 45 91 35 +6 +602 +53 99 60 13 53 +7 +289 +38 60 23 59 41 +8 +873 +27 5 57 49 69 +9 +342 +87 56 64 85 13 +10 +764 +76 3 7 85 86 +11 +268 +91 61 1 9 72 +12 +1158 +14 73 63 39 8 +13 +646 +29 75 41 41 49 +14 +1111 +12 47 63 56 47 +15 +965 +77 14 47 40 87 +16 +703 +32 21 26 54 58 +17 +1205 +87 86 75 77 18 +18 +334 +68 5 77 51 68 +19 +1111 +94 77 40 31 28 diff --git a/contribution/branches/MOLS/flowshop/benchs/020_05_02.txt b/contribution/branches/MOLS/flowshop/benchs/020_05_02.txt new file mode 100755 index 000000000..c82c2d033 --- /dev/null +++ b/contribution/branches/MOLS/flowshop/benchs/020_05_02.txt @@ -0,0 +1,63 @@ +20 +5 +379008056 +0 +517 +26 59 78 88 69 +1 +461 +38 62 90 54 30 +2 +832 +27 44 64 47 61 +3 +653 +88 10 49 83 35 +4 +933 +95 23 47 84 53 +5 +811 +55 64 20 9 98 +6 +966 +54 47 61 30 94 +7 +448 +63 68 93 11 33 +8 +577 +23 54 36 92 77 +9 +1122 +45 9 47 63 31 +10 +666 +86 30 70 62 54 +11 +1189 +43 31 54 75 71 +12 +470 +43 92 87 48 78 +13 +475 +40 7 13 23 9 +14 +462 +37 14 40 85 79 +15 +866 +54 95 34 23 51 +16 +392 +35 76 55 4 76 +17 +310 +59 82 13 31 56 +18 +719 +43 91 11 13 80 +19 +1221 +50 37 5 98 72 diff --git a/contribution/branches/MOLS/flowshop/benchs/020_10_01.txt b/contribution/branches/MOLS/flowshop/benchs/020_10_01.txt new file mode 100755 index 000000000..96bca095d --- /dev/null +++ b/contribution/branches/MOLS/flowshop/benchs/020_10_01.txt @@ -0,0 +1,63 @@ +20 +10 +587595453 +0 +1250 +74 28 89 60 54 92 9 4 25 15 +1 +1371 +21 3 52 88 66 11 8 18 15 84 +2 +637 +58 27 56 26 12 54 88 25 91 8 +3 +616 +4 61 13 58 57 97 72 28 49 30 +4 +917 +21 34 7 76 70 57 27 95 56 95 +5 +937 +28 76 32 98 82 53 22 51 10 79 +6 +1435 +58 64 32 29 99 65 50 84 62 9 +7 +1197 +83 87 98 47 84 77 2 18 70 91 +8 +1301 +31 54 46 79 16 51 49 6 76 76 +9 +637 +61 98 60 26 41 36 82 90 99 26 +10 +749 +94 76 23 19 23 53 93 69 58 42 +11 +1223 +44 41 87 48 11 19 96 61 83 66 +12 +887 +97 70 7 95 68 54 43 57 84 70 +13 +1316 +94 43 36 78 58 86 13 5 64 91 +14 +1330 +66 42 26 77 30 40 60 75 74 67 +15 +1380 +6 79 85 90 5 56 11 4 14 3 +16 +767 +37 88 7 24 5 79 37 38 18 98 +17 +574 +22 15 34 10 39 74 91 28 48 4 +18 +1398 +99 49 36 85 58 24 84 4 96 71 +19 +1179 +83 72 48 55 31 3 67 80 86 62 diff --git a/contribution/branches/MOLS/flowshop/benchs/020_10_02.txt b/contribution/branches/MOLS/flowshop/benchs/020_10_02.txt new file mode 100755 index 000000000..bf23361f5 --- /dev/null +++ b/contribution/branches/MOLS/flowshop/benchs/020_10_02.txt @@ -0,0 +1,63 @@ +20 +10 +1401007982 +0 +1279 +80 59 59 31 30 53 93 90 65 64 +1 +1481 +13 83 70 64 88 19 79 92 97 38 +2 +1157 +64 85 76 11 14 99 88 35 27 44 +3 +1391 +77 85 10 9 22 62 77 13 25 46 +4 +763 +17 70 65 32 93 88 94 75 61 66 +5 +1456 +78 35 19 58 48 93 39 55 24 31 +6 +900 +82 2 77 98 10 34 74 80 97 48 +7 +1047 +4 76 86 95 7 72 46 67 61 27 +8 +1355 +72 46 21 25 14 42 17 3 75 82 +9 +1262 +93 72 75 4 91 65 30 93 92 51 +10 +1329 +68 69 96 45 5 39 62 54 73 90 +11 +562 +25 46 3 60 43 79 77 67 21 63 +12 +684 +67 3 50 87 30 9 43 25 29 85 +13 +567 +80 57 57 31 79 26 98 77 3 36 +14 +765 +43 71 66 1 39 72 48 38 96 69 +15 +808 +93 77 84 96 34 29 14 98 51 67 +16 +999 +21 33 98 22 77 36 45 96 26 81 +17 +548 +33 49 55 95 81 48 25 20 44 18 +18 +577 +14 59 70 73 11 57 98 15 56 81 +19 +704 +30 82 32 77 10 95 30 36 31 72 diff --git a/contribution/branches/MOLS/flowshop/benchs/020_20_01.txt b/contribution/branches/MOLS/flowshop/benchs/020_20_01.txt new file mode 100755 index 000000000..2ef8f0bee --- /dev/null +++ b/contribution/branches/MOLS/flowshop/benchs/020_20_01.txt @@ -0,0 +1,63 @@ +20 +20 +479340445 +0 +1696 +50 78 36 85 9 75 46 73 71 7 49 3 60 12 75 31 70 20 88 9 +1 +1273 +90 56 43 88 92 64 94 3 49 40 49 53 88 47 19 61 78 78 30 41 +2 +1546 +39 9 10 60 98 96 6 56 36 33 15 59 15 46 60 47 41 38 34 22 +3 +1882 +34 43 19 98 44 95 19 73 87 64 18 7 26 17 87 32 9 26 33 34 +4 +1117 +66 84 55 4 51 22 20 80 8 5 65 65 11 43 27 34 47 64 21 83 +5 +1181 +81 73 48 99 8 41 51 82 25 25 55 58 16 16 48 69 94 62 7 55 +6 +1416 +27 66 85 53 31 26 85 36 76 89 1 24 55 91 72 32 26 11 94 3 +7 +1635 +48 38 70 21 15 33 92 98 73 95 79 55 59 94 88 1 65 38 10 8 +8 +1723 +46 83 82 33 47 68 43 90 80 58 10 26 81 73 48 1 17 68 73 75 +9 +1932 +68 57 39 53 31 9 75 46 6 83 37 40 53 89 59 80 42 37 85 30 +10 +1219 +48 97 91 63 80 81 70 10 6 28 77 89 92 12 74 19 59 74 82 57 +11 +1521 +92 52 82 18 83 28 70 46 33 35 80 94 23 58 86 57 80 9 62 65 +12 +1322 +78 77 85 45 20 61 36 65 79 74 79 51 55 25 49 98 7 65 99 89 +13 +1057 +84 13 17 29 84 69 31 83 10 5 84 74 79 24 94 37 75 16 67 60 +14 +1922 +93 12 6 43 69 37 76 75 93 6 93 54 13 55 15 31 63 38 61 90 +15 +1130 +39 2 54 41 49 57 63 47 65 9 21 86 89 1 95 51 96 85 10 84 +16 +1411 +43 65 87 80 93 36 89 61 26 3 85 22 2 67 41 66 7 50 4 74 +17 +1840 +1 93 85 4 39 80 46 28 73 2 64 83 17 3 94 38 10 62 70 17 +18 +1741 +65 39 4 31 13 96 25 59 42 35 46 19 97 1 15 62 47 39 31 2 +19 +1377 +87 1 72 19 88 74 88 22 18 41 35 44 41 71 71 72 38 97 49 19 diff --git a/contribution/branches/MOLS/flowshop/benchs/050_05_01.txt b/contribution/branches/MOLS/flowshop/benchs/050_05_01.txt new file mode 100755 index 000000000..5f4b46f37 --- /dev/null +++ b/contribution/branches/MOLS/flowshop/benchs/050_05_01.txt @@ -0,0 +1,153 @@ +50 +5 +1328042058 +0 +1290 +75 26 48 26 77 +1 +2352 +87 37 4 67 94 +2 +362 +13 25 92 4 9 +3 +305 +11 95 92 14 57 +4 +262 +41 49 72 93 29 +5 +1250 +43 12 45 54 79 +6 +2170 +93 59 5 21 55 +7 +1601 +69 17 98 20 73 +8 +2039 +80 46 93 6 65 +9 +1628 +13 20 17 18 86 +10 +483 +24 52 79 75 25 +11 +285 +72 44 11 25 39 +12 +1092 +38 92 16 16 76 +13 +936 +81 75 89 77 24 +14 +2349 +83 95 81 28 38 +15 +473 +88 33 92 24 5 +16 +2325 +26 10 45 15 91 +17 +747 +6 45 61 77 29 +18 +970 +89 2 39 36 22 +19 +434 +67 62 28 16 27 +20 +1258 +70 62 94 32 39 +21 +2405 +30 82 87 46 31 +22 +862 +89 29 23 21 46 +23 +298 +30 29 1 81 18 +24 +2014 +68 94 55 28 93 +25 +2608 +21 20 91 70 58 +26 +1737 +78 42 67 89 85 +27 +2214 +46 80 91 54 58 +28 +1910 +99 94 4 96 97 +29 +2245 +10 35 60 62 10 +30 +2211 +17 8 38 46 79 +31 +547 +23 41 25 60 93 +32 +2237 +83 65 90 19 2 +33 +1327 +47 4 93 97 87 +34 +700 +86 71 13 13 17 +35 +1011 +18 30 65 7 18 +36 +2001 +67 14 25 44 10 +37 +1230 +46 32 34 7 50 +38 +1020 +4 50 47 73 8 +39 +1918 +14 30 98 15 26 +40 +1001 +4 27 91 66 14 +41 +1383 +20 98 11 70 21 +42 +1229 +88 39 46 97 15 +43 +2594 +50 84 50 33 10 +44 +403 +84 65 77 97 85 +45 +1515 +58 12 5 64 46 +46 +431 +93 58 14 73 42 +47 +1971 +76 45 47 28 18 +48 +939 +50 49 80 4 36 +49 +2028 +30 15 45 87 2 diff --git a/contribution/branches/MOLS/flowshop/benchs/050_10_01.txt b/contribution/branches/MOLS/flowshop/benchs/050_10_01.txt new file mode 100755 index 000000000..17f3cb117 --- /dev/null +++ b/contribution/branches/MOLS/flowshop/benchs/050_10_01.txt @@ -0,0 +1,153 @@ +50 +10 +1958948863 +0 +793 +46 61 3 51 37 79 83 22 27 24 +1 +2280 +52 87 1 24 16 93 87 29 92 47 +2 +939 +79 51 58 21 42 68 38 99 75 39 +3 +2591 +45 25 85 57 47 75 38 25 94 66 +4 +1540 +97 73 33 69 94 37 86 98 18 41 +5 +2386 +10 93 71 51 14 44 67 55 41 46 +6 +812 +44 28 58 50 94 34 23 80 37 24 +7 +2524 +24 90 56 51 34 39 19 82 58 23 +8 +1370 +85 94 64 21 72 76 97 33 56 68 +9 +1319 +75 59 43 19 36 62 78 68 20 50 +10 +2388 +66 64 48 63 88 74 66 47 2 93 +11 +961 +49 2 69 91 51 28 67 74 39 22 +12 +2831 +95 16 96 11 41 78 7 26 91 64 +13 +2790 +61 35 35 6 71 43 23 61 81 81 +14 +2076 +19 53 82 31 94 98 67 95 33 94 +15 +2519 +47 40 53 63 99 83 8 55 14 97 +16 +1981 +84 81 64 36 11 91 77 11 88 54 +17 +695 +13 26 11 39 97 27 71 42 22 82 +18 +2133 +11 85 61 57 44 6 85 72 36 11 +19 +1871 +19 4 36 47 77 82 29 14 65 91 +20 +1495 +98 4 53 56 69 60 49 8 79 23 +21 +754 +2 10 87 65 91 44 3 98 23 32 +22 +783 +85 63 88 59 38 43 94 90 66 26 +23 +984 +44 96 10 4 25 76 76 36 5 22 +24 +2004 +7 55 32 10 87 99 95 75 15 12 +25 +2269 +73 71 38 12 7 66 48 69 51 23 +26 +1771 +19 66 25 62 66 11 4 26 2 34 +27 +2030 +69 94 24 43 54 35 37 24 81 87 +28 +2603 +12 7 90 49 86 52 82 55 12 59 +29 +2150 +73 15 7 54 49 8 57 98 40 2 +30 +2157 +85 11 11 87 3 40 61 86 59 38 +31 +2187 +23 99 49 29 48 62 6 30 32 84 +32 +937 +53 37 2 2 44 25 97 92 16 62 +33 +728 +16 50 76 18 93 24 5 94 87 10 +34 +510 +88 56 17 75 37 30 27 66 78 11 +35 +2786 +8 69 32 39 82 1 95 47 41 93 +36 +2134 +26 22 39 77 31 73 46 3 43 57 +37 +1046 +42 56 9 69 59 27 92 41 94 81 +38 +2849 +58 67 83 15 78 16 46 41 1 10 +39 +1956 +63 63 69 78 33 91 52 47 93 40 +40 +2456 +7 96 67 68 36 33 8 89 22 62 +41 +1105 +2 74 28 37 3 11 11 28 93 49 +42 +1560 +44 4 88 22 58 99 7 39 62 90 +43 +1745 +38 42 23 41 10 2 54 80 53 34 +44 +2216 +24 40 91 92 98 60 72 47 30 11 +45 +1157 +76 30 71 67 6 90 57 57 34 81 +46 +1317 +85 93 3 24 44 36 85 74 27 51 +47 +2372 +61 36 26 87 62 62 22 38 30 21 +48 +777 +32 25 41 91 24 15 87 59 54 39 +49 +972 +90 87 96 31 94 3 65 5 77 27 diff --git a/contribution/branches/MOLS/flowshop/benchs/050_20_01.txt b/contribution/branches/MOLS/flowshop/benchs/050_20_01.txt new file mode 100755 index 000000000..23ccddab3 --- /dev/null +++ b/contribution/branches/MOLS/flowshop/benchs/050_20_01.txt @@ -0,0 +1,153 @@ +50 +20 +1539989115 +0 +2509 +52 63 82 16 63 94 79 22 80 96 53 54 71 27 95 3 92 80 61 74 +1 +2039 +95 99 21 26 55 34 21 6 13 3 19 67 90 93 53 80 62 38 86 38 +2 +3096 +42 69 79 46 59 89 93 24 64 50 99 25 59 49 54 78 11 55 16 4 +3 +2950 +75 70 95 66 35 62 32 55 77 57 62 77 82 63 22 32 83 34 42 31 +4 +1249 +44 53 46 76 21 47 8 48 17 66 88 38 22 65 84 53 87 85 14 62 +5 +2481 +57 21 23 31 59 66 45 57 78 84 93 98 88 34 54 43 66 44 92 39 +6 +3193 +89 10 40 36 78 76 37 78 82 98 34 96 35 10 2 85 98 47 67 97 +7 +3253 +53 31 95 8 25 15 78 5 4 55 72 20 49 56 80 19 42 66 77 57 +8 +2123 +84 80 87 37 30 18 26 50 72 70 42 15 78 51 84 48 23 19 46 9 +9 +2390 +62 18 37 21 38 54 98 83 93 32 65 36 69 97 66 49 45 66 41 54 +10 +1764 +91 5 24 3 78 24 17 70 68 31 39 65 76 52 25 66 52 61 78 13 +11 +2940 +14 18 24 76 79 55 25 21 25 64 79 97 2 46 16 22 6 60 3 47 +12 +1635 +95 17 65 67 58 96 21 71 67 11 9 27 14 16 79 37 3 98 72 6 +13 +3171 +89 71 62 5 44 10 28 58 80 9 26 25 3 50 90 51 64 82 95 70 +14 +2670 +4 90 19 47 38 12 68 36 43 32 72 61 22 96 51 82 55 79 53 19 +15 +2932 +95 93 67 72 76 96 24 50 93 58 29 24 26 85 29 59 97 71 59 97 +16 +2054 +2 14 66 66 70 53 62 31 21 98 36 97 44 61 29 88 83 28 34 41 +17 +3238 +97 49 6 56 72 92 89 86 33 95 48 61 1 76 90 77 42 74 66 1 +18 +2466 +68 52 65 95 85 77 60 29 14 25 57 75 4 30 83 19 81 27 42 57 +19 +2384 +20 7 59 49 8 6 64 30 30 4 95 92 16 90 83 32 92 33 63 60 +20 +3473 +33 78 2 47 10 91 38 93 59 45 93 73 55 42 19 52 68 13 27 62 +21 +3290 +51 57 67 26 84 14 90 49 83 60 79 21 43 88 95 9 46 9 92 14 +22 +2086 +98 41 82 81 42 41 87 83 85 87 88 29 87 37 87 96 56 12 8 90 +23 +2560 +8 75 90 56 67 30 1 89 85 31 77 3 35 43 12 23 88 51 65 76 +24 +3253 +85 98 30 76 20 85 99 44 70 1 94 96 76 88 34 64 50 16 34 12 +25 +3205 +86 93 63 66 24 17 34 38 35 96 39 51 98 91 23 22 13 49 6 89 +26 +2534 +73 33 5 36 75 23 9 62 2 22 74 26 78 14 44 37 23 83 42 37 +27 +2039 +4 75 93 53 23 60 22 45 76 95 46 44 81 63 30 3 13 48 39 35 +28 +2273 +40 68 53 26 33 76 74 22 46 73 17 56 48 65 82 52 49 13 2 91 +29 +2062 +98 33 85 52 60 39 14 85 72 77 30 31 25 74 83 44 18 78 7 69 +30 +1909 +12 60 81 29 20 85 14 39 69 30 62 64 81 71 42 11 50 96 85 55 +31 +2432 +59 82 73 36 75 10 84 98 46 88 77 38 27 8 56 21 94 77 32 48 +32 +2624 +44 24 34 68 83 65 75 56 3 14 43 44 84 39 89 85 71 68 14 56 +33 +3325 +46 99 74 21 26 15 37 68 57 22 98 46 59 95 38 6 64 88 74 84 +34 +3427 +2 4 13 71 92 55 32 84 71 93 48 66 98 82 96 40 31 77 59 22 +35 +1318 +41 97 78 61 29 41 29 77 77 48 14 31 14 17 10 68 21 76 95 51 +36 +1539 +28 24 35 71 39 28 32 67 33 10 45 48 32 38 3 30 2 73 48 43 +37 +3223 +83 50 20 69 14 93 89 53 49 7 25 27 95 69 53 35 63 92 37 50 +38 +1703 +28 55 16 28 74 88 12 46 59 14 98 82 30 17 97 58 58 72 59 62 +39 +1051 +21 91 48 86 66 27 47 24 82 91 30 51 13 24 11 31 36 87 4 61 +40 +1512 +80 46 12 27 86 77 19 52 59 5 90 90 68 66 65 11 64 66 42 10 +41 +2589 +71 58 11 41 10 81 97 96 70 43 92 63 19 75 47 11 52 98 93 87 +42 +3248 +4 17 80 86 27 19 7 2 76 30 35 85 57 52 76 6 8 40 32 99 +43 +2047 +60 47 9 55 8 76 12 88 10 79 13 36 65 59 22 59 94 31 30 40 +44 +3333 +34 82 24 17 7 55 43 33 65 39 75 69 13 4 17 64 51 75 16 91 +45 +1760 +55 6 76 62 97 67 89 27 19 34 55 67 63 73 14 65 36 45 95 64 +46 +2333 +53 15 32 96 84 65 14 49 77 77 80 81 26 56 11 23 82 98 58 62 +47 +2400 +96 91 35 59 56 8 33 78 86 81 67 18 96 19 69 80 30 90 12 53 +48 +2142 +37 74 66 53 61 18 56 82 21 11 3 81 53 39 91 75 17 4 95 33 +49 +1231 +37 42 48 93 9 56 57 65 75 10 93 72 94 51 53 63 21 23 21 16 diff --git a/contribution/branches/MOLS/flowshop/benchs/100_05_01.txt b/contribution/branches/MOLS/flowshop/benchs/100_05_01.txt new file mode 100755 index 000000000..f0d8d9b38 --- /dev/null +++ b/contribution/branches/MOLS/flowshop/benchs/100_05_01.txt @@ -0,0 +1,303 @@ +100 +5 +896678084 +0 +1682 +73 34 8 62 10 +1 +4503 +84 46 37 86 60 +2 +1249 +57 97 38 46 34 +3 +4984 +52 88 30 3 96 +4 +2923 +66 52 20 22 79 +5 +2401 +67 49 68 33 62 +6 +1978 +33 88 4 90 6 +7 +5318 +62 15 78 94 15 +8 +4769 +65 55 41 98 94 +9 +2093 +7 6 2 9 39 +10 +2438 +6 77 62 84 85 +11 +3143 +31 49 38 69 17 +12 +698 +42 46 95 26 55 +13 +621 +82 14 82 22 59 +14 +2463 +48 35 96 49 48 +15 +3865 +45 40 56 90 11 +16 +1563 +79 1 61 81 63 +17 +1461 +86 70 34 12 98 +18 +2285 +10 46 1 54 33 +19 +4381 +47 28 9 53 49 +20 +1057 +67 73 57 18 41 +21 +3190 +86 24 80 56 82 +22 +4493 +64 44 58 43 12 +23 +4604 +38 55 7 50 61 +24 +1592 +13 94 56 82 94 +25 +4645 +69 52 31 18 80 +26 +2729 +4 40 92 89 84 +27 +1925 +21 76 84 49 18 +28 +3843 +25 92 25 20 68 +29 +4188 +74 22 20 76 6 +30 +2635 +11 46 65 90 98 +31 +3773 +85 19 36 64 47 +32 +269 +50 18 67 89 6 +33 +307 +21 50 96 16 55 +34 +907 +93 31 35 3 73 +35 +288 +98 41 59 12 70 +36 +5211 +91 51 76 45 56 +37 +331 +26 73 66 67 46 +38 +1499 +4 22 83 97 50 +39 +1119 +28 21 37 80 90 +40 +4399 +61 79 33 97 89 +41 +1306 +8 93 2 92 88 +42 +1149 +55 98 95 56 50 +43 +3919 +68 89 20 50 99 +44 +3875 +30 44 84 95 41 +45 +3485 +26 64 43 25 36 +46 +2800 +81 93 4 52 16 +47 +1893 +95 66 44 21 84 +48 +2341 +49 14 74 47 98 +49 +874 +6 10 92 4 44 +50 +3355 +82 36 55 67 42 +51 +345 +71 36 98 62 43 +52 +1530 +61 69 8 63 62 +53 +3516 +84 79 30 25 49 +54 +3194 +29 90 18 3 22 +55 +985 +44 51 28 55 16 +56 +1638 +83 81 54 87 14 +57 +2970 +12 16 68 84 55 +58 +4265 +54 28 42 28 45 +59 +3494 +19 26 28 73 20 +60 +5134 +52 97 12 8 35 +61 +3520 +59 33 57 38 89 +62 +3570 +74 77 81 80 7 +63 +1335 +42 68 19 53 64 +64 +313 +60 28 16 70 36 +65 +1031 +43 46 88 9 5 +66 +4360 +80 16 75 87 63 +67 +2814 +34 96 11 33 8 +68 +571 +74 59 57 11 76 +69 +538 +46 56 99 65 95 +70 +2856 +40 4 4 92 40 +71 +747 +27 52 51 34 51 +72 +3321 +79 89 26 64 98 +73 +612 +1 84 6 96 77 +74 +4517 +98 42 16 67 92 +75 +1532 +44 37 71 54 35 +76 +2848 +8 90 52 26 3 +77 +4701 +55 51 96 32 56 +78 +263 +55 84 89 10 1 +79 +5340 +27 16 79 91 17 +80 +3979 +69 39 91 90 70 +81 +4804 +79 16 57 31 45 +82 +1574 +97 37 2 7 87 +83 +3644 +39 19 33 6 37 +84 +1512 +54 15 42 77 70 +85 +4445 +75 68 1 91 84 +86 +3253 +88 7 40 42 69 +87 +5334 +87 58 76 5 7 +88 +2338 +97 47 85 46 5 +89 +1071 +4 27 99 54 97 +90 +2398 +79 82 65 56 47 +91 +1675 +59 72 98 1 12 +92 +4974 +7 1 78 24 54 +93 +1785 +89 7 61 62 84 +94 +3391 +61 22 83 47 49 +95 +4517 +42 40 30 63 89 +96 +2909 +79 59 14 39 86 +97 +2733 +85 16 62 63 37 +98 +853 +66 7 41 95 52 +99 +4261 +99 72 91 45 85 diff --git a/contribution/branches/MOLS/flowshop/benchs/100_10_01.txt b/contribution/branches/MOLS/flowshop/benchs/100_10_01.txt new file mode 100755 index 000000000..480d6be62 --- /dev/null +++ b/contribution/branches/MOLS/flowshop/benchs/100_10_01.txt @@ -0,0 +1,303 @@ +100 +10 +1539989115 +0 +3490 +52 82 63 79 80 53 71 95 92 61 +1 +2540 +95 21 55 21 13 19 90 53 62 86 +2 +4675 +42 79 59 93 64 99 59 54 11 16 +3 +4381 +75 95 35 32 77 62 82 22 83 42 +4 +945 +44 46 21 8 17 88 22 84 87 14 +5 +3435 +57 23 59 45 78 93 88 54 66 92 +6 +4873 +89 40 78 37 82 34 35 2 98 67 +7 +4993 +53 95 25 78 4 72 49 80 42 77 +8 +2710 +84 87 30 26 72 42 78 84 23 46 +9 +3251 +62 37 38 98 93 65 69 66 45 41 +10 +1985 +91 24 78 17 68 39 76 25 52 78 +11 +4361 +14 24 79 25 25 79 2 16 6 3 +12 +1726 +95 65 58 21 67 9 14 79 3 72 +13 +4828 +89 62 44 28 80 26 3 90 64 95 +14 +3816 +4 19 38 68 43 72 22 51 55 53 +15 +4345 +95 67 76 24 93 29 26 29 97 59 +16 +2572 +2 66 70 62 21 36 44 29 83 34 +17 +4963 +97 6 72 89 33 48 1 90 42 66 +18 +3403 +68 65 85 60 14 57 4 83 81 42 +19 +3238 +20 59 8 64 30 95 16 83 92 63 +20 +5437 +33 2 10 38 59 93 55 19 68 27 +21 +5068 +51 67 84 90 83 79 43 95 46 92 +22 +2635 +98 82 42 87 85 88 87 87 56 8 +23 +3593 +8 90 67 1 85 77 35 12 88 65 +24 +4993 +85 30 20 99 70 94 76 34 50 34 +25 +4897 +86 63 24 34 35 39 98 23 13 6 +26 +3542 +73 5 75 9 2 74 78 44 23 42 +27 +2541 +4 93 23 22 76 46 81 30 13 39 +28 +3014 +40 53 33 74 46 17 48 82 49 2 +29 +2587 +98 85 60 14 72 30 25 83 18 7 +30 +2278 +12 81 20 14 69 62 81 42 50 85 +31 +3336 +59 73 75 84 46 77 27 56 94 32 +32 +3723 +44 34 83 75 3 43 84 89 71 14 +33 +5138 +46 74 26 37 57 98 59 38 64 74 +34 +5345 +2 13 92 32 71 48 98 96 31 59 +35 +1084 +41 78 29 29 77 14 14 10 21 95 +36 +1531 +28 35 39 32 33 45 32 3 2 48 +37 +4932 +83 20 14 89 49 25 95 53 63 37 +38 +1863 +28 16 74 12 59 98 30 97 58 59 +39 +545 +21 48 66 47 82 30 13 11 36 4 +40 +1477 +80 12 86 19 59 90 68 65 64 42 +41 +3653 +71 11 10 97 70 92 19 47 52 93 +42 +4983 +4 80 27 7 76 35 57 76 8 32 +43 +2558 +60 9 8 12 10 13 65 22 94 30 +44 +5156 +34 24 7 43 65 75 13 17 51 16 +45 +1977 +55 76 97 89 19 55 63 14 36 95 +46 +3136 +53 32 84 14 77 80 26 11 82 58 +47 +3271 +96 35 56 33 86 67 96 69 30 12 +48 +2748 +37 66 61 56 21 3 53 91 17 95 +49 +909 +37 48 9 57 75 93 94 53 21 21 +50 +4366 +63 16 94 22 96 54 27 3 80 74 +51 +4943 +99 26 34 6 3 67 93 80 38 38 +52 +4596 +69 46 89 24 50 25 49 78 55 4 +53 +1793 +70 66 62 55 57 77 63 32 34 31 +54 +4596 +53 76 47 48 66 38 65 53 85 62 +55 +3717 +21 31 66 57 84 98 34 43 44 39 +56 +4624 +10 36 76 78 98 96 10 85 47 97 +57 +5212 +31 8 15 5 55 20 56 19 66 57 +58 +5604 +80 37 18 50 70 15 51 48 19 9 +59 +2110 +18 21 54 83 32 36 97 49 66 54 +60 +2568 +5 3 24 70 31 65 52 66 61 13 +61 +5330 +18 76 55 21 64 97 46 22 60 47 +62 +676 +17 67 96 71 11 27 16 37 98 6 +63 +1603 +71 5 10 58 9 25 50 51 82 70 +64 +1085 +90 47 12 36 32 61 96 82 79 19 +65 +5128 +93 72 96 50 58 24 85 59 71 97 +66 +938 +14 66 53 31 98 97 61 88 28 41 +67 +4778 +49 56 92 86 95 61 76 77 74 1 +68 +1986 +52 95 77 29 25 75 30 19 27 57 +69 +2115 +7 49 6 30 4 92 90 32 33 60 +70 +616 +78 47 91 93 45 73 42 52 13 62 +71 +534 +57 26 14 49 60 21 88 9 9 14 +72 +1231 +41 81 41 83 87 29 37 96 12 90 +73 +3376 +75 56 30 89 31 3 43 23 51 76 +74 +2922 +98 76 85 44 1 96 88 64 16 12 +75 +2152 +93 66 17 38 96 51 91 22 49 89 +76 +1813 +33 36 23 62 22 26 14 37 83 37 +77 +3561 +75 53 60 45 95 44 63 3 48 35 +78 +4603 +68 26 76 22 73 56 65 52 13 91 +79 +2813 +33 52 39 85 77 31 74 44 78 69 +80 +528 +60 29 85 39 30 64 71 11 96 55 +81 +1112 +82 36 10 98 88 38 8 21 77 48 +82 +4387 +24 68 65 56 14 44 39 85 68 56 +83 +4573 +99 21 15 68 22 46 95 6 88 84 +84 +5585 +4 71 55 84 93 66 82 40 77 22 +85 +2680 +97 61 41 77 48 31 17 68 76 51 +86 +3262 +24 71 28 67 10 48 38 30 73 43 +87 +3913 +50 69 93 53 7 27 69 35 92 50 +88 +1749 +55 28 88 46 14 82 17 58 72 62 +89 +2369 +91 86 27 24 91 51 24 31 87 61 +90 +888 +46 27 77 52 5 90 66 11 66 10 +91 +3107 +58 41 81 96 43 63 75 11 98 87 +92 +4964 +17 86 19 2 30 85 52 6 40 99 +93 +5249 +47 55 76 88 79 36 59 59 31 40 +94 +5632 +82 17 55 33 39 69 4 64 75 91 +95 +893 +6 62 67 27 34 67 73 65 45 64 +96 +3432 +15 96 65 49 77 81 56 23 98 62 +97 +5507 +91 59 8 78 81 18 19 80 90 53 +98 +2007 +74 53 18 82 11 81 39 75 4 33 +99 +5336 +42 93 56 65 10 72 51 63 23 16 diff --git a/contribution/branches/MOLS/flowshop/benchs/100_20_01.txt b/contribution/branches/MOLS/flowshop/benchs/100_20_01.txt new file mode 100755 index 000000000..f063c0f7c --- /dev/null +++ b/contribution/branches/MOLS/flowshop/benchs/100_20_01.txt @@ -0,0 +1,303 @@ +100 +20 +450926852 +0 +1420 +12 27 24 42 5 27 51 48 42 31 48 51 8 1 1 28 4 44 6 57 +1 +1890 +72 97 57 16 42 69 9 44 18 49 92 84 37 77 59 81 40 6 49 88 +2 +5212 +29 53 68 44 47 38 22 73 31 78 43 28 33 92 53 96 5 18 84 88 +3 +2835 +16 16 58 75 47 66 15 95 18 23 35 63 4 57 22 99 37 51 72 43 +4 +4466 +22 36 76 32 47 21 84 72 55 37 7 86 8 46 10 79 80 77 39 25 +5 +5004 +61 28 70 66 78 65 38 12 82 34 51 99 38 75 48 97 46 47 51 81 +6 +1562 +69 50 72 31 94 3 71 30 64 43 85 27 97 2 94 15 14 27 77 3 +7 +1927 +71 41 56 6 18 7 11 22 36 7 66 24 75 14 46 6 81 17 59 3 +8 +2807 +86 42 56 6 14 10 45 25 48 69 87 36 76 14 57 77 16 42 97 78 +9 +2057 +16 86 55 52 97 11 48 92 74 97 71 83 93 79 55 98 10 84 5 97 +10 +5762 +54 2 89 7 54 41 29 5 17 15 16 24 69 64 66 5 79 3 83 74 +11 +5182 +53 45 23 92 73 64 31 44 60 38 40 54 10 8 69 51 35 69 51 71 +12 +5558 +64 86 42 45 94 9 14 90 18 80 22 34 25 73 7 51 41 3 9 50 +13 +2591 +96 43 26 70 17 15 56 35 88 78 12 49 40 15 13 60 83 6 9 70 +14 +4353 +79 92 87 72 97 71 59 24 37 89 2 43 88 71 64 17 13 94 59 23 +15 +4442 +68 73 17 48 7 86 35 64 29 95 90 5 90 6 83 98 93 58 30 43 +16 +2375 +98 99 38 86 94 2 7 82 19 1 63 70 57 54 39 46 55 65 86 51 +17 +3311 +87 84 24 63 94 26 20 7 51 18 52 56 39 59 46 87 48 36 49 97 +18 +2369 +40 83 82 61 68 57 48 34 20 11 15 71 29 49 59 44 35 28 46 57 +19 +4728 +74 61 55 92 4 78 88 91 7 11 6 12 97 38 36 18 75 68 13 77 +20 +5437 +22 7 47 73 60 84 54 59 43 92 18 30 51 21 69 71 66 73 45 90 +21 +3616 +23 8 7 49 70 20 30 5 77 99 87 77 97 60 47 93 82 81 51 58 +22 +4472 +47 62 99 53 68 21 81 47 95 81 66 55 5 8 83 97 3 12 68 75 +23 +2738 +55 3 89 20 22 3 2 96 92 79 7 92 75 35 25 44 79 89 82 4 +24 +1604 +21 21 20 97 17 39 1 7 27 53 43 78 91 81 12 18 78 53 6 12 +25 +3121 +90 50 65 58 59 64 78 53 70 47 27 79 80 96 28 59 48 14 99 2 +26 +2296 +68 71 3 59 98 51 8 60 91 48 78 52 81 61 30 9 99 88 12 4 +27 +2107 +14 95 45 29 55 83 8 77 74 32 80 19 60 89 49 45 91 78 8 28 +28 +5637 +42 70 89 98 76 12 71 61 62 58 73 16 97 58 81 78 29 63 36 54 +29 +1686 +41 60 96 61 3 16 60 14 80 33 86 21 14 32 56 67 87 81 24 39 +30 +2186 +40 4 16 83 21 3 41 88 85 65 82 37 2 59 96 65 27 29 82 30 +31 +5311 +63 58 42 8 10 1 39 97 8 86 33 85 55 89 89 50 2 15 73 71 +32 +3210 +23 16 70 83 11 88 8 92 39 60 92 56 97 99 73 87 48 81 66 89 +33 +1223 +75 30 69 73 44 80 96 65 85 47 8 29 60 7 52 29 33 84 69 33 +34 +2856 +4 80 77 2 29 77 3 73 83 89 87 56 8 79 12 80 92 36 71 85 +35 +4618 +31 71 46 56 43 2 79 19 76 40 64 23 30 38 98 14 15 8 70 2 +36 +1981 +87 59 20 7 60 14 48 99 31 72 7 19 87 1 12 70 55 60 61 69 +37 +2755 +25 75 71 15 14 60 23 92 12 54 26 52 42 67 40 10 24 24 42 20 +38 +1976 +47 52 91 55 46 45 38 19 69 29 79 39 16 63 70 30 59 57 77 64 +39 +1153 +70 25 8 3 3 39 85 66 26 57 49 4 56 42 35 19 41 87 10 94 +40 +5686 +1 86 34 73 60 32 32 25 54 93 71 46 86 3 58 51 49 61 2 3 +41 +4817 +49 48 72 13 72 97 69 79 91 65 72 59 4 29 95 4 88 57 6 41 +42 +1305 +59 53 40 47 90 98 56 36 61 39 69 22 30 23 41 23 67 85 24 37 +43 +4539 +11 54 82 76 1 65 99 10 27 8 30 76 15 21 71 9 49 45 97 36 +44 +4894 +93 98 60 15 42 86 51 23 88 87 28 34 24 25 90 62 81 69 15 74 +45 +2853 +38 36 59 43 74 6 59 37 53 57 46 63 23 48 3 30 89 15 91 53 +46 +1815 +5 9 59 44 54 14 47 76 47 5 75 32 57 33 68 20 43 7 32 49 +47 +5816 +43 78 43 13 41 99 79 83 39 56 78 72 81 92 5 69 24 87 68 77 +48 +5297 +82 80 72 16 15 93 67 58 14 80 34 92 77 2 18 88 70 58 17 13 +49 +4830 +33 88 10 18 38 54 83 99 78 2 4 72 43 12 26 22 74 61 1 37 +50 +4903 +26 52 63 16 24 54 58 29 90 17 23 26 82 32 2 43 44 82 49 34 +51 +3618 +89 30 67 18 91 92 49 35 90 84 69 46 97 38 21 63 23 73 25 31 +52 +4572 +86 62 12 3 49 57 50 49 50 86 33 30 3 67 86 67 89 84 46 15 +53 +5078 +10 8 41 11 23 39 19 89 64 65 11 49 46 93 8 22 96 63 37 32 +54 +1714 +16 45 5 98 63 13 64 79 94 53 5 3 86 80 33 82 80 14 56 45 +55 +1214 +72 77 25 9 88 70 5 82 79 5 54 81 62 75 88 41 44 73 50 50 +56 +2317 +96 90 67 28 1 73 5 92 10 16 42 4 26 59 33 69 69 84 9 81 +57 +1939 +47 52 95 44 30 16 52 45 18 58 12 46 56 51 65 81 7 9 62 46 +58 +4684 +9 39 46 14 85 43 15 42 7 60 40 95 67 7 8 21 10 38 10 93 +59 +2148 +56 95 37 39 22 9 26 21 26 78 30 20 87 65 89 54 15 67 89 13 +60 +4555 +8 86 41 76 94 2 67 51 51 25 51 56 46 6 46 42 55 76 66 47 +61 +5302 +69 15 2 92 39 76 11 30 23 71 94 57 66 59 76 53 27 18 98 50 +62 +1794 +87 98 25 59 70 38 77 70 43 93 24 85 53 30 57 52 55 70 10 70 +63 +2125 +84 59 99 95 85 66 74 2 95 99 28 31 34 67 51 26 2 69 70 21 +64 +3571 +62 22 48 11 7 21 88 20 57 6 84 44 52 41 58 69 82 4 92 41 +65 +5197 +52 43 24 55 65 32 83 82 30 62 69 1 81 32 62 80 42 58 36 12 +66 +1470 +82 85 18 56 43 78 96 13 86 60 44 11 68 63 59 46 88 66 82 18 +67 +2420 +66 93 10 16 4 41 73 92 80 33 98 72 48 7 71 10 84 11 54 28 +68 +4451 +67 6 23 56 60 52 59 91 55 57 36 6 4 8 12 81 38 1 34 22 +69 +1234 +33 46 66 23 90 88 94 2 76 79 21 68 25 89 11 99 69 51 34 60 +70 +1487 +3 51 82 84 73 76 15 80 12 7 9 62 76 51 82 6 31 38 5 69 +71 +5745 +53 97 84 22 21 14 50 38 91 69 48 18 46 81 56 90 5 16 12 49 +72 +1472 +95 79 14 32 25 86 20 54 95 82 30 21 13 9 57 79 3 81 3 38 +73 +5132 +42 46 13 40 33 35 54 45 28 26 15 48 72 13 53 34 37 39 56 80 +74 +3842 +59 71 88 47 48 81 16 19 12 41 21 32 72 27 45 56 14 56 44 52 +75 +3269 +77 18 7 92 25 32 33 65 18 52 43 42 82 74 96 75 35 83 41 45 +76 +4366 +38 33 40 61 27 75 9 35 80 38 91 79 32 59 31 54 61 27 14 34 +77 +4912 +12 13 20 51 37 38 74 66 32 21 49 74 25 98 39 94 43 29 25 3 +78 +3383 +1 3 68 74 63 55 11 26 67 84 86 82 58 31 12 84 38 93 78 61 +79 +4632 +66 32 22 85 28 96 21 18 2 74 36 3 17 98 13 55 48 70 25 96 +80 +2775 +24 28 92 6 88 19 97 32 4 76 41 64 99 48 8 64 89 64 89 99 +81 +5614 +17 48 53 13 27 35 15 51 30 16 10 90 54 74 49 14 86 22 83 49 +82 +3465 +58 8 16 32 94 41 43 23 64 75 75 10 81 76 4 18 37 84 78 78 +83 +1004 +71 42 10 8 20 77 2 18 69 75 56 72 73 75 33 6 20 25 23 34 +84 +1425 +88 26 23 43 54 36 1 87 76 36 70 2 93 78 22 27 33 73 51 78 +85 +1759 +63 26 88 30 17 24 74 74 92 79 73 49 73 11 30 20 1 81 7 79 +86 +5341 +60 95 65 53 74 52 37 10 50 71 57 88 79 71 34 54 8 10 20 64 +87 +1080 +86 44 11 24 35 60 61 76 35 82 51 53 54 54 19 30 61 46 30 55 +88 +4906 +8 74 89 2 15 43 3 31 20 70 34 59 72 10 24 58 41 32 30 63 +89 +2859 +8 82 78 11 53 30 75 31 23 22 62 88 37 96 56 35 40 38 30 24 +90 +5588 +44 28 94 33 64 86 41 93 52 39 3 97 68 97 96 66 10 68 63 58 +91 +5551 +99 4 32 27 38 6 86 61 25 8 34 98 22 75 35 85 10 40 82 25 +92 +5376 +80 42 64 35 79 8 51 26 82 22 27 94 94 41 43 78 75 33 40 93 +93 +5672 +76 81 42 40 45 31 65 39 18 79 29 95 37 30 8 15 9 79 39 73 +94 +5671 +94 56 74 40 67 80 42 83 2 90 25 93 15 73 5 29 81 64 37 45 +95 +4086 +75 38 87 96 93 82 50 11 29 55 97 95 31 84 65 31 40 36 44 93 +96 +1806 +63 50 63 69 16 2 48 57 70 77 30 6 46 22 64 45 13 62 2 37 +97 +5810 +57 12 94 23 59 59 88 81 7 3 28 1 33 8 20 41 10 82 27 64 +98 +1083 +76 43 87 32 47 47 52 40 36 20 48 15 82 98 54 84 53 44 71 92 +99 +1887 +34 51 72 13 95 21 46 97 96 61 99 66 75 68 38 51 28 99 45 59 diff --git a/contribution/branches/MOLS/flowshop/benchs/200_10_01.txt b/contribution/branches/MOLS/flowshop/benchs/200_10_01.txt new file mode 100755 index 000000000..d1bccf9b0 --- /dev/null +++ b/contribution/branches/MOLS/flowshop/benchs/200_10_01.txt @@ -0,0 +1,603 @@ +200 +10 +471503978 +0 +7166 +17 30 28 15 52 5 53 55 81 47 +1 +7478 +37 26 82 67 82 44 43 65 44 51 +2 +4344 +22 2 88 57 17 2 43 38 46 44 +3 +3004 +71 29 33 64 66 98 56 76 3 27 +4 +4783 +79 98 69 23 62 27 48 45 93 76 +5 +4813 +37 67 28 9 57 10 83 99 14 4 +6 +1411 +69 92 92 1 58 25 34 84 86 76 +7 +4573 +53 51 66 2 91 27 93 67 23 49 +8 +7480 +59 53 92 43 42 41 95 40 59 5 +9 +4429 +64 82 30 73 69 59 48 93 47 25 +10 +841 +11 86 67 94 48 89 63 70 76 23 +11 +9418 +67 47 53 96 46 36 93 45 45 67 +12 +8849 +27 36 93 78 18 62 91 75 64 55 +13 +5306 +64 23 45 14 94 29 94 91 10 40 +14 +4634 +59 34 7 32 83 17 32 21 4 58 +15 +9336 +31 66 70 23 48 37 81 72 29 26 +16 +4344 +43 43 58 83 81 35 69 15 69 36 +17 +10182 +42 71 58 29 57 47 29 73 46 83 +18 +5648 +56 31 17 75 93 37 44 43 68 65 +19 +10009 +88 36 41 55 67 52 2 62 89 91 +20 +7809 +71 41 56 91 19 3 66 40 48 77 +21 +6970 +86 6 34 44 65 87 25 43 68 62 +22 +6260 +6 28 62 46 49 4 60 96 13 6 +23 +3543 +54 43 81 59 45 50 69 39 36 57 +24 +4215 +92 18 44 11 22 96 44 23 85 87 +25 +7436 +75 64 95 20 92 74 34 79 35 4 +26 +2229 +83 28 50 68 41 68 68 66 25 11 +27 +6742 +2 13 88 3 38 30 77 19 21 60 +28 +1878 +60 7 19 17 26 69 31 41 44 23 +29 +3222 +62 13 50 55 2 17 10 71 40 87 +30 +2189 +83 93 25 59 90 34 57 60 20 50 +31 +9874 +73 93 88 18 79 95 21 72 83 18 +32 +1849 +55 56 1 31 17 3 56 62 76 23 +33 +10057 +3 72 6 84 61 24 36 17 26 24 +34 +7309 +71 71 45 61 81 51 26 25 50 82 +35 +9509 +34 28 29 55 67 55 11 59 98 16 +36 +10403 +40 95 2 46 18 60 6 95 6 96 +37 +4515 +13 96 54 77 1 61 86 47 83 37 +38 +1586 +62 55 71 59 36 15 2 10 51 29 +39 +638 +56 58 81 98 31 38 89 94 46 19 +40 +7434 +28 66 22 23 85 83 28 39 99 26 +41 +9737 +53 3 57 18 92 62 62 53 65 56 +42 +5477 +71 77 16 17 6 84 63 50 46 33 +43 +5976 +5 80 88 70 78 44 52 99 24 53 +44 +3293 +73 2 5 73 83 80 12 63 47 6 +45 +5869 +95 82 52 38 39 48 13 59 24 95 +46 +10358 +23 86 23 13 74 45 43 30 32 63 +47 +4698 +49 16 21 77 77 54 99 67 66 84 +48 +9855 +17 29 21 74 85 71 11 18 48 13 +49 +5305 +81 24 58 79 88 10 70 12 83 6 +50 +8401 +88 89 96 51 25 96 82 9 3 19 +51 +6004 +62 96 37 48 33 23 14 41 74 16 +52 +3369 +35 99 46 16 36 8 39 67 97 80 +53 +10335 +78 15 78 93 32 56 83 52 39 37 +54 +2868 +90 49 87 29 82 35 4 39 80 20 +55 +5297 +36 78 91 28 98 72 86 90 27 62 +56 +3744 +46 48 9 6 3 53 93 25 70 81 +57 +9148 +98 64 96 82 46 13 87 13 65 52 +58 +3270 +75 3 93 40 68 72 82 81 1 14 +59 +7616 +36 63 98 9 11 38 78 3 26 67 +60 +5131 +74 14 31 88 30 1 32 8 46 19 +61 +9674 +86 95 78 51 75 69 82 66 8 86 +62 +940 +67 88 20 48 42 85 24 67 74 1 +63 +6286 +87 9 75 1 93 2 88 51 47 53 +64 +1159 +68 61 18 4 36 28 45 54 19 21 +65 +10410 +1 24 34 77 97 18 48 85 85 33 +66 +3268 +87 38 48 48 1 10 67 10 62 68 +67 +6533 +87 50 49 6 63 70 14 95 33 28 +68 +1984 +7 47 69 1 86 67 34 59 96 25 +69 +2658 +34 42 88 32 54 95 76 64 33 69 +70 +7518 +1 30 30 79 33 72 1 90 5 71 +71 +3280 +91 97 34 40 71 64 51 28 23 60 +72 +8989 +7 49 22 14 1 19 15 48 43 69 +73 +4877 +6 79 81 20 18 60 67 57 63 99 +74 +7608 +46 19 50 86 75 31 57 85 10 53 +75 +4775 +3 80 40 40 55 29 3 78 47 77 +76 +4441 +45 30 73 25 62 43 37 18 73 27 +77 +689 +55 24 91 94 21 17 15 59 1 29 +78 +8408 +92 58 7 73 71 78 50 11 19 83 +79 +2103 +67 43 1 44 80 28 75 67 92 22 +80 +6500 +13 6 71 98 5 47 80 36 31 10 +81 +3906 +30 95 72 94 48 78 3 24 29 42 +82 +4713 +27 43 8 61 87 77 9 59 68 64 +83 +9905 +19 99 68 65 22 92 28 24 31 80 +84 +3660 +51 22 49 44 5 42 44 39 92 73 +85 +2405 +86 99 7 75 71 86 2 1 48 91 +86 +7436 +20 11 47 4 69 6 71 80 87 38 +87 +5400 +95 99 90 17 75 19 89 58 8 60 +88 +8689 +79 60 59 1 72 28 24 76 90 53 +89 +5805 +48 42 39 12 36 18 73 59 57 38 +90 +685 +83 33 49 78 54 4 28 90 40 19 +91 +9892 +91 68 28 51 24 24 98 92 25 14 +92 +9000 +78 78 22 55 55 57 17 3 49 35 +93 +2827 +41 26 10 53 5 82 27 51 26 10 +94 +1779 +61 77 96 96 40 7 90 1 35 44 +95 +2539 +90 1 2 92 56 4 4 55 90 97 +96 +5797 +57 13 88 82 8 94 13 50 99 17 +97 +6740 +4 67 90 20 19 9 83 15 30 50 +98 +5913 +21 87 69 22 7 57 43 31 5 22 +99 +1778 +68 31 44 13 12 82 63 99 52 19 +100 +9256 +87 49 74 40 44 98 68 8 12 70 +101 +1943 +62 90 16 43 66 54 74 44 11 88 +102 +2314 +69 6 90 23 39 2 12 91 72 31 +103 +5964 +79 76 7 30 41 71 69 83 32 7 +104 +2160 +69 94 14 16 60 94 38 75 81 81 +105 +5000 +35 76 47 76 11 69 74 66 21 58 +106 +753 +25 79 48 30 31 51 98 98 81 2 +107 +8317 +68 66 36 59 65 80 86 77 64 89 +108 +9608 +14 51 62 64 16 79 72 8 45 1 +109 +5659 +9 14 1 72 67 85 76 6 4 80 +110 +3727 +74 89 63 61 19 56 53 26 10 52 +111 +878 +61 87 86 13 69 79 94 47 90 15 +112 +5610 +58 1 49 81 56 46 45 55 11 25 +113 +8024 +81 65 48 25 96 71 30 39 88 11 +114 +7993 +52 53 3 90 78 85 39 91 52 97 +115 +7345 +93 19 51 67 36 52 60 78 96 90 +116 +5943 +44 21 80 21 56 42 69 49 92 62 +117 +5637 +57 98 86 70 12 66 12 23 44 69 +118 +3377 +89 90 97 96 37 82 83 92 54 34 +119 +10135 +81 45 4 99 1 91 21 68 28 66 +120 +2394 +69 77 58 64 50 48 25 88 85 54 +121 +6036 +98 54 79 68 43 70 50 9 51 84 +122 +6761 +78 86 28 61 58 21 47 38 21 62 +123 +7860 +70 2 19 36 13 82 43 60 4 71 +124 +8007 +3 3 93 57 55 12 58 2 42 70 +125 +7718 +70 88 88 86 87 94 11 8 43 60 +126 +7598 +62 39 44 10 20 17 63 86 55 54 +127 +3245 +81 56 74 57 84 45 74 62 89 52 +128 +4953 +61 24 18 88 28 68 6 41 4 71 +129 +8163 +65 91 95 59 59 60 23 66 1 9 +130 +8429 +65 86 2 73 65 93 94 94 97 99 +131 +8623 +33 80 22 43 56 30 93 54 65 41 +132 +1742 +62 58 7 25 2 5 26 9 38 30 +133 +1409 +19 54 82 37 36 31 49 75 87 23 +134 +5249 +57 57 52 70 41 30 30 43 58 60 +135 +9063 +82 42 17 97 7 71 50 9 47 1 +136 +7293 +78 32 59 29 23 29 47 10 53 67 +137 +1353 +94 5 42 33 25 82 89 79 51 55 +138 +6480 +65 43 51 99 81 20 43 10 40 64 +139 +8191 +14 80 79 34 6 13 32 97 80 21 +140 +7595 +9 86 93 96 67 94 45 39 20 16 +141 +739 +29 47 65 65 5 47 47 30 24 94 +142 +7977 +70 95 27 90 89 57 68 74 77 11 +143 +8304 +90 86 25 52 71 95 13 52 37 90 +144 +6930 +86 40 60 95 86 8 86 90 13 48 +145 +5996 +12 31 72 3 48 46 97 12 29 85 +146 +2438 +40 61 29 64 50 80 2 61 28 34 +147 +2339 +12 12 55 21 54 32 16 34 18 7 +148 +5848 +64 64 58 16 21 7 27 88 22 79 +149 +4982 +32 17 22 70 83 34 38 27 75 95 +150 +7604 +18 52 58 67 27 33 53 68 24 50 +151 +10491 +11 56 61 13 38 33 37 14 79 78 +152 +8007 +40 35 89 96 79 18 94 88 99 39 +153 +6393 +14 60 67 57 71 29 78 74 35 79 +154 +1948 +22 75 14 7 53 19 84 71 45 69 +155 +8138 +49 10 10 30 2 74 49 14 95 27 +156 +3757 +95 50 40 96 9 58 25 16 46 42 +157 +4120 +82 66 11 98 49 52 59 46 15 15 +158 +4850 +7 53 99 72 79 10 36 47 7 51 +159 +4564 +19 58 7 31 39 70 33 54 24 44 +160 +4171 +95 12 20 11 28 78 15 91 45 71 +161 +669 +39 66 78 36 39 59 36 89 20 32 +162 +4803 +71 81 6 10 70 32 47 59 35 66 +163 +5464 +34 51 71 20 72 20 83 39 61 49 +164 +6219 +89 75 48 26 70 12 24 52 97 8 +165 +2726 +63 71 39 67 38 98 71 91 69 7 +166 +6507 +85 46 58 13 48 18 7 21 78 44 +167 +6446 +60 88 7 60 57 12 6 90 13 1 +168 +3416 +91 58 17 50 11 57 55 58 53 15 +169 +918 +49 73 63 28 38 73 43 74 16 6 +170 +3139 +46 27 73 32 37 91 82 30 94 51 +171 +9351 +10 26 43 49 56 46 40 63 59 91 +172 +7171 +19 38 14 54 64 64 78 19 64 33 +173 +2127 +50 48 66 46 64 92 64 18 72 77 +174 +4461 +65 8 59 15 68 45 96 88 13 69 +175 +799 +41 14 75 49 27 86 27 22 47 28 +176 +6861 +58 58 96 94 36 84 99 43 22 8 +177 +9690 +62 89 28 63 94 15 11 60 9 8 +178 +3180 +45 44 12 96 65 99 91 20 68 48 +179 +2449 +67 16 99 43 89 8 78 32 4 7 +180 +8742 +64 20 63 73 23 87 97 67 67 55 +181 +4503 +6 69 19 19 93 61 23 1 92 51 +182 +10135 +77 67 26 19 14 42 48 42 49 89 +183 +8757 +94 80 8 81 57 25 20 95 23 61 +184 +1192 +24 81 72 82 93 35 99 84 37 82 +185 +8334 +38 82 55 69 60 64 39 37 16 39 +186 +9610 +73 27 67 13 82 74 53 30 39 89 +187 +8681 +59 5 1 85 16 40 3 12 47 47 +188 +8465 +61 44 23 32 69 89 65 87 94 24 +189 +8425 +14 38 35 34 57 4 81 13 71 79 +190 +3227 +59 53 6 57 8 43 47 60 36 86 +191 +4628 +83 16 89 69 52 12 25 92 72 60 +192 +1319 +3 48 93 63 98 28 36 52 67 67 +193 +9629 +46 16 88 49 67 68 44 51 78 10 +194 +4236 +16 31 86 56 19 46 29 91 13 61 +195 +5509 +56 79 37 37 56 23 85 76 68 60 +196 +9597 +40 75 53 54 38 3 26 32 36 68 +197 +8513 +7 14 45 60 75 70 4 81 69 72 +198 +2882 +79 67 32 97 69 81 9 57 28 9 +199 +7268 +55 70 69 44 14 14 59 71 69 47 diff --git a/contribution/branches/MOLS/flowshop/benchs/README b/contribution/branches/MOLS/flowshop/benchs/README new file mode 100755 index 000000000..7f3c69274 --- /dev/null +++ b/contribution/branches/MOLS/flowshop/benchs/README @@ -0,0 +1 @@ +Further benchmarks for the bi-objective flow-shop scheduling problem are available at http://www.lifl.fr/~liefooga/benchmarks/ \ No newline at end of file diff --git a/contribution/branches/MOLS/flowshop/build/lib/libflowshop.a b/contribution/branches/MOLS/flowshop/build/lib/libflowshop.a new file mode 100644 index 0000000000000000000000000000000000000000..7a06d2237b146cc53a29cde78f0798fa04c719f5 GIT binary patch literal 208974 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⁢%QTmLc1o_&LId8b{^!XW3W1d{|WVXp_*P`9m|C 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 A;{X5v literal 0 HcmV?d00001 diff --git a/contribution/branches/MOLS/flowshop/src/CMakeLists.txt b/contribution/branches/MOLS/flowshop/src/CMakeLists.txt new file mode 100755 index 000000000..81bd142df --- /dev/null +++ b/contribution/branches/MOLS/flowshop/src/CMakeLists.txt @@ -0,0 +1,33 @@ +###################################################################################### +### 1) Include the sources +###################################################################################### + +INCLUDE_DIRECTORIES(${PARADISEO_EO_SRC_DIR}/src) +INCLUDE_DIRECTORIES(${PARADISEO_MOEO_SRC_DIR}/src) +INCLUDE_DIRECTORIES(${PARADISEO_MO_SRC_DIR}/src) +INCLUDE_DIRECTORIES(${CMAKE_CURRENT_SOURCE_DIR}) + +###################################################################################### + + +###################################################################################### +### 2) Define your target(s): just the flow-shop lib here +###################################################################################### + +SET(FLOWSHOP_LIB_OUTPUT_PATH ${INSTALL_DIR}/flowshop/lib) +SET(LIBRARY_OUTPUT_PATH ${FLOWSHOP_LIB_OUTPUT_PATH}) + +SET (FLOWSHOP_SOURCES FlowShopBenchmarkParser.cpp + FlowShopEval.cpp + FlowShopObjectiveVectorTraits.cpp + FlowShopOpCrossoverQuad.cpp + FlowShop.cpp + exchange_move.cpp + exchange_move_init.cpp + exchange_move_next.cpp + ) + +ADD_LIBRARY(flowshop STATIC ${FLOWSHOP_SOURCES}) + +###################################################################################### + diff --git a/contribution/branches/MOLS/flowshop/src/FlowShop.cpp b/contribution/branches/MOLS/flowshop/src/FlowShop.cpp new file mode 100755 index 000000000..0bf5dfe89 --- /dev/null +++ b/contribution/branches/MOLS/flowshop/src/FlowShop.cpp @@ -0,0 +1,43 @@ +/* +* +* Copyright (C) DOLPHIN Project-Team, INRIA Futurs, 2006-2007 +* (C) OPAC Team, LIFL, 2002-2007 +* +* Arnaud Liefooghe +* +* This software is governed by the CeCILL license under French law and +* abiding by the rules of distribution of free software. You can use, +* modify and/ or redistribute the software under the terms of the CeCILL +* license as circulated by CEA, CNRS and INRIA at the following URL +* "http://www.cecill.info". +* +* As a counterpart to the access to the source code and rights to copy, +* modify and redistribute granted by the license, users are provided only +* with a limited warranty and the software's author, the holder of the +* economic rights, and the successive licensors have only limited liability. +* +* In this respect, the user's attention is drawn to the risks associated +* with loading, using, modifying and/or developing or reproducing the +* software by the user in light of its specific status of free software, +* that may mean that it is complicated to manipulate, and that also +* therefore means that it is reserved for developers and experienced +* professionals having in-depth computer knowledge. Users are therefore +* encouraged to load and test the software's suitability as regards their +* requirements in conditions enabling the security of their systems and/or +* data to be ensured and, more generally, to use and operate it in the +* same conditions as regards security. +* The fact that you are presently reading this means that you have had +* knowledge of the CeCILL license and that you accept its terms. +* +* ParadisEO WebSite : http://paradiseo.gforge.inria.fr +* Contact: paradiseo-help@lists.gforge.inria.fr +* +*/ +//----------------------------------------------------------------------------- + +#include + +std::string FlowShop::className() const + { + return "FlowShop"; + } diff --git a/contribution/branches/MOLS/flowshop/src/FlowShop.h b/contribution/branches/MOLS/flowshop/src/FlowShop.h new file mode 100755 index 000000000..993f901d8 --- /dev/null +++ b/contribution/branches/MOLS/flowshop/src/FlowShop.h @@ -0,0 +1,58 @@ +/* +* +* Copyright (C) DOLPHIN Project-Team, INRIA Futurs, 2006-2007 +* (C) OPAC Team, LIFL, 2002-2007 +* +* Arnaud Liefooghe +* +* This software is governed by the CeCILL license under French law and +* abiding by the rules of distribution of free software. You can use, +* modify and/ or redistribute the software under the terms of the CeCILL +* license as circulated by CEA, CNRS and INRIA at the following URL +* "http://www.cecill.info". +* +* As a counterpart to the access to the source code and rights to copy, +* modify and redistribute granted by the license, users are provided only +* with a limited warranty and the software's author, the holder of the +* economic rights, and the successive licensors have only limited liability. +* +* In this respect, the user's attention is drawn to the risks associated +* with loading, using, modifying and/or developing or reproducing the +* software by the user in light of its specific status of free software, +* that may mean that it is complicated to manipulate, and that also +* therefore means that it is reserved for developers and experienced +* professionals having in-depth computer knowledge. Users are therefore +* encouraged to load and test the software's suitability as regards their +* requirements in conditions enabling the security of their systems and/or +* data to be ensured and, more generally, to use and operate it in the +* same conditions as regards security. +* The fact that you are presently reading this means that you have had +* knowledge of the CeCILL license and that you accept its terms. +* +* ParadisEO WebSite : http://paradiseo.gforge.inria.fr +* Contact: paradiseo-help@lists.gforge.inria.fr +* +*/ +//----------------------------------------------------------------------------- + +#ifndef FLOWSHOP_H_ +#define FLOWSHOP_H_ + +#include +#include + +/** + * Structure of the genotype for the flow-shop scheduling problem: a vector of unsigned int int. + */ +class FlowShop: public moeoVector < FlowShopObjectiveVector , double , double , unsigned int > + { + public: + + /** + * class name + */ + std::string className() const; + + }; + +#endif /*FLOWSHOP_H_*/ diff --git a/contribution/branches/MOLS/flowshop/src/FlowShopBenchmarkParser.cpp b/contribution/branches/MOLS/flowshop/src/FlowShopBenchmarkParser.cpp new file mode 100755 index 000000000..5a8b412b5 --- /dev/null +++ b/contribution/branches/MOLS/flowshop/src/FlowShopBenchmarkParser.cpp @@ -0,0 +1,131 @@ +/* +* +* Copyright (C) DOLPHIN Project-Team, INRIA Futurs, 2006-2007 +* (C) OPAC Team, LIFL, 2002-2007 +* +* Arnaud Liefooghe +* +* This software is governed by the CeCILL license under French law and +* abiding by the rules of distribution of free software. You can use, +* modify and/ or redistribute the software under the terms of the CeCILL +* license as circulated by CEA, CNRS and INRIA at the following URL +* "http://www.cecill.info". +* +* As a counterpart to the access to the source code and rights to copy, +* modify and redistribute granted by the license, users are provided only +* with a limited warranty and the software's author, the holder of the +* economic rights, and the successive licensors have only limited liability. +* +* In this respect, the user's attention is drawn to the risks associated +* with loading, using, modifying and/or developing or reproducing the +* software by the user in light of its specific status of free software, +* that may mean that it is complicated to manipulate, and that also +* therefore means that it is reserved for developers and experienced +* professionals having in-depth computer knowledge. Users are therefore +* encouraged to load and test the software's suitability as regards their +* requirements in conditions enabling the security of their systems and/or +* data to be ensured and, more generally, to use and operate it in the +* same conditions as regards security. +* The fact that you are presently reading this means that you have had +* knowledge of the CeCILL license and that you accept its terms. +* +* ParadisEO WebSite : http://paradiseo.gforge.inria.fr +* Contact: paradiseo-help@lists.gforge.inria.fr +* +*/ +//----------------------------------------------------------------------------- + +#include +#include + +FlowShopBenchmarkParser::FlowShopBenchmarkParser(const std::string _benchmarkFileName) +{ + init(_benchmarkFileName); +} + + +const unsigned int FlowShopBenchmarkParser::getM() +{ + return M; +} + + +const unsigned int FlowShopBenchmarkParser::getN() +{ + return N; +} + + +const std::vector< std::vector > FlowShopBenchmarkParser::getP() +{ + return p; +} + + +const std::vector FlowShopBenchmarkParser::getD() +{ + return d; +} + + +void FlowShopBenchmarkParser::printOn(std::ostream & _os) const + { + _os << "M=" << M << " N=" << N << std::endl; + _os << "*** processing times" << std::endl; + for (unsigned int i=0; i > (M,N); + d = std::vector (N); + // for each job... + for (unsigned int j=0 ; j j) + getline(inputFile, buffer, '\n'); + // due-date of the job j + getline(inputFile, buffer, '\n'); + d[j] = atoi(buffer.data()); + // processing times of the job j on each machine + getline(inputFile, buffer, '\n'); + start = buffer.find_first_not_of(" "); + for (unsigned int i=0 ; i +* Copyright (C) DOLPHIN Project-Team, INRIA Futurs, 2006-2007 +* (C) OPAC Team, LIFL, 2002-2007 +* +* Arnaud Liefooghe +* +* This software is governed by the CeCILL license under French law and +* abiding by the rules of distribution of free software. You can use, +* modify and/ or redistribute the software under the terms of the CeCILL +* license as circulated by CEA, CNRS and INRIA at the following URL +* "http://www.cecill.info". +* +* As a counterpart to the access to the source code and rights to copy, +* modify and redistribute granted by the license, users are provided only +* with a limited warranty and the software's author, the holder of the +* economic rights, and the successive licensors have only limited liability. +* +* In this respect, the user's attention is drawn to the risks associated +* with loading, using, modifying and/or developing or reproducing the +* software by the user in light of its specific status of free software, +* that may mean that it is complicated to manipulate, and that also +* therefore means that it is reserved for developers and experienced +* professionals having in-depth computer knowledge. Users are therefore +* encouraged to load and test the software's suitability as regards their +* requirements in conditions enabling the security of their systems and/or +* data to be ensured and, more generally, to use and operate it in the +* same conditions as regards security. +* The fact that you are presently reading this means that you have had +* knowledge of the CeCILL license and that you accept its terms. +* +* ParadisEO WebSite : http://paradiseo.gforge.inria.fr +* Contact: paradiseo-help@lists.gforge.inria.fr +* +*/ +//----------------------------------------------------------------------------- + +#ifndef FLOWSHOPBENCHMARKPARSER_H_ +#define FLOWSHOPBENCHMARKPARSER_H_ + +#include +#include +#include + +/** + * Class to handle parameters of a flow-shop instance from a benchmark file + */ +class FlowShopBenchmarkParser + { + public: + + /** + * Ctor + * @param _benchmarkFileName the name of the benchmark file + */ + FlowShopBenchmarkParser(const std::string _benchmarkFileName); + + + /** + * the number of machines + */ + const unsigned int getM(); + + + /** + * the number of jobs + */ + const unsigned int getN(); + + + /** + * the processing times + */ + const std::vector < std::vector < unsigned int > > getP(); + + + /** + * the due-dates + */ + const std::vector < unsigned int > getD(); + + + /** + * printing... + */ + void printOn(std::ostream & _os) const; + + + private: + + /** number of machines */ + unsigned int M; + /** number of jobs */ + unsigned int N; + /** p[i][j] = processing time of job j on machine i */ + std::vector < std::vector < unsigned int > > p; + /** d[j] = due-date of the job j */ + std::vector < unsigned int > d; + + + /** + * Initialisation of the parameters with the data contained in the benchmark file + * @param _benchmarkFileName the name of the benchmark file + */ + void init(const std::string _benchmarkFileName); + + }; + +#endif /*FLOWSHOPBENCHMARKPARSER_H_*/ diff --git a/contribution/branches/MOLS/flowshop/src/FlowShopEval.cpp b/contribution/branches/MOLS/flowshop/src/FlowShopEval.cpp new file mode 100755 index 000000000..08465a6f8 --- /dev/null +++ b/contribution/branches/MOLS/flowshop/src/FlowShopEval.cpp @@ -0,0 +1,90 @@ +/* +* +* Copyright (C) DOLPHIN Project-Team, INRIA Futurs, 2006-2007 +* (C) OPAC Team, LIFL, 2002-2007 +* +* Arnaud Liefooghe +* +* This software is governed by the CeCILL license under French law and +* abiding by the rules of distribution of free software. You can use, +* modify and/ or redistribute the software under the terms of the CeCILL +* license as circulated by CEA, CNRS and INRIA at the following URL +* "http://www.cecill.info". +* +* As a counterpart to the access to the source code and rights to copy, +* modify and redistribute granted by the license, users are provided only +* with a limited warranty and the software's author, the holder of the +* economic rights, and the successive licensors have only limited liability. +* +* In this respect, the user's attention is drawn to the risks associated +* with loading, using, modifying and/or developing or reproducing the +* software by the user in light of its specific status of free software, +* that may mean that it is complicated to manipulate, and that also +* therefore means that it is reserved for developers and experienced +* professionals having in-depth computer knowledge. Users are therefore +* encouraged to load and test the software's suitability as regards their +* requirements in conditions enabling the security of their systems and/or +* data to be ensured and, more generally, to use and operate it in the +* same conditions as regards security. +* The fact that you are presently reading this means that you have had +* knowledge of the CeCILL license and that you accept its terms. +* +* ParadisEO WebSite : http://paradiseo.gforge.inria.fr +* Contact: paradiseo-help@lists.gforge.inria.fr +* +*/ +//----------------------------------------------------------------------------- + +#include + + +FlowShopEval::FlowShopEval(unsigned int _M, unsigned int _N, const std::vector< std::vector > & _p, const std::vector & _d) : + M(_M), N (_N), p(_p), d(_d) +{} + + +void FlowShopEval::operator()(FlowShop & _flowshop) +{ + FlowShopObjectiveVector objVector; + objVector[0] = makespan(_flowshop); + objVector[1] = tardiness(_flowshop); + _flowshop.objectiveVector(objVector); +} + + + +double FlowShopEval::makespan(const FlowShop & _flowshop) +{ + // completion times computation for each job on each machine + // C[i][j] = completion of the jth job of the scheduling on the ith machine + std::vector< std::vector > C = completionTime(_flowshop); + return C[M-1][_flowshop[N-1]]; +} + + +double FlowShopEval::tardiness(const FlowShop & _flowshop) +{ + // completion times computation for each job on each machine + // C[i][j] = completion of the jth job of the scheduling on the ith machine + std::vector< std::vector > C = completionTime(_flowshop); + // tardiness computation + unsigned int long sum = 0; + for (unsigned int j=0 ; j > FlowShopEval::completionTime(const FlowShop & _flowshop) +{ + std::vector< std::vector > C(M,N); + C[0][_flowshop[0]] = p[0][_flowshop[0]]; + for (unsigned int j=1; j +* Copyright (C) DOLPHIN Project-Team, INRIA Futurs, 2006-2007 +* (C) OPAC Team, LIFL, 2002-2007 +* +* Arnaud Liefooghe +* +* This software is governed by the CeCILL license under French law and +* abiding by the rules of distribution of free software. You can use, +* modify and/ or redistribute the software under the terms of the CeCILL +* license as circulated by CEA, CNRS and INRIA at the following URL +* "http://www.cecill.info". +* +* As a counterpart to the access to the source code and rights to copy, +* modify and redistribute granted by the license, users are provided only +* with a limited warranty and the software's author, the holder of the +* economic rights, and the successive licensors have only limited liability. +* +* In this respect, the user's attention is drawn to the risks associated +* with loading, using, modifying and/or developing or reproducing the +* software by the user in light of its specific status of free software, +* that may mean that it is complicated to manipulate, and that also +* therefore means that it is reserved for developers and experienced +* professionals having in-depth computer knowledge. Users are therefore +* encouraged to load and test the software's suitability as regards their +* requirements in conditions enabling the security of their systems and/or +* data to be ensured and, more generally, to use and operate it in the +* same conditions as regards security. +* The fact that you are presently reading this means that you have had +* knowledge of the CeCILL license and that you accept its terms. +* +* ParadisEO WebSite : http://paradiseo.gforge.inria.fr +* Contact: paradiseo-help@lists.gforge.inria.fr +* +*/ +//----------------------------------------------------------------------------- + +#ifndef FLOWSHOPEVAL_H_ +#define FLOWSHOPEVAL_H_ + +#include +#include +#include + +/** + * Evaluation of the objective vector a (multi-objective) FlowShop object + */ +class FlowShopEval : public moeoEvalFunc + { + public: + + /** + * Ctor + * @param _M the number of machines + * @param _N the number of jobs to schedule + * @param _p the processing times + * @param _d the due dates + */ + FlowShopEval(unsigned int _M, unsigned int _N, const std::vector< std::vector > & _p, const std::vector & _d); + + + /** + * computation of the multi-objective evaluation of a FlowShop object + * @param _flowshop the FlowShop object to evaluate + */ + void operator()(FlowShop & _flowshop); + + + private: + + /** number of machines */ + unsigned int M; + /** number of jobs */ + unsigned int N; + /** p[i][j] = processing time of job j on machine i */ + std::vector< std::vector < unsigned int > > p; + /** d[j] = due-date of the job j */ + std::vector < unsigned int > d; + + + /** + * computation of the makespan + * @param _flowshop the genotype to evaluate + */ + double makespan(const FlowShop & _flowshop); + + + /** + * computation of the tardiness + * @param _flowshop the genotype to evaluate + */ + double tardiness(const FlowShop & _flowshop); + + + /** + * computation of the completion times of a scheduling (for each job on each machine) + * C[i][j] = completion of the jth job of the scheduling on the ith machine + * @param _flowshop the genotype to evaluate + */ + std::vector< std::vector > completionTime (const FlowShop & _flowshop); + + }; + +#endif /*FLOWSHOPEVAL_H_*/ diff --git a/contribution/branches/MOLS/flowshop/src/FlowShopInit.cpp b/contribution/branches/MOLS/flowshop/src/FlowShopInit.cpp new file mode 100755 index 000000000..dde677384 --- /dev/null +++ b/contribution/branches/MOLS/flowshop/src/FlowShopInit.cpp @@ -0,0 +1,64 @@ +/* +* +* Copyright (C) DOLPHIN Project-Team, INRIA Futurs, 2006-2007 +* (C) OPAC Team, LIFL, 2002-2007 +* +* Arnaud Liefooghe +* +* This software is governed by the CeCILL license under French law and +* abiding by the rules of distribution of free software. You can use, +* modify and/ or redistribute the software under the terms of the CeCILL +* license as circulated by CEA, CNRS and INRIA at the following URL +* "http://www.cecill.info". +* +* As a counterpart to the access to the source code and rights to copy, +* modify and redistribute granted by the license, users are provided only +* with a limited warranty and the software's author, the holder of the +* economic rights, and the successive licensors have only limited liability. +* +* In this respect, the user's attention is drawn to the risks associated +* with loading, using, modifying and/or developing or reproducing the +* software by the user in light of its specific status of free software, +* that may mean that it is complicated to manipulate, and that also +* therefore means that it is reserved for developers and experienced +* professionals having in-depth computer knowledge. Users are therefore +* encouraged to load and test the software's suitability as regards their +* requirements in conditions enabling the security of their systems and/or +* data to be ensured and, more generally, to use and operate it in the +* same conditions as regards security. +* The fact that you are presently reading this means that you have had +* knowledge of the CeCILL license and that you accept its terms. +* +* ParadisEO WebSite : http://paradiseo.gforge.inria.fr +* Contact: paradiseo-help@lists.gforge.inria.fr +* +*/ +//----------------------------------------------------------------------------- + +#include + + +FlowShopInit::FlowShopInit(unsigned int _N) : N(_N) +{} + + +void FlowShopInit::operator()(FlowShop & _flowshop) +{ + // scheduling vector + std::vector scheduling(N); + // initialisation of possible values + std::vector possibles(N); + for (unsigned int i=0 ; i +* Copyright (C) DOLPHIN Project-Team, INRIA Futurs, 2006-2007 +* (C) OPAC Team, LIFL, 2002-2007 +* +* Arnaud Liefooghe +* +* This software is governed by the CeCILL license under French law and +* abiding by the rules of distribution of free software. You can use, +* modify and/ or redistribute the software under the terms of the CeCILL +* license as circulated by CEA, CNRS and INRIA at the following URL +* "http://www.cecill.info". +* +* As a counterpart to the access to the source code and rights to copy, +* modify and redistribute granted by the license, users are provided only +* with a limited warranty and the software's author, the holder of the +* economic rights, and the successive licensors have only limited liability. +* +* In this respect, the user's attention is drawn to the risks associated +* with loading, using, modifying and/or developing or reproducing the +* software by the user in light of its specific status of free software, +* that may mean that it is complicated to manipulate, and that also +* therefore means that it is reserved for developers and experienced +* professionals having in-depth computer knowledge. Users are therefore +* encouraged to load and test the software's suitability as regards their +* requirements in conditions enabling the security of their systems and/or +* data to be ensured and, more generally, to use and operate it in the +* same conditions as regards security. +* The fact that you are presently reading this means that you have had +* knowledge of the CeCILL license and that you accept its terms. +* +* ParadisEO WebSite : http://paradiseo.gforge.inria.fr +* Contact: paradiseo-help@lists.gforge.inria.fr +* +*/ +//----------------------------------------------------------------------------- + +#ifndef FLOWSHOPINIT_H_ +#define FLOWSHOPINIT_H_ + +#include +#include + +/** + * Initialization of a random genotype built by the default constructor of the FlowShop class + */ +typedef eoInitPermutation FlowShopInit; + +#endif /*FLOWSHOPINIT_H_*/ diff --git a/contribution/branches/MOLS/flowshop/src/FlowShopObjectiveVector.h b/contribution/branches/MOLS/flowshop/src/FlowShopObjectiveVector.h new file mode 100755 index 000000000..65814085f --- /dev/null +++ b/contribution/branches/MOLS/flowshop/src/FlowShopObjectiveVector.h @@ -0,0 +1,49 @@ +/* +* +* Copyright (C) DOLPHIN Project-Team, INRIA Futurs, 2006-2007 +* (C) OPAC Team, LIFL, 2002-2007 +* +* Arnaud Liefooghe +* +* This software is governed by the CeCILL license under French law and +* abiding by the rules of distribution of free software. You can use, +* modify and/ or redistribute the software under the terms of the CeCILL +* license as circulated by CEA, CNRS and INRIA at the following URL +* "http://www.cecill.info". +* +* As a counterpart to the access to the source code and rights to copy, +* modify and redistribute granted by the license, users are provided only +* with a limited warranty and the software's author, the holder of the +* economic rights, and the successive licensors have only limited liability. +* +* In this respect, the user's attention is drawn to the risks associated +* with loading, using, modifying and/or developing or reproducing the +* software by the user in light of its specific status of free software, +* that may mean that it is complicated to manipulate, and that also +* therefore means that it is reserved for developers and experienced +* professionals having in-depth computer knowledge. Users are therefore +* encouraged to load and test the software's suitability as regards their +* requirements in conditions enabling the security of their systems and/or +* data to be ensured and, more generally, to use and operate it in the +* same conditions as regards security. +* The fact that you are presently reading this means that you have had +* knowledge of the CeCILL license and that you accept its terms. +* +* ParadisEO WebSite : http://paradiseo.gforge.inria.fr +* Contact: paradiseo-help@lists.gforge.inria.fr +* +*/ +//----------------------------------------------------------------------------- + +#ifndef FLOWSHOPOBJECTIVEVECTOR_H_ +#define FLOWSHOPOBJECTIVEVECTOR_H_ + +#include +#include + +/** + * Definition of the objective vector for multi-objective flow-shop problems: a vector of doubles + */ +typedef moeoRealObjectiveVector < FlowShopObjectiveVectorTraits > FlowShopObjectiveVector; + +#endif /*FLOWSHOPOBJECTIVEVECTOR_H_*/ diff --git a/contribution/branches/MOLS/flowshop/src/FlowShopObjectiveVectorTraits.cpp b/contribution/branches/MOLS/flowshop/src/FlowShopObjectiveVectorTraits.cpp new file mode 100755 index 000000000..08487e873 --- /dev/null +++ b/contribution/branches/MOLS/flowshop/src/FlowShopObjectiveVectorTraits.cpp @@ -0,0 +1,57 @@ +/* +* +* Copyright (C) DOLPHIN Project-Team, INRIA Futurs, 2006-2007 +* (C) OPAC Team, LIFL, 2002-2007 +* +* Arnaud Liefooghe +* +* This software is governed by the CeCILL license under French law and +* abiding by the rules of distribution of free software. You can use, +* modify and/ or redistribute the software under the terms of the CeCILL +* license as circulated by CEA, CNRS and INRIA at the following URL +* "http://www.cecill.info". +* +* As a counterpart to the access to the source code and rights to copy, +* modify and redistribute granted by the license, users are provided only +* with a limited warranty and the software's author, the holder of the +* economic rights, and the successive licensors have only limited liability. +* +* In this respect, the user's attention is drawn to the risks associated +* with loading, using, modifying and/or developing or reproducing the +* software by the user in light of its specific status of free software, +* that may mean that it is complicated to manipulate, and that also +* therefore means that it is reserved for developers and experienced +* professionals having in-depth computer knowledge. Users are therefore +* encouraged to load and test the software's suitability as regards their +* requirements in conditions enabling the security of their systems and/or +* data to be ensured and, more generally, to use and operate it in the +* same conditions as regards security. +* The fact that you are presently reading this means that you have had +* knowledge of the CeCILL license and that you accept its terms. +* +* ParadisEO WebSite : http://paradiseo.gforge.inria.fr +* Contact: paradiseo-help@lists.gforge.inria.fr +* +*/ +//----------------------------------------------------------------------------- + +#include + + +bool FlowShopObjectiveVectorTraits::minimizing (int _i) +{ + // minimizing both + return true; +} + +bool FlowShopObjectiveVectorTraits::maximizing (int _i) +{ + // minimizing both + return false; +} + +unsigned int FlowShopObjectiveVectorTraits::nObjectives () +{ + // 2 objectives + return 2; +} diff --git a/contribution/branches/MOLS/flowshop/src/FlowShopObjectiveVectorTraits.h b/contribution/branches/MOLS/flowshop/src/FlowShopObjectiveVectorTraits.h new file mode 100755 index 000000000..b95d6f2ea --- /dev/null +++ b/contribution/branches/MOLS/flowshop/src/FlowShopObjectiveVectorTraits.h @@ -0,0 +1,71 @@ +/* +* +* Copyright (C) DOLPHIN Project-Team, INRIA Futurs, 2006-2007 +* (C) OPAC Team, LIFL, 2002-2007 +* +* Arnaud Liefooghe +* +* This software is governed by the CeCILL license under French law and +* abiding by the rules of distribution of free software. You can use, +* modify and/ or redistribute the software under the terms of the CeCILL +* license as circulated by CEA, CNRS and INRIA at the following URL +* "http://www.cecill.info". +* +* As a counterpart to the access to the source code and rights to copy, +* modify and redistribute granted by the license, users are provided only +* with a limited warranty and the software's author, the holder of the +* economic rights, and the successive licensors have only limited liability. +* +* In this respect, the user's attention is drawn to the risks associated +* with loading, using, modifying and/or developing or reproducing the +* software by the user in light of its specific status of free software, +* that may mean that it is complicated to manipulate, and that also +* therefore means that it is reserved for developers and experienced +* professionals having in-depth computer knowledge. Users are therefore +* encouraged to load and test the software's suitability as regards their +* requirements in conditions enabling the security of their systems and/or +* data to be ensured and, more generally, to use and operate it in the +* same conditions as regards security. +* The fact that you are presently reading this means that you have had +* knowledge of the CeCILL license and that you accept its terms. +* +* ParadisEO WebSite : http://paradiseo.gforge.inria.fr +* Contact: paradiseo-help@lists.gforge.inria.fr +* +*/ +//----------------------------------------------------------------------------- + +#ifndef FLOWSHOPOBJECTIVEVECTORTRAITS_H_ +#define FLOWSHOPOBJECTIVEVECTORTRAITS_H_ + +#include + +/** + * Definition of the objective vector traits for multi-objective flow-shop problems + */ +class FlowShopObjectiveVectorTraits : public moeoObjectiveVectorTraits + { + public: + + /** + * Returns true if the _ith objective have to be minimzed + * @param _i index of the objective + */ + static bool minimizing (int _i); + + + /** + * Returns true if the _ith objective have to be maximzed + * @param _i index of the objective + */ + static bool maximizing (int _i); + + + /** + * Returns the number of objectives + */ + static unsigned int nObjectives (); + + }; + +#endif /*FLOWSHOPOBJECTIVEVECTORTRAITS_H_*/ diff --git a/contribution/branches/MOLS/flowshop/src/FlowShopOpCrossoverQuad.cpp b/contribution/branches/MOLS/flowshop/src/FlowShopOpCrossoverQuad.cpp new file mode 100755 index 000000000..5b64c7e41 --- /dev/null +++ b/contribution/branches/MOLS/flowshop/src/FlowShopOpCrossoverQuad.cpp @@ -0,0 +1,110 @@ +/* +* +* Copyright (C) DOLPHIN Project-Team, INRIA Futurs, 2006-2007 +* (C) OPAC Team, LIFL, 2002-2007 +* +* Arnaud Liefooghe +* +* This software is governed by the CeCILL license under French law and +* abiding by the rules of distribution of free software. You can use, +* modify and/ or redistribute the software under the terms of the CeCILL +* license as circulated by CEA, CNRS and INRIA at the following URL +* "http://www.cecill.info". +* +* As a counterpart to the access to the source code and rights to copy, +* modify and redistribute granted by the license, users are provided only +* with a limited warranty and the software's author, the holder of the +* economic rights, and the successive licensors have only limited liability. +* +* In this respect, the user's attention is drawn to the risks associated +* with loading, using, modifying and/or developing or reproducing the +* software by the user in light of its specific status of free software, +* that may mean that it is complicated to manipulate, and that also +* therefore means that it is reserved for developers and experienced +* professionals having in-depth computer knowledge. Users are therefore +* encouraged to load and test the software's suitability as regards their +* requirements in conditions enabling the security of their systems and/or +* data to be ensured and, more generally, to use and operate it in the +* same conditions as regards security. +* The fact that you are presently reading this means that you have had +* knowledge of the CeCILL license and that you accept its terms. +* +* ParadisEO WebSite : http://paradiseo.gforge.inria.fr +* Contact: paradiseo-help@lists.gforge.inria.fr +* +*/ +//----------------------------------------------------------------------------- + +#include + + +std::string FlowShopOpCrossoverQuad::className() const + { + return "FlowShopOpCrossoverQuad"; + } + + +bool FlowShopOpCrossoverQuad::operator()(FlowShop & _flowshop1, FlowShop & _flowshop2) +{ + bool oneAtLeastIsModified; + // computation of the 2 random points + unsigned int point1, point2; + do + { + point1 = rng.random(std::min(_flowshop1.size(), _flowshop2.size())); + point2 = rng.random(std::min(_flowshop1.size(), _flowshop2.size())); + } + while (fabs((double) point1-point2) <= 2); + // computation of the offspring + FlowShop offspring1 = generateOffspring(_flowshop1, _flowshop2, point1, point2); + FlowShop offspring2 = generateOffspring(_flowshop2, _flowshop1, point1, point2); + // does at least one genotype has been modified ? + if ((_flowshop1 != offspring1) || (_flowshop2 != offspring2)) + { + // update + _flowshop1.value(offspring1); + _flowshop2.value(offspring2); + // at least one genotype has been modified + oneAtLeastIsModified = true; + } + else + { + // no genotype has been modified + oneAtLeastIsModified = false; + } + // return 'true' if at least one genotype has been modified + return oneAtLeastIsModified; +} + + +FlowShop FlowShopOpCrossoverQuad::generateOffspring(const FlowShop & _parent1, const FlowShop & _parent2, unsigned int _point1, unsigned int _point2) +{ + FlowShop result = _parent1; + std::vector taken_values(result.size(), false); + if (_point1 > _point2) + std::swap(_point1, _point2); + /* first parent */ + for (unsigned int i=0 ; i<=_point1 ; i++) + { + // result[i] == _parent1[i] + taken_values[_parent1[i]] = true; + } + for (unsigned int i=_point2 ; i +* Copyright (C) DOLPHIN Project-Team, INRIA Futurs, 2006-2007 +* (C) OPAC Team, LIFL, 2002-2007 +* +* Arnaud Liefooghe +* +* This software is governed by the CeCILL license under French law and +* abiding by the rules of distribution of free software. You can use, +* modify and/ or redistribute the software under the terms of the CeCILL +* license as circulated by CEA, CNRS and INRIA at the following URL +* "http://www.cecill.info". +* +* As a counterpart to the access to the source code and rights to copy, +* modify and redistribute granted by the license, users are provided only +* with a limited warranty and the software's author, the holder of the +* economic rights, and the successive licensors have only limited liability. +* +* In this respect, the user's attention is drawn to the risks associated +* with loading, using, modifying and/or developing or reproducing the +* software by the user in light of its specific status of free software, +* that may mean that it is complicated to manipulate, and that also +* therefore means that it is reserved for developers and experienced +* professionals having in-depth computer knowledge. Users are therefore +* encouraged to load and test the software's suitability as regards their +* requirements in conditions enabling the security of their systems and/or +* data to be ensured and, more generally, to use and operate it in the +* same conditions as regards security. +* The fact that you are presently reading this means that you have had +* knowledge of the CeCILL license and that you accept its terms. +* +* ParadisEO WebSite : http://paradiseo.gforge.inria.fr +* Contact: paradiseo-help@lists.gforge.inria.fr +* +*/ +//----------------------------------------------------------------------------- + +#ifndef FLOWSHOPOPCROSSOVERQUAD_H_ +#define FLOWSHOPOPCROSSOVERQUAD_H_ + +#include +#include + +/** + * Quadratic crossover operator for flow-shop (modify the both genotypes) + */ +class FlowShopOpCrossoverQuad : public eoQuadOp < FlowShop > + { + public: + + /** + * the class name (used to display statistics) + */ + std::string className() const; + + + /** + * eoQuad crossover - _flowshop1 and _flowshop2 are the (future) offspring, i.e. _copies_ of the parents + * @param _flowshop1 the first parent + * @param _flowshop2 the second parent + */ + bool operator()(FlowShop & _flowshop1, FlowShop & _flowshop2); + + + private: + + /** + * generation of an offspring by a 2 points crossover + * @param _parent1 the first parent + * @param _parent2 the second parent + * @param _point1 the first point + * @param _point2 the second point + */ + FlowShop generateOffspring(const FlowShop & _parent1, const FlowShop & _parent2, unsigned int _point1, unsigned int _point2); + + }; + +#endif /*FLOWSHOPOPCROSSOVERQUAD_H_*/ diff --git a/contribution/branches/MOLS/flowshop/src/FlowShopOpMutationExchange.h b/contribution/branches/MOLS/flowshop/src/FlowShopOpMutationExchange.h new file mode 100755 index 000000000..51801d9d9 --- /dev/null +++ b/contribution/branches/MOLS/flowshop/src/FlowShopOpMutationExchange.h @@ -0,0 +1,49 @@ +/* +* +* Copyright (C) DOLPHIN Project-Team, INRIA Futurs, 2006-2007 +* (C) OPAC Team, LIFL, 2002-2007 +* +* Arnaud Liefooghe +* +* This software is governed by the CeCILL license under French law and +* abiding by the rules of distribution of free software. You can use, +* modify and/ or redistribute the software under the terms of the CeCILL +* license as circulated by CEA, CNRS and INRIA at the following URL +* "http://www.cecill.info". +* +* As a counterpart to the access to the source code and rights to copy, +* modify and redistribute granted by the license, users are provided only +* with a limited warranty and the software's author, the holder of the +* economic rights, and the successive licensors have only limited liability. +* +* In this respect, the user's attention is drawn to the risks associated +* with loading, using, modifying and/or developing or reproducing the +* software by the user in light of its specific status of free software, +* that may mean that it is complicated to manipulate, and that also +* therefore means that it is reserved for developers and experienced +* professionals having in-depth computer knowledge. Users are therefore +* encouraged to load and test the software's suitability as regards their +* requirements in conditions enabling the security of their systems and/or +* data to be ensured and, more generally, to use and operate it in the +* same conditions as regards security. +* The fact that you are presently reading this means that you have had +* knowledge of the CeCILL license and that you accept its terms. +* +* ParadisEO WebSite : http://paradiseo.gforge.inria.fr +* Contact: paradiseo-help@lists.gforge.inria.fr +* +*/ +//----------------------------------------------------------------------------- + +#ifndef FLOWSHOPOPMUTATIONEXCHANGE_H_ +#define FLOWSHOPOPMUTATIONEXCHANGE_H_ + +#include +#include + +/** + * Exchange mutation operator for the flow-shop + */ +typedef eoSwapMutation FlowShopOpMutationExchange; + +#endif /*FLOWSHOPOPMUTATIONEXCHANGE_H_*/ diff --git a/contribution/branches/MOLS/flowshop/src/FlowShopOpMutationShift.h b/contribution/branches/MOLS/flowshop/src/FlowShopOpMutationShift.h new file mode 100755 index 000000000..523bb88f0 --- /dev/null +++ b/contribution/branches/MOLS/flowshop/src/FlowShopOpMutationShift.h @@ -0,0 +1,49 @@ +/* +* +* Copyright (C) DOLPHIN Project-Team, INRIA Futurs, 2006-2007 +* (C) OPAC Team, LIFL, 2002-2007 +* +* Arnaud Liefooghe +* +* This software is governed by the CeCILL license under French law and +* abiding by the rules of distribution of free software. You can use, +* modify and/ or redistribute the software under the terms of the CeCILL +* license as circulated by CEA, CNRS and INRIA at the following URL +* "http://www.cecill.info". +* +* As a counterpart to the access to the source code and rights to copy, +* modify and redistribute granted by the license, users are provided only +* with a limited warranty and the software's author, the holder of the +* economic rights, and the successive licensors have only limited liability. +* +* In this respect, the user's attention is drawn to the risks associated +* with loading, using, modifying and/or developing or reproducing the +* software by the user in light of its specific status of free software, +* that may mean that it is complicated to manipulate, and that also +* therefore means that it is reserved for developers and experienced +* professionals having in-depth computer knowledge. Users are therefore +* encouraged to load and test the software's suitability as regards their +* requirements in conditions enabling the security of their systems and/or +* data to be ensured and, more generally, to use and operate it in the +* same conditions as regards security. +* The fact that you are presently reading this means that you have had +* knowledge of the CeCILL license and that you accept its terms. +* +* ParadisEO WebSite : http://paradiseo.gforge.inria.fr +* Contact: paradiseo-help@lists.gforge.inria.fr +* +*/ +//----------------------------------------------------------------------------- + +#ifndef FLOWSHOPOPMUTATIONSHIFT_H_ +#define FLOWSHOPOPMUTATIONSHIFT_H_ + +#include +#include + +/** + * Shift mutation operator for flow-shop + */ +typedef eoShiftMutation FlowShopOpMutationShift; + +#endif /*FLOWSHOPOPMUTATIONSHIFT_H_*/ diff --git a/contribution/branches/MOLS/flowshop/src/exchange_move.cpp b/contribution/branches/MOLS/flowshop/src/exchange_move.cpp new file mode 100755 index 000000000..8073548d9 --- /dev/null +++ b/contribution/branches/MOLS/flowshop/src/exchange_move.cpp @@ -0,0 +1,67 @@ +#include "exchange_move.h" + +/*ExchangeMove ExchangeMove :: operator ! () const + { + ExchangeMove move = * this ; + FlowShop __flowshop; + //std :: swap (move.first, move.second) ; + __flowshop[move.second] =__flowshop[move.first]; + return move ; + }*/ + +//void ExchangeMove :: operator () (FlowShop & __flowshop) +void ExchangeMove :: operator () (FlowShop& __flowshop) +{ + //bool isModified; + //ExchangeMove move; + int direction; + unsigned int tmp; + //FlowShop result = __flowshop; + + /*std :: vector seq_cities ; + + for (unsigned int i = second ; i > first ; i --) + { + seq_cities.push_back (__flowshop [i]) ; + } + + unsigned int j = 0 ; + for (unsigned int i = first + 1 ; i < second + 1 ; i ++) + { + __flowshop[i] = seq_cities [j ++] ; + }*/ + if (first < second) + direction = 1; + else + direction = -1; + // mutation + tmp = __flowshop[first]; + for (unsigned int i=first ; i!= second ; i+=direction) + __flowshop[i] = __flowshop[i+direction]; + __flowshop[ second] = tmp; + // update (if necessary) + /* if (result != __flowshop) + { + // update + __flowshop.value(result); + // the genotype has been modified + //isModified = true; + } + /*else + { + // the genotype has not been modified + isModified = false; + }*/ + // return 'true' if the genotype has been modified + //return isModified; +} + +void ExchangeMove :: readFrom (std :: istream & __is) +{ + __is >> first >> second ; +} + +void ExchangeMove :: printOn (std :: ostream & __os) const + { + __os << first << ' ' << second ; + } diff --git a/contribution/branches/MOLS/flowshop/src/exchange_move.h b/contribution/branches/MOLS/flowshop/src/exchange_move.h new file mode 100755 index 000000000..f2dda4267 --- /dev/null +++ b/contribution/branches/MOLS/flowshop/src/exchange_move.h @@ -0,0 +1,28 @@ +#ifndef exchange_move_h +#define exchange_move_h + +#include + +#include +#include +//#include + +#include + +class ExchangeMove : public moMove , public std :: pair , public eoPersistent + { + + public : + + + ExchangeMove operator ! () const ; + + //void operator () (FlowShop & __FlowShop) ; + void operator () (FlowShop & __FlowShop) ; + + void readFrom (std :: istream & __is) ; + + void printOn (std :: ostream & __os) const ; + } ; + +#endif diff --git a/contribution/branches/MOLS/flowshop/src/exchange_move_init.cpp b/contribution/branches/MOLS/flowshop/src/exchange_move_init.cpp new file mode 100755 index 000000000..dbd3a2b74 --- /dev/null +++ b/contribution/branches/MOLS/flowshop/src/exchange_move_init.cpp @@ -0,0 +1,13 @@ +#include +#include + +void ExchangeMoveInit :: operator () (ExchangeMove & _move, const FlowShop & _flowshop) +{ + FlowShop flowshop=_flowshop; + //eoRNG rng; + do + { + _move.first = rng.random(flowshop.size()) ; + _move.second = rng.random(flowshop.size()) ; + }while(_move.first == _move.second); +} diff --git a/contribution/branches/MOLS/flowshop/src/exchange_move_init.h b/contribution/branches/MOLS/flowshop/src/exchange_move_init.h new file mode 100755 index 000000000..866698453 --- /dev/null +++ b/contribution/branches/MOLS/flowshop/src/exchange_move_init.h @@ -0,0 +1,20 @@ +#ifndef exchange_move_init_h +#define exchange_move_init_h + +#include + +//#include + +#include "exchange_move.h" + +/** It sets the first couple of edges */ +class ExchangeMoveInit : public moMoveInit + { + + public : + + void operator () (ExchangeMove & _move, const FlowShop & _flowshop) ; + + } ; + +#endif diff --git a/contribution/branches/MOLS/flowshop/src/exchange_move_next.cpp b/contribution/branches/MOLS/flowshop/src/exchange_move_next.cpp new file mode 100755 index 000000000..eeeab939b --- /dev/null +++ b/contribution/branches/MOLS/flowshop/src/exchange_move_next.cpp @@ -0,0 +1,30 @@ +#include "exchange_move_next.h" +//#include "graph.h" +//int ExchangeMoveNext ::init(static int i) + + +bool ExchangeMoveNext :: operator () (ExchangeMove & _move, const FlowShop & _flowshop) +{ + FlowShop flowshop =_flowshop; + + + if (_move.first >= (flowshop.size() - 4))// && _move.second == _move.first + 2) + //if (_move.second == flowshop.size ()-2) + { + return false ; + } + else + { + //std::cout<<_move.second<<" "<<_move.first<<" "<= flowshop.size () - 1) + { + _move.first ++ ; + _move.second = _move.first + 2 ; + } + + + return true ; + } + +} diff --git a/contribution/branches/MOLS/flowshop/src/exchange_move_next.h b/contribution/branches/MOLS/flowshop/src/exchange_move_next.h new file mode 100755 index 000000000..798acfa5a --- /dev/null +++ b/contribution/branches/MOLS/flowshop/src/exchange_move_next.h @@ -0,0 +1,22 @@ +#ifndef exchange_move_next_h +#define exchange_move_next_h + +#include +#include "exchange_move.h" + +//#include + +/** It updates a couple of edges */ + +class ExchangeMoveNext : public moNextMove + { + + public : + + + bool operator () (ExchangeMove & _move, const FlowShop & _flowshop) ; + + + } ; + +#endif diff --git a/contribution/branches/MOLS/flowshop/src/make_eval_FlowShop.h b/contribution/branches/MOLS/flowshop/src/make_eval_FlowShop.h new file mode 100755 index 000000000..4a17049d1 --- /dev/null +++ b/contribution/branches/MOLS/flowshop/src/make_eval_FlowShop.h @@ -0,0 +1,81 @@ +/* +* +* Copyright (C) DOLPHIN Project-Team, INRIA Futurs, 2006-2007 +* (C) OPAC Team, LIFL, 2002-2007 +* +* Arnaud Liefooghe +* +* This software is governed by the CeCILL license under French law and +* abiding by the rules of distribution of free software. You can use, +* modify and/ or redistribute the software under the terms of the CeCILL +* license as circulated by CEA, CNRS and INRIA at the following URL +* "http://www.cecill.info". +* +* As a counterpart to the access to the source code and rights to copy, +* modify and redistribute granted by the license, users are provided only +* with a limited warranty and the software's author, the holder of the +* economic rights, and the successive licensors have only limited liability. +* +* In this respect, the user's attention is drawn to the risks associated +* with loading, using, modifying and/or developing or reproducing the +* software by the user in light of its specific status of free software, +* that may mean that it is complicated to manipulate, and that also +* therefore means that it is reserved for developers and experienced +* professionals having in-depth computer knowledge. Users are therefore +* encouraged to load and test the software's suitability as regards their +* requirements in conditions enabling the security of their systems and/or +* data to be ensured and, more generally, to use and operate it in the +* same conditions as regards security. +* The fact that you are presently reading this means that you have had +* knowledge of the CeCILL license and that you accept its terms. +* +* ParadisEO WebSite : http://paradiseo.gforge.inria.fr +* Contact: paradiseo-help@lists.gforge.inria.fr +* +*/ +//----------------------------------------------------------------------------- + +#ifndef MAKE_EVAL_FLOWSHOP_H_ +#define MAKE_EVAL_FLOWSHOP_H_ + + +#include +#include +#include +#include +#include +#include + +/* + * This function creates an eoEvalFuncCounter that can later be used to evaluate an individual. + * @param eoParser& _parser to get user parameters + * @param eoState& _state to store the memory + */ +eoEvalFuncCounter & do_make_eval(eoParser& _parser, eoState& _state) +{ + // benchmark file name + std::string benchmarkFileName = _parser.getORcreateParam(std::string("../flowshop/benchs/020_20_01.txt"), "BenchmarkFile", "Benchmark file name (benchmarks are available at www.lifl.fr/~liefooga/benchmarks)", 'B',"Representation", false).value(); +// if (benchmarkFileName == "") +// { +// std::string stmp = "*** Missing name of the benchmark file\n"; +// stmp += " Type '-B=the_benchmark_file_name' or '--BenchmarkFile=the_benchmark_file_name'\n"; +// stmp += " Benchmarks files are available at www.lifl.fr/~liefooga/benchmarks"; +// throw std::runtime_error(stmp.c_str()); +// } + // reading of the parameters contained in the benchmark file + FlowShopBenchmarkParser fParser(benchmarkFileName); + unsigned int M = fParser.getM(); + unsigned int N = fParser.getN(); + std::vector< std::vector > p = fParser.getP(); + std::vector d = fParser.getD(); + // build of the initializer (a pointer, stored in the eoState) + FlowShopEval* plainEval = new FlowShopEval(M, N, p, d); + // turn that object into an evaluation counter + eoEvalFuncCounter* eval = new eoEvalFuncCounter (* plainEval); + // store in state + _state.storeFunctor(eval); + // and return a reference + return *eval; +} + +#endif /*MAKE_EVAL_FLOWSHOP_H_*/ diff --git a/contribution/branches/MOLS/flowshop/src/make_genotype_FlowShop.h b/contribution/branches/MOLS/flowshop/src/make_genotype_FlowShop.h new file mode 100755 index 000000000..fbe0d8afe --- /dev/null +++ b/contribution/branches/MOLS/flowshop/src/make_genotype_FlowShop.h @@ -0,0 +1,74 @@ +/* +* +* Copyright (C) DOLPHIN Project-Team, INRIA Futurs, 2006-2007 +* (C) OPAC Team, LIFL, 2002-2007 +* +* Arnaud Liefooghe +* +* This software is governed by the CeCILL license under French law and +* abiding by the rules of distribution of free software. You can use, +* modify and/ or redistribute the software under the terms of the CeCILL +* license as circulated by CEA, CNRS and INRIA at the following URL +* "http://www.cecill.info". +* +* As a counterpart to the access to the source code and rights to copy, +* modify and redistribute granted by the license, users are provided only +* with a limited warranty and the software's author, the holder of the +* economic rights, and the successive licensors have only limited liability. +* +* In this respect, the user's attention is drawn to the risks associated +* with loading, using, modifying and/or developing or reproducing the +* software by the user in light of its specific status of free software, +* that may mean that it is complicated to manipulate, and that also +* therefore means that it is reserved for developers and experienced +* professionals having in-depth computer knowledge. Users are therefore +* encouraged to load and test the software's suitability as regards their +* requirements in conditions enabling the security of their systems and/or +* data to be ensured and, more generally, to use and operate it in the +* same conditions as regards security. +* The fact that you are presently reading this means that you have had +* knowledge of the CeCILL license and that you accept its terms. +* +* ParadisEO WebSite : http://paradiseo.gforge.inria.fr +* Contact: paradiseo-help@lists.gforge.inria.fr +* +*/ +//----------------------------------------------------------------------------- + +#ifndef MAKE_GENOTYPE_FLOWSHOP_H_ +#define MAKE_GENOTYPE_FLOWSHOP_H_ + +#include +#include +#include +#include +#include + +/* + * This function creates an eoInit that can later be used to initialize the population (see make_pop.h). + * @param eoParser& _parser to get user parameters + * @param eoState& _state to store the memory + */ +eoInit & do_make_genotype(eoParser& _parser, eoState& _state) +{ + // benchmark file name + std::string benchmarkFileName = _parser.getORcreateParam(std::string("../flowshop/benchs/020_20_01.txt"), "BenchmarkFile", "Benchmark file name (benchmarks are available at www.lifl.fr/~liefooga/benchmarks/)", 'B',"Representation", false).value(); +// if (benchmarkFileName == "") +// { +// std::string stmp = "*** Missing name of the benchmark file\n"; +// stmp += " Type '-B=the_benchmark_file_name' or '--BenchmarkFile=the_benchmark_file_name'\n"; +// stmp += " Benchmarks files are available at www.lifl.fr/~liefooga/benchmarks"; +// throw std::runtime_error(stmp.c_str()); +// } + // reading of number of jobs to schedule contained in the benchmark file + FlowShopBenchmarkParser fParser(benchmarkFileName); + unsigned int N = fParser.getN(); + // build of the initializer (a pointer, stored in the eoState) + eoInit* init = new FlowShopInit(N); + // store in state + _state.storeFunctor(init); + // and return a reference + return *init; +} + +#endif /*MAKE_GENOTYPE_FLOWSHOP_H_*/ diff --git a/contribution/branches/MOLS/flowshop/src/make_op_FlowShop.h b/contribution/branches/MOLS/flowshop/src/make_op_FlowShop.h new file mode 100755 index 000000000..4316f7f65 --- /dev/null +++ b/contribution/branches/MOLS/flowshop/src/make_op_FlowShop.h @@ -0,0 +1,132 @@ +/* +* +* Copyright (C) DOLPHIN Project-Team, INRIA Futurs, 2006-2007 +* (C) OPAC Team, LIFL, 2002-2007 +* +* Arnaud Liefooghe +* +* This software is governed by the CeCILL license under French law and +* abiding by the rules of distribution of free software. You can use, +* modify and/ or redistribute the software under the terms of the CeCILL +* license as circulated by CEA, CNRS and INRIA at the following URL +* "http://www.cecill.info". +* +* As a counterpart to the access to the source code and rights to copy, +* modify and redistribute granted by the license, users are provided only +* with a limited warranty and the software's author, the holder of the +* economic rights, and the successive licensors have only limited liability. +* +* In this respect, the user's attention is drawn to the risks associated +* with loading, using, modifying and/or developing or reproducing the +* software by the user in light of its specific status of free software, +* that may mean that it is complicated to manipulate, and that also +* therefore means that it is reserved for developers and experienced +* professionals having in-depth computer knowledge. Users are therefore +* encouraged to load and test the software's suitability as regards their +* requirements in conditions enabling the security of their systems and/or +* data to be ensured and, more generally, to use and operate it in the +* same conditions as regards security. +* The fact that you are presently reading this means that you have had +* knowledge of the CeCILL license and that you accept its terms. +* +* ParadisEO WebSite : http://paradiseo.gforge.inria.fr +* Contact: paradiseo-help@lists.gforge.inria.fr +* +*/ +//----------------------------------------------------------------------------- + +#ifndef MAKE_OP_FLOWSHOP_H_ +#define MAKE_OP_FLOWSHOP_H_ + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +/* + * This function builds the operators that will be applied to the eoFlowShop + * @param eoParameterLoader& _parser to get user parameters + * @param eoState& _state to store the memory + */ +eoGenOp & do_make_op(eoParameterLoader& _parser, eoState& _state) +{ + + ///////////////////////////// + // Variation operators + //////////////////////////// + + // the crossover + //////////////// + + // a first crossover + eoQuadOp *cross = new FlowShopOpCrossoverQuad; + // store in the state + _state.storeFunctor(cross); + + // relative rate in the combination + double cross1Rate = _parser.createParam(1.0, "crossRate", "Relative rate for the only crossover", 0, "Variation Operators").value(); + // creation of the combined operator with this one + eoPropCombinedQuadOp *propXover = new eoPropCombinedQuadOp(*cross, cross1Rate); + // store in the state + _state.storeFunctor(propXover); + + + // the mutation + /////////////// + + // a first mutation : the shift mutation + eoMonOp *mut = new FlowShopOpMutationShift; + _state.storeFunctor(mut); + // its relative rate in the combination + double mut1Rate = _parser.createParam(0.5, "shiftMutRate", "Relative rate for shift mutation", 0, "Variation Operators").value(); + // creation of the combined operator with this one + eoPropCombinedMonOp *propMutation = new eoPropCombinedMonOp(*mut, mut1Rate); + _state.storeFunctor(propMutation); + + // a second mutation : the exchange mutation + mut = new FlowShopOpMutationExchange; + _state.storeFunctor(mut); + // its relative rate in the combination + double mut2Rate = _parser.createParam(0.5, "exchangeMutRate", "Relative rate for exchange mutation", 0, "Variation Operators").value(); + // addition of this one to the combined operator + propMutation -> add(*mut, mut2Rate); + + // end of crossover and mutation definitions + //////////////////////////////////////////// + + // First read the individual level parameters + eoValueParam& pCrossParam = _parser.createParam(0.25, "pCross", "Probability of Crossover", 'c', "Variation Operators" ); + // minimum check + if ( (pCrossParam.value() < 0) || (pCrossParam.value() > 1) ) + throw std::runtime_error("Invalid pCross"); + + eoValueParam& pMutParam = _parser.createParam(0.35, "pMut", "Probability of Mutation", 'm', "Variation Operators" ); + // minimum check + if ( (pMutParam.value() < 0) || (pMutParam.value() > 1) ) + throw std::runtime_error("Invalid pMut"); + + // the crossover - with probability pCross + eoProportionalOp * propOp = new eoProportionalOp ; + _state.storeFunctor(propOp); + eoQuadOp *ptQuad = new eoQuadCloneOp; + _state.storeFunctor(ptQuad); + propOp -> add(*propXover, pCrossParam.value()); // crossover, with proba pcross + propOp -> add(*ptQuad, 1-pCrossParam.value()); // nothing, with proba 1-pcross + + // now the sequential + eoSequentialOp *op = new eoSequentialOp; + _state.storeFunctor(op); + op -> add(*propOp, 1.0); // always do combined crossover + op -> add(*propMutation, pMutParam.value()); // then mutation, with proba pmut + + // return a reference + return *op; +} + +#endif /*MAKE_OP_FLOWSHOP_H_*/ diff --git a/contribution/branches/MOLS/install.cmake b/contribution/branches/MOLS/install.cmake index 8a3329b90..c5d508277 100644 --- a/contribution/branches/MOLS/install.cmake +++ b/contribution/branches/MOLS/install.cmake @@ -2,8 +2,7 @@ SET(PARADISEO_DIR "/home/jeremie/workspace/trunk" CACHE PATH "ParadisEO directory" FORCE) # Here, specify SOURCES_DIR : the directory where the example sources have been deposed. -SET(SOURCES_DIR "/home/jeremie/workspace/MOLS/src" CACHE PATH "TP sources directory, where install.cmake is" FORCE) - +SET(SOURCES_DIR "/home/jeremie/workspace/MOLS" CACHE PATH "TP sources directory, where install.cmake is" FORCE) ########################################################################################################################################### # PLEASE DO NOT MODIFY WHAT IS BELOW @@ -20,5 +19,7 @@ SET(PARADISEO_MO_BIN_DIR "${PARADISEO_DIR}/paradiseo-mo/build" CACHE PATH "Parad SET(PARADISEO_MOEO_SRC_DIR "${PARADISEO_DIR}/paradiseo-moeo" CACHE PATH "ParadisEO-MO source directory" FORCE) SET(PARADISEO_MOEO_BIN_DIR "${PARADISEO_DIR}/paradiseo-moeo/build" CACHE PATH "ParadisEO-MOEO binary directory" FORCE) +SET(FLOWSHOP_SRC_DIR "${SOURCES_DIR}/flowshop" CACHE PATH "flowshop source directory" FORCE) + SET(INSTALL_DIR "${SOURCES_DIR}/build" CACHE PATH "Directory where the executable will be put" FORCE)