Header And Logo

PostgreSQL
| The world's most advanced open source database.

Functions

geqo_ox1.c File Reference

#include "postgres.h"
#include "optimizer/geqo_random.h"
#include "optimizer/geqo_recombination.h"
Include dependency graph for geqo_ox1.c:

Go to the source code of this file.

Functions

void ox1 (PlannerInfo *root, Gene *tour1, Gene *tour2, Gene *offspring, int num_gene, City *city_table)

Function Documentation

void ox1 ( PlannerInfo root,
Gene tour1,
Gene tour2,
Gene offspring,
int  num_gene,
City city_table 
)

Definition at line 46 of file geqo_ox1.c.

References geqo_randint, and City::used.

Referenced by geqo().

{
    int         left,
                right,
                k,
                p,
                temp;

    /* initialize city table */
    for (k = 1; k <= num_gene; k++)
        city_table[k].used = 0;

    /* select portion to copy from tour1 */
    left = geqo_randint(root, num_gene - 1, 0);
    right = geqo_randint(root, num_gene - 1, 0);

    if (left > right)
    {
        temp = left;
        left = right;
        right = temp;
    }

    /* copy portion from tour1 to offspring */
    for (k = left; k <= right; k++)
    {
        offspring[k] = tour1[k];
        city_table[(int) tour1[k]].used = 1;
    }

    k = (right + 1) % num_gene; /* index into offspring */
    p = k;                      /* index into tour2 */

    /* copy stuff from tour2 to offspring */
    while (k != left)
    {
        if (!city_table[(int) tour2[p]].used)
        {
            offspring[k] = tour2[p];
            k = (k + 1) % num_gene;
            city_table[(int) tour2[p]].used = 1;
        }
        p = (p + 1) % num_gene; /* increment tour2-index */
    }

}