数学建模 TSP(旅行商问题) Lingo求解

本文介绍了一个旅行商问题(TSP)的数学规划模型,通过定义城市间距离及路径选择变量来构建模型,旨在寻找最短的遍历所有城市并返回起点的路径。文中详细展示了如何使用约束条件避免子圈的形成,并通过限制变量范围来加速模型求解。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

model:
sets:
cities/1..9/:level;
link(cities, cities): distance, x;   !距离矩阵;
endsets
data:
distance = 0    200   660   170   127   225   490  420   330                            
         200    0    820   300   90    60    310  225   151                        
         660    820    0    530   770   120   1110 1050  960                    
         170    300    530    0    280   350   600  550   450                
         127    90    770    280    0    110   370  310   210            
           225    60    120    350    110    0    280  250   120        
           490    310    1110    600    370    280    0    290   190    
           420    225    1050    550    310    250    290    0    160
           330    151    960    450    210    120    190    160    0 ;
enddata
n = @size(cities);

!目标函数;
min=@sum(link:distance * x);

@For(cities(k):
     !进入城市k;
     @sum(cities(i) | i #ne# k: x(i,k)) = 1;

     !离开城市k;
     @sum(cities(j) | j #ne# k: x(k,j)) = 1;
    );

    !保证不出现子圈;
    @for(cities(i) | i #gt# 1:
    @for(cities(j) | j #gt# 1 #and# i#ne#j:
        level(i)-level(j) + n*x(i,j) <= n-1);
     );
    
    !限制u的范围以加速模型的求解,保证所加限制并不排除掉TSP问题的最优解;
    @for(cities(i) | i #gt# 1: level(i) <= n-2);
    !定义x为 0\1变量;
    @for(link:@bin(x));
end


        

 

转载于:https://www.cnblogs.com/douzujun/p/6682691.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值