LINGO在图论讲义中的应用
- 格式:ppt
- 大小:495.50 KB
- 文档页数:4
一、LINGO简介LINGO[1]是美国LINDO系统公司开发的求解数学规划系列软件中你的一个,它的主要功能是求解大型线性、非线性和整数规划问题,LINGO的不同版本对模型的变量总数、非线性变量数目、整型变量数目和约束条件的数量做出不同的限制.LINGO的主要功能特色为:(1)既能求解线性规划问题,也有较强的求解非线性规划问题的能力;(2)输入模型简练直观;(3)运行速度快、计算能力强.(4)内置建模语言,提供几十个内部函数,从而能以较少语句,较直观的方式描述较大规模的优化模型;(5)将集合的概念引入编程语言,很容易将实际问题转换为LINGO模型;(6)能方便地与EXCEL、数据库等其他软件交换数据.LINGO像其他软件一样,对他的语法有规定,LINGO的语法规定如下:(1)求目标函数的最大值或最小值分别用MAX=…或MIN=…来表示;(2) 每个语句必须以字母开头,由字母、数字和下划线所组成,昌都不超过32个字符,不区分大小写;(3)每个语句必须以分号“;”结束,每行可以有多个语句,语句可以跨行;(4)如果对变量的取值范围没有特殊说明,则默认所有决策变量都非负;(5)LINGO模型以语句“MODEL”开头,以语句“END”结束,对于比较简单的模型,这这两个语句可以省略.LINGO提供了五十几个内部函数,使用这些函数可以大大减少编程工作量,这些函数都是以字符@开头,下面简单介绍其中的集合操作函数和变量定界函数及用法.集合是LINGO建模语言中最重要的概念,使用集合操作函数能够实现强大的功能,LINGO提供的常用集合操作函数有@FOR(s:e)、@SUM(s:e)、@MAX(s:e)、@MIN(s:e)等.@FOR(s:e)常用在约束条件中,表示对集合s中的每个成员都生成一个约束条件表达式,表达式的具体形式由参数e描述;@SUM(s:e) 表示对集合s中的每个成员,分别得到表达式e的值,然后返回所有这些值的和;@MAX(s:e) 表示对集合s中的每个成员,分别得到表达式e的值,然后返回所有这些值中的最大值;@MIN(s:e) 表示对集合s中的每个成员,分别得到表达式e的值,然后返回所有这些值中的最小值.LINGO默认变量的取值可以从零到正无穷大,变量定界函数可以改变默认状态,如对整数规划,限定变量取整数,对0-1规划,限定变量取0 1或.LINGO提供的变量定界函数有:@BIN(X)、@BND(L,X,U)、@GIN(X)、@FREE(X).@BIN(X)限定X为0或1,在0-1规划中特别有用;@GIN(X)限定X为整数,在整数规划中特别有用;@BND(L,X,U)限定L<X<U,可用作约束条件;@FREE(X)取消对X的限定,即X可以取任意实数.二、LINGO 在线性规划中的应用具有下列三个特征的问题称为线性规划问题(Linear program)[2]简称LP 问题,其数学模型称为线性规划(LP)模型.线性规划问题数学模型的一般形式为:求一组变量(1,2,,)j x j n =的值,使其满足1122max(min),n n z c x c x c x =+++2111122111211222221122***.0,1,2,,,,..n j n n n n nn nn n n x j na x a x a xb a x a x a x b s t a x a x a x b ⎧⎪⎪⎪⎨⎪⎪≥=⎪⎩+++++++++ 式中“*”代表“≥”、“ ≥”或“=”.上述模型可简写为1max(min),nj j j z c x ==∑1*0,1,2,,,1,2,,..nij j j ji a x x j n b i ms t =⎧⎪⎨⎪≥=⎩=∑其中,变量j x 称为决策变量,函数1nj jj z c x==∑称为目标函数,条件1*nj jij c x b =∑称为约束条件,0j x ≥ 称为非负约束.在经济问题中,又称j c 为价值系数,i b 为资源限量. 线性规划在科学决策与经营管理中实效明显[3],但是对于规模较大的线性模型,其求解过程非常繁琐,不易得出结果.而 LINGO 中的内部集合函数有@FOR(s:e)、@SUM(s:e)、@MAX(s:e)、@MIN(s:e)等,可以用这些集合函数使程序编程简单可行,下面举例说明.例1 某工厂有两条生产线,分别用来生产M 和P 两种型号的产品,利润分别为200元每个和300元每个,生产线的最大生产能力分别为每日100和120,生产线没生产一个M 产品需要1个劳动日(1个工人工作8小时称为1个劳动日)进行调试、检测等工作,而每个P 产品需要2个劳动日,该工厂每天共计能提供160个劳动日,假如原材料等其他条件不受限制,问应如何安排生产计划,才能使获得的利润最大?解 设两种产品的生产量分别为1x 和2x ,则该问题的数学模型为:目标函数 12max 200300z x x =+约束条件1212100,120,160,0,1,2.i x x x x x i ≤⎧⎪≤⎪⎨+≤⎪⎪≥=⎩ 编写LINGO 程序如下: MODEL : SETS :SHC/1,2 /:A,B,C,X; YF/1,2,3 /:J; ENDSETS DATA :A=1,2 ; B=100,120; C=200,300; ENDDATAMAX=@SUM(SHC:C*X);@FOR(SHC(I):X(I)<B(I)); @SUM(SHC(I):A(I)*X(I))<=160; END程序运行结果如下Global optimal solution found.Objective value: 29000.00 Total solver iterations: 0 Variable Value Reduced CostA( 1) 1.000000 0.000000A( 2) 2.000000 0.000000B( 1) 100.0000 0.000000B( 2) 120.0000 0.000000C( 1) 200.0000 0.000000C( 2) 300.0000 0.000000X( 1) 100.0000 0.000000X( 2) 30.00000 0.000000J( 1) 0.000000 0.000000J( 2) 0.000000 0.000000J( 3) 0.000000 0.000000Row Slack or Surplus Dual Price 1 29000.00 1.000000 2 0.000000 50.00000 3 90.00000 0.000000 4 0.000000 150.0000最优解为12100,30,x x ==最优值为29000.00z =.即每天生产100个M 产品30个P 产品,可获得29000元利润.三、LINGO 在整数规划和0-1规划中的应用1 求解整数规划整数规划[4]分为整数规划和混合整数规划,要求全部变量都为非负整数的数学规划称为纯整数规划,只要求部分变量为非负整数的数学规划称为混合整数规划.下面只讨论约束条件和目标函数均为线性的整数规划问题,即整数线性规划问题(以下简称整数规划,记为ILP),其数学模型的一般形式是()1max min nj j j z c x ==∑,()()11,2,,..01,2,,ni j j i j j j a x b i n s t x j n x =⎧≤=⎪⎪⎪≥=⎨⎪⎪⎪⎩∑全为整数或部分为整数。
运筹学的应用简介及实例(lindo,lingo,ahp)[大全五篇]第一篇:运筹学的应用简介及实例(lindo,lingo,ahp)运筹学的应用简介及实例(lindo,lingo,ahp)一.运筹学可以用于物流中心选址:配送中心合理选址的目的是为了提高物流企业的服务质量,最大限度地增加物流企业的经济效益。
科学合理的选址不仅能够减少货物运输费用,大幅度地降低运营成本,而且能为客户带来方便快捷的服务。
二.运筹学可以用于路线选择:利用运筹学中的图论和线性规划方法,对已有的空运、水运、公路运输、管道运输、铁路运输组成的交通网,根据不同的决策目标制定不同的调运方案,可以是最短时间的运输路线、最少费用的运输路线或是最大运输量最低运费的运输线路等,从而达到降低物流成本的目的。
三.运筹学中排队论在物流中应用:排队论主要研究具有随机性的拥挤现象,在物流中有许多问题涉及,诸如机场跑道设计和机场设施数量问题, 如何才能既保证飞机起降的使用要求, 又不浪费机场资源又如码头的泊位设计和装卸设备的购置问题, 如何达到既能满足船舶到港的装卸要求, 而又不浪费港口资源等等。
四.运筹学中库存论在物流中应用:库存论主要是研究物资库存策略的理论, 即确定物资库存量、补货频率和一次补货量。
合理的库存是生产和生活顺利进行的必要保障, 可以减少资金的占用, 减少费用支出和不必要的周转环节, 缩短物资流通周期, 加速再生产的过程等。
在物流领域中的各节点如工厂、港口、配送中心、物流中心、仓库、零售店等都或多或少地保有库存。
五.运筹学中对策论在物流中应用:对策论研究有利害冲突的双方在竞争性的活动中是否存在自己制胜对方的最优策略, 以及如何找出这些策略等问题。
在这些问题中, 把双方的损耗用数量来描述, 并找出双方最优策略。
对策论的发展, 考虑有多方参加的竞争活动, 在这些活动中, 竞争策略要通过参加者多次的决策才能确定。
参考文献:[1] 左元斌.运筹学在物流配送中心的应用研究[J].商场现代化,2006(458):125-127.[2] 李宇鸣.浅谈运筹学在物流管理中应用与发展[J].吉林工商学报,2007(4):55-56.[3] 田进波.运筹学在管理物流管理中的应用[J].石油工程建设,2010(36):153-155.LINDO求解目标规划:题目:一个小型的无线电广播台考虑如何最好地来安排音乐、新闻和商业节目时间。
LINGO 课程试验专题——TSP前言:TSP 问题,即巡回旅行商问题,也称为货担郎问题,早期是1759年Euler 提出的骑士旅行问题。
1948年,有美国兰德公司推动,成为近代组合优化问题中的一个典型难题,它被证明为是NP 难题。
图论描述就是给定一个有向或者是无向的图,并给定他们各边的权值,找一个Hamilton 圈使得总权最小。
例:设有一个销售员从10个城市中的某一个城市出发,去其他的9个城市推销产品。
10个城市相互距离如下表所示。
要求每个城市到达且仅到达一次,回到方法一:设城市之间的距离用矩阵d 来表示,其中d 为下三角矩阵,ij d 表示城市i 与城市j 之间的距离。
设0-1矩阵x 用来表示经过的各城市之间的路线。
设01ij i j x i j⎧=⎨⎩若城市不到城市若城市到城市则建立该TSP 问题的模型如下:()121121min ..22,3,4,...,01n i ij iji j j j ik ji k ij i ijz x d x s t x x i n x -===><>=⎧⎪⎪+==⎨⎪⎪=⎩∑∑∑∑∑或 它的主要思想就是与第一个城市相连的有两个城市,与第i 个城市相连的有两个城市,每个城市都有相连的两个城市,这个自然就够成一个Hamilton 圈,但是不保证有多个圈的情况。
LINGO 具体程序如下:model:sets:city/1..10/;link(city,city)|&1#GT#&2:d,x;endsetsdata:d=74 35 10 58 9 9 146 14 10 9 712 5 21 10 8 1313 14 8 9 7 5 2311 17 27 23 20 25 21 1818 17 12 16 19 13 18 12 16;enddatamin=@sum(link:d*x);@sum(city(j)|j#GT#1:x(j,1))=2;@for(city(i)|i#GT#1:@sum(city(j)|j#GT#i:x(j,i))+@sum(city(k)|k#LT#i:x(i,k))=2);@for(link:@bin(x));得到的结果:Global optimal solution found.Objective value: 77.00000Objective bound: 77.00000Infeasibilities: 0.000000 Extended solver steps: 0Total solver iterations: 12结果分析:从这个结果我们可以看出,该TSP 问题的最短距离是77km ,其最短路线为:143275681091→→→→→→→→→→。
图论中最优树问题的Lingo求解树连通且不含圈的无向图称为树.常用T表示。
树中的边称为树枝,树中度为1的顶点称为树叶图1 树的示例在许多实际问题中,如在许多城市间建立公路网、输电网或通信网络,都可以归结为赋权图的最优树问题。
如在一个城市中,对若干个居民点要供应自来水,已经预算出连接各点间管道的造价,要求给出一个总造价最小的铺设方案。
图论中最优树的的求解通常有两种算法:Kruskal算法(或避圈法)和Prim算法(破圈法). 这里我们给出利用LINGO求解最优树的方法。
总线性规划模型为:问题1 某有10个城镇见下图,它们之间的距离见表1。
城镇1处有一条河流,现需要从各城镇之间铺设管道,使城镇1处的水可以输送到各城镇,求铺设管道最少的设计方式。
表1 10个地区之间的距离(单位:公里)地区12345678910 10859121412161722 28091516811181422 359079117121217 4915703171071515 5121693081061515 6148111780914816 7121171010908611 81618127614801111 917141225158611010 102222171515161111100该问题实际上是求从点1出发的最优树问题。
Lingo实现程序为:! 最优树的Lingo程序; model:sets:point/1..10/:u;link(point,point):d,x; endsetsdata:d=0,8,5,9,12,14,12,16,17,22, 8,0,9,15,16,8,11,18,14,22, 5,9,0,7,9,11,7,12,12,17, 9,15,7,0,3,17,10,7,15,15,12,16,9,3,0,8,10,6,15,15,14,8,11,17,8,0,9,14,8,16,12,11,7,10,10,9,0,8,6,11,16,18,12,7,6,14,8,0,11,11,17,14,12,25,15,8,6,11,0,10,22,22,17,15,15,16,11,11,10,0; @text()=@writefor(link(i,j)|x(i,j) #GT#0:'x(',i,',',j,')=',x(i,j),' ');enddatamin=@sum(link(i,j)|i#ne#j:d(i,j)*x(i,j));n=@size(point);@sum(point(j)|j#gt#1:x(1,j))>=1;@for(point(i)|i#ne#1:@sum(point(j)|j#ne#i:x(j,i))=1); @for(link(i,j):@bin(x(i,j)));@for(link(i,j)|i#ne#j:u(i)-u(j)+n*x(i,j)<=n-1); !不构成圈;end结果为minZ=60x(1,2)=1 x(1,3)=1 x(3,4)=1 x(4,5)=1x(9,6)=1 x(3,7)=1 x(7,9)=1 x(5,8)=1x(9,10)=1故最优树(最佳铺设管道方式)见图.谢谢!。
第2章 LINGO 软件使用简介与技巧LINGO 是一种专门用于求解数学规划问题的软件包.由于LINGO 执行速度快,易于方便地输入、求解和分析数学规划问题,因此在教学、科研和工业界得到广泛应用. LINGO 主要用于求解线性规划、非线性规划、二次规划和整数规划等问题,也可以用于求解一些线性和非线性方程组及代数方程求根等.本章介绍的LINGO 可在LINGO5.0,LINGO8.0,LINGO9.0中使用.一.LINGO 使用介绍1.1 LINGO 编写格式LINGO 模型以MODEL 开始,以END 结束.中间为语句,分为四大部分(SECTION ): (1) 集合部分(SETS ):这部分以“SETS :”开始,以“ENDSETS ”结束.这部分的作用在于定义必要的变量,便于后面进行编程进行大规模计算,就象C 语言在在程序的第一部分定义变量和数组一样.在LINGO 中称为集合(SET )及其元素(MEMBER 或ELEMENT ,类似于数组的下标)和属性(A TTRIBUTE ,类似于数组).LINGO 中的集合有两类:一类是原始集合(PRIMITIVE SETS ),其定义的格式为:SETNAME/member list(or 1..n)/:attribute,attribute,etc. 另一类是导出集合(DERIVED SETS ),即引用其它集合定义的集合,其定义的格式为:SETNAME (set1,set2,etc.):attribute ,attribute ,etc.如果要在程序中使用数组,就必须在该部分进行定义,否则可不需要该部分.(2) 目标与约束:这部分定义了目标函数、约束条件等.一般要用到LINGO 的内部函数,可在后面的具体应用中体会其功能与用法.求解优化问题时,该部分是必须的. (3) 数据部分(DA TA ):这部分以“DA TA :”开始,以“END DA TA ”结束.其作用在于对集合的属性(数组)输入必要的数值.格式为:attribut=value_list.该部分主要是方便数据的输入. (4) 初始化部分(INIT ):这部分以“INIT :”开始,以“END INIT ”结束.作用在于对集合的属性(数组)定义初值.格式为:attribute=value_list.由于非线性规划求解时,通常得到的是局部最优解,而局部最优解受输入的初值影响.通常可改变初值来得到不同的解,从而发现更好的解.编写LINGO 程序要注意的几点:(1) 所有的语句除SETS 、ENDSETS 、DA TA 、ENDDA TA 、INIT 、ENDINIT 和MODEL ,END 之外必须以一个分号“;”结尾.(2) LINGO 求解非线性规划时已约定各变量非负.1.2 LINGO 内部函数使用详解.LINGO 建立优化模型时可以引用大量的内部函数,这些函数以“@”符号打头. (1)常用数学函数@ABS(X) 返回变量X 的绝对数值. @COS( X)返回X 的余弦值,X 的单位为弧度 @EXP( X)返回e x 的值,其中e 为自然对数的底,即 71828.2 @FLOOR( X)向0靠近返回X的整数部分.如@FLOOR(3.7),则返回3;@FLOOR(-3.7),则返回-3.@LGM( X)返回Γ函数的自然对数值.@LOG( X)返回变量X的自然对数值.@SIGN( X)返回变量X的符号值,当X<0时为-1;当X>0时为1.@SIN( X)返回X的正弦值,X的单位为弧度@SMAX( X1, X2,..., XN)返回一列值X1, X2,..., XN的最大值.@SMIN( X1, X2,..., XN)返回一列值X1, X2,..., XN的最小值.@TAN( X)返回X的正切值,X的单位为弧度(2)集合函数集合函数的用法如下:set_operator (set_name|condition:expression)其中set_operator部分是集合函数名(见下),set_name是数据集合名,expression部分是表达式,|condition部分是条件,用逻辑表达式描述(无条件时可省略).逻辑表达式中可以三种逻辑算符(#AND#(与),#OR#(或),#NOT#(非))和六种关系算符(#EQ#(等于),#NE#(不等于),#GT#(大于),#GE#(大于等于),#LT#(小于),#LE#(小于等于)).常见的集合函数如下:@FOR (set_name:constraint_expressions)对集合(set_name)的每个元素独立地生成约束,约束由约束表达式(constraint_expressions)描述.@MAX(set_name:expression)返回集合上的表达式(expression)的最大值.@MIN(set_name:expression)返回集合上的表达式(expression)的最小值.@SUM(set_name:expression)返回集合上的表达式(expression)的和.@SIZE(set_name)返回数据集set_name中包含元素的个数.@IN(set_name,set_element)如果数据集set_name中包含元素set_element则返回1,否则返回0.(3)变量界定函数变量函数对变量的取值范围附加限制,共有四种.@BND(L,X,U)限制L≤X≤U@BIN(X)限制X为0或1.@FREE(X)取消对X的符号限制(即可取任意实数值).@GIN(X)限制X为整数值.二、LINGO 求解优化模型实验1.某昼夜服务的公交路线每天各时间区段内需司机和乘务人员如下:设司机和乘务人员分别在各时间区段一开始上班,并连续工作八小时,问该公交线路至少配备多少名司机和乘务人员?从第一班开始排,试建立线性模型.分析与求解:注意在每一时间段里上班的司机和乘务人员中,既包括在该时间段内开始时报到的人员,还包括在上一时间段工作的人员.因为每一时间段只有四个小时,而每个司乘人员却要连续工作八个小时.因此每班的人员应理解为该班次相应时间段开始时报到的人员.设i x 为第i 班应报到的人员(i =1,2,…,6),则应配备人员总数为:∑==61i ixZ按所需人数最少的要求,可得到线性模型如下:==61min i i x Z161223344556112660706050..203060,,,0x x x x x x x x s t x x x x x x x x +≥⎧⎪+≥⎪⎪+≥⎪+≥⎪⎨+≥⎪⎪+≥⎪≥⎪⎪≥⎩ LINGO 程序如下:MODEL:min=x1+x2+x3+x4+x5+x6; x1+x6>=60; x1+x2>=70; x2+x3>=60; x3+x4>=50; x4+x5>=20;x5+x6>=30;END得到的解为:x1=60,x2=10,x3=50,x4=0,x5=30,x6=0; 配备的司机和乘务人员最少为150人.2. 公司在各地有4项业务,选定了4位业务员去处理.由于业务能力、经验和其它情况不同,4业务员去处理4项业务的费用(单位:元)各不相同,见下表:表3.2 业务的费用表解:这是一个最优指派问题.引入如下变量: ⎩⎨⎧=项业务个人做第若不分派第项业务个人做第若分派第j i j i x ij 01设矩阵44A ⨯为指派矩阵,其中(,)a i j 为第i 个业务员做第j 项业务的业务费. 则可以建立如下模型:∑∑===4141min i j ij ijx aZ⎪⎪⎪⎩⎪⎪⎪⎨⎧======∑∑==4,3,2,1,104,3,2,114,3,2,11..4141j i x i x j x t s ij j ij i ij 或 LINGO 程序如下: MODEL:SETS:person/1..4/; task/1..4/;assign(person,task):a,x; ENDSETS DATA:a=1100,800,1000,700,600,500,300,800,400,800,1000,900,1100,1000,500,700;ENDDATAmin=@sum(assign:a*x);@for(person(i):@sum(task(j):x(i,j))=1);@for(task(j):@sum(person(i):x(i,j))=1);@for(assign(i,j):@bin(x(i,j)));END得到的结果如下:x(1,1)=0,x(1,2)=0,x(1,3)=0,x(1,4)=1;x(2,1)=0,x(2,2)=1,x(2,3)=0,x(2,4)=0;x(3,1)=1,x(3,2)=0,x(3,3)=0,x(3,4)=0;x(4,1)=0,x(4,2)=0,x(4,3)=1,x(4,4)=0;最小费用为2100元.即第1个业余员做第4项业务,第2个业余员做第2项业务,即第3个业余员做第1项业务,第4业余员做第3项业务.总费用达到最小,为2100元.LINGO程序中输入的数据也可以从文本文件中读入,特别是数据比较多时,将程序与数据分开,显得更方便.如上面程序也可以这样写:MODEL:SETS:person/1..4/;task/1..4/;assign(person,task):a,x;ENDSETSDATA:a=@file(data.txt);ENDDATAmin=@sum(assign:a*x);@for(person(i):@sum(task(j):x(i,j))=1);@for(task(j):@sum(person(i):x(i,j))=1);@for(assign(i,j):@bin(x(i,j)));END同时在LINGO目录下建立文本文件data.txt,数据如下:1100,800,1000,700600,500,300,800400,800,1000,9001100,1000,500,700其计算结果同上面相同.3有四种资源被用于生产三种产品,资源量、产品单件可变费用、单件售价、资源单耗量及组织三种商品生产的固定费用见下表.现要求制定一个生产计划,使总收益最大.表3.3 数据详细表解:总收益等于销售收入减去生产产品的固定费用与可变费用之和.问题的困难之处在于事先不知道某种产品是否生产,因而不能确定是否有相应的固定费用.可引入用0-1变量来解决是否需要固定费用问题.设j x 是第j 种产品的产量,1,2,3j =;再设⎪⎩⎪⎨⎧=>=)0(0)0(1jjjx j x j y种产品若不生产第种产品若生产第 3,2,1=j第I 种产品销售一件可收入7-4=3元,第II 种产品销售一件可收入10-6=4元,第III种产品销售一件可收入20-12=8元.则问题的整数规划模型为:321321200150100843m ax y y y x x x Z ---++=⎪⎪⎪⎪⎪⎪⎩⎪⎪⎪⎪⎪⎪⎨⎧===≥≤≤≤≤++≤++≤++≤++3,2,1,103,2,1,070075310032300432500842..333222111321321321321j y j x y M x y M x y M x x x x x x x x x x x x x t s j j 或且为整数 其中j M 为j x 的某个上界.如根据第2个约束条件,可取100,15021==M M ,753=M .也可统一取其最大值150=M .如果生产第j 种产品,则起产量0>j x .由约束条件j j j y M x ≤知1=j y ,此时相应的生产第j 种产品的固定费用在目标函数被考虑.如果不生产第j 种产品,则起产量0=j x .由约束条件j j j y M x ≤知j y 可为0也可为1.但显然只有0=j y 有利于目标函数最大,从而相应的生产第j 种产品的固定费用在目标函数将不被考虑.因此引入j y 是合理的.下面是LINGO 程序.MODEL: DATA: M=150; ENDDATAmax=3*x1+4*x2+8*x3-100*y1-150*y2-200*y3;!目标函数; 2*x1+4*x2+8*x3<=500; 2*x1+3*x2+4*x3<=300; x1+2*x2+3*x3<=100; 3*x1+5*x2+7*x3<=700; x1<=M*y1; x2<=M*y2;x3<=M*y3;@GIN(x1);@GIN(x2);@GIN(x3); !指定产品件数为整数; @BIN(y1);@BIN(y2);@BIN(y3); !指定0-1变量;end得到的解为x1=100,x2=0,x3=0,y1=1,y2=0,y3=0.最大值为Z=200元.3 TSP 问题及LINGO 求解技巧巡回旅行商问题(Traveling Salesman Problem ,TSP),也称为货郎担问题。
全国数学建模lingo 实例讲解LINGO 是用来求解线性和非线性优化问题的简易工具。
LINGO 内置了一种建立最优化模型的语言,可以简便地表达大规模问题,利用LINGO 高效的求解器可快速求解并分析结果。
§1 LINGO 快速入门当你在windows 下开始运行LINGO 系统时,会得到类似下面的一个窗口:外层是主框架窗口,包含了所有菜单命令和工具条,其它所有的窗口将被包含在主窗口之下。
在主窗口内的标题为LINGO Model – LINGO1的窗口是LINGO 的默认模型窗口,建立的模型都都要在该窗口内编码实现。
下面举两个例子。
例1.1 如何在LINGO 中求解如下的LP 问题:,6002100350..32min 212112121≥≤+≥≥++x x x x x x x t s x x在模型窗口中输入如下代码: min =2*x1+3*x2; x1+x2>=350; x1>=100;2*x1+x2<=600;然后点击工具条上的按钮 即可。
例1.2 使用LINGO 软件计算6个发点8个收点的最小费用运输问题。
产销单位运价如下表。
单位 销地 运 价 产地B 1 B 2 B 3 B 4 B 5 B 6 B 7 B 8 产量 A 1 6 2 6 7 4 2 5 9 60 A 24953858255A3 5 2 1 9 7 4 3 3 51A4 7 6 7 3 9 2 7 1 43A5 2 3 9 5 7 2 6 5 41A6 5 5 2 2 8 1 4 3 52销量35 37 22 32 41 32 43 38使用LINGO软件,编制程序如下:model:!6发点8收点运输问题;sets:warehouses/wh1..wh6/: capacity;vendors/v1..v8/: demand;links(warehouses,vendors): cost, volume;endsets!目标函数;min=@sum(links: cost*volume);!需求约束;@for(vendors(J):@sum(warehouses(I): volume(I,J))=demand(J));!产量约束;@for(warehouses(I):@sum(vendors(J): volume(I,J))<=capacity(I));!这里是数据;data:capacity=60 55 51 43 41 52;demand=35 37 22 32 41 32 43 38;cost=6 2 6 7 4 2 9 54 95 3 8 5 8 25 2 1 9 7 4 3 37 6 7 3 9 2 7 12 3 9 5 7 2 6 55 5 2 2 8 1 4 3;enddataend然后点击工具条上的按钮即可。