You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

CPLEX Studio中TSP的dist数组是什么?如何为新成本矩阵填充?

CPLEX Studio中TSP的dist数组解析与填充方法

一、dist数组的定义与作用

在你提供的TSP模型里,dist是一个以有序城市对(edge)为索引的整数数组,核心作用是存储从城市i到城市j的旅行成本(比如距离、运输费用等)。它的索引集合Edges被定义为所有i≠j的有序城市对<i,j>,因此每个dist[<i,j>]都对应一条从i到j的单向边的成本。

二、用给定成本矩阵填充dist数组的方法

你提供的是5个城市的对称成本矩阵(矩阵中cost[i][j] = cost[j][i]),以下两种方式可以完成dist数组的填充:

方法1:在.dat数据文件中直接赋值

保持.mod文件原有结构,在对应的.dat文件中指定城市数量n,并逐个定义每个边的成本:

n = 5;

dist = [
    <1,2>:2, <1,3>:3, <1,4>:4, <1,5>:1,
    <2,1>:2, <2,3>:5, <2,4>:6, <2,5>:3,
    <3,1>:3, <3,2>:5, <3,4>:7, <3,5>:2,
    <4,1>:4, <4,2>:6, <4,3>:2, <4,5>:6,
    <5,1>:1, <5,2>:3, <5,3>:1, <5,4>:6
];

方法2:在.mod模型文件中通过成本矩阵映射赋值

这种方式无需手动枚举所有边,直接通过给定的5x5成本矩阵映射生成dist数组,更简洁:

int     n       = 5;
range   Cities  = 1..n;

// 定义给定的5x5成本矩阵
int cost[Cities][Cities] = [
    [99, 2, 3, 4, 1],
    [2, 99, 5, 6, 3],
    [3, 5, 99, 7, 2],
    [4, 6, 2, 99, 6],
    [1, 3, 1, 6, 99]
];

tuple       edge {
    int i;
    int j;
}

setof(edge) Edges       = {<i,j> | ordered i,j in Cities};
// 通过成本矩阵直接映射dist数组,自动匹配每个有序对的成本
int     dist[Edges] = (i,j) => cost[i][j];
 
dvar boolean x[Edges];

注意事项

  • 成本矩阵中的对角线值(99)对应城市到自身的成本,由于Edges集合不包含<i,i>这种边,因此这些值不会被用到;
  • 若成本矩阵为非对称结构,只需确保每个有序对<i,j>的成本和矩阵中的cost[i][j]对应即可。

内容的提问来源于stack exchange,提问作者john

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.22 00:28:25