sacode.h
Upload User: jsfeizhou
Upload Date: 2018-08-08
Package Size: 675k
Code Size: 2k
Category:

matlab

Development Platform:

Matlab

  1. #include <vector>
  2. struct SYCoordinate
  3. {
  4. SYCoordinate()
  5. {
  6. m_fcodx = 0.0;
  7. m_fcody = 0.0;
  8. }
  9. double m_fcodx;
  10. double m_fcody;
  11. };
  12. struct SYCity
  13. {
  14. SYCity()
  15. {
  16. m_nIndex = 0;
  17. m_strName.Empty();
  18. }
  19. int m_nIndex; //城市编号
  20. CString m_strName; //城市名称
  21. SYCoordinate m_Coordinate; //城市坐标
  22. };
  23. struct SYCityDistance
  24. {
  25. SYCityDistance()
  26. {
  27. m_nFromCity = 0;
  28. m_nToCity = 0;
  29. m_fDistance = 0.0;
  30. }
  31. int m_nFromCity; //源城市
  32. int m_nToCity; //目标城市
  33. double m_fDistance; //城市之间的距离
  34. };
  35. typedef std::vector<int> CityRouterDef;
  36. void InitialSA();
  37. void CreateCityRouter( CityRouterDef &CityRouter );
  38. void CreateCityRouter2opt( CityRouterDef &preCityRouter, CityRouterDef &CityRouter );
  39. double CountTotalDistance( CityRouterDef &CityRouter );
  40. double CountCityDistance( SYCity &FromCity, SYCity &ToCity, SYCityDistance &CityDistance );
  41. double FindCityDistance( int FromCityIndex, int ToCityIndex );
  42. double CountInitialTemperature();
  43. double CountDownTemperature( int DownMode );
  44. BOOL JudgeOverInnerLoop( int JudgeMode );
  45. BOOL JudgeOverExternalLoop( int JudgeMode );
  46. struct SYRouter
  47. {
  48. SYRouter()
  49. {
  50. m_CityRouter.clear();
  51. m_fTotalDistance = 0.0;
  52. m_fTemperature = 0.0;
  53. m_nExternalIterNumber = 0;
  54. m_nInnerIterNumber = 0;
  55. }
  56. SYRouter( double nowTemp,
  57.   int nowExtIterNum,
  58.   int nowInIterNum )
  59. {
  60. CreateCityRouter( m_CityRouter );
  61. m_fTotalDistance = CountTotalDistance( m_CityRouter );
  62. m_fTemperature = nowTemp;
  63. m_nExternalIterNumber = nowExtIterNum;
  64. m_nInnerIterNumber = nowInIterNum;
  65. }
  66. SYRouter( CityRouterDef &preCityRouter,
  67.   double nowTemp,
  68.   int nowExtIterNum,
  69.   int nowInIterNum )
  70. {
  71. CreateCityRouter2opt( preCityRouter, m_CityRouter );
  72. m_fTotalDistance = CountTotalDistance( m_CityRouter );
  73. m_fTemperature = nowTemp;
  74. m_nExternalIterNumber = nowExtIterNum;
  75. m_nInnerIterNumber = nowInIterNum;
  76. }
  77. void operator=(const SYRouter& srcRouter)
  78. {
  79. m_CityRouter = srcRouter.m_CityRouter;
  80. m_fTotalDistance = srcRouter.m_fTotalDistance;
  81. m_fTemperature = srcRouter.m_fTemperature;
  82. m_nExternalIterNumber = srcRouter.m_nExternalIterNumber;
  83. m_nInnerIterNumber = srcRouter.m_nInnerIterNumber;
  84. }
  85. CityRouterDef m_CityRouter;
  86. double m_fTotalDistance;
  87. double m_fTemperature;
  88. int m_nExternalIterNumber;
  89. int m_nInnerIterNumber;
  90. };