From c7f3c7cc37f943481b2358149210789be3d39ee9 Mon Sep 17 00:00:00 2001 From: Nathan Wagner Date: Sun, 21 Sep 2014 09:30:01 +0000 Subject: [PATCH 1/2] cleanup geqo_mutation.c Avoid a possible random number collision by choosing random ranges better. This will potentially change the output of the algorithm since it avoids extra calls to geqo_randint(). --- src/backend/optimizer/geqo/geqo_mutation.c | 8 +++----- 1 file changed, 3 insertions(+), 5 deletions(-) diff --git a/src/backend/optimizer/geqo/geqo_mutation.c b/src/backend/optimizer/geqo/geqo_mutation.c index 1a06d49..c78bd2c 100644 --- a/src/backend/optimizer/geqo/geqo_mutation.c +++ b/src/backend/optimizer/geqo/geqo_mutation.c @@ -43,20 +43,18 @@ geqo_mutation(PlannerInfo *root, Gene *tour, int num_gene) int num_swaps = geqo_randint(root, num_gene / 3, 0); Gene temp; - while (num_swaps > 0) { swap1 = geqo_randint(root, num_gene - 1, 0); - swap2 = geqo_randint(root, num_gene - 1, 0); + swap2 = geqo_randint(root, num_gene - 2, 0); - while (swap1 == swap2) - swap2 = geqo_randint(root, num_gene - 1, 0); + if (swap2 >= swap1) + swap2++; temp = tour[swap1]; tour[swap1] = tour[swap2]; tour[swap2] = temp; - num_swaps -= 1; } } -- 2.5.0