代码 | 用ALNS框架求解一个TSP问题 - 代码详解

代码 | 用ALNS框架求解一个TSP问题 - 代码详解

写在前面

前面好多篇文章,我们总算是把整个ALNS的代码框架给大家说明白了。不知道大家对整个框架了解了没有。不过打铁要趁热,心急了要吃热豆腐。今天就来实战一下,教大家怎么用ALNS的代码框架,求解一个老生常谈的TSP问题,so,get ready?
1240

01 文件说明

整个项目由多个文件组成,为了大家更好了解各个文件的内容以及他们之间的关系,小编特地做了一份表格说明。
| 类名或文件名 |说明 |
| :------| :------ |
| main | 主文件 |
| TSPSolution| Solution的定义和各种相关操作 |
| TSP_LS| LocalSearch |
| TSP_Best_Insert| repair方法|
| TSP_Random_Insert| repair方法|
| TSP_History_Removal| destroy方法|
| TSP_Random_Removal| destroy方法|
| TSP_Worst_Removal| 主destroy方法|

02 主逻辑过程分析

这一篇文章主要分析该程序的主逻辑过程,代码中的相关模块看不懂没关系,后面会详细讲解到的。大家先知道这么一个东西就行了。代码和具体解释贴在下面了,该过程主要是生成相应的模块,并且组装进去然后run起来而已,还算蛮简单的了。

int main(int argc, char* argv[])
{
    //构造TSP数据,100个点,坐标随机生成,这里你们可以按照自己的方式输入数据 
    double* x = new double[100];
    double* y = new double[100];
    for(int i = 0; i < 100; i++)
    {
        x[i] = 100*(static_cast<double>(rand()) / RAND_MAX);
        y[i] = 100*(static_cast<double>(rand()) / RAND_MAX);
    }
    double** distances = new double*[100];
    for(int i = 0; i < 100; i++)
    {
        distances[i] = new double[100];
        for(int j = 0; j < 100; j++)
        {
            distances[i][j] = sqrt((x[i]-x[j])*(x[i]-x[j])+(y[i]-y[j])*(y[i]-y[j]));
        }
    }
    
    //生成初始空解。参数是距离矩阵和城市数目 
    TSPSolution initialSol(distances,100);
    //生成repair和destroy方法 
    TSP_Best_Insert bestI("Best Insertion");
    TSP_Random_Insert randomI("Random Insertion");
    TSP_Random_Removal randomR("Random Removal");
    TSP_Worst_Removal worstR("Worst Removal");
    TSP_History_Removal historyR("History Removal",100);
    
    //对初始空解进行填充,形成初始解 
    randomI.repairSolution(dynamic_cast<ISolution&>(initialSol));

    //加载相关参数 
    ALNS_Parameters alnsParam;
    alnsParam.loadXMLParameters("
  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值