实验4 Lingo求解最短路最小树问题
LINGO软件求解最短路问题示例
西安邮电大学现代邮政学院Xi'an post and telecommunications university modern post CollegeLINGO软件求解最短路问题最短路问题最短路问题:给定赋权有向图D=(V,A),最短路问题就是要在所有从v s到v t的路中,求一条权最小的路,最短路的权简称为从v s到v t的距离。
应用:可以直接应用于解决生产实际的许多问题,如管道铺设、线路安排、厂区布局、设备更新等,还经常被作为一个基本工具,用于解决其它的优化问题。
例 题下图,给定一个线路网络,两点之间连线上的数字表示两点间的距离,求一条从A到G的铺管线路,使总距离最短。
AB 1B 2C 1C 2C 3C 4D 1D 2D 3E 1E 2E 3F 1F 2G538761366835338422123335526643LINGO输入程序设:A为顶点城市1,B 1为2,B 2为3,C 1为4,C 2为5,C 3为6,C 4为7,D 1为8,D 2为9,D 3为10,E 1为11,E 2为12,E 3为13,F 1为14,F 2为15,G为16。
12345678910111213141516MODEL :[1]SETS :! We have a network of 16 cities. We want to find the length of the shortest route from city 1 to city 16. ;! Here is our primitive set of sixteen cities, where F(i) represents the shortest path distance from city i to the last city;[2]CITIES/1..16/:F;! The derived set ROADS lists the roads that exist between the cities (note: not all city pairs are directly linked by a road, and roads are assumed to be one way.);[3]ROADS(CITIES,CITIES) /[4]1,2 1,3 2,4 2,5 2,6 3,5 3,6 3,7 4,8 4,9 5,8 5,9 6,9 6,10 7,9 7,10[5]8,11 8,12 9,12 9,13 10,12 10,13 11,14 11,15 12,14 12,15 13,14 13,15[6]14,16 15,16 /:D;! D(i,j) is the distance from city i to j;[7]ENDSETS [8]DATA :! Here are the distance that correspond to the above links;[9]D=[10]5 3 1 3 6 8 7 6 6 8 3 5 3 3 8 4[11]2 2 1 2 3 3 3 5 5 2 6 6[12]4 3;[13]ENDDATA! If you are already in City 16,then the cost to travel to city 16 is 0;[14]F(@SIZE (CITIES))=0;!The shortest distance from City 1 to City 16 is the minimum over all cities j reachable from i of the sum of the distance from i to j plus the minimal distance from j to City 16;[15]@FOR (CITIES(i)|i#LT#@SIZE (CITIES):[16]F(i)=@MIN (ROADS(i,j):D(i,j)+F(j)));END集合段数据段运算式LINGO软件求解结果Variable ValueF( 1) 18.00000F( 2) 13.00000F( 3) 16.00000F( 4) 13.00000F( 5) 10.00000F( 6) 9.000000 F( 7) 12.00000F( 8) 7.000000 F( 9) 6.000000 F( 10) 8.000000 F( 11) 7.000000 F( 12) 5.000000 F( 13) 9.000000 F( 14) 4.000000 F( 15) 3.000000 F( 16) 0.000000Variable ValueD( 1, 2) 5.000000D( 1, 3) 3.000000D( 2, 4) 1.000000D( 2, 5) 3.000000D( 2, 6) 6.000000D( 3, 5) 8.000000D( 3, 6) 7.000000D( 3, 7) 6.000000D( 4, 8) 6.000000D( 4, 9) 8.000000D( 5, 8) 3.000000D( 5, 9) 5.000000D( 6, 9) 3.000000D( 6, 10) 3.000000D( 7, 9) 8.000000D( 7, 10) 4.000000D( 8, 11) 2.000000D( 8, 12) 2.000000D( 9, 12) 1.000000D( 9, 13) 2.000000D( 10, 12) 3.000000D( 10, 13) 3.000000D( 11, 14) 3.000000D( 11, 15) 5.000000D( 12, 14) 5.000000D( 12, 15) 2.000000D( 13, 14) 6.000000D( 13, 15) 6.000000D( 14, 16) 4.000000D( 15, 16) 3.000000点1到最后一个点(点16)的最短路的长度(距离)为18。
最短路径问题的0-1规划模型,lingo直接求解
解:对于无向图的最短路问题,可以这样理解,从点到点和点到点的边看成有向弧,其他各条边均看成有不同方向的双弧,因此,可以按照前面介绍有向图的最短路问题来编程序,但按照这种方法编写LINGO程序相当于边(弧)增加了一倍.这里选择邻接矩阵和赋权矩阵的方法编写LINGO程序.MODEL:1] sets:2] cities/1..11/;3] roads(cities, cities): p, w, x;4] endsets5] data:6] p = 0 1 1 1 0 0 0 0 0 0 07] 0 0 1 0 1 0 0 0 0 0 08] 0 1 0 1 1 1 1 0 0 0 09] 0 0 1 0 0 0 1 0 0 0 010] 0 1 1 0 0 1 0 1 1 0 011] 0 0 1 0 1 0 1 0 1 0 012] 0 0 1 1 0 1 0 0 1 1 013] 0 0 0 0 1 0 0 0 1 0 114] 0 0 0 0 1 1 1 1 0 1 115] 0 0 0 0 0 0 1 0 1 0 116] 0 0 0 0 0 0 0 0 0 0 0;17] w = 0 2 8 1 0 0 0 0 0 0 018] 2 0 6 0 1 0 0 0 0 0 019] 8 6 0 7 5 1 2 0 0 0 020] 1 0 7 0 0 0 9 0 0 0 021] 0 1 5 0 0 3 0 2 9 0 022] 0 0 1 0 3 0 4 0 6 0 023] 0 0 2 9 0 4 0 0 3 1 024] 0 0 0 0 2 0 0 0 7 0 925] 0 0 0 0 9 6 3 7 0 1 226] 0 0 0 0 0 0 1 0 1 0 427] 0 0 0 0 0 0 0 9 2 4 0;28] enddata29]n=@size(cities);30]min=@sum(roads:w*x);31]@for(cities(i) | i #ne# 1 #and# i #ne# n:32] @sum(cities(j): p(i,j)*x(i,j))33] =@sum(cities(j): p(j,i)*x(j,i)));34]@sum(cities(j): p(1,j)*x(1,j))=1;END在上述程序中,第6]行到第16]行给出了图的邻接矩阵,到和到的边按单向计算,其余边双向计算.第17]行到第27]行给出了图的赋权矩阵, 注意:由于有了邻接矩阵,两点无道路连接时,权值可以定义为0. 其它的处理方法基本上与有向图相同.用LINGO软件求解,得到(仅保留非零变量)Global optimal solution found at iteration: 2 0Objective value: 13.00000Variable Value Reduced CostX( 1, 2) 1.000000 0.000000X( 2, 5) 1.000000 0.000000X( 3, 7) 1.000000 0.000000X( 5, 6) 1.000000 0.000000X( 6, 3) 1.000000 0.000000X( 7, 10) 1.000000 0.000000X( 9, 11) 1.000000 0.000000X( 10, 9) 1.000000 0.000000即最短路径为最短路长度为13.→→→→→→→1256371011。
最短路问题的求解方法
最短路问题的求解方法最短路问题是图论中一个经典的问题,它在实际生活中有着广泛的应用,比如在交通规划、网络通信、物流配送等领域都有着重要的作用。
在解决最短路问题时,我们通常会采用不同的算法来求解,本文将介绍几种常见的最短路求解方法。
首先,我们来介绍最简单的最短路求解方法——暴力法。
暴力法的思路是枚举所有可能的路径,并找出其中的最短路。
虽然暴力法在理论上是可行的,但在实际应用中,由于其时间复杂度较高,往往不适用于大规模的图。
因此,我们需要寻找更加高效的算法来解决最短路问题。
其次,我们可以考虑使用迪杰斯特拉算法(Dijkstra algorithm)来求解最短路问题。
迪杰斯特拉算法是一种贪心算法,它通过不断地选择距离起点最近的顶点,并更新其邻居顶点的距离,来逐步求解最短路。
迪杰斯特拉算法的时间复杂度为O(V^2),其中V表示顶点的个数。
这使得它在实际应用中具有较高的效率,尤其适用于稠密图的求解。
除了迪杰斯特拉算法外,我们还可以使用弗洛伊德算法(Floydalgorithm)来解决最短路问题。
弗洛伊德算法采用动态规划的思想,通过不断更新图中任意两点之间的最短路径长度,来逐步求解整个图的最短路。
弗洛伊德算法的时间复杂度为O(V^3),因此在大规模图的求解中也具有较高的效率。
除了上述算法外,我们还可以考虑使用A算法、贝尔曼-福特算法等其他算法来解决最短路问题。
这些算法各有特点,适用于不同类型的图和不同的应用场景。
总的来说,最短路问题是一个重要且经典的问题,在实际应用中有着广泛的应用。
在求解最短路问题时,我们可以根据具体的情况选择合适的算法来求解,以提高效率和准确性。
希望本文介绍的几种最短路求解方法能够对读者有所帮助,谢谢阅读!。
利用LinGo求解几种有向图最短路问题
(Fujian Communication Technology College Basic Courses Department, Fuzhou Fujian 350007)
Abstract: In this paper, there are several shortest paths to the weighted graph using Lingo software path length and the solution, and analyzed with a simple solution Lingo place and how to empower a directed graph of the negative rights. Provides a good way to solve this kind of this problem.
CAI Ze- huan,LI Xiang- fu
(Xiangfan Vocational and Technical College, Xiangfan Hubei 441050, China)
Abstract: This paper presents methods to achieve training standards for the effective connection with the needs of employers from five aspects, which is on the basis of vocational education in the training standards and the employer needs the existence of dislocation.
路的优点在于,程序书写简单易懂,容易掌握,答案 直观明了,比传统解题节约不少时间。Lingo不仅仅 在线性规划解题方面有其独特的优越性,在图论解 题中也有其可取之处,简便易懂的程序取得意想不 到的效果。
Lingo精选题目及答案
Lingo精选题目及答案Lingo 精选题目及答案答题要求:将Lingo 程序复制到Word 文档中,并且附上最终结果。
1、简单线性规划求解(目标函数)2134m axx x z += s.t.(约束条件)≥≤≤+≤+0,781022122121x x x x x x x2、整数规划求解219040Maxx x z +=≥≤+≤+0,702075679212121x x x x x x 3、0-1规划求解Max 432215.18.04.0x x x x f +++=10106234321≤+++x x x x10,,,4321或=x x x x4、非线性规划求解||4||3||2||m in4321x x x x z +++=s.t.-=+--=-+-=+--2132130432143214321x x x x x x x x x x x x5、集合综合应用产生一个集合5052--=x x y ,(10,...,2,1=x ),求y 前6个数的和S 1,后6个数的和S 2,第2~8个数中的最小值S 3,最大值S 4。
6、综合题要求列出具体的目标函数和约束条件,然后附上Lingo 程序和最终结果。
6.1 指派问题问指派哪个人去完成哪项工作,可使总的消耗时间为最小?6.2 分配问题某两个煤厂A1,A2每月进煤数量分别为60t和100t,联合供应3个居民区B1,B2,B3。
3个居民区每月对煤的需求量依次分别为50t,70t,40t,煤厂A1离3个居民区B1,B2,B3的距离依次分别为10km,5km,6km,煤厂A2离3个居民区B1,B2,B3的距离分别为4km,8km,12km。
问如何分配供煤量使得运输量(即t·km)达到最小?1、model:max=4*x1+3*x2;2*x1+x2<10;x1+x2<8;x2<7;end2、model:max=40*x1+90*x2;9*x1+7*x2<56;7*x1+20*x2<70;@gin(x1);@gin(x2);end3、model:max=x1^2+0.4*x2+0.8*x3+1.5*x4;3*x1+2*x2+6*x3+10*x4<10;@bin(x1); @bin(x2);@bin(x3); @bin(x4);end4、model:max=@abs(x1)+2*@abs(x2)+3*@abs(x3)+4*@abs(x4);x1-x2-x3+x4=0;x1-x2+x3-3*x4=1;x1-x2-2*x3+3*x4=-1/2;end5、model:sets:jihe/1..10/:y;ss/1..4/:S;endsets!由于y和s中部分有负数,所以要先去掉这个约束;@for(jihe:@free(y));@for (ss(i):@free (S));!产生元素;@for (jihe(x):y(x)=x^2-5*x-50); S(1)=@sum (jihe(i)|i#le#6:y(i)); S(2)=@sum (jihe(i)|i#ge#5:y(i));S(3)=@min (jihe(i)|i#ge#2 #and# i#le#8:y(i)); S(4)=@max (jihe(i)|i#ge#2 #and# i#le#8:y(i)); end6.1、设:第i 个工人做第j 项工作用时ij t ,标志变量ij f 定义如下:=其他件工作个工人去做第指派第01j i f ijmin∑∑==?4141i j ij ijt fs.t. 141=∑=i ijf()4,3,2,1=j 每份工作都有一人做∑==411j ijf()4,3,2,1=i 每人都只做一项工作model : sets :work/A B C D/;worker/jia yi bing ding/; time(worker,work):t,f; endsets!目标函数可以用[obj]标志出,也可以省略;[obj] min =@sum (time(i,j):t(i,j)*f(i,j)); data :!可以直接复制表格,但是在最后要有分号; t=; e nddata!每份工作都有一人做;@for (work(j):@sum (time(i,j):f(i,j))=1); !每人都只做一项工作;@for (worker(i):@sum (time(i,j):f(i,j))=1); !让f 取0-1值,此条件可以省略;!@for(time(i,j):@bin(f(i,j))); end6.2设:煤厂进煤量i s ,居民区需求量为i d ,煤厂i 距居民区j 的距离为ij L ,煤厂i 供给居民区j 的煤量为ij g那么可以列出如下优化方程式∑∑==?=3121min j i ij ij L gs.t ()3,2,121==∑=j d gi jij()2,131=≤∑=i s gj iijmodel : sets :supply/1,2/:s; demand/1,2,3/:d;link(supply,demand):road,sd; endsets data :road=10 5 6 4 8 12; d=50 70 40; s=60 100; enddata[obj] min =@sum (link(i,j):road(i,j)*sd(i,j)); @for (demand(i):@sum (supply(j):sd(j,i))=d(i)); @for (supply(i):@sum (demand(j):sd(i,j))<s(i));< p="">end1.线性规划模型。
最短路问题的实际应用论文
金华双龙洞旅游路线中最短路问题摘要:金华双龙洞景点分布较多,通过对其旅游路线的设置,转化为图论内容中的最短路情景进行讨论,建立模型,并通过搜索资料,利用几种方法解决路线最小的问题。
关键字:数学建模最短路问题 lingo Dijkstra法 flod算法一、研究背景:在旅游过程中,我们常常感觉到自己一天下来走了很多路,回到宾馆脚痛的不行。
但其实我们可以利用运筹学的知识,通过建立数学模型,转化为图论的内容。
从而较为合理的制定出选择的路线(即最短路问题)。
因而这次的小论文,我主要探究一下几个问题:1.从景点进口到出口的最短路程。
(最短路问题)2.从景点到出口的最长路线。
3.建立的模型是否满足能回到起点(古典图论问题)二、研究内容:根据从互联网中搜索的资料,金华双龙洞的主要景点:景区进口双龙洞,冰壶洞,朝真洞,桃源洞,黄大仙祖宫五个,其余为小景点(若要加入,同样可以按照以下问题的研究方法进行讨论)现在忽略。
问题总假设:分别设置双龙洞,冰壶洞,朝真洞,桃源洞,黄大仙祖宫五个景点为A,B,C,D,E五点,根据现实及假设,可以得到如图所示的路线图:再利用用Dijkstra算法求解无负权网络的最短路。
同时也可以利用此法算出最长路程。
问题一的解决:以A为景点出口,E为出口。
故A点标号为P(a)=0 给其余所有的T标号T(i)=+∞考虑与A相邻的两个顶点BC,两个顶点为T标号,故修改这两个点的标号为:T(b)=min[T(b),P(a)+l12]=min[+∞,0+3]=3T(c)=min[T(c),P(a)+l13]=min[+∞,0+2]=2比较所有T标号,T(c)最小,所以令P(c)=2再考察(C,B)(C,D)(C,E)的端点:同理可得T(b)=6 T(d)=6.8 T(e)=10.2(显然已经到终点但还需要看看其余路线长短)故又令P(b)=6.综合分析只有一条线路即A→C→B→D→E 此时总路程为2+4+3+8.4=16.4>10.2所以,最短路程为A→C→E。
最短路程问题(lingo)
例3.5(最短路问题)在纵横交错的公路网中,货车司机希望找到一条从一个城市到另一城市的最短路。假设图3-1表示的是该公路网,节点表示货车可以停靠的城市,弧上的权表示两个城市之间的距离(百公里)。那么,货车从城市S出发到达城市T,如何选择行驶路线,使所经过的路程最短?
4,7 4,8
5,7 5,8 5,9
6,8 6,9
7,10
8,10
9,10
/: D, P;
endsets
data:
D=
6 5
3 6 9
7 5 11
9 1
8 7 5
4 10
5
7
9;
enddata
F(n)=0;
@for(cities(i) | i #lt# n:
F(i)=@min(roads(i,j): D(i,j)+F(j));
【分析】此例的本质是求从城市A到城市D的一条最短路。
最短路问题的数学表达式
假设图有n个顶点,现需要求从顶点1到顶点n的最短路,设决策变量为xij,当xij=1说明弧(i,j)位于顶点1至顶点n的路上;否则xij=0。其数学规划表达式为
;
S.t.
下面介绍的方法是按照规划问题设计的LINGO程序,程序名exam0708.lg4.
Variable Value
N 10.00000
F( 1) 17.00000
F( 2) 11.00000
F( 3) 15.00000
F( 4) 8.000000
F( 5) 13.00000
F( 6) 11.00000
F( 7) 5.000000
F( 8) 7.000000
F( 9) 9.000000
求最小树的计算方法
求最小树的计算方法最小生成树是指在一个连通的无向图中,找到一棵生成树,使得这棵生成树的边权之和最小。
最小生成树问题是图论中的经典问题,有着广泛的应用。
目前,最小生成树问题有两种经典的算法:Prim算法和Kruskal算法。
1. Prim算法Prim算法是一种贪心算法,它从一个点开始,每次选择一条最短的边连接到已经选中的点集合中的一个点,直到所有的点都被选中,构成一棵生成树。
具体实现步骤如下:(1)初始化:选定一个起始点,将该点加入已选中的点集合中,将与该点相连的边加入边集合中。
(2)重复以下步骤,直到所有点都被选中:- 从边集合中选出一条权值最小的边,该边所连接的点如果已经被选中,则跳过该边,否则将该点加入已选中的点集合中,将与该点相连的边加入边集合中。
时间复杂度为O(ElogV),其中E为边数,V为点数。
2. Kruskal算法Kruskal算法也是一种贪心算法,它从所有边中选取权值最小的边,如果该边所连接的两个点不在同一个连通分量中,则将这两个点所在的连通分量合并,直到所有点都在同一个连通分量中,构成一棵生成树。
具体实现步骤如下:(1)将所有边按照权值从小到大排序。
(2)初始化:将所有点看成一个连通分量。
(3)重复以下步骤,直到所有点都在同一个连通分量中:- 从排好序的边集合中选出一条权值最小的边,如果该边所连接的两个点在同一个连通分量中,则跳过该边,否则将这两个点所在的连通分量合并,将该边加入边集合中。
时间复杂度为O(ElogE),其中E为边数。
以上就是最小生成树的两种经典算法,它们都是基于贪心策略的,但具体实现方式略有不同。
在实际应用中,可以根据具体情况选择合适的算法。
优化建模与LINGO第07章1
7.2
最短路问题和最大流问题 本节内容导航
7.2.1 7.2.2 7.2.3
本节概述 最短路问题 最大流问题 最小费与最大流问题
优化建模
本节内容概述
返 回 导 航
最短路问题(Shortest Path Problems)和最大流 最短路问题 和最大流 问题(Maxiumum Flow Problems)是图论另一类与优 问题 是图论另一类与优 化有关的问题,对于这两在问题,实际上, 化有关的问题,对于这两在问题,实际上,图论中已 有解决的方法,如最短路问题的求解方法有Dijkstra 有解决的方法,如最短路问题的求解方法有 算法,最大流问题的求解方法有标号算法.这里主要 算法,最大流问题的求解方法有标号算法 这里主要 讨论的是如何用LINGO软件来求解最短路和最大流 讨论的是如何用 软件来求解最短路和最大流 问题,对于LINDO软件的求解方法,作者可以根据 软件的求解方法, 问题,对于 软件的求解方法 模型自己设计相应的程序,作为LINDO软件的训练 模型自己设计相应的程序,作为 软件的训练 和问题的练习. 和问题的练习
即最短路是 A →
B1 → C 1 → D
, 最短路长为 个单位 最短路长为6个单位 个单位.
优化建模
例7.9 (设备更新问题 张先生打算购买一辆 设备更新问题) 设备更新问题 新轿车,轿车的售价是12万元人民币 轿车购买后, 万元人民币.轿车购买后 新轿车,轿车的售价是 万元人民币 轿车购买后, 每年的各种保险费养护费等费用由表7-5所示 所示.如果 每年的各种保险费养护费等费用由表 所示 如果 年之内, 在5年之内,张先生将轿车售出,并再购买新年 年之内 张先生将轿车售出,并再购买新年.5 年之内的二手车销售价由表7-6所示 所示.请你帮助张先 年之内的二手车销售价由表 所示 请你帮助张先 生设计一种购买轿车的方案,使5年内用车的总费 生设计一种购买轿车的方案, 年内用车的总费 用最少. 用最少
最短路问题的求解方法
最短路问题的求解方法最短路问题是图论中的一个经典问题,它在现实生活中有着广泛的应用。
在很多实际情况下,我们需要找到两个节点之间的最短路径,以便在最短时间内到达目的地或者以最小的成本进行运输。
因此,求解最短路问题具有重要的意义。
在图论中,最短路问题可以分为单源最短路和多源最短路两种情况。
单源最短路指的是从图中的一个固定节点出发,到达其他所有节点的最短路径;而多源最短路则是求解图中任意两个节点之间的最短路径。
针对这两种情况,我们可以采用不同的算法来求解最短路问题。
其中,最著名的算法包括Dijkstra算法和Floyd-Warshall算法。
Dijkstra算法适用于单源最短路问题,它采用贪心策略,逐步确定从源节点到其他节点的最短路径。
而Floyd-Warshall算法则适用于多源最短路问题,它通过动态规划的方式,计算图中任意两个节点之间的最短路径。
除了这两种经典算法外,还有一些其他方法可以用来求解最短路问题,比如Bellman-Ford算法和SPFA算法。
这些算法各有特点,适用于不同的场景,可以根据具体情况选择合适的算法来解决最短路问题。
在实际应用中,最短路问题常常涉及到大规模的图和复杂的网络结构,因此算法的效率和性能也是非常重要的考量因素。
为了提高算法的求解速度,可以采用一些优化手段,比如使用堆优化的Dijkstra算法、矩阵快速幂优化的Floyd-Warshall算法等。
总之,最短路问题是图论中的一个重要问题,它在实际生活中有着广泛的应用。
通过合理选择算法和优化方法,我们可以高效地求解最短路问题,为实际应用提供有力的支持。
希望本文能够为读者对最短路问题的求解方法有所启发,也希望在未来的实际应用中能够发挥一定的作用。
实验4Lingo求解最短路最小树问题
u(1)=0;
@for(link:@bin(x));
@for(city(k)|k #GT# 1:@sum(city(i)|i #ne# k:x(i,k))=1;
@for(city(j)|j #gt# 1 # and # j #ne# k:u(j)>=u(k)+x(k,j)-(n-2)*(1-
x(k,j))+(n-3)*x(j,k);););
若G' 是包含 G 的全部顶点的子图,它又是树,则称G' 的生
成树。若图 G(V , E) 是一个连通赋权图,T 是 G 的一颗生成树,
T 的每条边所赋权的和称为树 T 的权,称具有最小权的生成
v 树为 G 的最小生成树。
1
v2
v3 v4
v5 v6
例1-2 假设某电力公司在7个村庄之间架设电线, 各村庄之间的距离如下图所示,试求出使电线总长度最 小的架线方案。
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
min
wij xij
(Vi ,V j )E
data: w = 2 4 3 3 1 2 3 1 1 3 4; enddata n=@size(cities);
1.000000 1.000000 1.000000 1.000000 1.000000 1.000000
3.000000 3.000000 2.000000 2.000000 1.000000 2.000000
从上述求解报告得到最优架设线路 为1-2-3,2-4-5-6-7,总长度为13。
最小树与最短路问题
常记:V = {v1, v2, … , vn}, |V | = n ; E = {e1, e2, … , em}(ek=vivj ) , |E | = m.
图的一些基本概念
有边联结的两个点称为相邻的点, 有一个公共端点的 边称为相邻边. 边和它的端点称为互相关联. 常用d(v) 表示图G中与顶点v关联的
291.1 303.8 248.8 106.5
问题分析与建模 • 用v1,v2,v3,v4,v5,v6,v7,v8表示8个学院的地理位置,因 为各学院之间的距离都是固定的,则我们得一赋 权图。 • 要使各学院都可以用网络通讯,这样的图一定为连 通的,其次若图中有圈,则可以划去一条以节省一 条光缆,因而计算机网络一定为一棵树。 • 考虑到使用光缆最少,所以要在赋权图中找到一 边权之和最小的树。即:最小树。 问题归结为:求一赋权图的最小树问题。
2、最小生成树模型
一个无圈的连通图称为树。 设图G为具有n顶点的树,则下列6个结论等价 ①、G为无圈的连通图。
②、G为连通的且具有n-1条边。 ③、G为连通的且每条边为一割集。
④、G无圈且具有n-1条边。 ⑤、G任意两个顶点之间恰有一条路。 ⑥、G为最小连通图。
若图T=(V,E')是图G=(V,E)的生成子图,且T是一棵 树,则称T是G的一棵生成树。
最小生成树
设G=(V,E)是一个非负赋权图,设T=(V,E') 是G的一棵生成树,记生成树的边权之和为:
w(T )
称为生成树的权。
( vi ,v j )T
w
ij
若G的一生成树T*,其权w(T*)是G所有生成树权 最小者,则称T*为最小生成树。
一个实际的例子
问题提出:
SU大学有8个学院,其中A为 学校行政部门(如图所示)。 该大学现在需要设计一个电 脑网络系统,使得A到每个系 都有光缆相连.SU 大学主管 部门希望连接用的光缆量尽 量的少,为便于管理,要求光 缆连接点必须设在各学院处, 施工部门测得各学院的位置 坐标如下:
图论与网络流问题的LINGO求解技巧
图论与网络流问题的LINGO 求解技巧我们介绍使用LINGO 求解图论与网络问题中的一些典型问题。
如最短路问题、最大流问题、关键路径问题、最优树问题,以及TSP 问题。
这里主要介绍使用LINGO 求解的方法,重在应用和解决问题。
1 最短路问题的Lingo 求解设图共有个节点,其赋权图的邻接矩阵为n n n w ×.ij w p =表示节点i 到j 的权值为.当为有向图时,p ji w w ij =;当为无向图时,和ij w ji w 分别由图得到,通常不一样。
当,表示节点i 与节点0ij w =j 不连通。
令0ii w =。
假设图的所有权值 0ij w ≥现求节点a 到节点b 的最短路,其线性规划模型为:模型一、决策变量:设1ij i j x i j ⎧=⎨⎩节点与节点连通节点与节点不连通目标函数为寻找一条节点到节点的通路,使其上权值和最小,故目标函数为:a b 11min .nnij ij i j Z w x ===∑∑1. 对节点恰有一条路出去,却不能有路回来,故有:a 11najj j ax=≠=∑ 且10nkak k a x=≠=∑2. 对节点恰有一条路到达,却不能有路出去,故有:b 11nkbk k bx=≠=∑ 且10nbjj j bx=≠=∑3. 对除起始点a 和目标点之外,其它点进入和出去的路是一样多(可都为0),则:b 11,nnkiijk j xx i a ===≠∑∑b4. 对不通的路不取,约束为:,1,2,ij ijx w i j ≤=L n总的线性规划模型为:11111111min .,10..10,1,2,,01n nij iji j nnki ijk j naj j j a n ka k k a n kb k k a nbj j j a ij ijijZ w x x x i a b x x s t x x x w i j x =====≠=≠=≠=≠=⎧=≠⎪⎪⎪=⎪⎪⎪⎪=⎪⎪⎪⎪=⎨⎪⎪⎪=⎪⎪⎪≤=⎪⎪=⎪⎪⎪⎩∑∑∑∑∑∑∑∑L 或n示例演示。
数学建模实验报告关于LINGO的解题方法及其思路分析
数学建模实验报告1.解析:此题属于0-1模型问题。
设队员序号为i ,泳姿为j ,记c ij 为队员i 第j 种泳姿的百米成绩,若选择队员i 参加泳姿j 的比赛,记x ij =1, 否则记xij =0;则有,目标函数为∑∑===4151j i ij ij x c Z Min ,每个人最多选泳姿为1,则有5,1,141=≤∑=i xj ij,每种泳姿有且仅有1人,则有4,1,151==∑=j xi ij。
若丁的蛙泳成绩退步及戊的自由泳成绩进步,则将c43的值和c54的值改变即可。
实验过程及运行结果如下:若丁的蛙泳成绩退步为1'15"2及戊的自由泳成绩进步57"5,计算结果如下:通过计算结果可知,在原数据的情况下,队伍的选择应该是甲参加自由泳,乙参加蝶泳,丙参加仰泳,丁参加蛙泳,戊不参加任何比赛,且最好的时间是253.2秒。
若丁的蛙泳成绩退步为1'15"2及戊的自由泳成绩进步57"5,则组成接力的比赛队伍调整为乙参加蝶泳,丙参加仰泳,丁参加蛙泳,戊参加自由泳,甲不参加任何比赛。
2.解析:此题属于线性规划问题。
已知某工厂用1A 、2A 两台机床加工1B 、2B 、3B 三种不同的零件,设1A 生产1B 、2B 、3B 的个数分别为1x 、2x 、3x ,2A 生产1B 、2B 、3B 的个数分别为4x 、5x 、6x ,则目标函数为min=1*2*1x +2*3*2x +3*5*3x +1*3*4x +1*3*5x +3*6*6x ;1A 加工的工时小于80小时,2A 加工的工时小于100小时,生产1B 、2B 、3B 的总数分别为70个、50个、20个。
实验过程及运行结果如下:通过计算结果可知,当1A 生产1B 、2B 、3B 的个数分别为68个、0个、4个,2A 生产1B 、2B 、3B 的个数分别为2个、50个、16个的时候,才能得到最低的成本640元。
最小树问题
(2)破圈法:
① 在网络图中寻找 一个圈。若不存在圈, 则已经得到最短树或网 络不存在最短树;
② 去掉该圈中权数 最大的边;
反复重复 ① ② 两 步,直到最小树。
v1
4
v2
1
v3
1
2 13
1
v8
4
55
4
v4
v0
2
4
5
v7
3
v6
2
v5
•(3)Kruskal 算法:将图中所有边 v1
按权值从小到大排列,依次选
V1 0 1 1 0 0
V1 V3
V2
V3 V5
V4
1 0011 1 0001 0 10 0 1
V5 0 1 1 1 0
两顶点间有边连接的记为 1 ,无边连接的记为 0。 得到的矩阵一定是对称矩阵。
2、赋权无向图的矩阵表示: 两顶点间有边
连接的记为该边的权数。无边相连的记为 ,
对角线上的数是 0 。得到的矩阵也是对称矩阵。
些边
v2
v5
v6
v3
二、最小生成树及其算法
1.最小生成树
一个网络图可以有多个生成树.记N的所有生成 树的集合为:T={ Tk | k=1,2,…,L }
设Tk =(V, Ek )是网络图N=(G,w)的一棵生成树, 则边集Ek中所有边的权数之和称为树Tk 的权数,记为
w Tk w e
e Ek
1、根据网路写出边权矩阵,两点间若没有边,则用表示;
2、从 v1 开始标记,在第一行打 ,划去第一列; 3、从所有打 的行中找出尚未划掉的最小元素,对该元素
画圈,划掉该元素所在列,与该列数对应的行打 ;
4、若所有列都划掉,则已找到最小生成树(所有画圈元素所 对应的边);否则,返回第 3 步。
最小树问题
6.3.1 狄克斯特拉算法 (Dijkstra algorithm, 1959) 计算两节点之间或一个节点到所有节点之间的最短路 令 dij 表示 vi vj 的直接距离(两点之间有边),若两点之间 没有边,则令 dij = ,若两点之间是有向边,则 dji = ; 令 dii = 0,s 表示始点,t 表示终点 • 对每个节点,用两种标号:T和P,表示从始点到该节点的距 离,P是最短距离(权),为永久标号,T是目前路径的距离,是 临时标号。 • 通过不断改进T值,当其最小时,将其改为P标号。 • 开始时,令始点有P=0的P标号,其它节点为T=+ .
•(3)Kruskal 算法:将图中所有边 v1 按权值从小到大排列,依次选 1 所剩最小的边加入边集 T,只 v8 要不和前面加入的边构成回路, 5 直到 T 中有 n1 条边,则 T 是最小生成树
v7
4
v2
1
v3
2
4 5
1
3
4
1
v4 5 v5
v0 2 3 v6 2 4
图的矩阵表示
将图的几何形状转化为代数矩阵形式,可大 大方便计算机对图的处理与运算。 1、无权图的矩阵表示:
6.2.3 最小生成树
v5 9 v6 17 10 8 7 11 v4 16 v3 9.5 v2 v1 10
12 7 19.5
10 16 11 10 17 10 9.5 19.5 16 9.5 7 12 7 8 7 11 10 8 9 17 19.5 12 7 9
寻找连通图支撑树的方法有“破圈法”。就是从图中 任取一个圈,去掉一条边。再对剩下的图重复以上步 骤,直到不含圈时为止,这样就得到一个支撑树。 例4 用破圈法求出下图的一个支撑树。 v2 e1 v1 e2 v3 e3 e4 e7 e8 e6 v5
最短路问题的求解方法
最短路问题的求解方法最短路问题是图论中的经典问题之一,它在实际生活中有着广泛的应用,比如在交通规划、通信网络、物流配送等领域都有着重要的作用。
在解决最短路问题时,我们需要找到图中两个顶点之间的最短路径,即使得路径上的边的权值之和最小。
针对不同的图,我们可以采用不同的方法来求解最短路问题,下面将介绍几种常见的求解方法。
首先,最简单直接的方法是暴力搜索法。
暴力搜索法适用于小规模的图,它通过穷举所有可能的路径来找到最短路径。
虽然这种方法在理论上是可行的,但是在实际应用中由于时间复杂度过高,通常不适用于大规模的图。
其次,我们可以使用迪杰斯特拉算法来解决最短路问题。
迪杰斯特拉算法是一种贪心算法,它通过逐步扩展离源点距离最短的节点来逐步求解最短路径。
迪杰斯特拉算法的时间复杂度为O(V^2),其中V为顶点数,因此适用于稠密图。
另外,我们还可以使用贝尔曼-福特算法来求解最短路问题。
贝尔曼-福特算法是一种动态规划算法,它通过多次松弛操作来逐步逼近最短路径。
贝尔曼-福特算法适用于存在负权边的图,但是由于其时间复杂度为O(VE),因此在稠密图中效率较低。
最后,我们还可以使用Floyd-Warshall算法来解决最短路问题。
Floyd-Warshall算法是一种动态规划算法,它通过逐步考察所有顶点对之间的路径来求解最短路径。
Floyd-Warshall算法的时间复杂度为O(V^3),因此适用于小规模图。
总的来说,不同的最短路求解方法适用于不同的图,我们需要根据具体的情况来选择合适的方法。
在实际应用中,我们还可以结合启发式算法、并行算法等方法来进一步提高求解效率。
希望本文介绍的内容能够对读者有所帮助,谢谢!。
lingo编程
lingo编程启航系列之数学建模启航系列之数学建模培训资料培训资料Lindo 和 Lingo 是美国 Lindo 系统公司开发的一套专门用于求解最优化问题的软件包。
Lindo 用于求解线性规划和二次规划问题,Lingo 除了具有 Lindo 的全部功能外,还可以用于求解非线性规划问题,也可以用于一些线性和非线性方程(组)的求解,等等。
Lindo 和 Lingo 软件的最大特色在于可以允许优化模型中的决策变量是整数(即整数规划),而且执行速度很快。
Lingo 实际上还是最优化问题的一种建模语言,包括许多常用的函数可供使用者建立优化模型时调用,并提供与其他数据文件(如文本文件、Excel电子表格文件、数据库文件等)的接口,易于方便地输入、求解和分析大规模最优化问题。
由于这些特点,Lindo系统公司的线性、非线性和整数规划求解程序已经被全世界数千万的公司用来做最大化利润和最小化成本的分析。
应用的范围包含生产线规划、运输、财务金融、投资分配、资本预算、混合排程、库存管理、资源配置等等...Lindo/Lingo 软件作为著名的专业优化软件,其功能比较强、计算效果比较好,与那些包含部分优化功能的非专业软件相比,通常具有明显的优势。
此外,Lindo/Lingo 软件使用起来非常简便,很容易学会,在优化软件(尤其是运行于个人电脑上的优化软件)市场占有很大份额,在国外运筹学类的教科书中也被广泛用做教学软件。
1. Lingo优化模型连续优化整数规划优化模型二次规划非线性规划2. lingo 例1 用Lingo解决一个二次规划问题22max982770.32xxxxxx,,,,121122xx,,100,12 ,stxx..2,,12,xx,0,为整数,12解:在lingo命令行中输入如下代码, x1+x2<=100;!一个简单例子;max=98*x1+277*X2-x1*x1-0.3*X1*x2-2*X2*x2;x1-2*x2<=0;@gin(x1);@gin(x2);按求解键得到结果如下,Global optimal solution found.Objective value: 11077.50Extended solver steps: 0Total solver iterations: 44Variable Value Reduced CostX1 35.00000 -8.500002X2 65.00000 -6.500004在这个例子里要注意如下一些细节:对本例结果的解释:找到全局最优解,使得目标函数值为xx,对应变量,的值分别为和,11077.50356512对应变量xx,的影子价格分别为,。
最短路程问题(lingo)
这是一个函数方程,用LINGO可以方便的解决。
!最短路问题;
model:
data:
n=10;
enddata
sets:
cities/1..n/: F;!10个城市;
roads(cities,cities)/
1,2 1,3
2,4 2,5 2,6
3,4 3,5 3,6
例7.4 最短路问题给定N个点 组成集合 ,由集合中任一点 到另一点 的距离用 表示,如果 到 没有弧联结,则规定 ,又规定 ,指定一个终点 ,要求从 点出发到 的最短路线。这里我们用动态规划方法来做。用所在的点 表示状态,决策集合就是除 以外的点,选定一个点 以后,得到效益 并转入新状态 ,当状态是 时,过程停止。显然这是一个不定期多阶段决策过程。
20]
21] n = @ size(cites); ! The number of cities;
22] min = @ sum(roads: w * x);
23] @for(cities(i)|i # ne # 1 # and # i # ne # n:
24] @sum(roads(i,j): x(i,j) = @sum(roads(j,i): x(j,i)));
也就是说,此例中我们可以把从S到T的行驶过程分成4个阶段,即S→Ai(i=1,2,3)Ai→Bj(j=1,2),Bj→Ck(k=1,2),Ck→T。记d(Y,X)为城市Y与城市X之间的直接距离(若这两个城市之间没有道路直接相连,则可以认为直接距离为无穷大),用L(X)表示城市S到城市X的最优行驶路线的路长,则有
图3-1最短路问题的例子
假设从S到T的最优行驶路线P经过城市C1,则P中从S到C1的子路也一定是从S到C1的最优行驶路线;假设P经过城市C2,则P中从S到C2的子路也一定是从S到C2的最优行驶路线。因此,为了得到从S到T的最优行驶路线,我们只需要先求出从S到Ck(k=1,2)的最优行驶路线,只需要先求出从S到Bj(j=1,2)的最优行驶路线;只需要先求出从S到Ai(i=1,2)的最优行驶路线。而从S到Ai(i=1,2,3)的最优行驶路线是很容易得到的(实际上,此例中S到Ai(i=1,2)只有唯一的道路)。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
(V i ,V j ) E n
w
ij
xij
n
(P1)
1, i 1 s .t . xij x ji 1, i n j 1 j 1 0, i 1, n (V i ,V j ) E (V j ,V i ) E xij 0, (Vi ,V j ) E
年份 年初价格
使用年限
2 11
0-1
3 12
1-2 3 2-3 5
4 12
3-4 8
5 13
4-5 12 5-6 18
年维修费用 2
注:第一年使用净值为8的老设备(相当于第一年购买费为8),
w12 8 3 11
w13 8 3 5 16
w35 12 2 3 17
其中 E 为有向图的所有弧的集合, wij 为弧(Vi,Vj)的权.
例题 1-1 在下图中,用点表示城市,现有 A, B1, B2, C1,C2,C3,D 共 7 个城市,点与点之间的连线表示 城市间有道路相连,连线旁的数字表示道路的长度。 现计划从城市 A 到称市 D 铺设一条天然气管道, 请设 计出最小价格管道铺设方案。
min
ij ij (Vi ,V j )E n n
w x
1, i 1 s.t. xij x ji 1, i n j 1 j 1 0, i 1, n (Vi ,V j )E (V j ,Vi )E xij 0, (Vi ,V j ) E
0.000000 1.000000 1.000000
由最终的输出结果知最优方案为:v1-v3-v6, 最短路长为38,即第一年使用已有1年役龄的旧 设备,一直使用到第3年初购买新设备,然后一直 使用到第5年底.5年内设备的维修费用和设备的 购买费用最少为38.
年份 年初价格
2 11
3 120-1
1-2 3
2-3 5
3-4 8
4-5 12
5-6 18
年维修费用 2
第一年开始使用的有一年役龄的老设备其净值为8, 令:v 1:表示第一年开始使用的有一年役龄的老设备其净值为8; Vi : 第i年初购买一台新设备; (Vi,Vj)表示第I年初购买一新设备一直使用到第j-1年底。 W ij表示第I年初的购买费及使用到第j-1年底的维修费之和; 问题转化为从v1到v6(第5年底)的最短路。 注:第一年使用净值为8的老设备(相当于第一年购买费为8),
Global optimal solution found. Objective value: Total solver iterations: Variable Value N 6.000000 X( V1, V2) X( V1, V3) X( V3, V6)
38.00000 0 Reduced Cost 0.000000 0.000000 0.000000 0.000000
sets: nodes/v1, v2, v3, v4, v5, v6/; lines(nodes, nodes)/ v1,v2 v1,v3 v1,v4 v1,v5 v1,v6 v2,v3 v2,v4 v2,v5 v2,v6 v3,v4 v3,v5 v3,v6 v4,v5 v4,v6 v5,v6/:w, x; endsets min wij xij data: (Vi ,V j )E w = 11 16 24 26 54 13 16 21 29 14 17 22 14 17 15; 1, i 1 n n enddata s.t. xij x ji 1, i n n=@size(nodes); j 1 j 1 0, i 1, n (Vi ,V j )E (V j ,Vi )E min=@sum(lines: w*x); xij 0, (Vi ,V j ) E @for(nodes(i) | i #ne# 1 #and# i #ne# n: @sum(lines(i,j): x(i,j)) = @sum(lines(j,i): x(j,i))); @sum(lines(i,j)|i #eq# 1 : x(i,j))=1; @sum(lines(i,j)|j #eq# 6 : x(i,j))=1;
(2)最小生成树问题 设无向图是连通的,且互不包有圈,则称该图为树。如果 有向图中任何一点都可由某一个顶点 V1 到达,则称 V1 为图 G 的根。如果有向图 G 有根。且关于它的基础图是树,则称 G 为有向树。 若 G 是包含 G 的全部顶点的子图,它又是树,则称 G 的生 成树。 若图 G(V , E ) 是一个连通赋权图, T 是 G 的一颗生成树, T 的每条边所赋权的和称为树 T 的权,称具有最小权的生成 树为 G 的最小生成树。 v2
model: sets: city /1..7/:u; link(city,city):dist,x; n n endsets min z cij xij n=@size(city); i 1 j 1 data: n dist=0 3 4 7 100 100 100 xij 1, j 2,3,..., n, i j 3 0 3 2 4 100 100 i 1 4 3 0 100 5 7 100 n 7 2 100 0 2 100 6 s.t. x1 j 1, 100 4 5 2 0 1 4 j 2 100 100 7 100 1 0 2 u1 0,1 ui n 1, i 2,3,..., n. 100 100 100 6 4 2 0; enddata u j uk xkj (n 2)(1 xkj ) (n 3) x jk , k 1,..., n, j 2,..., n, j k min=@sum(link:dist*x); u(1)=0; @for(link:@bin(x)); @for(city(k)|k #GT# 1:@sum(city(i)|i #ne# k:x(i,k))=1; @for(city(j)|j #gt# 1 # and # j #ne# k:u(j)>=u(k)+x(k,j)-(n-2)*(1x(k,j))+(n-3)*x(j,k););); @sum(city(j)|j # GT # 1:x(1,j))>=1; @for(city(k)|k #gt# 1:u(k)>=1;u(k)<=n-1-(n-2)*x(1,k););
min z cij xij
i 1 j 1 n n
n xij 1, j 2,3,..., n, i j i 1 n s.t. x1 j 1, j 2 u1 0,1 ui n 1, i 2,3,..., n. u j uk xkj (n 2)(1 xkj ) (n 3) x jk , k 1,..., n, j 2,..., n, j k
从上述求解报告得到最优架设线路 为1-2-3,2-4-5-6-7,总长度为13。
例题
某公司有一台已使用一年的设备,每年年底,公司
就要考虑下一年度是购买新设备还是继续使用这台旧设 备.若购买新设备,就要支出一笔购置费;若继续使用旧设 备,则要支付维修费,而且随着使用年限的延长而增加.已 知这种设备每年年初的购置价格,见下表 1,而第一年开 始使用的有一年役龄的老设备其净值为 8,不同使用年限 的维修费用见下表 2,试制定一个 5 年内设备的使用或更 新计划,使 5 年内设备的使用维修费和设备购置费的总支 出最小(化为最短路问题或建立优化模型求解)
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 m i n w ij xij C1,D C2,D C3,D/: w, x; (V i ,V j ) E endsets data: 1, i 1 n n w = 2 4 3 3 1 2 3 1 1 3 4; s .t . xij x ji 1, i n enddata j 1 j 1 0, i 1, n (V i ,V j ) E (V j ,V i ) E n=@size(cities); xij 0, (Vi ,V j ) E 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;
实验1、用Lingo求解最短路、 最小树问题
(1)最短路问题 假设有向图有 n 个顶点。现需要求从顶 点 V1 到顶点 Vn 的最短路。设决策变量为 xij ,当 xij 1 ,说明弧 (Vi,Vj)位于顶点 V1 到顶点 Vn 的最短路上;否则 xij 0 , 则求 V1 到 Vn 的最短路的数学模型为:
Variable
Value N U( 2) U( 3) U( 4) U( 5) U( 6) U( 7) X( 1, 2) X( 2, 3) X( 2, 4) X( 4, 5) X( 5, 6) X( 6, 7)
Reduced Cost 7.000000 0.000000 1.000000 0.000000 2.000000 0.000000 2.000000 0.000000 3.000000 0.000000 4.000000 0.000000 5.000000 0.000000 1.000000 1.000000 1.000000 1.000000 1.000000 1.000000 3.000000 3.000000 2.000000 2.000000 1.000000 2.000000