moved utilities and contribution in branchez

git-svn-id: svn://scm.gforge.inria.fr/svnroot/paradiseo@2183 331e1502-861f-0410-8da2-ba01fb791d7f
This commit is contained in:
liefooga 2011-03-11 13:58:48 +00:00
commit 8280cf082b
45 changed files with 0 additions and 0 deletions

View file

@ -0,0 +1,9 @@
######################################################################################
### 1) Where must cmake go now ?
######################################################################################
SUBDIRS(src)
######################################################################################

View file

@ -0,0 +1,536 @@
535
36.49 7.49
57.06 9.51
30.22 48.14
5.15 -3.56
34.59 -106.37
57.12 -2.12
16.45 -99.45
5.36 -0.1
28.56 -13.36
8.59 38.48
12.5 45.02
-34.48 138.38
30.23 -9.33
56.18 12.51
36.4 -4.3
40.38 8.17
35.11 -3.5
41.55 8.48
-37.01 174.47
38.17 -0.34
36.42 3.13
36.11 37.14
35.14 -101.42
31.58 35.59
52.18 4.46
61.1 -149.59
39.57 32.41
51.11 4.28
17.08 -61.47
43.37 13.22
29.38 35.01
59.39 17.55
15.18 38.55
-25.14 -57.31
23.58 32.47
37.54 23.44
33.46 -84.31
12.3 -70.01
24.26 54.28
36.55 30.48
26.16 50.38
40.29 50.01
39.11 -76.4
10.48 -74.52
-16.11 -52.3
10.25 45.01
41.18 2.05
32.22 -64.42
41.56 -72.41
40.39 17.57
44.49 20.19
9.21 34.31
32.06 20.16
52.29 13.24
48.27 -4.25
-19.48 3.45
33.49 35.29
54.39 -6.14
35.48 -101.22
4.24 18.31
13.04 -59.3
60.17 5.13
44.48 -68.5
33.14 44.14
45.4 9.24
33.34 -86.45
52.27 -1.45
42.33 9.29
45.48 -108.37
43.28 -1.32
13.21 -16.4
-3.19 29.19
13.55 100.36
12.38 -8.02
55.44 9.09
44.32 11.18
12.57 77.4
-15.41 34.58
27.13 56.22
-27.25 153.05
44.5 -0.43
4.42 -74.09
50.47 -1.51
19.05 72.52
67.16 14.22
42.22 -71
53.03 8.48
41.08 16.47
46.55 7.3
51.31 -2.35
50.54 4.29
-15.52 -47.55
47.35 7.32
48.1 16.13
47.27 19.15
-34.49 -58.32
42.55 -78.38
44.3 26.06
49.27 2.07
-4.15 15.15
39.15 9.04
30.08 31.24
23.11 113.16
33.33 -7.4
-11.54 22.45
4.49 -52.22
52.13 0.11
-35.19 149.12
10.36 -66.59
22.39 88.27
52.5 -1.19
49.01 2.33
43.33 6.57
45.4 -0.19
39.37 19.55
50.52 7.09
41.59 -87.54
41.48 12.36
9.34 -13.37
41.25 -81.51
3.26 -76.25
42.31 8.48
-28.02 145.37
7.11 79.53
40.04 -83.04
33.22 -7.35
48.07 7.22
44.22 28.29
45.4 -0.19
6.21 2.23
55.37 12.39
-33.58 18.36
37.28 15.04
10.27 -75.31
-26.25 146.14
39 17.05
12.12 -68.57
39.09 -84.2
39.03 -84.2
51.24 -3.12
29.11 -81.03
23.46 90.23
14.45 42.59
32.5 -96.51
33.25 36.31
-6.53 39.12
42.34 18.16
-29.58 30.57
38.51 -77.02
28.34 77.07
39.46 -104.53
32.46 -96.24
26.16 50.1
47.16 5.05
33.52 10.47
14.45 -17.3
4.01 9.43
19.08 30.26
25.16 51.34
49.22 0.1
-8.45 115.1
51.08 13.46
-12.25 130.52
42.14 -83.32
42.13 -83.21
53.26 -6.15
51.17 6.45
25.15 55.2
0.03 32.26
45.32 4.18
55.57 -3.22
51.27 5.23
31.48 -106.16
52.5 -1.19
48.19 6.04
40.07 33
40.09 82.4
40.42 -74.1
50.44 -3.25
-34.49 -58.32
64.49 -147.51
37.01 -7.58
-11.35 27.31
59.54 10.37
41.49 12.15
14.35 -61
33.56 45.8
-4.23 15.26
43.49 11.12
8.37 -13.12
41.26 15.32
50.02 8.34
44.12 12.04
-21.13 27.29
28.27 -13.52
53.29 -1
-19.27 29.52
54.23 18.28
60.12 11.05
24.57 10.1
-22.5 -43.15
55.52 -4.26
45.22 5.2
7.09 41.43
44.25 8.5
57.4 18.18
41.54 2.46
37.11 -3.47
47 15.26
51.09 -0.11
14.34 -90.32
46.14 6.07
-2.09 -79.53
52.28 9.42
53.38 10
60.19 24.58
35.2 25.11
30.2 120.51
22.19 114.12
31.4 6.09
35.33 139.46
21.2 -157.55
29.59 -95.28
38.57 -77.27
43.06 -78.57
38.52 1.22
47.34 -97.27
50.21 30.55
-25.44 -54.28
39.44 -86.17
40.59 28.49
38.17 27.1
21.3 39.12
49.13 -2.12
40.38 -73.46
11.33 43.1
-6.09 106.51
-26.08 28.15
-3.22 36.38
45.28 -73.44
12.03 8.31
34.34 69.12
63.59 -22.37
-1.58 30.08
22.34 120.17
24.54 67.09
-6.18 155.43
17.56 -76.48
50.05 19.47
15.36 32.33
27.42 85.22
3.08 101.33
29.13 47.58
-8.51 13.14
10.36 -66.59
36.04 -115.09
33.56 -118.24
53.52 -1.39
48.58 2.27
0.27 9.25
34.52 33.38
43.11 0
59.49 30.17
36.51 -2.22
51.24 12.25
51.25 12.14
6.1 1.15
40.46 -73.52
33.57 -118.24
50.38 5.27
51.09 -0.11
51.28 -0.27
50.34 3.05
-12.01 -77.07
45.27 9.16
38.46 -9.08
46.13 14.28
35.3 12.37
48.14 14.11
51.28 -0.27
6.35 3.2
27.56 -15.23
-16.3 -68.11
53.21 -2.53
6.1 1.15
51.53 -0.22
-25.55 32.34
-15.2 28.27
4.27 114
49.37 6.12
-17.49 25.49
25.41 32.43
45.44 4.56
13 80.11
40.29 -3.34
31.52 -4.13
53.21 -2.16
-3.04 -60
10.34 -71.44
-4.02 39.36
46.22 15.47
39.18 -94.44
28.32 -81.2
23.36 58.17
44.25 8.5
-37.44 144.54
24.31 39.42
-37.41 144.51
19.26 -99.04
12.07 -86.11
2.01 45.19
25.48 -80.17
20.56 -89.41
45.27 9.16
35.45 10.45
39.07 -94.36
35.52 14.29
4.11 73.32
47.45 7.26
55.33 13.22
54.31 -1.25
14.31 121.01
55.58 37.25
43.35 3.58
-25.55 32.34
-8.58 125.13
43.26 5.13
-20.26 57.41
51.21 1.21
44.53 -93.13
53.52 27.33
50.55 5.47
29.59 -90.16
-26.31 31.19
48.08 11.42
-34.5 -56.02
45.38 8.43
49.05 6.08
-17.45 177.27
40.53 14.18
25.02 -77.28
-1.19 36.56
43.4 7.13
55.02 -1.41
45.56 6.06
12.08 15.02
32.56 129.56
35.09 36.17
13.29 2.1
18.06 -15.57
-13 28.39
58.35 16.15
35.45 140.23
47.09 -1.36
49.3 11.05
52.41 1.17
40.38 -73.46
55.28 10.2
46.26 30.41
26.21 127.46
35.26 -97.46
40.54 9.31
41.07 -95.55
41.14 -8.41
41.59 -87.54
51.5 -8.29
28.26 -81.19
35.38 -0.37
48.43 2.23
34.47 135.27
60.12 11.05
51.12 2.52
44.34 26.06
12.21 -1.31
43.26 -5.5
18.34 -72.17
48.43 2.23
40.05 116.36
-31.56 115.58
4.52 7.02
37.08 -76.3
39.52 -75.15
33.26 -112.01
55.52 -4.26
46.35 0.18
40.3 -80.14
-5.15 39.49
39.33 2.44
38.1 13.06
11.33 104.51
36.49 11.58
-9.27 147.13
10.36 -61.21
9.05 -79.23
50.06 14.16
43.41 10.24
42.26 14.11
16.16 -61.32
9.03 -79.24
43.23 -0.25
45.39 12.12
31.37 -8.03
34.03 -6.45
-8.08 -34.55
38.04 15.39
64.08 -21.57
16.54 96.09
49.19 4.03
36.23 28.07
-29.43 -53.42
-22.5 -43.15
45.13 14.35
44.01 12.37
48.04 -1.44
6.14 -10.22
41.49 12.15
14.1 145.15
-32.55 -60.47
51.57 4.26
24.42 46.44
33.37 73.06
6.3 -58.15
15.29 44.13
13.42 -89.07
32.44 -117.11
-23 -47.08
29.32 -98.28
-17.56 31.06
48.31 -24.8
-33.23 -70.47
42.54 -8.25
33.14 44.14
18.26 -69.4
47.27 -122.18
27 14.27
37.33 126.48
51.34 0.42
-4.4 55.31
37.37 -122.23
31.12 121.2
25.21 55.24
16.45 -22.57
1.21 103.54
37.22 -121.56
43.49 18.2
9.58 -84.16
9.59 -84.12
18.26 -66.01
40.31 22.58
41.58 21.38
40.53 -111.57
36.58 -25.1
52.42 -8.55
42.42 23.24
43.32 16.18
-12.54 -38.2
38.45 -90.22
51.33 0.14
59.39 17.55
48.41 9.13
38.54 16.15
58.53 5.38
55.58 37.25
37.26 -5.54
48.32 7.38
52.22 13.3
-33.56 151.1
29.33 52.36
47.48 13
40.31 17.24
41.19 69.24
28.29 -16.2
38.31 -28.43
43.11 0
28.29 -16.2
14.02 -87.14
52.29 13.24
35.41 51.19
41.2 19.47
32.4 13.09
43.37 1.23
32.01 34.53
22.49 5.27
0.23 6.43
35.43 -5.55
-18.48 47.29
33.56 8.06
-24.42 -53.42
25.04 121.33
37.55 12.29
51.23 -2.43
45.12 7.39
45.5 13.28
45.39 12.12
47.26 0.43
36.18 -95.52
36.51 10.14
52.34 13.18
35.33 139.46
35.54 -83.53
40.62 13.11
-0.08 -78.29
12.41 101.01
13.45 -60.57
44.55 4.58
43.14 27.49
45.3 12.21
-23 -47.08
48.07 16.33
39.29 -0.29
41.42 -4.51
45.24 10.53
38.57 -77.27
52.1 20.58
36.45 -6.04
53.19 -113.35
44.53 -63.31
45.41 -74.02
45.19 -75.4
46.48 -71.24
42.16 -82.58
48.57 -54.34
45.28 -73.44
49.11 -123.1
49.55 -97.14
51.07 -114.01
47.37 -52.45
43.41 -79.38
44.06 15.21
45.45 16.04
41.4 -1.03
-6.13 39.13
47.28 8.33
51.33 0.14
24.58 91.53

View file

@ -0,0 +1,53 @@
52
565 575
25 185
345 750
945 685
845 655
880 660
25 230
525 1000
580 1175
650 1130
1605 620
1220 580
1465 200
1530 5
845 680
725 370
145 665
415 635
510 875
560 365
300 465
520 585
480 415
835 625
975 580
1215 245
1320 315
1250 400
660 180
410 250
420 555
575 665
1150 1160
700 580
685 595
685 610
770 610
795 645
720 635
760 650
475 960
95 260
875 920
700 500
555 815
830 485
1170 65
830 610
605 625
595 360
1340 725
1740 245

View file

@ -0,0 +1,102 @@
101
41 49
35 17
55 45
55 20
15 30
25 30
20 50
10 43
55 60
30 60
20 65
50 35
30 25
15 10
30 5
10 20
5 30
20 40
15 60
45 65
45 20
45 10
55 5
65 35
65 20
45 30
35 40
41 37
64 42
40 60
31 52
35 69
53 52
65 55
63 65
2 60
20 20
5 5
60 12
40 25
42 7
24 12
23 3
11 14
6 38
2 48
8 56
13 52
6 68
47 47
49 58
27 43
37 31
57 29
63 23
53 12
32 12
36 26
21 24
17 34
12 24
24 58
27 69
15 77
62 77
49 73
67 5
56 39
37 47
37 56
57 68
47 16
44 17
46 13
49 11
49 42
53 43
61 52
57 48
56 37
55 54
15 47
14 37
11 31
16 22
4 18
28 18
26 52
26 35
31 67
15 19
22 22
18 24
26 27
25 24
22 27
25 21
19 21
20 26
18 18
35 35

File diff suppressed because it is too large Load diff

View file

@ -0,0 +1,35 @@
NAME : eil101
COMMENT : 101-city problem (Christofides/Eilon)
TYPE : TSP
DIMENSION : 101
EDGE_WEIGHT_TYPE : EUC_2D
NAME: ali535
TYPE: TSP
COMMENT: 535 Airports around the globe (Padberg/Rinaldi)
DIMENSION: 535
EDGE_WEIGHT_TYPE: GEO
DISPLAY_DATA_TYPE: COORD_DISPLAY
NAME : pr2392
COMMENT : 2392-city problem (Padberg/Rinaldi)
TYPE : TSP
DIMENSION : 2392
EDGE_WEIGHT_TYPE : EUC_2D
NAME : rl5915
COMMENT : 5915-city TSP (Reinelt)
TYPE : TSP
DIMENSION : 5915
EDGE_WEIGHT_TYPE : EUC_2D
NAME : usa13509
COMMENT : Cities with population at least 500 in the continental US.
COMMENT : Contributed by David Applegate and Andre Rohe, based on the
COMMENT : data set "US.lat-long" from the ftp site ftp.cs.toronto.edu.
COMMENT : The file US.lat-long.Z can be found in the directory /doc/geography.
TYPE : TSP
DIMENSION : 13509
EDGE_WEIGHT_TYPE : EUC_2D

File diff suppressed because it is too large Load diff

View file

@ -0,0 +1,38 @@
######################################################################################
### 1) Include the sources
######################################################################################
INCLUDE_DIRECTORIES(${EO_SRC_DIR}/src)
INCLUDE_DIRECTORIES(${MO_SRC_DIR}/src)
INCLUDE_DIRECTORIES(${CMAKE_CURRENT_SOURCE_DIR})
######################################################################################
######################################################################################
### 2) Define your target(s): just the tsp here
######################################################################################
SET(TSP_LIB_OUTPUT_PATH ../lib)
SET(LIBRARY_OUTPUT_PATH ${TSP_LIB_OUTPUT_PATH})
SET (TSP_SOURCES graph.cpp
route_init.cpp
route_eval.cpp
part_route_eval.cpp
edge_xover.cpp
order_xover.cpp
route_valid.cpp
partial_mapped_xover.cpp
city_swap.cpp
two_opt.cpp
two_opt_init.cpp
two_opt_next.cpp
two_opt_incr_eval.cpp
two_opt_tabu_list.cpp
two_opt_rand.cpp)
ADD_LIBRARY(tsp STATIC ${TSP_SOURCES})
######################################################################################

View file

@ -0,0 +1,24 @@
// -*- mode: c++; c-indent-level: 4; c++-member-init-indent: 8; comment-column: 35; -*-
// "city_swap.cpp"
// (c) OPAC Team, LIFL, 2002-2006
/* TEXT LICENCE
Contact: paradiseo-help@lists.gforge.inria.fr
*/
#include <utils/eoRNG.h>
#include "city_swap.h"
bool CitySwap :: operator () (Route & __route) {
std :: swap (__route [rng.random (__route.size ())],
__route [rng.random (__route.size ())]) ;
__route.invalidate () ;
return true ;
}

View file

@ -0,0 +1,29 @@
// -*- mode: c++; c-indent-level: 4; c++-member-init-indent: 8; comment-column: 35; -*-
// "city_swap.h"
// (c) OPAC Team, LIFL, 2002-2006
/* TEXT LICENCE
Contact: paradiseo-help@lists.gforge.inria.fr
*/
#ifndef city_swap_h
#define city_swap_h
#include <eoOp.h>
#include "route.h"
/** Its swaps two vertices
randomly choosen */
class CitySwap : public eoMonOp <Route> {
public :
bool operator () (Route & __route) ;
} ;
#endif

View file

@ -0,0 +1,142 @@
// -*- mode: c++; c-indent-level: 4; c++-member-init-indent: 8; comment-column: 35; -*-
// "edge_xover.cpp"
// (c) OPAC Team, LIFL, 2003-2006
/* LICENCE TEXT
Contact: paradiseo-help@lists.gforge.inria.fr
*/
#include <assert.h>
#include <utils/eoRNG.h>
#include "edge_xover.h"
#include "route_valid.h"
#define MAXINT 1000000
void
EdgeXover :: build_map (const Route & __par1, const Route & __par2)
{
unsigned int len = __par1.size () ;
/* Initialization */
_map.clear () ;
_map.resize (len) ;
for (unsigned int i = 0 ; i < len ; i ++)
{
_map [__par1 [i]].insert (__par1 [(i + 1) % len]) ;
_map [__par2 [i]].insert (__par2 [(i + 1) % len]) ;
_map [__par1 [i]].insert (__par1 [(i - 1 + len) % len]) ;
_map [__par2 [i]].insert (__par2 [(i - 1 + len) % len]) ;
}
visited.clear () ;
visited.resize (len, false) ;
}
void
EdgeXover :: remove_entry (unsigned int __vertex, std :: vector <std :: set <unsigned int> > & __map)
{
std :: set <unsigned int> & neigh = __map [__vertex] ;
for (std :: set <unsigned int> :: iterator it = neigh.begin () ; it != neigh.end () ; it ++)
{
__map [* it].erase (__vertex) ;
}
}
void
EdgeXover :: add_vertex (unsigned int __vertex, Route & __child)
{
visited [__vertex] = true ;
__child.push_back (__vertex) ;
remove_entry (__vertex, _map) ; /* Removing entries */
}
void
EdgeXover :: cross (const Route & __par1, const Route & __par2, Route & __child) {
build_map (__par1, __par2) ;
unsigned int len = __par1.size () ;
/* Go ! */
__child.clear () ;
unsigned int cur_vertex = rng.random (len) ;
add_vertex (cur_vertex, __child) ;
for (unsigned int i = 1 ; i < len ; i ++) {
unsigned int len_min_entry = MAXINT ;
std :: set <unsigned int> & neigh = _map [cur_vertex] ;
for (std :: set <unsigned int> :: iterator it = neigh.begin () ; it != neigh.end () ; it ++)
{
unsigned int l = _map [* it].size () ;
if (len_min_entry > l)
{
len_min_entry = l ;
}
}
std :: vector <unsigned int> cand ; /* Candidates */
for (std :: set <unsigned> :: iterator it = neigh.begin () ; it != neigh.end () ; it ++)
{
unsigned int l = _map [* it].size () ;
if (len_min_entry == l)
{
cand.push_back (* it) ;
}
}
if (! cand.size ())
{
/* Oh no ! Implicit mutation */
for (unsigned int j = 0 ; j < len ; j ++)
{
if (! visited [j])
{
cand.push_back (j) ;
}
}
}
cur_vertex = cand [rng.random (cand.size ())] ;
add_vertex (cur_vertex, __child) ;
}
}
bool
EdgeXover :: operator () (Route & __route1, Route & __route2)
{
// Init. copy
Route par [2] ;
par [0] = __route1 ;
par [1] = __route2 ;
cross (par [0], par [1], __route1) ;
cross (par [1], par [0], __route2) ;
assert (valid (__route1)) ;
assert (valid (__route2)) ;
__route1.invalidate () ;
__route2.invalidate () ;
return true ;
}

View file

@ -0,0 +1,47 @@
// -*- mode: c++; c-indent-level: 4; c++-member-init-indent: 8; comment-column: 35; -*-
// "edge_xover.h"
// (c) OPAC Team, LIFL, 2003-2006
/* TEXT LICENCE
Contact: paradiseo-help@lists.gforge.inria.fr
*/
#ifndef edge_xover_h
#define edge_xover_h
#include <vector>
#include <set>
#include <eoOp.h>
#include "route.h"
/** Edge Crossover */
class EdgeXover : public eoQuadOp <Route>
{
public :
bool operator () (Route & __route1, Route & __route2) ;
private :
void cross (const Route & __par1, const Route & __par2, Route & __child) ; /* Binary */
void remove_entry (unsigned int __vertex, std :: vector <std :: set <unsigned> > & __map) ;
/* Updating the map of entries */
void build_map (const Route & __par1, const Route & __par2) ;
void add_vertex (unsigned int __vertex, Route & __child) ;
std :: vector <std :: set <unsigned int> > _map ; /* The handled map */
std :: vector <bool> visited ; /* Vertices that are already visited */
} ;
#endif

View file

@ -0,0 +1,90 @@
// -*- mode: c++; c-indent-level: 4; c++-member-init-indent: 8; comment-column: 35; -*-
// "graph.cpp"
// (c) OPAC Team, LIFL, 2003-2006
/* LICENCE TEXT
Contact: paradiseo-help@lists.gforge.inria.fr
*/
#include <fstream>
#include <iostream>
#include <math.h>
#include "graph.h"
namespace Graph {
static std :: vector <std :: pair <double, double> > vectCoord ; // Coordinates
static std :: vector <std :: vector <unsigned int> > dist ; // Distances Mat.
unsigned size ()
{
return dist.size () ;
}
void computeDistances ()
{
// Dim.
unsigned int numCities = vectCoord.size () ;
dist.resize (numCities) ;
for (unsigned int i = 0 ; i < dist.size () ; i ++)
{
dist [i].resize (numCities) ;
}
// Computations.
for (unsigned int i = 0 ; i < dist.size () ; i ++)
{
for (unsigned int j = i + 1 ; j < dist.size () ; j ++)
{
double distX = (double)(vectCoord [i].first - vectCoord [j].first) ;
double distY = (double)(vectCoord [i].second - vectCoord [j].second) ;
dist [i] [j] = dist [j] [i] = (unsigned) (sqrt ((float) (distX * distX + distY * distY)) + 0.5) ;
}
}
}
void load (const char * __fileName)
{
std :: ifstream f (__fileName) ;
std :: cout << ">> Loading [" << __fileName << "]" << std :: endl ;
if (f)
{
unsigned int num_vert ;
f >> num_vert ;
vectCoord.resize (num_vert) ;
for (unsigned int i = 0 ; i < num_vert ; i ++)
{
f >> vectCoord [i].first >> vectCoord [i].second ;
}
f.close () ;
computeDistances () ;
}
else
{
std :: cout << __fileName << " doesn't exist !!!" << std :: endl ;
// Bye !!!
exit (1) ;
}
}
float distance (unsigned int __from, unsigned int __to)
{
return (float)(dist [__from] [__to]) ;
}
}

View file

@ -0,0 +1,30 @@
// -*- mode: c++; c-indent-level: 4; c++-member-init-indent: 8; comment-column: 35; -*-
// "graph.h"
// (c) OPAC Team, LIFL, 2003-2006
/* LICENCE TEXT
Contact: paradiseo-help@lists.gforge.inria.fr
*/
#ifndef graph_h
#define graph_h
#include <vector>
#include <utility>
namespace Graph
{
void load (const char * __file_name) ;
/* Loading cities
(expressed by their coordinates)
from the given file name */
float distance (unsigned int __from, unsigned int __to) ;
unsigned int size () ; // How many cities ?
}
#endif

View file

@ -0,0 +1,25 @@
// -*- mode: c++; c-indent-level: 4; c++-member-init-indent: 8; comment-column: 35; -*-
// "mix.h"
// (c) OPAC Team, LIFL, 2003-2006
/* LICENCE TEXT
Contact: paradiseo-help@lists.gforge.inria.fr
*/
#ifndef mix_h
#define mix_h
#include <utils/eoRNG.h>
template <class T> void mix (std :: vector <T> & __vect)
{
for (unsigned int i = 0 ; i < __vect.size () ; i ++)
{
std :: swap (__vect [i], __vect [rng.random (__vect.size ())]) ;
}
}
#endif

View file

@ -0,0 +1,94 @@
// -*- mode: c++; c-indent-level: 4; c++-member-init-indent: 8; comment-column: 35; -*-
// "order_xover.cpp"
// (c) OPAC Team, LIFL, 2002-2006
/* LICENCE TEXT
Contact: paradiseo-help@lists.gforge.inria.fr
*/
#include <assert.h>
#include <vector>
#include <utils/eoRNG.h>
#include "order_xover.h"
#include "route_valid.h"
void OrderXover :: cross (const Route & __par1, const Route & __par2, Route & __child)
{
unsigned int cut = rng.random (__par1.size ()) ;
/* To store vertices that have
already been crossed */
std::vector<bool> v;
v.resize(__par1.size());
for (unsigned int i = 0 ; i < __par1.size () ; i ++)
{
v [i] = false ;
}
/* Copy of the left partial
route of the first parent */
for (unsigned int i = 0 ; i < cut ; i ++)
{
__child [i] = __par1 [i] ;
v [__par1 [i]] = true ;
}
/* Searching the vertex of the second path, that ended
the previous first one */
unsigned int from = 0 ;
for (unsigned int i = 0 ; i < __par2.size () ; i ++)
{
if (__par2 [i] == __child [cut - 1])
{
from = i ;
break ;
}
}
/* Selecting a direction
Left or Right */
char direct = rng.flip () ? 1 : -1 ;
/* Copy of the left vertices from
the second parent path */
unsigned int l = cut ;
for (unsigned int i = 0 ; i < __par2.size () ; i ++)
{
unsigned int bidule /* :-) */ = (direct * i + from + __par2.size ()) % __par2.size () ;
if (! v [__par2 [bidule]])
{
__child [l ++] = __par2 [bidule] ;
v [__par2 [bidule]] = true ;
}
}
v.clear();
}
bool OrderXover :: operator () (Route & __route1, Route & __route2)
{
// Init. copy
Route par [2] ;
par [0] = __route1 ;
par [1] = __route2 ;
cross (par [0], par [1], __route1) ;
cross (par [1], par [0], __route2) ;
assert (valid (__route1)) ;
assert (valid (__route2)) ;
__route1.invalidate () ;
__route2.invalidate () ;
return true ;
}

View file

@ -0,0 +1,32 @@
// -*- mode: c++; c-indent-level: 4; c++-member-init-indent: 8; comment-column: 35; -*-
// "order_xover.h"
// (c) OPAC Team, LIFL, 2003-2006
/* LICENCE TEXT
Contact: paradiseo-help@lists.gforge.inria.fr
*/
#ifndef order_xover_h
#define order_xover_h
#include <eoOp.h>
#include "route.h"
/** Order Crossover */
class OrderXover : public eoQuadOp <Route>
{
public :
bool operator () (Route & __route1, Route & __route2) ;
private :
void cross (const Route & __par1, const Route & __par2, Route & __child) ;
} ;
#endif

View file

@ -0,0 +1,27 @@
// -*- mode: c++; c-indent-level: 4; c++-member-init-indent: 8; comment-column: 35; -*-
// "part_route_eval.cpp"
// (c) OPAC Team, LIFL, 2003-2006
/* LICENCE TEXT
Contact: paradiseo-help@lists.gforge.inria.fr
*/
#include "part_route_eval.h"
#include "graph.h"
PartRouteEval :: PartRouteEval (float __from, float __to) : from (__from), to (__to) {}
void PartRouteEval :: operator () (Route & __route)
{
float len = 0 ;
for (unsigned int i = (unsigned int) (__route.size () * from) ; i < (unsigned int ) (__route.size () * to) ; i ++)
{
len -= Graph :: distance (__route [i], __route [(i + 1) % Graph :: size ()]) ;
}
__route.fitness (len) ;
}

View file

@ -0,0 +1,37 @@
// -*- mode: c++; c-indent-level: 4; c++-member-init-indent: 8; comment-column: 35; -*-
// "part_route_eval.h"
// (c) OPAC Team, LIFL, 2003-2006
/* LICENCE TEXT
Contact: paradiseo-help@lists.gforge.inria.fr
*/
#ifndef part_route_eval_h
#define part_route_eval_h
#include <eoEvalFunc.h>
#include "route.h"
/** Route Evaluator */
class PartRouteEval : public eoEvalFunc <Route>
{
public :
/** Constructor */
PartRouteEval (float __from, float __to) ;
void operator () (Route & __route) ;
private :
float from, to ;
} ;
#endif

Some files were not shown because too many files have changed in this diff Show more