geqo_mutation.c
上传用户:blenddy
上传日期:2007-01-07
资源大小:6495k
文件大小:2k
源码类别:

数据库系统

开发平台:

Unix_Linux

  1. /*------------------------------------------------------------------------
  2. *
  3. * geqo_mutation.c
  4. *
  5. *  TSP mutation routines
  6. *
  7. * $Id: geqo_mutation.c,v 1.5.2.1 1999/08/02 05:57:05 scrappy Exp $
  8. *
  9. *-------------------------------------------------------------------------
  10. */
  11. /* contributed by:
  12.    =*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=
  13.    *  Martin Utesch  * Institute of Automatic Control    *
  14.    =  = University of Mining and Technology =
  15.    *  utesch@aut.tu-freiberg.de  * Freiberg, Germany    *
  16.    =*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=
  17.  */
  18. /* this is adopted from Genitor : */
  19. /*************************************************************/
  20. /*  */
  21. /* Copyright (c) 1990  */
  22. /* Darrell L. Whitley  */
  23. /* Computer Science Department  */
  24. /* Colorado State University  */
  25. /*  */
  26. /* Permission is hereby granted to copy all or any part of  */
  27. /* this program for free distribution.   The author's name  */
  28. /* and this copyright notice must be included in any copy.  */
  29. /*  */
  30. /*************************************************************/
  31. #include "postgres.h"
  32. #include "optimizer/geqo_mutation.h"
  33. #include "optimizer/geqo_random.h"
  34. void
  35. geqo_mutation(Gene *tour, int num_gene)
  36. {
  37. int swap1;
  38. int swap2;
  39. int num_swaps = geqo_randint(num_gene / 3, 0);
  40. Gene temp;
  41. while (num_swaps > 0)
  42. {
  43. swap1 = geqo_randint(num_gene - 1, 0);
  44. swap2 = geqo_randint(num_gene - 1, 0);
  45. while (swap1 == swap2)
  46. swap2 = geqo_randint(num_gene - 1, 0);
  47. temp = tour[swap1];
  48. tour[swap1] = tour[swap2];
  49. tour[swap2] = temp;
  50. num_swaps -= 1;
  51. }
  52. }