数学建模软件lingo示例共30页文档
- 格式:ppt
- 大小:2.94 MB
- 文档页数:3
Lingo超经典案例大全LINGO是Linear Interactive and General Optimizer的缩写,即“交互式的线性和通用优化求解器”。
Lingo超强的优化计算能力在很多方面(线性规划、非线性规划、线性整数规划、非线性整数规划、非线性混合规划、二次规划等)比matlab、maple等强得多,Lingo编程简洁明了,数学模型不用做大的改动(或者不用改动)便可以直接采用Lingo语言编程,十分直观。
Lingo模型由4个段构成:(1)集合段(sets endsets);(2)数据段(data enddata);(3)初始段(init endinit);(4)目标与约束段。
Lingo的五大优点:1. 对大规模数学规划,LINGO语言所建模型较简洁,语句不多;2. 模型易于扩展,因为@FOR、@SUM等语句并没有指定循环或求和的上下限,如果在集合定义部分增加集合成员的个数,则循环或求和自然扩展,不需要改动目标函数和约束条件;3. 数据初始化部分与其它部分语句分开,对同一模型用不同数据来计算时,只需改动数据部分即可,其它语句不变;4. “集合”是LINGO有特色的概念,它把实际问题中的事物与数学变量及常量联系起来,是实际问题到数学量的抽象,它比C语言中的数组用途更为广泛。
5. 使用了集合以及@FOR、@SUM等集合操作函数以后可以用简洁的语句表达出常见的规划模型中的目标函数和约束条件,即使模型有大量决策变量和大量数据,组成模型的语句并不随之增加.一、求解线性整数规划、非线性整数规划问题:1.线性整数规划:model:max=x1+x2;x1+9/14*x2<=51/14;-2*x1+x2<=1/3;@gin(x1);@gin(x2);end求得x1=3,x2=1,最大值为4.运用matlab求时可以发现有两组解:x1=3,x2=1和x1=2,x2=2。
通过验证也可知这两组解均满足。
Lingo应用——旅游路线最短问题题目:从北京乘飞机到东京、纽约、墨西哥城、伦敦、巴黎五个城市做旅游,每个城市去且仅去一次,再回到东京,问如何安排旅游线路,使总旅程最短。
各城市之间的航线距离如下表:运用lingo软件求解模型建立前问题分析:1.这是一个求路线最短的问题,题目给出了两两城市之间的距离,而在最短路线中,这些城市有的两个城市是直接相连接的(即紧接着先后到达的关系),有些城市之间就可能没有这种关系,所以给出的两两城市距离中有些在最后的最短路线距离计算中使用到了,有些则没有用。
这是一个0-1规划的问题,也是一个线性规划的问题。
2.由于每个城市去且仅去一次,最终肯定是形成一个圈的结构,这就导致了这六个城市其中有的两个城市是直接相连的,另外也有两个城市是不连接的。
这就可以考虑设0-1变量,如果两个城市紧接着去旅游的则为1,否则为0。
就如同下图实线代表两个城市相连为1,虚线代表没有相连为03. 因为每个城市只去一次,所以其中任何一个城市的必有且仅有一条进入路线和一条出去的路线。
求解:为了方便解题,给上面六个城市进行编号,如下表(因为北京是起点, 将其标为1)假设:设变量x ij 。
如果x ij =1,则表示城市i 与城市j 直接相连(即先后紧接到达关系),否则若x ij =0,则表示城市i 与城市j 不相连。
特别说明:x ij 和x ji 是同一变量,都表示表示城市i 与城市j 是否有相连的关系。
这里取其中x ij (I<j)的变量。
模型建立:由于这是一个最短路线的问题,且变量已经设好。
目标函数:min z=51*x12+78*x13+68*x14+51*x15+13*x16+56*x23+35*x24+21*x25+60*x26+21*x34+57*x35+70*x36+36*x45+68*x46+61*x56约束条件:1. 上面目标函数中的变量是表示两个城市是否直接相连接的关系,且最短路线是可以形成圈的,如下图实线代表两个城市相连为1,虚线代表没有相连为0如上图城市a和城市b有直接相连接的关系,所以之间变量为1,而城市a 与城市e则没有直接相连接的关系,之间变量为0。
LINGO是一种用于线性规划、整数规划、非线性规划、混合整数规划等数学建模和优化问题的软件工具。
它可以用于解决各种实际问题,包括生产计划、物流、资源分配、网络设计等。
以下是一个简单的LINGO案例,以帮助您了解如何使用LINGO进行优化建模和求解问题:**问题描述:**假设有一家制造公司,他们生产两种产品:A和B。
公司有两个工厂,每个工厂都有不同的生产能力和成本。
公司希望确定每个工厂应该生产多少产品A和B,以最大化利润,同时满足生产能力和市场需求的限制。
**问题数据:**- 工厂1的生产能力:最多生产500个A和300个B- 工厂2的生产能力:最多生产400个A和600个B- 产品A的利润:每个A产品的利润为30美元- 产品B的利润:每个B产品的利润为40美元- 生产一个A产品的成本:工厂1为10美元,工厂2为15美元- 生产一个B产品的成本:工厂1为12美元,工厂2为10美元- 市场需求:产品A的市场需求为600个,产品B的市场需求为800个**LINGO建模和求解:**在LINGO中,可以使用数学表达式来建立优化模型。
以下是一个LINGO模型的示例:```SETS:FACTORIES = 1..2;ENDSETSDATA:CAPACITY(FACTORIES) = 500 300400 600;PROFIT = 30 40;COST(FACTORIES) = 10 1512 10;DEMAND = 600 800;ENDDATAVARIABLES:X(FACTORIES) = 0;ENDVARIABLESMAX = @SUM(FACTORIES, PROFIT(FACTORIES) * X(FACTORIES))SUBJECT TOCAPACITY_CONSTRAINT(F)$(FACTORIES): @SUM(FACTORIES, COST(F, FACTORIES) * X(FACTORIES)) <= CAPACITY(F);DEMAND_CONSTRAINT(I)$(FACTORIES): @SUM(FACTORIES,X(FACTORIES)) >= DEMAND(I);POSITIVE_X(F)$(FACTORIES): X(F) >= 0;ENDSUBMODEL:MAX;SOLVE;```上述LINGO模型首先定义了SETS、DATA、VARIABLES和MAX,然后使用SUBJECT TO部分定义了约束条件,最后使用MODEL和SOLVE命令求解优化问题。
Lingo实验例子(例子来源:《运筹学教程》(第三版)胡运权主编清华大学出版社2007年第三版) 一、线性规划及单纯形法、灵敏度分析例1 P28页例5 Lingo程序:max=2*x1+x2;5*x2<=15;6*x1+2*x2<=24;x1+x2<=5;例2 P44页习题1.7(1)Lingo程序:model:max=2*x1-x2+2*x3;x1+x2+x3>=6;-2*x1+x3>=2;2*x2-x3>=0;end其余课本上的例题和习题同学们自己动手编写程序并进行调试运行,分析运行结果。
二、运输问题例3 P82页例1 Lingo程序:model:sets:gy/g1..g3/:ai;xs/x1..x4/:dj;link(gy,xs):c,x;endsetsdata:ai=16,10,22; dj=8,14,12,14;c=4,12,4,112,10,3,98,5,11,6;enddatamin=@sum(link(i,j):c(i,j)*x(i,j) );@for(gy(i):@sum(xs(j):x(i,j))=ai (i));@for(xs(j):@sum(gy(i):x(i,j))=dj (j));end例4 P98页例5(转运)Lingo程序:model:sets:plant/x1..x5/:produce; customer/y1..y5/:require;link(plant,customer):c,x; endsetsdata:produce=60,90,50,50,50;require=50,50,50,80,70;c=-4,5,3,2,1005,-1,2,100,43,2-3,5,52,100,5-3,6100,4,5,6,-5;enddatamin=@sum(link:c*x);@for(plant(i):@sum(customer(j):x (i,j))=produce(i));@for(customer(j):@sum(plant(i):x (i,j))=require(j));end三、目标规划例5 P108页例2 Lingo程序:第一种做法分三步来完成第一步:考虑目标:min=11P d-model:min=dminus1;5*x1+10*x2<=60;x1-2*x2+dminus1-dplus1=0;4*x1+4*x2+dminus2-dplus2=36;6*x1+8*x2+dminus3-dplus3=48; end第二步:考虑目标:min=1122P d P d-++model:min=dminus1+dplus2;5*x1+10*x2<=60;x1-2*x2+dminus1-dplus1=0;4*x1+4*x2+dminus2-dplus2=36;6*x1+8*x2+dminus3-dplus3=48; end第三步:考虑目标:min=112233P d P d P d-+-++model:min=dminus1+dplus2+dminus3;5*x1+10*x2<=60;x1-2*x2+dminus1-dplus1=0;4*x1+4*x2+dminus2-dplus2=36;6*x1+8*x2+dminus3-dplus3=48;end注意:如果想要在上述各步中进行灵敏度分析,只需按快捷键Ctrl+R就可以得到相应的结果或者采用一个程序进行输值运算:model:sets:level/1..3/:P,z,goal;variable/1..2/:x;h_con_num/1..1/:b;s_con_num/1..3/:g,dplus,dminus; h_cons(h_con_num,variable):A;s_cons(s_con_num,variable):C;obj(level,s_con_num):wplus,wminu s;endsetsdata:P=? ? ?;goal=? ? 0;b=60;g=0 36 48;A=5 10;C=1 -2 4 4 6 8;wplus=0 0 00 1 00 0 0;wminus=1 0 00 0 00 0 1;enddatamin=@sum(level:P*z);@for(level(i):z(i)=@sum(s_con_nu m(j):wplus(i,j)*dplus(j))+@sum(s _con_num(j):wminus(i,j)*dminus(j ))); @for(h_con_num(i):@sum(variable( j):A(i,j)*x(j))<=b(i));@for(s_con_num(i):@sum(variable( j):C(i,j)*x(j))+dminus(i)-dplus( i)=g(i));@for(level(i)|i #lt#@size(level):@bnd(0,z(i),goal(i) ));end例6 P110页例4 Lingo程序:第一种做法分四步来完成第一步:考虑目标:min=11P d-model:min=dminus1;x1+2*x2+dminus1-dplus1=6;x1+2*x2+dminus2-dplus2=9;x1-2*x2+dminus3-dplus3=4;x2+dminus4-dplus4=2;end第二步:考虑目标:min=1122P d P d-++model:min=dminus1+dplus2;x1+2*x2+dminus1-dplus1=6;x1+2*x2+dminus2-dplus2=9;x1-2*x2+dminus3-dplus3=4;x2+dminus4-dplus4=2;end第三步:考虑目标:min= 1122335P d P d P d-+-++model:min=dminus1+dplus2+5*dminus3+3*d minus4;x1+2*x2+dminus1-dplus1=6;x1+2*x2+dminus2-dplus2=9;x1-2*x2+dminus3-dplus3=4;x2+dminus4-dplus4=2;end第四步:考虑目标:min= 1122334(53)P d P d P d d-+--+++model:min=dminus1+dplus2+5*dminus3+3*d minus4+dplus1;x1+2*x2+dminus1-dplus1=6;x1+2*x2+dminus2-dplus2=9;x1-2*x2+dminus3-dplus3=4;x2+dminus4-dplus4=2;end注:做到此步后已得到满意解,可不必再往下求解,因为此时第三级优先因子已不能完全满足。
.例1 某服务部门一周中每天需要不同数目的雇员:周一到周四每天至少需要50人,周五至少需要80人,周六和周日至少需要90人.现规定应聘者需连续工作5天,试确定应聘方案,即周一到周日每天聘用多少人,使在满足需要的条件下聘用总人数最少.模型:记7654321x x x x x x x ,,,,,,分别表示周一、周二、周三、周四、周五、周六、周日聘用的人数.∑==71i i x z min .⎪⎪⎪⎪⎪⎩⎪⎪⎪⎪⎪⎨⎧≥≥++++≥++++≥++++≥++++≥++++≥++++≥++++-为整数.,,,,,,,0909080505050507176543654325432174321763217652176541x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x .t .s 例2 某公司用A 和B 两种原油混合加工成甲、乙两种汽油.甲、乙两种汽油含原油A 的最低比例分别为50%和60%,每吨售价分别为4800元和5600元.该公司现有原油A 和B 的库存量分别为500吨和1000吨,还可以从市场上买到不超过1500吨的原油A .原油A 的市场价为:购买量不超过500吨时的单价为10000元/吨;购买量超过500吨但不超过1000吨时,超过500吨的部分8000元/吨;购买量超过1000吨时,超过1000吨的部分6000元/吨.该公司应如何安排原油的采购和加工.模型:设原油A 用于生产甲、乙两种汽油的数量分别为1211x x ,,原油B 用于生产甲、乙两种汽油的数量分别为2221x x ,,记321x x x ,,分别表示以价格10千元/吨、8千元/吨、6千元/吨采购的原油A 的吨数.()()()3212212211168106584x x x x x .x x .z max ++-+++=.()()1112123212211112112122212231112212212350010000.50.6..5000500000500x x x x x x x x x x x s t x x x x x x x x x x x x x +≤+++⎧⎪+≤⎪⎪≥⎪+⎪⎪⎪≥⎨+⎪⎪-=⎪-=⎪⎪≥⎪⎪≤≤⎩,,,,,,,,,,,,.例3 某钢管零售商从钢管厂进货,将钢管按照顾客的要求切割后售出.从钢管厂进货时得到的原料钢管都是19米长.(1)现有一客户需要50根4米长、20根6米长和15根8米长的钢管.应如何下料最省?(2)零售商如果采用的不同切割模式太多,将会导致生产过程的复杂化,从而增加生产和管理成本,所以该零售商规定采用的不同切割模式不能超过3种.此外,该客户除需要(1)中的三种钢管外,还需要10根5米长的钢管.应如何下料最省? 模型1:钢管下料的合理切割模式i ∑==71i i x z min .⎪⎪⎩⎪⎪⎨⎧≥≥++≥+++≥++++-为整数.,,,015220325023471753654254321x x x x x x x x x x x x x .t .s模型2:用()321,,=i x i 表示按照第i 种模式切割的原料钢管的根数.设第i 种模式下每根原料钢管可生产4米长、5米长、6米长、8米长的钢管数量分别为1i r ,2i r ,3i r ,4i r .∑==31i i x z min .()⎪⎪⎪⎪⎪⎪⎩⎪⎪⎪⎪⎪⎪⎨⎧==≥≥≤+++≤≤+++≤≤+++≤≥++≥++≥++≥++-.,,,;,,为整数为整数,,,,,,,,4321321001986541619865416198654161520105031343332312423222114131211334224114333223113332222112331221111j i r x r r r r r r r r r r r r x r x r x r x r x r x r x r x r x r x r x r x r .t .s ij例4 有4名同学到一家公司参加三个阶段的面试:公司要求每个同学都必须首先找公司秘书初试,然后到部门主管处复试,最后到经理处参加面试,并且不允许插队(即在任何一个阶段4名同学的顺序是一样的).由于4名同学的专业背景不同,所以每人在三个阶段的面试时间也不同,如下表所示(单位:分钟).这4名同学约定他们全部面试完以后一起离开公司.假定现在时间是早晨8:00,问他们最早何时能离开公司?面试时间模型:记ij t 为第i 名同学参加第j 阶段面试需要的时间(已知),令ij x 表示第i 名同学参加第j 阶段面试的开始时刻(不妨记早上8:00为0时刻) ?(123,4123ij ==,,;,,),T 为完成全部面试所花的时间,用0—1变量iky 表示第k 名同学是否排在第i 名同学前面(1表示“是”,0表示“否”).{}33i i it x max T min +=.()⎪⎪⎪⎩⎪⎪⎪⎨⎧<====≥<==-≤-+<==≤-+==≤++.,,,,,,,或取.,,,,,,,.,,,,,,,,.,,,,,,,,.,,,,,,k i k i y j i x k i k j i y T x t x k i k j i Ty x t x j i x t x .t .s ikij ik ij kj kj ik kj ij ij j ,i ij ij 432321103214321043232114323212143211 或改写为T min()⎪⎪⎪⎪⎪⎪⎩⎪⎪⎪⎪⎪⎪⎨⎧<====≥<==-≤-+<==≤-+==≤++≥+≥+≥+≥+.,,,,,,,或取.,,,,,,,.,,,,,,,,.,,,,,,,,.,,,,,,,,,,k i k i y j i x k i k j i y T x t x k i k j i Ty x t x j i x t x t x T t x T t x T t x T .t .s ik ij ik ij kj kj ik kj ij ij j ,i ij ij 4323211032143210432321143232121432114343333323231313 例5 某市消防中心同时接到了三处火警报告.根据当前的火势,三处火警地点分别需要2辆、2辆和3辆消防车前去灭火.三处火警地点的损失将依赖消防车到达的及时程度:记ij t 为第j 辆消防车到达火警地点i 的时间,则三处火警地点的损失分别为:333231222112115893746t t t t t t t ++++,,.目前可供消防中心调度的消防车正好有7辆,分别属于三个消防站,可用消防车数量分别为3辆、2辆、2辆.消防车从三个消防站到三个火警地点所需时间如下表所示.消防中心应如何调度消防车,才能使总损失最小?消防站到三个火警地点所需时间(单位:分钟)模型:将每一火警地点视为与该火警地点所需消防车数目相同数目的需求点.记ij x 表示第i 个消防站是否向第j 个需求地点派车(1表示“是”,0表示“否”)(7654321321,,,,,,,,,==j i ).利用损失函数与已知到达时间可计算得到如下损失矩阵:损失矩阵∑∑===7131j i ij ij x c z min .⎪⎪⎪⎪⎪⎪⎪⎩⎪⎪⎪⎪⎪⎪⎪⎨⎧=======∑∑∑∑====.,,,,,,,,,,或取,,,.,,,,,,,3765432132110223765432117171271131j i x x x x j x .t .s ij j j j j j j i ij 例6 设有两个工厂A 、B ,产量分别为9,8个单位;四个顾客分别为1,2,3,4,需求量分别为3,5,4,5;三个仓库x ,y ,z .其中工厂到仓库、仓库到顾客的运费单价如下表所示.试求总运费最少的运输方案.工厂到仓库、仓库到顾客的运费单价说明:其中“—”表示两地无道路通行.模型:设有m 个工厂,l 个仓库,n 个顾客,i a 表示第i 个工厂的产量,k b 表示第k 个顾客的需求量,ij c 表示第i 个工厂到第j 个仓库的运费单价,jk d 表示第j 个仓库到第k 个顾客的运费单价,ij x 表示第i 个工厂到第j 个仓库的运量,jk y 表示第j 个仓库到第k 个顾客的运量.∑∑∑∑====+m i l j l j nk jk jk ij ij y d x c min 1111.⎪⎪⎪⎪⎩⎪⎪⎪⎪⎨⎧===≥≥===≥=≤∑∑∑∑====.,,,,,,,,,,,,,,,,,,,,,,,,,,,,n k l j m i y x n k b y l j y x m i a x .t .s jk ijk lj jk n k jk mi ij i lj ij 212121002121211111例7 在下图中,用点表示城市,现有A ,B 1,B 2,C 1,C 2,C 3,D 共7个城市.点与点之间的连线表示城市间有道路相连.连线旁的数字表示道路的长度.现计划从城市A 到城市D 铺设一条天然气管道,请设计出最小价格管道铺设方案.模型:用n 个顶点表示n 个城市,城市编号为i (n i ,,, 21=),()j i ,表示连接城市i 与j 的道路,其长度记为ij w ,E 为边集.设决策变量为ij x ,且()⎩⎨⎧=,否则.的路上,至城市位于城市,,当011n j i x ij 则最短路问题的数学规划表达式为()∑∈Ej i ijijx w min,.()()()()()⎪⎪⎪⎪⎩⎪⎪⎪⎪⎨⎧∈-====∑∑∑∑∈∈∈∈.,,或取,,,,,,,,,,,E j i x n i x x x x .t .s ij E i j j ji E j i j ij En j jjn Ej j j 101321111 例8 现需要将城市s 的石油通过管道运送到城市t ,中间有4个中转站v 1,v 2,v 3,v 4,城市与中转站的连接以及管道的容量如图所示,求从城市s 到城市t 的最大流.模型:用n 个顶点表示n 个城市,城市编号为i (n i ,,, 21=),()j i ,表示连接城市i 与j 的弧,弧()j i ,上的容量记为ij c ,流量记为ij f ,A 为弧集.则最大流问题的数学规划表达式为v max .()()()()()⎪⎪⎪⎪⎩⎪⎪⎪⎪⎨⎧∈≤≤-====∑∑∑∑∈∈∈∈.,,,,,,,,,A j i c f n i f f v f v f .t .s ij ij A i ,j j ji A j ,i j ij An ,j jjn Aj ,j j 013211。