geqo_recombination.h 2.6 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889
  1. /*-------------------------------------------------------------------------
  2. *
  3. * geqo_recombination.h
  4. * prototypes for recombination in the genetic query optimizer
  5. *
  6. * Portions Copyright (c) 1996-2016, 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. /* contributed by:
  14. =*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=
  15. * Martin Utesch * Institute of Automatic Control *
  16. = = University of Mining and Technology =
  17. * utesch@aut.tu-freiberg.de * Freiberg, Germany *
  18. =*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=
  19. */
  20. /* -- parts of this are adapted from D. Whitley's Genitor algorithm -- */
  21. #ifndef GEQO_RECOMBINATION_H
  22. #define GEQO_RECOMBINATION_H
  23. #include "optimizer/geqo.h"
  24. extern void init_tour(PlannerInfo *root, Gene *tour, int num_gene);
  25. /* edge recombination crossover [ERX] */
  26. typedef struct Edge
  27. {
  28. Gene edge_list[4]; /* list of edges */
  29. int total_edges;
  30. int unused_edges;
  31. } Edge;
  32. extern Edge *alloc_edge_table(PlannerInfo *root, int num_gene);
  33. extern void free_edge_table(PlannerInfo *root, Edge *edge_table);
  34. extern float gimme_edge_table(PlannerInfo *root, Gene *tour1, Gene *tour2,
  35. int num_gene, Edge *edge_table);
  36. extern int gimme_tour(PlannerInfo *root, Edge *edge_table, Gene *new_gene,
  37. int num_gene);
  38. /* partially matched crossover [PMX] */
  39. #define DAD 1 /* indicator for gene from dad */
  40. #define MOM 0 /* indicator for gene from mom */
  41. extern void pmx(PlannerInfo *root,
  42. Gene *tour1, Gene *tour2,
  43. Gene *offspring, int num_gene);
  44. typedef struct City
  45. {
  46. int tour2_position;
  47. int tour1_position;
  48. int used;
  49. int select_list;
  50. } City;
  51. extern City *alloc_city_table(PlannerInfo *root, int num_gene);
  52. extern void free_city_table(PlannerInfo *root, City *city_table);
  53. /* cycle crossover [CX] */
  54. extern int cx(PlannerInfo *root, Gene *tour1, Gene *tour2,
  55. Gene *offspring, int num_gene, City *city_table);
  56. /* position crossover [PX] */
  57. extern void px(PlannerInfo *root, Gene *tour1, Gene *tour2, Gene *offspring,
  58. int num_gene, City *city_table);
  59. /* order crossover [OX1] according to Davis */
  60. extern void ox1(PlannerInfo *root, Gene *mom, Gene *dad, Gene *offspring,
  61. int num_gene, City *city_table);
  62. /* order crossover [OX2] according to Syswerda */
  63. extern void ox2(PlannerInfo *root, Gene *mom, Gene *dad, Gene *offspring,
  64. int num_gene, City *city_table);
  65. #endif /* GEQO_RECOMBINATION_H */