最小费用最短路问题的lingo代码
时间: 2023-08-04 14:08:20 浏览: 193
LINGO1.rar_lingo 最小运输费用问题_目标函数_蔬菜供应_运费
以下是使用Lingo求解最小费用最短路问题的代码:
```lingo
model:
sets:
i /1*10/
j /1*10/
k /1*20/
parameters:
c(i,j) / 1 2 3 2 4 1 3 4 2 5, 2 1 3 2 1 4 3 3 3 2,
2 3 1 4 2 5 1 2 4 3, 3 2 4 1 3 2 5 1 4 2,
4 1 2 3 1 4 2 3 2 3, 1 4 5 2 4 1 3 2 2 1,
3 3 1 5 2 3 1 4 3 2, 4 1 2 1 3 2 4 3 1 2,
2 2 4 4 2 1 3 2 2 3, 5 1 3 2 1 4 2 3 1 2 /
f(i,j) / 10 30 20 40 60 10 20 10 30 50, 20 10 30 40 10 50 20 30 40 20,
30 20 10 50 40 60 10 30 20 40, 40 30 50 20 10 30 60 10 20 30,
50 10 20 30 20 10 40 30 30 20, 10 50 60 20 50 10 20 30 20 10,
20 40 30 10 30 20 50 20 40 30, 30 10 20 10 20 30 40 30 10 20,
10 20 50 40 30 10 20 30 20 20, 50 10 30 20 10 50 40 30 20 40 /
start(i) /1/
end(i) /10/
variables:
x(i,j) binary
z
equations:
obj: z = sum((i,j), f(i,j)*x(i,j))
start_con: sum(j, x(start,j)) = 1
end_con: sum(i, x(i,end)) = 1
flow_con(i)$(not sameas(i,start) and not sameas(i,end)):
sum(j, x(i,j)) - sum(j, x(j,i)) = 0
arc_con(i,j): x(i,j) + x(j,i) <= 1
subtour_con(k)$(card(k) gt 1):
sum((i,j)$(ord(i) lt ord(j) and i in k and j in k), x(i,j)) <= card(k) - 1
model_name "MinCostShortestPath";
solve;
display z, x;
```
该模型中,`i`和`j`表示图的节点,`k`表示子集,`c(i,j)`表示节点i到节点j的距离,`f(i,j)`表示节点i到节点j的费用,`start(i)`表示起点,`end(i)`表示终点,`x(i,j)`表示是否选择从节点i到节点j的路径,`z`表示最小费用。模型的约束分别为:起点只有一条出边,终点只有一条入边,流量守恒约束,路径是有向无环图,子集约束,目标函数为最小费用。
阅读全文