TSP旅行商问题
TSP旅行商问题是运筹学领域一个经典问题,一个旅行商访问所有的城市,每个城市仅访问一次,总路程最短。
问题的模型如图:
目标函数:总路程最短
决策变量xij:若经过以ij为节点的边,则xij=1,否则为0
约束1:表示的是流入和流出节点的边相等,但是这里建模方式不同,看到程序大家就会明白
约束2:子回路约束,对任意一个V的子集,去掉V子集和空集,边的数量小于等于点的数量减去1,比如三个点,为了没有自回路,最多有两条边
程序代码
新建一个nodes.txt文档
# City X Y
Berlin 5251 1340
Frankfurt 5011 864
Leipzig 5133 1237
Heidelberg 4941 867
Karlsruhe 4901 840
Hamburg 5356 998
Bayreuth 4993 1159
Trier 4974 668
新建一个txt文档命名为test.zpl
set V := {
read "nodes.txt" as "<1s>" comment "#" }</