两个指定顶点之间最短路问题Lingo解法
2020-06-06 07:38
281 查看
两个指定顶点之间最短路问题
见下图,用点表示城市,现有 A,B1,B2 ,C1,C2 ,C3, D共 7 个城市。点与点之间的连线表示城市间有道路相连。连线旁的数字表示道路的长度。现计划从城市A到城市D 铺设一条天然气管道,请设计出最小价格管道铺设方案。
lingo程序:
model: sets: cities/A,B1,B2,C1,C2,C3,D/; roads(cities,cities)/A B1,A B2,B1 C1,B1 C2,B1 C3,B2 C1, B2 C2,B2 C3,C1 D,C2 D,C3 D/:w,x;!路径长度 endsets data: w=2 4 3 3 1 2 3 1 1 3 4; enddata n=@size(cities); !城市的个数; min=@sum(roads:w*x); @for(cities(i)|i #ne#1 #and# i #ne#n: @sum(roads(i,j):x(i,j))=@sum(roads(j,i):x(j,i))); @sum(roads(i,j)|i #eq#1:x(i,j))=1; @sum(roads(i,j)|j #eq#n:x(i,j))=1; end
运行结果:
Global optimal solution found. Objective value: 6.000000 Infeasibilities: 0.000000 Total solver iterations: 0 Model Class: LP Total variables: 11 Nonlinear variables: 0 Integer variables: 0 Total constraints: 8 Nonlinear constraints: 0 Total nonzeros: 33 Nonlinear nonzeros: 0 Variable Value Reduced Cost N 7.000000 0.000000 W( A, B1) 2.000000 0.000000 W( A, B2) 4.000000 0.000000 W( B1, C1) 3.000000 0.000000 W( B1, C2) 3.000000 0.000000 W( B1, C3) 1.000000 0.000000 W( B2, C1) 2.000000 0.000000 W( B2, C2) 3.000000 0.000000 W( B2, C3) 1.000000 0.000000 W( C1, D) 1.000000 0.000000 W( C2, D) 3.000000 0.000000 W( C3, D) 4.000000 0.000000 X( A, B1) 1.000000 0.000000 X( A, B2) 0.000000 0.000000 X( B1, C1) 1.000000 0.000000 X( B1, C2) 0.000000 2.000000 X( B1, C3) 0.000000 1.000000 X( B2, C1) 0.000000 1.000000 X( B2, C2) 0.000000 4.000000 X( B2, C3) 0.000000 3.000000 X( C1, D) 1.000000 0.000000 X( C2, D) 0.000000 0.000000 X( C3, D) 0.000000 0.000000 Row Slack or Surplus Dual Price 1 0.000000 0.000000 2 6.000000 -1.000000 3 0.000000 -4.000000 4 0.000000 -2.000000 5 0.000000 0.000000 6 0.000000 1.000000 7 0.000000 -1.000000 8 0.000000 -2.000000 9 0.000000 -2.000000
由此,我们可以很容易得到以下结论:
A和D之间的最短路径为:A→B1→C1→D.
相关文章推荐
- 一个问题是有关于用js去替换htm指定标签之间的内容
- Update 两个表之间更新数据问题
- 7.27 采用邻接表存储结构,编写一个判别无向图中任意给定的两个顶点之间是否存在一条长度为k的简单路径的算法。
- 同一个Tomcat部署两个project之间的通信问题
- strchr的返回值提取字符串指定两个字符之间的字符串
- mysql 截取指定的两个字符串之间的内容(locate,substring)
- 编程珠玑: 12章 取样问题 12.3设计空间,程序的输入包含两个整数m和n,其中m<n。输出是0~n-1范围内m个随机整数的有序列表,不允许重复。 解法2-------解题总结
- 获取指定经纬度及当前位置经纬度,并计算两个位置之间的距离
- 图——所有顶点之间的最短路径问题-弗洛伊德算法
- java代码优化:解决两个默认方法之间重复代码的问题
- 关于在两个jsp页面之间传递值的问题
- 两个村庄之间架桥问题
- win7 64位数据库连接问题:在指定的 DSN 中,驱动程序和应用程序之间的体系结构不匹配
- mysql 截取指定的两个字符串之间的内容(locate,substring)
- Java 求两个指定时间之间的工作日
- 解决两个activity之间传递对象的问题
- 基于startActivityForResult方法处理两个Activity之间数据传递问题
- css 两个 p 标签之间的间距问题
- 1-n之间的整数之和为指定数sum问题(百度之星往年试题)
- iOS 计算两个日期之间的天数问题