OSDN Git Service

rebuid:
[eos/hostdependX86MAC64.git] / util / X86MAC64 / include / postgresql / server / optimizer / geqo_recombination.h
1 /*-------------------------------------------------------------------------
2  *
3  * geqo_recombination.h
4  *        prototypes for recombination in the genetic query optimizer
5  *
6  * Portions Copyright (c) 1996-2014, PostgreSQL Global Development Group
7  * Portions Copyright (c) 1994, Regents of the University of California
8  *
9  * src/include/optimizer/geqo_recombination.h
10  *
11  *-------------------------------------------------------------------------
12  */
13
14 /* contributed by:
15    =*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=
16    *  Martin Utesch                              * Institute of Automatic Control          *
17    =                                                     = University of Mining and Technology =
18    *  utesch@aut.tu-freiberg.de  * Freiberg, Germany                               *
19    =*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=
20  */
21
22 /* -- parts of this are adapted from D. Whitley's Genitor algorithm -- */
23
24 #ifndef GEQO_RECOMBINATION_H
25 #define GEQO_RECOMBINATION_H
26
27 #include "optimizer/geqo.h"
28
29
30 extern void init_tour(PlannerInfo *root, Gene *tour, int num_gene);
31
32
33 /* edge recombination crossover [ERX] */
34
35 typedef struct Edge
36 {
37         Gene            edge_list[4];   /* list of edges */
38         int                     total_edges;
39         int                     unused_edges;
40 } Edge;
41
42 extern Edge *alloc_edge_table(PlannerInfo *root, int num_gene);
43 extern void free_edge_table(PlannerInfo *root, Edge *edge_table);
44
45 extern float gimme_edge_table(PlannerInfo *root, Gene *tour1, Gene *tour2,
46                                  int num_gene, Edge *edge_table);
47
48 extern int gimme_tour(PlannerInfo *root, Edge *edge_table, Gene *new_gene,
49                    int num_gene);
50
51
52 /* partially matched crossover [PMX] */
53
54 #define DAD 1                                   /* indicator for gene from dad */
55 #define MOM 0                                   /* indicator for gene from mom */
56
57 extern void pmx(PlannerInfo *root,
58         Gene *tour1, Gene *tour2,
59         Gene *offspring, int num_gene);
60
61
62 typedef struct City
63 {
64         int                     tour2_position;
65         int                     tour1_position;
66         int                     used;
67         int                     select_list;
68 } City;
69
70 extern City *alloc_city_table(PlannerInfo *root, int num_gene);
71 extern void free_city_table(PlannerInfo *root, City *city_table);
72
73 /* cycle crossover [CX] */
74 extern int cx(PlannerInfo *root, Gene *tour1, Gene *tour2,
75    Gene *offspring, int num_gene, City *city_table);
76
77 /* position crossover [PX] */
78 extern void px(PlannerInfo *root, Gene *tour1, Gene *tour2, Gene *offspring,
79    int num_gene, City *city_table);
80
81 /* order crossover [OX1] according to Davis */
82 extern void ox1(PlannerInfo *root, Gene *mom, Gene *dad, Gene *offspring,
83         int num_gene, City *city_table);
84
85 /* order crossover [OX2] according to Syswerda */
86 extern void ox2(PlannerInfo *root, Gene *mom, Gene *dad, Gene *offspring,
87         int num_gene, City *city_table);
88
89 #endif   /* GEQO_RECOMBINATION_H */