Go to the documentation of this file.00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025
00026
00027
00028
00029
00030
00031
00032
00033
00034
00035
00036 #include "postgres.h"
00037 #include "optimizer/geqo_random.h"
00038 #include "optimizer/geqo_recombination.h"
00039
00040
00041
00042
00043
00044
00045 void
00046 ox1(PlannerInfo *root, Gene *tour1, Gene *tour2, Gene *offspring, int num_gene,
00047 City *city_table)
00048 {
00049 int left,
00050 right,
00051 k,
00052 p,
00053 temp;
00054
00055
00056 for (k = 1; k <= num_gene; k++)
00057 city_table[k].used = 0;
00058
00059
00060 left = geqo_randint(root, num_gene - 1, 0);
00061 right = geqo_randint(root, num_gene - 1, 0);
00062
00063 if (left > right)
00064 {
00065 temp = left;
00066 left = right;
00067 right = temp;
00068 }
00069
00070
00071 for (k = left; k <= right; k++)
00072 {
00073 offspring[k] = tour1[k];
00074 city_table[(int) tour1[k]].used = 1;
00075 }
00076
00077 k = (right + 1) % num_gene;
00078 p = k;
00079
00080
00081 while (k != left)
00082 {
00083 if (!city_table[(int) tour2[p]].used)
00084 {
00085 offspring[k] = tour2[p];
00086 k = (k + 1) % num_gene;
00087 city_table[(int) tour2[p]].used = 1;
00088 }
00089 p = (p + 1) % num_gene;
00090 }
00091
00092 }