Tabu Search Algorithm: A Case Study on Graph Coloring realized by Python and C++
算例文件名 | 最少着色颜色数 | 迭代次数 | 运算时间 |
---|---|---|---|
DSJC125.1 | 5 | 1064 | 22s |
DSJC125.5 | 17 | 12972 | 207.9s |
DSJC125.9 | 44 | 13333 | 305.3s |
DSJC250.1 | 8 | 14835 | 202s |
DSJC250.5 | 28 | ||
DSJC250.9 | 72 | ||
DSJC500.1 | 12 | ||
DSJC500.5 | 49,48,47 |
void initializeAdjacentColorTable(int **Adjacent_Color_Table, vector<vector> &edges, int *sol)根据边和当前图着色情况生成邻接着色表
int findMove(int **Adjacent_Color_Table, int *sol,int n,int k, int **TaBuTenureTable,int &node,int &color,int best_f,int f,int currIter)找到一次最优移动
void makeMove(int &f,int delt,int &best_f,int node,int color,int *sol, int **TaBuTenureTable,int currIter, int **Adjacent_Color_Table, vector<vector> &edges)执行最优移动
算例文件名 | 最少着色颜色数 | 迭代次数 | 运算时间 |
---|---|---|---|
DSJC125.1 | 5 | 6340 | 239 |
DSJC125.5 | 17 | 129331 | 14758s |
DSJC125.9 | 44 | 2119 | 1047 |
DSJC250.1 | 8 | 21622 | 2541 |
DSJC250.5 | 28 | ||
DSJC250.9 | 72 | ||
DSJC500.1 | 12 | ||
DSJC500.5 | 49,48,47 |
通过这次图着色算法,使我初步了解了启发式优化。发现实现过程还是十分有趣的,比如中间也遇到过一些问题,在禁忌搜索过程中,遇到禁忌移动和非禁忌移动,当没有非禁忌移动时,却不满足禁忌解除的条件时,我们的解决方法有适当把禁忌长度设置短一点,或者直接选择最好的禁忌移动即可。相信自己有能力并且能一直能在这个方向做下去。