1 | /*------------------------------------------------------------------------ |
2 | * |
3 | * geqo_mutation.c |
4 | * |
5 | * TSP mutation routines |
6 | * |
7 | * src/backend/optimizer/geqo/geqo_mutation.c |
8 | * |
9 | *------------------------------------------------------------------------- |
10 | */ |
11 | |
12 | /* contributed by: |
13 | =*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*= |
14 | * Martin Utesch * Institute of Automatic Control * |
15 | = = University of Mining and Technology = |
16 | * utesch@aut.tu-freiberg.de * Freiberg, Germany * |
17 | =*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*= |
18 | */ |
19 | |
20 | /* this is adopted from Genitor : */ |
21 | /*************************************************************/ |
22 | /* */ |
23 | /* Copyright (c) 1990 */ |
24 | /* Darrell L. Whitley */ |
25 | /* Computer Science Department */ |
26 | /* Colorado State University */ |
27 | /* */ |
28 | /* Permission is hereby granted to copy all or any part of */ |
29 | /* this program for free distribution. The author's name */ |
30 | /* and this copyright notice must be included in any copy. */ |
31 | /* */ |
32 | /*************************************************************/ |
33 | |
34 | #include "postgres.h" |
35 | #include "optimizer/geqo_mutation.h" |
36 | #include "optimizer/geqo_random.h" |
37 | |
38 | #if defined(CX) /* currently used only in CX mode */ |
39 | |
40 | void |
41 | geqo_mutation(PlannerInfo *root, Gene *tour, int num_gene) |
42 | { |
43 | int swap1; |
44 | int swap2; |
45 | int num_swaps = geqo_randint(root, num_gene / 3, 0); |
46 | Gene temp; |
47 | |
48 | |
49 | while (num_swaps > 0) |
50 | { |
51 | swap1 = geqo_randint(root, num_gene - 1, 0); |
52 | swap2 = geqo_randint(root, num_gene - 1, 0); |
53 | |
54 | while (swap1 == swap2) |
55 | swap2 = geqo_randint(root, num_gene - 1, 0); |
56 | |
57 | temp = tour[swap1]; |
58 | tour[swap1] = tour[swap2]; |
59 | tour[swap2] = temp; |
60 | |
61 | |
62 | num_swaps -= 1; |
63 | } |
64 | } |
65 | |
66 | #endif /* defined(CX) */ |
67 | |