Skip to content

qibinc/Simulated-Annealing

Repository files navigation

模拟退火算法类

SA<T>

  • SA类为模拟退火算法通用类模版,与数据无关,只通过调用 StateImp 类提供的接口进行数据相关操作。
  • SimulatedAnnealing() 为退火算法框架,不可更改;
  • Accepted() 为接收条件,基于Metropolis准则,不可更改;
  • InitTemperature() 返回一个初始温度,派生类通过重写该函数设定初始温度;
  • Balanced(int i) 为达到平稳分布的条件,派生类可通过重写更改;
  • Terminate() 为温度终止条件,派生类可通过重写更改;
  • Drop() 为温度下降方式,可重写。
  • 以上函数均有默认实现。

StateImp<T>

  • StateImp是接口类模版。
  • F(T *state) 需返回对当前状态的指标函数
  • InitData() 中需实现数据的输入以及预处理;
  • InitState() 返回一个退火的初始状态,该状态领域不能为空;
  • Neighbor(T *state) 应该等概率随机返回一个当前状态领域中的状态;
  • PrintSolution(T *state) 中应包含状态的输出方法,如果不需要获得最佳解的方案,此项不是必须的。

TSPSA

  • SA<vector>的派生类,用于解决旅行商问题

TSPStateImp

  • StateImp的实现类,针对旅行商问题实现了StateImp中规定的借口。

cmake工程 构建方法

  • cd your/path/to/SA
  • cmake .
  • make
  • ./SA < sample-input-files/reuc-100

运行示例

  • sample-input-files 下包含了 TSP 问题的三个样例输入

  • 运行 ./SA < sample-input-files/reuc-100

    cqb@Cqbs-MacBook-Air:~/developer/SA$ ./SA < sample-input-files/reuc-100 Temperature = 300 Time = 0.15s

    ​ Min F = 11047.11 ​ 79 91 71 24 20 68 54 17 43 58 42 63 47 60 19 65 27 30 46 83 56 53 50 2 97 13 75 36 26 12 99 38 37 86 70 48 57 78 32 0 74 69 44 64 84 85 59 93 18 80 51 9 15 39 35 5 55 76 8 77 67 21 66 98 90 28 41 52 89 87 31 29 16 10 40 73 25 81 45 82 14 92 1 62 72 3 94 61 23 4 49 34 7 11 96 88 6 33 95 22

    Temperature = 276.00 Time = 0.30s ​ Min F = 9895.81 ​ 21 98 5 4 50 0 49 63 77 35 48 37 18 46 16 32 57 99 67 8 25 39 11 26 95 20 27 83 93 31 53 47 82 3 54 13 15 87 96 86 51 12 88 78 61 84 74 41 76 34 69 60 75 30 80 9 23 92 58 40 33 62 43 52 36 68 66 14 64 28 22 55 45 94 6 91 65 19 1 7 89 97 73 81 38 70 72 29 2 42 44 85 59 17 71 10 24 56 79 90

    …...

    …...

    Temperature = 0.58 Time = 11.31s

    ​ Min F = 1552.10 ​ 81 65 48 1 68 51 44 82 11 20 97 24 23 98 85 16 26 57 62 83 89 70 86 31 72 49 29 41 36 19 79 56 90 94 54 99 69 10 7 74 14 61 67 39 38 34 76 8 28 40 59 45 96 42 50 92 60 75 53 30 46 3 0 17 5 2 87 80 47 88 55 66 95 18 58 52 35 77 15 91 21 6 13 12 9 73 64 25 32 71 84 78 33 37 43 27 93 4 63 22

    Temperature = 0.53 Time = 11.45s ​ Min F = 1552.50 ​ 65 81 22 63 4 93 27 43 37 33 78 84 71 32 25 64 73 9 12 13 6 21 91 15 77 35 52 58 18 95 66 55 88 47 80 87 2 5 17 0 3 46 30 53 75 60 92 50 42 96 45 59 40 28 8 76 34 38 39 67 61 14 74 7 10 69 99 54 94 90 56 79 19 36 29 41 49 72 31 86 70 89 83 62 57 26 16 85 98 23 24 97 20 11 82 44 51 68 1 48

    Finished!

About

TSP, 旅行商, 模拟退火

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published