课lingo与图论件.ppt

  1. 1、本文档共29页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
课lingo与图论件

LINGO在图论中的应用 一、最短路问题 目标函数是最短路上的各条弧的长度之和(总里程)最小,于是最短路问题可以用如下0-1规划来描述: 式中 表示全体边的集合 。 对于上例,编写LINGO程序如下: model: sets: cities/A,B,C,D,E,F,G/; !定义7个城市; roads(cities,cities)/ A,B A,C B,D B,E B,F C,D C,E C,F D,G E,G F,G/: W, X; !定义哪些城市之间有路相联,W为里程,X为0-1型决策变量; 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 #GT# 1 #AND# i #LT# 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 计算结果与动态规划法相同.程序中的最后一个约束方程可以去掉,因为有了前面两个约束条件(共n-1个约束方程)可以导出最后一个约束方程,即终点的约束方程与前面n-1个约束方程线性相关.保留该约束方程,LINGO求解时也不会产生任何问题,因为LINGO会自动删除多余的方程. 该方法与前面的方法相比,灵活性稍差,它一次只能求出指定起点到指定终点的最短路,如果更改起点,则必须改动程序然后重新求解. 二、 旅行售货商模型 旅行售货商问题(又称货郎担问题,Traveling Salesman Problem 简称TSP模型),是运筹学的一个著名命题。 模型:有一个推销商,从某个城市出发,要遍访若干城市各一次且仅一次 ,最后返回出发城市。已知从城市i到j的旅费为Cij,问他应按怎样的次序访问这些城市,使得总旅费最少? 称能到每个城市一次且仅一次的路线为一个巡回(圈)。 TSP是典型的组合优化问题,也是公认的NP完全难题。 不算出发地。n个城市有(n-1)!种排列方法,每一种旅行路线是排列中的一种,当n变大时,计算量呈指数增长,穷举法所费时间是难以承受的。 为此,多年以来有许多人研究了一些近似算法。 我们把TSP问题转化为0-1规划,然后用LINGO来求解。 1. 方法一:判断各边是否包含在旅行路线中 引入0-1整数变量xij(且i≠j):xij=1表示路线从i到j,即边i-j在旅行路线中,而xij=0则表示不走i-j路线 目标函数 首先必须满足约束条件:对每个城市访问一次且仅一次。从城市i出发一次(到其它城市去),表示为 引入0-1整数变量xij(且i≠j):xij=1表示路线从i到j,xij=0则表示不走i-j路线 目标函数 首先必须满足约束条件:对每个城市访问一次且仅一次。从城市i出发一次(到其它城市去),表示为 从某个城市到达j一次且仅一次,表示为: 以上建立的模型类似于指派问题的模型,对TSP问题只是必要条件,并不充分。 例如,用图示路线连接六个城市,满足以上两个约束条件,但这样的路线出现了两个子回路,两者之间不通,不构成整体巡回路线。 为此需要考虑增加充分的约束条件以避免产生子巡回。下面介绍一种方法: 增加变量ui,i=2,3,…,n,(它的大小可以取整数:例如从起点出发所达到的城市u=2,依此类推)。 附加约束条件: ui-uj+nxij≤n-1,i=1,…,n,j=2,…,n,且i≠j 。 TSP问题可以表示为规划: TSP问题的LINGO模型 !旅行售货员问题; model: sets: city / 1..6/: u;! 定义6个城市; link( city, city): dist, ! 距离矩阵; x; !决策变量; endsets n = @size( city); data: !距离矩阵; dist =0 702 454 842 2396 1196 702 0 324 1093 2136 764 454 324 0 1137 2180 798 842 1093 1137 0 1616 1857 2396 2136 2180 1616 0 2900 1196 764 798 1857 2900 0; !这里可改为你要解

文档评论(0)

book1986 + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档