LINGO源程序
LINGO基本语法和编程ppt课件
f对
x, j
y j
是非线性的,
所以在新建料场时是NLP模型。先解NLP模型,而把现有临时料场的位置作
为初始解告诉LINGO。
本例中集合的概念
利用集合的概念,可以定义需求点DEMAND和供应点 SUPPLY两个集合,分别有6个和2个元素(下标)。但决 策变量(运送量) 与c ij 集合DEMAND和集合SUPPLY都 有关系的。该如何定义这样的属性?
在实际问题中,输入的数据通常是原始数据,不一定 能在模型中直接使用,可以在这个段对这些原始数据进 行一定的“预处理”,得到模型中真正需要的数据。
例如
Calc: TotalWeight = @sum(Box(i): zl(i)*js(i)); EndCalc
注意计算段只能对常量进行计算,不能对需要 通过解优化程序求解出来的变量进行计算。
1 2 3 456
a 1.25 8.75 0.5 5.75 3 7.25
b 1.25 0.75 4.75 5 6.5 7.75
d3
5
4
7 6 11
建立模型
记工地的位置为(a ,b ) ,水泥日用量为d,i1, 6;料场
ii
i
位置为(
x
j
,
y
j
)
,日储量为
e j
,
j 1,2
;从料场
j 向工地i
的
运送量为c ij 。
集合的基本用法
例四这理属个些解性SA季需(LIIL度求ANCtG的必tOrO帆须i公b建u船按司t模e需时需)语求满要的言量足决概最分。定念重别每下。要是个四的季4个0是度条季理正,度解常6的0集的条帆合生,船(产7生5S能条产et)力,量及2是。5其条4下0, 条帆船,每条船的生产费用为400美元。如果加班生产, 每条船的生产费用为450美元。每个季度末,每条船的 库存费用为20美元。假定生产提前期为0,初始库存为 10条船。如何安排生产可使总费用最小?
Lingo课件-介绍与简单程序
IF函数应Байду номын сангаас实例1
我们生产两种产品X和Y,我们想总共的成本最小 . 约 束条件是,两种产品的数量和要大于30,产品X的成本
是2,固定费用是 100 (生产这种产品时,起步费用),
产品Y的成本是3,固定成本是60.
实例程序
MIN = COST; COST = XCOST + YCOST; XCOST = @IF( X #GT# 0, 100, 0) + 2 * X; YCOST = @IF( Y #GT# 0, 60, 0) + 3 * Y;
1.
Lingo介绍
LINGO是一种专门用于求解最优化模型的软件. 由于
LINGO软件包执行速度快,易于输入、修改、求解和 分析数学规划(优化问题),因此在教育、科研和工
业界得到广泛应用. LINGO主要用于求线性规划、非线
性规划、二次规划、整数规划和动态规划问题,也可 用于一些线性和非线性方程组的求解以及代数方程求
runtime
1.3工具栏
2. 简单程序
LINGO系统与C语言、Maple软件不同,在LINGO 系统下变量与内部函数不区分大小写, 变量student与变 量Student, 函数@file 与@FILE认为相同,一般情况下, 系统会自动将变量全部转化为大写. 1)变量要求
在LINGO中创建变量名必须字母开头,由字母、数 字或下划线“_”组成的字符序列, 变量有效长度为32 个字符.
Solve求解实例
例1 Min f=x1-2*x2+x3; s.t.x1+x2-2*x2+x4=10; 2*x1-x2+4*x3<=8; -x1+2*x2-4*x3<=4; x1>0;x2>0;x3>0;x4>0;
lingo编程实验报告
lingo编程实验报告Lingo编程实验报告一、引言编程是现代科技领域不可或缺的一项技能。
在信息时代,计算机程序的编写已经渗透到我们生活的方方面面。
为了掌握这一技能,我参加了一次关于Lingo 编程的实验。
本文将对这次实验进行报告和总结。
二、Lingo编程简介Lingo是一种用于创建交互式多媒体内容的编程语言。
它最初由Adobe公司开发,用于支持其多媒体软件Director。
Lingo具有易学易用的特点,广泛应用于游戏开发、教育软件和互动式网页等领域。
通过使用Lingo,我们可以实现图像、声音、动画等多媒体元素的交互和控制。
三、实验目标本次实验的目标是利用Lingo编写一个简单的互动式游戏。
通过这个实验,我们将学习如何使用Lingo语言来控制多媒体元素的行为和交互,加深对编程的理解和应用。
四、实验过程1. 环境搭建在开始实验之前,我们首先需要安装Director软件,并创建一个新的项目。
Director提供了一个直观的图形界面,让我们可以轻松地创建多媒体场景和元素。
2. 编写代码在Director的Lingo编辑器中,我们可以编写Lingo代码。
Lingo代码由一系列指令组成,用于控制多媒体元素的行为。
在这个实验中,我们使用了一些常用的Lingo指令,如on mouseUp、go to the frame等。
3. 创建游戏场景在实验中,我们创建了一个简单的游戏场景,包括一个角色和一些障碍物。
通过编写Lingo代码,我们可以控制角色的移动和障碍物的生成。
当角色与障碍物碰撞时,游戏结束。
4. 测试和调试完成代码编写后,我们对游戏进行了测试和调试。
通过不断地运行和调试代码,我们发现了一些问题并进行了修复。
这个过程不仅帮助我们找出错误,还加深了对Lingo语言的理解和掌握。
五、实验结果经过一段时间的努力,我们最终成功地完成了这个互动式游戏。
游戏中的角色可以通过鼠标控制移动,并且当角色与障碍物碰撞时,游戏会结束并显示得分。
实验目的和要求
一、实验目的和要求:目的:本实验目的熟悉LINGO软件开发环境;了解并熟练掌握LINGO语言的数学模型的结构;掌握并应用LINGO语言来解决线性规划问题的能力;并了解灵敏度分析的含义..要求:1、了解LINGO软件应用界面;熟悉使用菜单及工具条的功能;2、使用LINGO完成例题验证;3、使用LINGO完成线性规划问题与对偶线性规划问题求解;并分析解题结果;二、实验内容:1 使用LINGO验证下列题目;并进行结果分析MODEL:SETS:QUATERS/Q1;Q2;Q3;Q4/:TIME;DEM;RP;OP;INV;ENDSETSMIN=@SUMQUATERS:400*RP+450*OP+20*INV;@FORQUATERSI:RPI<=40;@FORQUATERSI|TIMEI#GT#1:INVI=INVI-1+RPI+OPI-DEMI;INV1=10+RP1+OP1-DEM1;DATA:DEM=40;60;75;25;TIME=1;2;3;4;ENDDATAEND2使用LINGO验证下列题目;并进行结果分析MODEL:SETS:DAYS/D1;D2;D3;D4;D5;D6;D7/:RQMT;START;ENDSETSMIN=@SUMDAYS:START;@FORDAYSI:@SUMDAYSJ|J#GT#I+2#OR#J#LE#I#AND#J#GT3I-5:STARTJ>RQMTI;;DATA:RQMT=17;13;15;19;14;16;11;ENDDATAEND3 使用LINGO求解实验一两道题目;并进行结果分析min z =4*x1+4*x2+x3s.t. x1+x2+x3<=22*x1+x2<=32*x1+x2+3*x3>=3x1;x2;x3>=04max z=3*x1+x2s.t. x1+x2>=32*x1+x2<=4x1+x2=3x1;x2>=05使用LINGO求解实验一两道题目;并进行结果分析max z=3*x1+2*x22*x1+3*x2<=14.54*x1+x2<=16.5x1;x2>=0x1;x2为整数三、实验过程1、源程序MODEL:SETS:QUATERS/Q1;Q2;Q3;Q4/:TIME;DEM;RP;OP;INV;ENDSETSMIN=@SUM QUATERS:400*RP+450*OP+20*INV;@FOR QUATERSI:RPI<=40;@FOR QUATERSI|TIMEI#GT#1:INVI=INVI-1+RPI+OPI-DEMI;INV1=10+RP1+OP1-DEM1;;DATA:DEM=40;60;75;25;TIME=1;2;3;4;ENDDATAEND运行结果Global optimal solution found.Objective value: 78450.00Total solver iterations: 2变量函数值目标函数减少量 TIME Q1 1.000000 0.000000TIME Q2 2.000000 0.000000TIME Q3 3.000000 0.000000TIME Q4 4.000000 0.000000DEM Q1 40.00000 0.000000DEM Q2 60.00000 0.000000DEM Q3 75.00000 0.000000DEM Q4 25.00000 0.000000RP Q1 40.00000 0.000000RP Q2 40.00000 0.000000RP Q3 40.00000 0.000000RP Q4 25.00000 0.000000OP Q1 0.000000 20.00000OP Q2 10.00000 0.000000OP Q3 35.00000 0.000000OP Q4 0.000000 50.00000INV Q1 10.00000 0.000000INV Q2 0.000000 20.00000INV Q3 0.000000 70.00000INV Q4 0.000000 420.0000行号松弛或剩余值对偶价格1 78450.00 -1.0000002 0.000000 30.000003 0.000000 50.000004 0.000000 50.000005 15.00000 0.0000006 0.000000 450.00007 0.000000 0.0000008 0.000000 450.00009 0.000000 430.000010 0.000000 400.000011 0.000000 0.000000结果分析:经过两次迭代;已经找到全局最优解;得到最小值78450.00;此时TIMEQ1=1;TIMEQ2=2;TIMEQ3=3;TIMEQ4=4;DEMQ1=40;DEMQ2=60;DEMQ3=75;DEMQ4= 25;RPQ1=40;RPQ2=40;RPQ3=40;RPQ4=25;OPQ1=0;OPQ2=15;OPQ3=35;OPQ4=0;INVQ 1=10;INVQ2=0;INVQ3=0;INVQ4=02、源程序MODEL:SETS:DAYS/D1;D2;D3;D4;D5;D6;D7/:RQMT;START;ENDSETSMIN=@SUM DAYS:START;@FOR DAYSI:@SUM DAYSJ|J#GT#I+2#OR#J#LE#I#AND#J#GT#I-5:STARTJ>RQMTI;;DATA:RQMT=17;13;15;19;14;16;11;ENDDATAEND运行结果Global optimal solution found.Objective value: 22.33333Total solver iterations: 11变量函数值目标函数减少量RQMT D1 17.00000 0.000000RQMT D2 13.00000 0.000000RQMT D3 15.00000 0.000000RQMT D4 19.00000 0.000000RQMT D5 14.00000 0.000000RQMT D6 16.00000 0.000000RQMT D7 11.00000 0.000000START D1 6.000000 0.000000START D2 5.333333 0.000000START D3 0.000000 0.000000START D4 7.333333 0.000000START D5 0.000000 0.3333333START D6 3.333333 0.000000START D7 0.3333333 0.000000行号松弛或剩余值对偶价格1 22.33333 -1.0000002 0.000000 -0.33333333 2.000000 0.0000004 0.000000 -0.33333335 0.000000 -0.33333336 4.666667 0.0000007 0.000000 -0.33333338 0.000000 0.000000结果分析:经过11次迭代;已经找到全局最优解;最小值为22.33333;此时RQMTD1=17;RQMTD2=13;RQMTD3=15;RQMTD4=19;RQMTD5=14;RQMTD6=16;RQMTD7=11 ;STARTD1=6;STARTD2=5.333333;STARTD3=0;STARTD4=7.333333;STARTD5=0;STAR TD6=3.333333;STARTD7=0.3333333、源程序MODEL:MIN=4*X1+4*X2+X3;X1+X2+X3<=2;2*X1+X2<=3;2*X1+X2+3*X3>=3;X1>=0;X2>=0;X3>=0;END运行结果Global optimal solution found.Objective value: 1.000000Total solver iterations: 1变量函数值目标函数减少量X1 0.000000 3.333333X2 0.000000 3.666667X3 1.000000 0.000000行号松弛或剩余值对偶价格1 1.000000 -1.0000002 1.000000 0.0000003 3.000000 0.0000004 0.000000 -0.33333335 0.000000 0.0000006 0.000000 0.0000007 1.000000 0.000000结果分析:经过一次迭代;已经找到全局最优解;最小值为1;此时x1=0;x2=0;x3=1 4、源程序MODEL:MAX=3*X1+X2;X1+X2>=3;2*X1+X2<=4;X1+X2=3;X1>=0;X2>=0;END运行结果:Global optimal solution found.Objective value: 5.000000Total solver iterations: 0变量函数值目标函数减少量X1 1.000000 0.000000X2 2.000000 0.000000行号松弛或剩余值对偶价格1 5.000000 1.0000002 0.000000 0.0000003 0.000000 2.0000004 0.000000 -1.0000005 1.000000 0.0000006 2.000000 0.000000结果分析:已经找到全局最优解;函数最大值为5;此时x1=1;x2=25、源程序MODEL:MAX=3*X1+2*X2;2*X1+3*X2<=14.5;4*X1+X2<=16.5;X1>=0;X2>=0;@GIN X1;@GIN X2;END运行结果:Global optimal solution found.Objective value: 13.00000Extended solver steps: 0Total solver iterations: 3变量函数值目标函数减少量X1 3.000000 -3.000000X2 2.000000 -2.000000行号松弛或剩余值对偶价格1 13.00000 1.0000002 2.500000 0.0000003 2.500000 0.0000004 3.000000 0.0000005 2.000000 0.000000结果分析:经过三次迭代;已经得到全局最优解;函数最大值为13;此时x1=3;x2=2四、思考题1、LINGO软件主要能解决哪些问题主要用来解决将实际问题模型化后;在几条限制条件下;编程解决一些优化、规划问题;诸如最短路线问题、最少费用问题、分配问题指派问题、最小生成树问题、二次分配问题;;得出局部或全局最优解;经常构造0—1变量;解决实际中的整数规划问题;;还可以做灵敏度分析等等...2、使用LINGO编程与LINDO解决LP问题的区别LINDO是一种专门用于求解数学规划问题的软件包..由于LINDO执行速度很快、易于方便输入、求解和分析数学规划问题..LINDO主要用于解线性规划、非线性规划、二次规划和整数规划等问题..也可以用于一些非线性和线性方程组的求解以及代数方程求根等..LINDO中包含了一种建模语言和许多常用的数学函数包括大量概论函数;可供使用者建立规划问题时调用..LINGO是在LINDO的基础上做的软件; 除了解线性规划问题之外;还加了非线性的求解器;另外有集的概念;可以用集操作函数方便写模型可以更方便的处理复杂的问题..3、说说对偶价格的含义当求目标函数的最大值时;增加的数量就是改进的数量;所以影子价格就等于对偶价格;当求目标函数的最小值时;改进的数量应该是减少的数量;所以影子价格即为负的对偶价格..影子价格又称影子利率..用线性规则方法计算出来的反映资源最优使用效果的价格..用微积分描述资源的影子价格;即当资源增加一个数量而得到目标函数新的最大值时;目标函数最大值的增量与资源的增量的比值;就是目标函数对约束条件即资源的一阶偏导数..用线性规划方法求解资源最优利用时;即在解决如何使有限资源的总产出最大的过程中;得出相应的极小值;其解就是对偶解;极小值作为对资源的经济评价;表现为影子价格..这种影子价格反映劳动产品、自然资源、劳动力的最优使用效果..另外一种影子价格用于效用与费用分析..广泛地被用于投资项目和进出口活动的经济评价..例如;把投资的影子价格理解为资本的边际生产率与社会贴现率的比值时;用来评价一笔钱用于投资还是用于消费的利亏;把外汇的影子价格理解为使市场供求均衡价格与官方到岸价格的比率;用来评价用外汇购买商品的利亏;使有限外汇进口值最大..因此;这种影子价格含有机会成本即替代比较的意思;一般人们称之为广义的影子价格..实验体会:通过这次实验熟悉了LINGO软件开发环境;并掌握LINGO语言的数学模型的结构;知道它在企业与决策过程中的重要..熟悉了LINGO工作界面;也了解了LINDO与LINGO的异同性;以及求解过程的注意..在做完这格试验后;我了解到;我们可以借助lingo软件将一些生产问题;进行合理的数学建模并得出理论上的最优解;但同时要求我们考虑到建模范围内的方方面面;一旦没有考虑到一个约束条件的话;得出的结论会大相径庭..通过实验;我收获很多;要善于将理论与实际结合;合理运用计算机软件解决实际问题..。
LINGO使用说明(比较简单)
@sum( xb1(j) : a(i,j)*x(j)) +c(i) <= b(i);
); 同时我们在E盘新建了一个名为DATA.XLS的EXCLE文件;关于 EXCLE的使用,这里不更多说明。需要指出的是‘ DA ’ , ‘ DB ’ , ‘ DC ’是EXCLE中对一系列单元格的命名,即先选中某个一维或多维单元格 区域,然后再在显示单元格行列坐标的文本框中写入对这个区域的命 名,再回车确认。这样就可以通过这个命名来控制访问EXCLE的数据 了。至于另一种操作方法请查找相关的help文件。 以上只是介绍了LINGO基本的知识,上面的程序未经调试,可能存 在一些问题!还有希望大家能尽可能使用help文件,在其中有着详细的 解答!
相应Lingo代码如下: @max( xb1( i ) : b( i )*c( i ) ) <=33 ;
同样MAX语句也可以用于多维变量。 4.MIN语句:
MIN语句的功能是从一组取值与下标有关的表达式中返回它们 的最小值。用法与MAX的相同。
三.EXCEL电子表格接口
在你解决一个模型的时候,或许会有大量的数据要整合到你的 代码中去,而这些数据大部分时候会被保存在电子表格中。而且 EXCEL也是用来处理你所得到的数据较好的一个选择。出于上述原
当你在windows下开始运行LINGO系统时,会得到类似下面的一个窗 口:
外层是主框架窗口,包含了所有菜单命令和工具条,其它所有的窗口将 被包含在主窗口之下。在主窗口内的标题为LINGO Model – LINGO1的 窗口是LINGO的默认模型窗口,建立的模型都都要在该窗口内编码实 现。 示例:求解线性规划问题:
Lingo的使用与编程
四舍五入、取整函数等 • 尽量使用线性模型,减少非线性约束和非线性变量的个数
– 如x/y <5 改为x<5y • 合理设定变量上下界,尽可能给出变量初始值 • 模型中使用的参数数量级要适当
需求量 35 37 22 32 41 32 43 38
拥有量
B1 B2 B3 B4 B5 B6 B7 B8
60 55 51 depot 43 41 52
A1
62674259
A2
49538582
A3
52197433
A4
76739271
A5
23957265
A6 5 5 2 2 8 1 4 3
capacity (i) V(i)
x 8 j1 ij
V
i
翻译成lingo语言即为:
@FOR( WAREHOUSES( I):@SUM( VENDORS( J): x( I, J))<=v( I));
SETS: WAREHOUSES/1..6/: v; VENDORS/1..8/: d; LINKS( WAREHOUSES, VENDORS): C, x; ENDSETS DATA: v = 60 55 51 43 41 52; d = 35 37 22 32 41 32 43 38; C=62674259 49538582 52197433 76739271 23957265 5 5 2 2 8 1 4 3; ENDDATA MIN = @SUM( LINKS( I, J): C( I, J) * x( I, J)); @FOR( VENDORS( J): @SUM( WAREHOUSES( I): x( I, J)) = d( J)); @FOR( WAREHOUSES( I): @SUM( VENDORS( J): x( I, J)) <= v( I)); END
lingo
集循环函数
集循环函数遍历整个集进行操作。其语法为: @function(setname[(set_index_list)[|conditional_qualifier]]:e xpression_list);
Lingo的四个集循环函数: @for(x()、@min():求最大值、最小值。
Lingo程序结构 Lingo程序结构
集合段,定义集合
数据段,输入数据
数据初始化段,赋 予数据初值
!目标函数; 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)); end
LINGO优化软件 LINGO优化软件
美国LINDO公司的主要产品: 公司的主要产品: 美国 公司的主要产品 LINDO: Linear INteractive and Discrete Optimizer (V6.1) LINGO: Linear INteractive General Optimizer (V10.0) LINDO API: LINDO Application Programming Interface (V5.0)
sets: product/A B/; machine/M N/; week/1..2/; allowed(product,machine,week):x; endsets 派生集成员:
定义了三个原 始集,allowed 为三个原始集 构成的派生集。 X为派生集的属 性。
(A,M,1) (A,M,2) (A,N,1) (A,N,2) 集成员按这个顺序排列。 (B,M,1) (B,M,2) (B,N,1) (B,N,2)
LINGO软件程序
LINGO软件程序程序一:MODEL:SETS:! Dynamic programming illustration (see Anderson, Sweeney & Williams, An Intro to Mgt Science,6th Ed.). We have a network of 10 cities. Wewant to find the length of the shortest routefrom city 1 to city 10.;! Here is our primitive set of ten cities, whereF( i) represents the shortest path distancefrom city i to the last city;CITIES /1..10/: F, CONPATH;! The derived set ROADS lists the roads thatexist between the cities (note: not all citypairs are directly linked by a road, and roadsare assumed to be one way.);ROADS( CITIES, CITIES)/1,2 1,3 1,42,5 2,6 2,73,5 3,6 3,74,5 4,65,8 5,96,8 6,97,8 7,98,10 9,10/: D, RONPATH;! D( i, j) is the distance from city i to j; ENDSETSDATA:! Here are the distances that correspond to theabove links;D =1 5 213 12 116 10 412 143 96 58 105 2;ENDDATA! If ou are already in last city, then the cost to travel to it is 0;F( @SIZE( CITIES)) = 0;! The following is the classic dynamic programmingrecursion. In words, the shortest distance fromCity i to last city is the minimum over allcities j reachable from i of the sum of thedistance from i to j plus the minimal distancefrom j to last city;@FOR( CITIES( i)| i #LT# @SIZE( CITIES):F( i) = @MIN( ROADS( i, j): D( i, j) + F( j)););! Set CONPATH( j) > 0 if city j is on any critical path,i.e., if going to j from some i on the critical path,still allows us to get to last city in optimal time;CONPATH( 1) = 1;@FOR( CITIES( j)| j #GT# 1:CONPATH( j) = @MAX( ROADS( i,j): CONPATH( i)*((F(I)-F( j) #EQ# D(i,j)))););! Set RONPATH(i,j) = 1 if arc i,j is on any critical path,i.e., both i and j are on path and (i,j) is shortest pathfrom i to j. Note, we do not assume distances satisfytriangle inequality;@FOR( ROADS(i,j): RONPATH(I,J) =@SMIN( CONPATH(i), CONPATH(j))*((F(i)-F( j)) #EQ# D(i,j)););END程序二:MODEL:! The Mexican Steel problem;SETS:! Steel plants;PLANT /AHMSA FUNDIDA SICARTSA HYLSA HYLSAP/:RD2, MUE;! Markets;MARKET / MEXICO MONTE GUADA /: DD, RD3, MUV;! Final products;CF /STEEL/: PV, PE, EB;! Intermediate products;CI / SPONGE PIGIRON/;! Raw materials;CR /PELLETS COKE NATGAS ELECTRIC SCRAP/ : PD;! Processes;PR /PIGIRON1 SPONGE1 STEELOH STEELEL STEELBOF/;! Productive units;UNIT / BLASTFUR OPENHEAR BOF DIRECT ELECARC/;! ;CRXP( CR, PR) : A1; CIXP( CI, PR) : A2;CFXP( CF, PR) : A3; UXP( UNIT, PR) : B;UXI( UNIT, PLANT) : K;PXM( PLANT, MARKET) : RD1, MUF;PXI( PR, PLANT) : Z;CFXPXM( CF, PLANT, MARKET) : X;CRXI( CR, PLANT) : U; CFXI( CF, PLANT) : E;CFXM( CF, MARKET) : D, V;ENDSETS! Demand equations;@FOR( CFXM( C, J):D( C, J) = 5.209 * ( 1 + 40/ 100) * DD( J)/100); ! Transport rate equations;@FOR( PXM( I, J)| RD1( I, J) #GT# 0:MUF( I, J) = 2.48 + .0084 * RD1( I, J));@FOR( PXM( I, J)| RD1( I, J) #LE# 0:MUF( I, J) = 0);@FOR( PLANT( I)| RD2( I) #GT# 0:MUE( I) = 2.48 + .0084 * RD2( I));@FOR( PLANT( I)| RD2( I) #LE# 0: MUE( I) = 0);@FOR( MARKET( J)| RD3( J) #GT# 0:MUV( J) = 2.48 + .0084 * RD3( J));@FOR( MARKET( J)| RD3( J) #LE# 0: MUV( J) = 0); ! For each plant I1;@FOR( PLANT( I1):! Sources >= uses, final products;@FOR( CF( CF1): [MBF]@SUM( PR( P1): A3( CF1, P1) * Z( P1, I1)) >=@SUM( MARKET( J1): X( CF1, I1, J1)) +E( CF1, I1));! Intermediate products;@FOR( CI( CI1): [MBI]@SUM( PR( P1): A2( CI1, P1) *Z( P1, I1)) >= 0);! Raw materials;@FOR( CR( CR1): [MBR]@SUM( PR( P1): A1( CR1, P1) *Z( P1, I1)) + U( CR1, I1) >= 0);! Capacity of each productive unit M1;@FOR( UNIT( M1): [CC]@SUM( PR( P1): B( M1, P1) * Z( P1, I1)) <=K( M1, I1)););! For each final product CF1;@FOR( CF( CF1):! Demand requirements for each market J1;@FOR( MARKET( J1): [MR]@SUM( PLANT(I1): X( CF1, I1, J1)) + V(CF1, J1) >= D( CF1, J1));! Upper limit on exports ;[ME] @SUM( PLANT( I1): E( CF1, I1)) <= EB( CF1); );! Components of objective;PHIPSI = @SUM( CR( CR1):@SUM( PLANT( I1): PD(CR1) * U(CR1, I1)));PHILAM = @SUM( CF( CF1):@SUM(PLANT(I1): @SUM(MARKET(J1):MUF(I1,J1)*X(CF1, I1, J1))) + @SUM( MARKET( J1):MUV( J1) * V( CF1, J1)) + @SUM( PLANT( I1):MUE( I1) * E( CF1, I1)));PHIPI = @SUM( CFXM( CF1, I1):PV( CF1) * V( CF1, I1));PHIEPS = @SUM( CFXP( CF1, I1):PE( CF1) * E( CF1, I1));[OBJROW] MIN = PHIPSI + PHILAM + PHIPI - PHIEPS; DATA:A1= -1.58, -1.38, 0, 0, 0,-0.63, 0, 0, 0, 0,0, -0.57, 0, 0, 0,0, 0, 0, -0.58, 0,0, 0, -0.33, 0, -0.12;A2= 1, 0, -0.77, 0, -0.95,0, 1, 0, -1.09, 0;A3= 0, 0, 1, 1, 1;B = 1 0 0 0 00 0 1 0 00 0 0 0 10 1 0 0 00 0 0 1 0;K = 3.25, 1.40, 1.10, 0, 0,1.50, 0.85, 0, 0, 0,2.07, 1.50, 1.30, 0, 0,0, 0, 0, 0.98, 1,0, 0, 0, 1.13, 0.56;RD1= 1204 218 11251017 0 1030819 1305 7041017 0 1030185 1085 760;RD2 = 739, 521, 0, 521, 315;RD3 = 428, 521, 300;PD = 18.7, 52.17, 14, 24, 105;PV = 150;PE = 140;EB = 1;DD = 55, 30, 15;ENDDATAEND程序三:MODEL:! The Vehicle Routing Problem (VRP);!************************************;! WARNING: Runtimes for this model ;! increase dramatically as the number;! of cities increase. Formulations ;! with more than a dozen cities ;! WILL NOT SOLVE in a reasonable ;! amount of time! ;!************************************;SETS:! Q(I) is the amount required at city I,U(I) is the accumulated delivers at city I ;CITY/1..8/: Q, U;! DIST(I,J) is the distance from city I to city J X(I,J) is 0-1 variable: It is 1 if some vehicle travels from city I to J, 0 if none;CXC( CITY, CITY): DIST, X;ENDSETSDATA:! city 1 represent the common depo;Q = 0 6 3 7 7 18 4 5;! distance from city I to city J is same from city J to city I distance from city I to the depot is 0, since the vehicle has to return to the depot;DIST = ! To City;! Chi Den Frsn Hous KC LA Oakl Anah From;0 996 2162 1067 499 2054 2134 2050!Chicago;0 0 1167 1019 596 1059 1227 1055!Denver;0 1167 0 1747 1723 214 168 250!Fresno;0 1019 1747 0 710 1538 1904 1528!Houston;0 596 1723 710 0 1589 1827 1579!K. City;0 1059 214 1538 1589 0 371 36!L. A.;0 1227 168 1904 1827 371 0 407!Oakland;0 1055 250 1528 1579 36 407 0;!Anaheim;! VCAP is the capacity of a vehicle ;VCAP = 18;ENDDATA! Minimize total travel distance;MIN = @SUM( CXC: DIST * X);! For each city, except depot....;@FOR( CITY( K)| K #GT# 1:! a vehicle does not traval inside itself,...;X( K, K) = 0;! a vehicle must enter it,... ;@SUM( CITY( I)| I #NE# K #AND# ( I #EQ# 1 #OR# Q( I) + Q( K) #LE# VCAP): X( I, K)) = 1;! a vehicle must leave it after service ;@SUM( CITY( J)| J #NE# K #AND# ( J #EQ# 1 #OR# Q( J) + Q( K) #LE# VCAP): X( K, J)) = 1;! U( K) is at least amount needed at K but can't exceed capacity;@BND( Q( K), U( K), VCAP);! If K follows I, then can bound U( K) - U( I);@FOR( CITY( I)| I #NE# K #AND# I #NE# 1:U( K) >= U( I) + Q( K) - VCAP + VCAP *( X( K, I) + X( I, K)) - ( Q( K) + Q( I))* X( K, I););! If K is 1st stop, then U( K) = Q( K);U( K) <= VCAP - ( VCAP - Q( K)) * X( 1, K);! If K is not 1st stop...;U( K)>= Q( K)+ @SUM( CITY( I)|I #GT# 1: Q( I) * X( I, K)););! Make the X's binary;@FOR( CXC: @BIN( X));! Minimum no. vehicles required, fractionaland rounded;VEHCLF = @SUM( CITY( I)| I #GT# 1: Q( I))/ VCAP;VEHCLR = VEHCLF + 1.999 -@WRAP( VEHCLF - .001, 1);! Must send enough vehicles out of depot;@SUM( CITY( J)| J #GT# 1: X( 1, J)) >= VEHCLR;END程序四:MODEL:MIN = 10 * W88 + 18 * W87 + 23 * W86 + 28 * W85 + 33 * W84 + 38 * W83 + 43 * W82 + 48 * W81 + 16 * W78 + 8 * W77 + 16 * W76 + 21 * W75 + 26 * W74 + 31 * W73 + 36 * W72 + 41 * W71 + 19 * W68 + 14 * W67 + 6 * W66 + 14 * W65 + 19 * W64 + 24 * W63 + 29 * W62 + 34 * W61 + 22 * W58 + 17 * W57 + 12 * W56 + 4 * W55 + 12 * W54 + 17 * W53 + 22 * W52 + 27 * W51 + 25 * W48 + 20 * W47 + 15 * W46 + 10 * W45 + 2 * W44 + 10 * W43 + 15 * W42 + 20 * W41 + 28 * W38 + 23 * W37 + 18 * W36 + 13 * W35 + 8 * W34 + 8 * W32 + 13 * W31 + 40 * W28 + 35 * W27 + 30 * W26 + 25 * W25 + 20 * W24 + 15 * W23 + 7 * W22 + 15 * W21 + 52 * W18 + 47 * W17 + 42 * W16 + 37 * W15 + 32 * W14 + 27 * W13 + 22 * W12 + 14 * W11;! Probabilities sum to 1;W88 + W87 + W86 + W85 + W84 + W83 + W82 + W81 + W78 + W77 + W76 + W75 + W74 + W73 + W72 + W71 + W68 + W67 + W66 + W65 + W64 + W63 + W62 + W61 + W58 + W57 + W56 + W55 + W54 + W53 + W52 + W51 + W48 + W47 + W46 + W45 + W44 + W43 + W42 + W41 + W38 + W37 + W36 + W35 + W34 + W33 + W32 + W31 + W28 + W27 + W26 + W25 + W24 + W23 + W22 + W21 + W18 + W17 + W16 + W15 + W14 + W13 + W12 + W11 = 1;! Prob{out of state 1}- Prob{ into state 1} = 0;- .4 * W82 - .5 * W81 - .4 * W72 - .5 * W71 - .4 * W62 - .5 * W61 - .4 * W52 - .5 * W51 - .4 * W42 - .5 * W41 - .4 * W32 - .5 * W31 - .4 * W22 - .5 * W21 + W18 + W17 + W16 + W15 + W14 + W13 + .6 * W12 + .5 * W11 = 0;! Into state 2;- .4 * W83 - .1 * W82 - .5 * W81 - .4 * W73 - .1 * W72 - .5 * W71 - .4 * W63 - .1 * W62 - .5 * W61 - .4 * W53 - .1 * W52 - .5 * W51 - .4 * W43 - .1 * W42 - .5 * W41 - .4 * W33 - .1 * W32 - .5 * W31 + W28 + W27 + W26 + W25 + W24 + .6 * W23 + .9 * W22 + .5 * W21 - .4 * W13 - .1 * W12 - .5 * W11 = 0;! Into state 3;- .4 * W84 - .1 * W83 - .5 * W82 - .4 * W74 - .1 * W73 - .5 * W72 - .4 * W64 - .1 * W63 - .5 * W62 - .4 * W54 - .1 * W53 - .5 * W52 - .4 * W44 - .1 * W43 - .5 * W42 + W38 + W37 + W36 + W35 + .6 * W34 + .9 * W33 + .5 * W32 + W31 - .4 * W24 - .1 * W23 - .5 * W22 - .4 * W14 - .1 * W13 - .5 * W12 = 0;! Into state 4;- .4 * W85 - .1 * W84 - .5 * W83 - .4 * W75 - .1 * W74 - .5 * W73 - .4 * W65 - .1 * W64 - .5 * W63 - .4 * W55 - .1 * W54 - .5 * W53 + W48 + W47 + W46 + .6 * W45 + .9 * W44 + .5 * W43 + W42 + W41 - .4 * W35 - .1 * W34 - .5 * W33 - .4 * W25 - .1 * W24 - .5 * W23 - .4 * W15 - .1 * W14 - .5 * W13 = 0;! Into state 5;- .4 * W86 - .1 * W85 - .5 * W84 - .4 * W76 - .1 * W75 - .5 * W74 - .4 * W66 - .1 * W65 - .5 * W64 + W58 + W57 + .6 * W56 + .9 * W55 + .5 * W54 + W53 + W52 + W51 - .4 * W46 - .1 * W45 - .5 * W44 - .4 * W36 - .1 * W35 - .5 * W34 - .4 * W26 - .1 * W25 - .5 * W24 - .4 * W16 - .1 * W15 - .5 * W14 =0;! Into state 6;- .4 * W87 - .1 * W86 - .5 * W85 - .4 * W77 - .1 * W76- .5 * W75 + W68 + .6 * W67 + .9 * W66 + .5 * W65 + W64 + W63 + W62 + W61 - .4 * W57 - .1 * W56 - .5 * W55 - .4 * W47 - .1 * W46 - .5 * W45 - .4 * W37 - .1 * W36 - .5 * W35 - .4 * W27 - .1 * W26 - .5 * W25 - .4 * W17 - .1 * W16 - .5 * W15 = 0;! Into state 7;- .4 * W88 - .1 * W87 - .5 * W86 + .6 * W78 + .9 * W77 + .5 * W76 + W75 + W74 + W73 + W72 + W71 - .4 * W68 - .1 * W67 - .5 * W66 - .4 * W58 - .1 * W57 - .5 * W56 - .4 * W48 - .1 * W47 - .5 * W46 - .4 * W38 - .1 * W37 - .5 * W36 - .4 * W28 - .1 * W27 - .5 * W26 - .4 * W18 - .1 * W17 - .5 * W16 = 0;!! Into state 8;.4 * W88 + .5 * W87 + W86 + W85 + W84 + W83 + W82 + W81 - .6 * W78 - .5 * W77 - .6 * W68 - .5 * W67 - .6 * W58 - .5 * W57 - .6 * W48 - .5 * W47 - .6 * W38 - .5 * W37 - .6 * W28 - .5 * W27 - .6 * W18 - .5 * W17 = 0;END程序五:MODEL:!Product pricing;!Producer chooses prices to maximize producer surplus;!Each customer chooses the one product/bundle that maximizes consumer surplus;SETS:CUST/ HOME STUD BUS/:SIZE, ! Each cust/market has a size;DISC, ! Discount off list price willing to give to I;DISD, ! Discount given to dealer(who sells full price);FM, ! Fixed cost of developing market I;YM, ! = 1 if we develop market I, else 0;SRP; ! Consumer surplus achieved by customer I;BUNDLE/ B1 B2 B3 B12 B13 B23 B123/:COST, ! Each product/bundle has a cost/unit to producer;FP, ! Fixed cost of developing product J;YP, ! = 1 if we develop product J, else 0;PRICE, ! List price of product J;PMAX; ! Max price that might be charged;CXB( CUST, BUNDLE): RP, ! Reservation price of customer I for product J;EFP, ! Effective price I pays for J, = 0 if not bought;X; ! = 1 if I buys J, else 0;ENDSETSDATA:! Reservation prices;RP = 400 50 200 450 650 250 700200 200 50 350 250 250 400500 100 100 550 600 260 600;! Variable costs of each product;COST = 100 20 30 120 130 50 150;! Fixed product development costs;FP = 30000 40000 60000 10000 20000 8000 0;! Customer sizes;SIZE = 4000 3000 3000;! Fixed market development costs;FM = 15000 12000 10000;! Discount off list price to each customer, 0 <= DISC < 1;DISC = 0 .1 0;! Discount/tax off list to each dealer, 0 <= DISD < 1;DISD = .05 0 0;ENDDATA!-------------------------------------------------;! The seller wants to maximize the profit contribution; [PROFIT] MAX =@SUM( CXB( I, J):SIZE( I) * EFP( I, J) ! Revenue;- COST( J)* SIZE( I) * X( I, J)! Variable cost;- EFP( I, J) * SIZE( I) * DISD( I))! Discount to dealers;- @SUM( BUNDLE: FP * YP)! Product development cost;- @SUM( CUST: FM * YM);! Market development cost;! Each customer can buy at most 1 bundle;@FOR( CUST( I):@SUM( BUNDLE( J) : X( I, J)) <= YM( I);@BIN( YM( I)););! Force development costs to be incurred...;@FOR( CXB( I, J): X( I, J) <= YP( J);! for product J;! The X's are binary, yes/no, 1/0 variables;@BIN( X( I, J)););! Compute consumer surplus for customer I;@FOR( CUST( I): SRP( I)= @SUM( BUNDLE( J): RP( I, J) * X( I, J)- EFP( I, J));! Customer chooses maximum consumer surplus;@FOR( BUNDLE( J):SRP( I) >= RP( I, J)- ( 1 - DISC( I)) * PRICE( J)););! Force effective price to take on proper value;@FOR( CXB( I, J):! zero if I does not buy J;EFP( I, J) <= X( I, J) * RP( I, J);! cannot be greater than price;EFP( I, J) <= ( 1 - DISC( I)) * PRICE( J);! cannot be less than price if bought;EFP( I, J) >= ( 1 - DISC( I))* PRICE( J)- ( 1 - X( I, J))* PMAX( J););! Compute upper bounds on prices;@FOR( BUNDLE( J): PMAX( J)= @MAX( CUST( I): RP( I, J)/(1 - DISC( I))););END程序六:MODEL:! (STEINERT);!Given a set of nodes, the distance between them, and a specified subset of the nodes, find the set of links so that the total distance is minimized, and there is a (unique) path between every pair of nodes in the specified subset. This is called a Steiner tree problem;SETS:ALLNODE / A B C D E F G H I J K/: U;! U( I) = level of node I in the tree;! U( 1) = 0;! The subset of nodes that must be connected. The first node must be a must-do node;MUSTNOD( ALLNODE)/ A B C D E/;LINK( ALLNODE, ALLNODE):DIST, ! The distance matrix;X; ! X( I, J) = 1 if we use link I, J;ENDSETSDATA: ! Distance matrix need not be symmetric;! A B C D E F G H I J K;DIST =0 14 999 999 999 4 999 999 999 999 99914 0 999 999 999 999 999 3 999 999 999999 999 0 9 999 999 999 999 2 999 999999 999 9 0 999 999 999 999 999 3 6999 999 999 999 0 999 999 5 999 999 34 999 999 999 999 0 999 999 3 999 999999 999 999 999 999 999 0 2 999 3 999999 3 999 999 5 999 2 0 999 999 999999 999 2 999 999 3 999 999 0 8 999999 999 999 3 999 999 3 999 8 0 999999 999 999 6 3 999 999 999 999 999 0;ENDDATA!-----------------------------------------------;! The model size: Warning, may be slow for N > 8;N = @SIZE( ALLNODE);! Objective is minimize total distance of links;MIN = @SUM( LINK: DIST * X);! For each must-do node K, except the base, ... ;@FOR( MUSTNOD( K)| K #GT# 1:! It must be entered;@SUM( ALLNODE( I)| I #NE# K: X( I, K)) = 1;! Force U(J)=number arcs between node J and node 1. Note: This is not very strong for large problems;@FOR( ALLNODE( 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); ););! There must be an arc out of node 1;@SUM( ALLNODE( J)| J #GT# 1: X( 1, J)) >= 1;!If an arc out of node J, there must be an arc in;@FOR( ALLNODE( J)| J #GT# 1:@FOR( ALLNODE( K)| K #NE# J:@SUM( ALLNODE( I)| I #NE# K #AND# I #NE# J:X( I, J)) >= X( J, K);); );! Make the X's 0/1;@FOR( LINK: @BIN( X); );! Level of a node except the base is at least 1, no more than N-1, and is 1 if link to the base;@FOR( ALLNODE( K)| K #GT# 1:@BND( 1, U( K), 999999);U( K) < N - 1 - ( N - 2) * X( 1, K); );END。
Lingo程序
最近在编写一个用DEA模型评价几家医院效率的Lingo程序,因为是新手,参考了一些其他程序,但是自己还是搞不出来,苦恼中....,请教各位高手,帮忙看看怎么改正,运行的时候,系统总是提示1017错误,ERROR TEXT:Unexpected Jacobian overflow, contact Lindo systems for patch availability.我用的是Lingo9.0,谢谢了!模型用向量表达是这样的:min h。
h。
表示第。
家医院的效率S.T. YW>=Y。
XW<=h。
X。
eW=1. 权重W的和等于1.W>=0.我编的模型是这样的:model:sets:DMU/1..4/:H,W; ! 4 decision making unit,H是4个DMU的效率值,W是4个DMU的权重;II/1..3/; ! 3 inputs;OI/1..4/; ! 4 outputs;IV(II,DMU):X; ! inputs matrix X;OV(OI,DMU):Y; ! outputs matrix Y;endsetsdata:X=285 123 106 !input data X;162 128 64275 348 104210 154 104;Y=48 43 253 41 !output data Y;34 27 148 2736 45 175 2333 56 160 84;enddatamin=H; !目标是4个H最小化;@for(DMU(n):@for(II(j) sum(DMU(t):W(t)*X(t,j))<=H*X(n,j)); !inputs congditions;@for(OI(i) sum(DMU(t):W(t)*Y(t,i))>=Y(n,i)) !outputs congditions;);@sum(DMU(n):W(n))=1; !scale efficiency condition;end1] sets:2] DMU/1..21/:S,T,P; ! Decision Making Unit;3] II/1/:w; ! Input Index;4] OI/1..11/:u; ! Output Index;5] IV(II,DMU):X; ! Input Variable;6] OV(OI,DMU):Y; ! Output Variable;7] endsets8] data:9] p=(1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0);10]X=5533.72 3029.54 6183.25 2999.95 6206.32 7484.22 8909.77 2732.06 2497.32 3662.31 2956.09 3272.09 3204.73 3043.49 2748.25 5142.15 3137.34 2758.55 22672.75 12085.89 4206.85;11]Y=41253 23613 43959 16698 25335 20053 12313 14498 18022 22490 13212 18586 19499 15588 14623 18881 8717 16644 14662 11659 1756030291.64 11948.11 27240.53 10915.13 16627.77 17793.02 19329.71 15233.70 9476.91 15761.74 10458.03 14246.10 11945.66 11963.18 10997.07 24596.55 7694.88 10944.88 40312.57 19332.42 14571.148205 5762.2 6292.5 5388.5 6485.8 5940 4035.5 5389.9 5503.8 5613 4814.3 5942.5 5609.7 5377.2 5084 5180.8 3847.2 5552.1 3741.2 2743.8 4565.46.36 5.19 5.75 4.407.23 6.718.07 6.45 6.38 7.46 5.12 6.715.24 4.41 4.576.75 4.18 5.427.89 6.17 4.506.68 5.70 6.73 5.18 6.37 6.05 5.70 6.71 6.03 6.47 5.83 5.77 5.87 5.04 5.16 6.24 4.25 6.48 6.54 6.21 4.9049 39 60 32 39 43 48 32 3442 32 32 38 29 28 48 28 36 3427 2784 62 86 50 55 60 68 51 5057 49 51 50 46 49 57 47 53 61 64 4214.46 21.62 36.56 28.66 20.63 33.33 60.19 25.58 26.05 26.8831.00 24.01 29.69 29.26 33.63 37.33 41.85 32.45 131.61 218.91 47.260.90 0.60 0.72 0.55 0.80 0.75 0.53 0.78 0.70 0.67 0.69 1.03 0.51 0.55 0.53 0.78 0.50 0.62 0.31 0.31 0.360.25 0.19 0.34 0.11 0.21 0.15 0.13 0.13 0.14 0.24 0.10 0.13 0.12 0.10 0.11 0.13 0.07 0.13 0.08 0.05 0.050.42 0.29 0.51 0.19 0.28 0.24 0.27 0.19 0.20 0.28 0.22 0.20 0.20 0.22 0.20 0.20 0.16 0.19 0.22 0.17 0.11 ;12]enddata13]max=@sum(DMU:P*T);14]@for(DMU(j));15]S(j)=@sum(II(i): w(i)*X(i,j));16]T(j)=@sum(OI(i): u(i)*Y(i,j));17]S(j)>=T(j);18]@sum(DMU: P*S)=1;END一个LINGO的通用程序1] sets:2] DMU/1..6/:S,T,P; ! Decision Making Unit;3] II/1..2/:w; ! Input Index;4] OI/1..2/:u; ! Output Index;5] IV(II,DMU):X; ! Input Variable;6] OV(OI,DMU):Y; ! Output Variable;7] endsets8] data:9] p=?;10]X=具体数字;11]Y=具体数字;12]enddata13]max=@sum(DMU:P*T);14]@for(DMU(j));15]S(j)=@sum(II(i): w(i)*X(i,j));16]T(j)=@sum(OI(i): u(i)*Y(i,j));17]S(j)>=T(j);18]@sum(DMU: P*S)=1;END通常情况下直接输入就行,我做的东西有300多个数据,先从excel按列粘到txt上,整理好格式,然后粘到LINDO 上运行就好。
如何编写一个LINGO 9.0程序
一、如何编写一个LINGO 9.0程序1、编写双击LINGO图标,启动软件,屏幕上显示LINGO的初始用户界面。
光标所在的窗口称为模型窗口(model window),用来供用户输入优化模型(LINGO程序)。
输入结束后,从莱单中选择File/Save(F5)命令把它保存在一个文件中,默认的后缀名为lg4,即LINGO程序的二进制文件。
保存的文件将来可以用File/Open(F3)重新打开进行修改。
2、运行从莱单中选择LINGO/Solve(Ctrl+S)命令运行程序。
用鼠标选择主莱单中Window/Reports Window,这就是最终结果的报告窗口。
二、如何编写一个简单的LINGO程序说明:(1)在模型窗口中输入一个LINGO程序,以“MODEL:”开始,以“END”结束。
对简单的模型,这两个语句也可以省略。
(2)目标函数的表达方式是“MAX=”或“MIN=”,约束条件的S.T不要写出。
(3)决策变量的变量名由字母和数字组成,但必须以字母开头,且长度不超过32个字符。
不区分大小写字母(包括LINGO本身的关键字,如MAX、MIN、END)。
(4)每行可以用行号(行名)进行标识,行名写法和变量名一样,行号用数字前带下划线表示,以方括号“[ ]”为行号(行名)的首尾,位于目标函数或每一个约束条件的开头。
如果用户没有指定行号(行名),系统会自动产生行号,将目标函数所在行作为第一行,从第二行起为约束条件。
(5)注释语句用“!”开头,单独一个语句。
(6)变量与其系数间用“*”连接。
(7)每个语句(目标函数、约束条件和说明语句)结束用“;”,允许一行写多个语句,但最好一行只写一个语句。
(8)LINGO假定所有变量非负,可以用命令“@FREE(变量名)”取消变量的非负假定。
(9)用命令“@BND(下界,变量名,上界)”设置变量的上界和下界。
(10)一般整数变量可用“@GIN(变量名)”来标识,0-1型变量可用“@BIN(变量名)”来标识。
多目标规划的LINGO求解法
多目标规划的LINGO求解法吴有平;刘杰;何杰【摘要】As the solution on multi-objective programming is excessively cumbersome and the result is unsatisfactory by the method of "Making It Fewer" at present,proposes a solution which diverting the ideal objective into the realistic objective or constraints,and then solving it by LINGO software.And gives two examples of analysis and solving process.It shows that the method is simple and optimal comparing to conventional method.%针对目前用"化多为少法"求解多目标规划问题时,计算过程繁琐或结果不理想的现状,提出了将理想目标转换为现实目标或约束,再用LINGO软件求解的方法。
给出了2个实例的分析与求解过程,结果表明,与传统方法相比,该方法过程简单结果也较优。
【期刊名称】《湖南工业大学学报》【年(卷),期】2012(026)003【总页数】4页(P9-12)【关键词】多目标规划;LINGO;理想目标;现实目标【作者】吴有平;刘杰;何杰【作者单位】湖南工业大学土木工程学院,湖南株洲412007 湖南省建筑工程集团总公司,湖南长沙410004;湖南工业大学土木工程学院,湖南株洲412007;湖南工业大学土木工程学院,湖南株洲412007【正文语种】中文【中图分类】O221.60 引言多目标规划(multiple objectives programming)是数学规划的一个分支,它研究多个目标函数在给定区域上的最优化问题,又称多目标最优化。
lingo解决线性规划问题的程序(经典)
Lingo12软件培训教案Lingo 主要用于求解线性规划,整数规划,非线性规划,V10以上版本可编程。
例1 一个简单的线性规划问题0 ,600 2100350 st.3 2max >=<=+=<<=++=y x y x x y x y x z !exam_1.lg4 源程序max = 2*x+3*y;[st_1] x+y<350;[st_2] x<100;2*x+y<600; !决策变量黙认为非负; <相当于<=; 大小写不区分当规划问题的规模很大时,需要定义数组(或称为矩阵),以及下标集(set) 下面定义下标集和对应数组的三种方法,效果相同::r1 = r2 = r3, a = b = c. sets :r1/1..3/:a;r2 : b;r3 : c;link2(r1,r2): x;link3(r1,r2,r3): y;endsetsdata :ALPHA = 0.7;a=11 12 13 ;r2 = 1..3;b = 11 12 13;c = 11 12 13;enddata例2 运输问题解: 设决策变量ij x = 第i 个发点到第j 个售点的运货量,i =1,2,…m; j =1,2,…n; 记为ij c =第i 个发点到第j 个售点的运输单价,i =1,2,…m; j =1,2,…n 记i s =第i 个发点的产量, i =1,2,…m; 记j d =第j 个售点的需求量, j =1,2,…n. 其中,m = 6; n = 8.设目标函数为总成本,约束条件为(1)产量约束;(2)需求约束。
于是形成如下规划问题:nj m i x n j d xm i s x x c ij j n i ij i mj ij m i nj ij ij ,...,2,1,,...,2,1,0 ,...,2,1,,...,2,1, st.z min 1111==>=<==<==∑∑∑∑====把上述程序翻译成LINGO 语言,编制程序如下:!exam_2.lg4 源程序model : !6发点8收点运输问题;sets :rows/1..6/: s; !发点的产量限制;cols/1..8/: d; !售点的需求限制;links(rows,cols): c, x; !运输单价,决策运输量;endsets!-------------------------------------;data:s = 60,55,51,43,41,52;d = 35 37 22 32 41 32 43 38;c = 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;enddata!------------------------------------;min = @sum(links: c*x); !目标函数=运输总成本;@for(rows(i):@sum(cols(j): x(i,j))<=s(i) ); ! 产量约束;@for(cols(j):@sum(rows(i): x(i,j))=d(j) ); !需求约束;end例3把上述程序进行改进,引进运行子模块和打印运算结果的语句:!exam_3.lg4 源程序model: !6发点8收点运输问题;sets:rows/1..6/: s; !发点的产量限制;cols/1..8/: d; !售点的需求限制;links(rows,cols): c, x; !运输单价,决策运输量; endsets!==================================;data:s = 60,55,51,43,41,52;d = 35 37 22 32 41 32 43 38;c = 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;enddata!==================================;submodel transfer:min = cost; ! 目标函数极小化;cost = @sum(links: c*x); !目标函数:运输总成本;@for(rows(i):@sum(cols(j): x(i,j)) < s(i) ); ! 产量约束;@for(cols(j):@sum(rows(i): x(i,j)) > d(j) ); !需求约束;endsubmodel!==================================;calc:@solve(transfer); !运行子模块(解线性规划);@divert('transfer_out.txt');!向.txt文件按自定格式输出数据;@write('最小运输成本=',cost,@newline(1),'最优运输方案x=');@for(rows(i):@write(@newline(1));@writefor(cols(j): ' ',@format(x(i,j),'3.0f') ) );@divert(); !关闭输出文件;endcalcend打开transfer_out.txt文件,内容为:最小运输成本=664最优运输方案x=0 19 0 0 41 0 0 01 0 0 32 0 0 0 00 11 0 0 0 0 40 00 0 0 0 0 5 0 3834 7 0 0 0 0 0 00 0 22 0 0 27 3 0例4data段的编写技巧(1):从txt文件中读取原始数据!exam_3.lg4 源程序中的data也可以写为:data:s = @file('transfer_data.txt');d = @file('transfer_data.txt');c = @file('transfer_data.txt');enddata其中,transfer_data.txt的内容为:!transfer.lg4程序的数据;!产量约束s= ;60,55,51,43,41,52 ~!需求约束d= ;35 37 22 32 41 32 43 38 ~!运输单价c= ;6 2 67 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 ~!注:字符~是数据分割符,若无此符,视所有数据为一个数据块,只赋给一个变量;例5lingo程序的的3种输入和3种输出方法;!exam_5.lg4的源程序;sets:rows/1..3/: ;cols/1..4/: ;link(rows,cols): a, b, mat1, mat2;endsetsdata:b = 1,2,3,45,6,7,89,10,11,12; !程序内输入;a = @file('a.txt'); !外部txt文件输入;mat1 = @ole('d:\lingo12\data.xls',mat1); !EXcel文件输入;enddatacalc:@text('a_out.txt') = a; !列向量形式输出数据;@for(link: mat2 = 2*mat1);@ole('d:\lingo12\data.xls') = mat2 ;!把mat2输出到xls文件中的同名数据块;!向.txt文件按自定格式输出数据(参照前例);Endcalc例6程序段中的循环和选择结构举例!exam_6.lg4的源程序;sets:rows/1..5/:;cols/1..3/:;links(rows,cols):d;endsetsdata:d=0 2 34 3 21 3 24 7 22 1 6;enddatacalc:i=1;@while(i#le#5:a = d(i,1);b = d(i,2);c = d(i,3);@ifc(a#eq#0:@write('infeasible!',@newline(1));@elsedelta = b^2-4*a*c;sqrt = @sqrt(@if(delta#ge#0, delta,-delta));@ifc(delta#ge#0:@write('x1=',(-b+sqrt)/2/a,'x2=',(-b-sqrt)/2/a,@newline(1));@else@write('x1=',-b/2/a,'+',sqrt/2/a,'i','x2=',-b/2/a,'-',sqrt/2/a,'i',@newline(1));););i=i+1;);endcalc本程序中的循环结构也可以用@for(rows(i): 程序体);进行计算。
LINGO 程序范例
线性规划——LINGO程序集向浩2011-7-20 程序一:Model:Max= 4.8*x11 + 4.8*x21 + 5.6*x12 + 5.6*x22 - 10*x1 - 8*x2 - 6*x3;x11+x12 < x + 500;x21+x22 < 1000;0.5*x11 - 0.5*x21 > 0;0.4*x12 - 0.6*x22 > 0;x=x1+x2+x3;(x1 - 500) * x2=0;(x2 - 500) * x3=0;@bnd(0,x1, 500);@bnd(0,x2, 500);@bnd(0,x3,500);End程序二:Model:SETS:Points/1..4/: b, c, y, z; ! 端点数为4,即分段数为3;ENDSETSDATA:b=0 500 1000 1500;c=0 5000 9000 12000;y=,,,0; ! 增加的虚拟变量y(4)=0;ENDDATAMax= 4.8*x11 + 4.8*x21 + 5.6*x12 + 5.6*x22 - @sum(Points: c*z);x11+x12 < x + 500;x21+x22 < 1000;0.5*x11 - 0.5*x21 > 0;0.4*x12 - 0.6*x22 > 0;@sum(Points: b*z)=x;@for(Points(i)|i#eq#1: z(i) <= y(i));@for(Points(i)|i#ne#1: z(i) <= y(i-1)+y(i));@sum(Points: y)=1;@sum(Points: z)=1;@for(Points: @bin(y));End程序三:MODEL:TITLE 瓶颈设备的多级生产计划;! 从文本文件exam0502.LDT中读取数据;SETS:! PART = 项目集合, Setup = 生产准备费,Hold = 单件库存成本,A = 对瓶颈资源的消耗系数;PART/ @FILE( 'F:\lindo\lindo书\ch05\exam0502.LDT')/ : Setup, Hold, A; ! TIME = 计划期集合,Capacity = 瓶颈设备的能力;TIME / @FILE( 'F:\lindo\lindo书\ch05\exam0502.LDT')/ : Capacity;! USES = 项目结构关系,Req = 项目之间的消耗系数;USES( PART, PART) : Req;! PXT = 项目与时间的派生集合,Demand = 外部需求,X = 产量(批量), Y = 0/1变量,INV = 库存;PXT( PART, TIME): Demand, X, Y, Inv;ENDSETS! 目标函数;[OBJ] Min = @sum(PXT(i,t):setup(i)*Y(i,t) + hold(i)*Inv(i,t) );! 物流平衡方程;@FOR( PXT(i, t) | t #NE# 1 : [Bal]Inv(i,t-1)+X(i,t)-Inv(i,t) = Demand(i, t) +@SUM( USES(i,j): Req(i,j)*X(j,t)) );@FOR( PXT(i, t) | t #eq# 1 : [Ba0]X(i,t)-Inv(i,t) = Demand(i, t) +@SUM( USES(i,j): Req(i,j)*X(j,t)) );! 能力约束;@FOR( TIME(t):[Cap] @SUM( PART(i): A(i)*X(i,t) ) < Capacity(t) );! 其他约束;M = 25000;@FOR( PXT(i,t): X(i,t) <= M*Y(i,t));@FOR( PXT: @BIN(Y) );DATA:Demand = @FILE( 'F:\lindo\lindo书\ch05\exam0502.LDT');Capacity = @FILE( 'F:\lindo\lindo书\ch05\exam0502.LDT');Setup = @FILE( 'F:\lindo\lindo书\ch05\exam0502.LDT');Hold = @FILE( 'F:\lindo\lindo书\ch05\exam0502.LDT');A = @FILE( 'F:\lindo\lindo书\ch05\exam0502.LDT');Req = @FILE( 'F:\lindo\lindo书\ch05\exam0502.LDT');ENDDATA程序四:model:Title 钢管下料- 最小化钢管根数的LINGO模型;SETS:NEEDS/1..4/:LENGTH,NUM;! 定义基本集合NEEDS及其属性LENGTH,NUM;CUTS/1..3/:X;! 定义基本集合CUTS及其属性X;PATTERNS(NEEDS,CUTS):R;! 定义派生集合PATTERNS(这是一个稠密集合)及其属性R; ENDSETSDATA:LENGTH=4 5 6 8;NUM=50 10 20 15;CAPACITY=19;ENDDATAmin=@SUM(CUTS(I): X(I) );!目标函数;@FOR(NEEDS(I): @SUM(CUTS(J): X(J)*R(I,J) ) >NUM(I) );!满足需求约束;@FOR(CUTS(J): @SUM(NEEDS(I): LENGTH(I)*R(I,J) ) <CAPACITY ); !合理切割模式约束;@FOR(CUTS(J): @SUM(NEEDS(I): LENGTH(I)*R(I,J) ) >CAPACITY -@MIN(NEEDS(I):LENGTH(I)) );!合理切割模式约束;@SUM(CUTS(I): X(I) ) >26; @SUM(CUTS(I): X(I) ) <31;!人为增加约束;@FOR(CUTS(I)|I#LT#@SIZE(CUTS):X(I)>X(I+1) );!人为增加约束;@FOR(CUTS(J): @GIN(X(J)) ) ;@FOR(PATTERNS(I,J): @GIN(R(I,J)) );end程序五:model:Title 面试问题;SETS:! Person = 被面试者集合,Stage = 面试阶段的集合; Person/@FILE(exam0505.txt)/;Stage/@FILE(exam0505.txt)/;! T = 已知的面试所需要的时间,X = 面试开始时间;PXS(Person,Stage): T, X;! Y(i,k) = 1: k排在i前,0:否则;PXP(Person,Person)|&1 #LT# &2: Y;ENDSETSDATA:T=@FILE(exam0505.txt);ENDDATA[obj] min =MAXT;! MAXT是面试的最后结束时间;MAXT >= @max(PXS(i,j)|j#EQ#@size(stage): x(i,j)+t(i,j));只有参加完前一个阶段的面试后才能进入下一个阶段;!@for(PXS(i,j)|j #LT# @size(stage): [ORDER] x(i,j) + t(i,j) < x(i,j+1) ); 同一时间只能面试1名同学;!@for(Stage(j):@for(PXP(i,k): [SORT1] x(i,j) + t(i,j) - x(k,j) < MAXT*Y(i,k) );@for(PXP(i,k): [SORT2] x(k,j) + t(k,j) - x(i,j) < MAXT*(1-Y(i,k)) ); );@for(PXP: @bin(y));End程序六:MODEL:TITLE 飞机定位模型3;SETS:VOR/1..3/: x, y, cita, sigma,alpha;ENDSETSDATA:x, y, cita, sigma =746 1393 2.81347 0.0140629 375 0.78714 0.01051571 259 5.39307 0.0227;x4 y4 d4 sigma4 = 155 987 864.3 2.0;ENDDATAINIT:xx, yy = 980.6926, 731.5666;ENDINIT! XX,YY表示飞机坐标;@for(vor: @tan(alpha)=(xx-x)/(yy-y) );min = @sum(VOR: ((alpha - cita)/sigma)^2 )+ ((d4 - ((xx-x4)^2+(yy-y4)^2)^.5 )/sigma4 )^2;END程序七:MODEL:TITLE 交通流均衡;SETS:ROAD/AB,AC,BC,BD,CD/:Y;CAR/2,3,4/;LINK(CAR,ROAD): T, X;ENDSETSDATA:! 行驶时间(分钟) ;! T=20,52,12,52,2030,53,13,53,3040,54,14,54,40;! 增加的总行驶时间(千辆车*分钟) ;T= 20 52 12 52 2050 55 15 55 5070 57 17 57 70;ENDDATA[OBJ] MIN=@SUM(LINK: T*X); ! 目标函数;! 四个节点的流量守恒条件;[NODE_A] Y(@INDEX(AB))+Y(@INDEX(AC)) = 6;[NODE_B] Y(@INDEX(AB))=Y(@INDEX(BC))+Y(@INDEX(BD)); [NODE_C] Y(@INDEX(AC))+Y(@INDEX(BC))=Y(@INDEX(CD)); [NODE_D] Y(@INDEX(BD))+Y(@INDEX(CD))=6;! 每条道路上的总流量Y等于该道路上的分流量X的和; @FOR( ROAD(I):[ROAD_LIM] @SUM(CAR(J): X(J,I)) = Y(I) );! 每条道路的分流量X的上下界设定;@FOR(LINK(I,J)|I#EQ#1: @BND(0,X(I,J),2) );@FOR(LINK(I,J)|I#GT#1: @BND(0,X(I,J),1) );END程序八:MODEL:Title 简单的投资组合模型;SETS:YEAR/1..12/;STOCKS/ A, B, C/: Mean,X;link(YEAR, STOCKS): R;STST(Stocks,stocks): COV;ENDSETSDATA:TARGET = 1.15;! R是原始数据;R =1.300 1.225 1.1491.103 1.290 1.2601.216 1.216 1.4190.954 0.728 0.9220.929 1.144 1.1691.056 1.107 0.9651.038 1.321 1.1331.089 1.305 1.7321.090 1.195 1.0211.083 1.390 1.1311.035 0.928 1.0061.176 1.715 1.908;ENDDATACALC: !计算均值向量Mean与协方差矩阵COV;@for(stocks(i): Mean(i) =@sum(year(j): R(j,i)) / @size(year) );@for(stst(i,j): COV(i,j) = @sum(year(k):(R(k,i)-mean(i))*(R(k,j)-mean(j))) / (@size(year)-1) ); ENDCALC[OBJ] MIN = @sum(STST(i,j): COV(i,j)*x(i)*x(j));[ONE] @SUM(STOCKS: X) = 1;[TWO] @SUM(stocks: mean*x) >= TARGET;END程序九:MODEL:Title 含有国库券的投资组合模型;SETS:STOCKS/ A, B, C, D/: Mean,X;STST(Stocks,stocks): COV;ENDSETSDATA:TARGET = 1.1; ! 1.15;! Mean是收益均值,COV是协方差矩阵;mean=1.089083 1.213667 1.234583 1.05;COV=0.01080754 0.01240721 0.01307513 00.01240721 0.05839170 0.05542639 00.01307513 0.05542639 0.09422681 00 0 0 0; ENDDATA[OBJ] MIN = @sum(STST(i,j): COV(i,j)*x(i)*x(j));[ONE] @SUM(STOCKS: X) = 1;[TWO] @SUM(stocks: mean*x) >= TARGET;END程序十:MODEL:Title 考虑交易费的投资组合模型;SETS:STOCKS/ A, B, C/: C,Mean,X,Y,Z;STST(Stocks,stocks): COV;ENDSETSDATA:TARGET = 1.15;! 股票的初始份额;c=0.5 0.35 0.15;! Mean是收益均值,COV是协方差矩阵;mean=1.089083 1.213667 1.234583;COV=0.01080754 0.01240721 0.013075130.01240721 0.05839170 0.055426390.01307513 0.05542639 0.09422681; ENDDATA[OBJ] MIN = @sum(STST(i,j): COV(i,j)*x(i)*x(j)); [ONE] @SUM(STOCKS: X+0.01*Y+0.01*Z) = 1; [TWO] @SUM(stocks: mean*x) >= TARGET;@FOR(stocks: [ADD] x = c - y + z);END程序十一:MODEL:Title 利用股票指数简化投资组合模型;SETS:STOCKS/A, B, C/: u, b, s2, x;ENDSETSDATA:! mean0,s20,u,b,s2是线性回归的结果数据;mean0=1.191458;s20 = 0.02873661;s2 = 0.005748320,0.01564263,0.03025165;u = 0.5639761, -0.2635059,-0.5809590;b = 0.4407264, 1.239802, 1.523798; ENDDATA[OBJ] MIN = s20*y*y + @sum(stocks: s2*x*x);![OBJ] MIN = s20*@sqr(y) + @sum(stocks: s2*@sqr(x)); @sum(stocks: b*x)=y;@sum(stocks: x)=1;@sum(stocks: (u+b*mean0)*x)>1.15;END程序十二:MODEL:TITLE 新产品的市场预测;SETS:PROD/ A B C D/: P;LINK(PROD, PROD): T;ENDSETSDATA: ! 转移概率矩阵;T = .75 .1 .05 .1.4 .2 .1 .3.1 .2 .4 .3.2 .2 .3 .3;ENDDATA@FOR(PROD(I)| I #LT# @SIZE(PROD):!去掉了一个冗余约束;P(I)=@SUM(LINK(J,I): P(J)* T(J,I)) );@SUM(PROD: P) = 1;@FOR(PROD(I):@WARN( '输入矩阵的每行之和必须是1',@ABS( 1 - @SUM(LINK(I,J): T(I,J)))#GT# .000001); );END程序十三:MODEL:TITLE 产品属性的效用函数;SETS:PRICE /H, M, L/ : P;SAFETY/2, 1, 0/ : Q;M(safety, PRICE) : C0;MM(M, M)|C0(&1,&2) #LT# C0(&3,&4): ERROR; ENDSETSDATA:C0 = 7 8 9 3 4 6 1 2 5; ENDDATA@FOR( MM( i, j, k, l): ERROR( i, j, k, l) >=1 + ( P( j) + Q( i)) - ( P( l) + Q( k)) );[obj] MIN = @SUM(mm: ERROR);END程序十四:MODEL:TITLE 最小二乘法计算产品属性的效用函数; SETS:PRICE /H, M, L/ : P;SAFETY/2, 1, 0/ : Q;M(safety, PRICE) : C0, ERROR, sort; ENDSETSDATA:C0 = 7 8 9 3 4 6 1 2 5; ENDDATA@FOR(M(i,j):sort(i,j)=p(j)+q(i);ERROR(i,j)= sort(i,j) -C0(i,j) );MIN = @SUM(M: @sqr(ERROR) );![obj] MIN = @SUM(M: ERROR^2 );@FOR(M(i,j): @FREE(ERROR) );!@FOR(price: @gin(P) );!@FOR(safety: @gin(Q) );END程序十五:MODEL:TITLE 机票销售计划;SETS:route /AH,AB,AC,HB,HC/:a,b,p,q,x,y; ENDSETSDATA:; c1 c2 c3 = 120 100 110;ENDDATA[obj] Max = @SUM(route: p*x+q*y );@SUM(route(i)|i#ne#4#and#i#ne#5:x(i)+y(i)) < c1; @SUM(route(i)|i#eq#2#or#i#eq#4:x(i)+y(i)) < c2; @SUM(route(i)|i#eq#3#or#i#eq#5:x(i)+y(i)) < c3; @FOR(route: @bnd(0,x,a);@bnd(0,y,b) );END程序十六:! 3 Warehouse, 4 Customer Transportation Problem; sets:Warehouse /1..3/: a;Customer /1..4/: b;Routes( Warehouse, Customer) : c, x;endsets! Here are the parameters;data:a = 30, 25, 21;b = 15, 17, 22, 12;c = 6, 2, 6, 7,4, 9, 5, 3,8, 8, 1, 5;enddata! The objective;[OBJ] min = @sum( Routes: c * x);! The supply constraints;@for( Warehouse(i): [SUP]@sum( Customer(j): x(i,j)) <= a(i));! The demand constraints;@for( Customer(j): [DEM]@sum( Warehouse(i): x(i,j)) = b(j));程序十七:! Assignment Problem Model;sets:Flight/1..6/;Assign(Flight, Flight): c, x;endsets! Here is income matrix;data:c = 20 15 16 5 4 717 15 33 12 8 69 12 18 16 30 1312 8 11 27 19 14-99 7 10 21 10 32-99 -99 -99 6 11 13; enddata! Maximize valve of assignments;max = @sum(Assign: c*x);@for(Flight(i):! Each i must be assigned to some j;@sum(Flight(j): x(i,j)) = 1;! Each I must receive an assignment;@sum(Flight(j): x(j,i)) = 1;);程序十八:! 2 plants, 3 warehouses and 4 customers Transshipment Problem;sets:Plant /A, B/: produce; Warhouse /x, y, z/;Customer /1..4/: require;LinkI ( Plant, Warhouse): cI, xI; LinkII ( Warhouse, Customer): cII, xII; endsets! Here are the parameters;data:produce = 9, 8;require = 3, 5, 4, 5;cI = 1, 2, 100,3, 1, 2;cII = 5, 7, 100, 100,9, 6, 7, 100,100, 8, 7, 4;enddata! The objective;[OBJ] min = @sum( LinkI: cI * xI) + @sum( LinkII: cII * xII);! The supply constraints;@for( Plant(i): [SUP]@sum( Warhouse(j): xI(i,j)) <= produce(i));! The warhouse constraints;@for( Warhouse(j): [MID]@sum( Plant(i): xI(i,j))=@sum( Customer(k): xII(j,k)));! The demand constraints;@for( Customer(k): [DEM]@sum( Warhouse(j): xII(j,k)) = require(k));! 2 plants, 3 warehouses and 4 customersTransshipment Problem;sets:Plant /A,B/ : produce;Warhouse /x,y,z/;Customer /1..4/ : require;Link ( Plant, Warhouse, Customer) : poss, cost, x; endsets! Here are the parameters;data:produce = 9, 8;require = 3, 5, 4, 5;poss = 1, 1, 0, 0,1, 1, 1, 0,0, 0, 0, 0,1, 1, 0, 0,1, 1, 1, 0,0, 1, 1, 1;cost = 6, 8, 0, 0,11, 8, 9, 0,0, 0, 0, 0,8,10, 0, 0,10, 7, 8, 0,0,10, 9, 6;enddata! The objective;[OBJ] min = @sum( Link: poss * cost * x);! The supply constraints;@for( Plant(i): [SUP]@sum( Warhouse(j):@sum( Customer(k): poss(i,j,k) * x(i,j,k)))<=produce(i));! The demand constraints;@for( Customer(k): [DEM]@sum( Plant(i):@sum( Warhouse(j): poss(i,j,k) * x(i,j,k))) = require(k));程序十九:! We have a network of 7 cities. We want to findthe length of the shortest route from city 1 to city 7;sets:! Here is our primitive set of seven cities;cities/A, B1, B2, C1, C2, C3, D/;! The Derived set "roads" lists the roads thatexist between the cities;roads(cities, cities)/A,B1 A,B2 B1,C1 B1,C2 B1,C3 B2,C1 B2,C2 B2,C3C1,D C2,D C3,D/: w, x;endsetsdata:! Here are the distances that correspondto above links;w = 2 4 3 3 1 2 3 1 1 3 4;enddatan=@size(cities); ! The number of 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;程序二十:sets:cities/1..11/;roads(cities, cities): p, w, x;endsetsdata:p = 0 1 1 1 0 0 0 0 0 0 00 0 1 0 1 0 0 0 0 0 00 1 0 1 1 1 1 0 0 0 00 0 1 0 0 0 1 0 0 0 00 1 1 0 0 1 0 1 1 0 00 0 1 0 1 0 1 0 1 0 00 0 1 1 0 1 0 0 1 1 00 0 0 0 1 0 0 0 1 0 10 0 0 0 1 1 1 1 0 1 10 0 0 0 0 0 1 0 1 0 10 0 0 0 0 0 0 0 0 0 0;w = 0 2 8 1 0 0 0 0 0 0 02 0 6 0 1 0 0 0 0 0 08 6 0 7 5 1 2 0 0 0 01 0 7 0 0 0 9 0 0 0 00 1 5 0 0 3 0 2 9 0 00 0 1 0 3 0 4 0 6 0 00 0 2 9 0 4 0 0 3 1 00 0 0 0 2 0 0 0 7 0 90 0 0 0 9 6 3 7 0 1 20 0 0 0 0 0 1 0 1 0 40 0 0 0 0 0 0 9 2 4 0;enddatan=@size(cities);min=@sum(roads:w*x);@for(cities(i) | i #ne# 1 #and# i #ne# n:@sum(cities(j): p(i,j)*x(i,j)) = @sum(cities(j): p(j,i)*x(j,i))); @sum(cities(j): p(1,j)*x(1,j))=1;程序二十一:sets:nodes/s,1,2,3,4,t/;arcs(nodes, nodes)/s,1 s,2 1,2 1,3 2,4 3,2 3,t 4,3 4,t/: c, f; endsetsdata:c = 8 7 5 9 9 2 5 6 10; enddatamax=flow;@for(nodes(i) | i #ne# 1 #and# i #ne# @size(nodes): @sum(arcs(i,j):f(i,j)) - @sum(arcs(j,i):f(j,i))=0);@sum(arcs(i,j)|i #eq# 1 : f(i,j)) = flow;@for(arcs: @bnd(0, f, c));程序二十二:sets:nodes/s,1,2,3,4,t/;arcs(nodes, nodes): p, c, f;endsetsdata:p = 0 1 1 0 0 00 0 1 1 0 00 0 0 0 1 00 0 1 0 0 10 0 0 1 0 10 0 0 0 0 0;c = 0 8 7 0 0 00 0 5 9 0 00 0 0 0 9 00 0 2 0 0 50 0 0 6 0 100 0 0 0 0 0;enddatamax = flow;@for(nodes(i) | i #ne# 1 #and# i #ne# @size(nodes): @sum(nodes(j): p(i,j)*f(i,j)) = @sum(nodes(j):p(j,i)*f(j,i)) ); @sum(nodes(i):p(1,i)* f(1,i)) = flow;@for(arcs:@bnd(0, f, c));程序二十三:sets:nodes/s,1,2,3,4,t/:d;arcs(nodes, nodes)/s,1 s,2 1,2 1,3 2,4 3,2 3,t 4,3 4,t/: c, u, f; endsetsdata:d = 14 0 0 0 0 -14;c = 2 8 5 2 3 1 6 4 7;u = 8 7 5 9 9 2 5 6 10; enddatamin=@sum(arcs:c*f);@for(nodes(i) | i #ne# 1 #and# i #ne# @size(nodes): @sum(arcs(i,j):f(i,j)) - @sum(arcs(j,i):f(j,i))=d(i));@sum(arcs(i,j)|i #eq# 1 : f(i,j))=d(1);@for(arcs:@bnd(0,f,u));程序二十四:sets:cities/1..10/:level; !level(i)= the level of city;link(cities, cities):distance, !The distance matrix;x; ! x(i,j)=1 if we use link i,j;endsetsdata: !Distance matrix, it need not be symmetirc; distance = 0 8 5 9 12 14 12 16 17 228 0 9 15 16 8 11 18 14 225 9 0 7 9 11 7 12 12 179 15 7 0 3 17 10 7 15 1512 16 9 3 0 8 10 6 15 1514 8 11 17 8 0 9 14 8 1612 11 7 10 10 9 0 8 6 1116 18 12 7 6 14 8 0 11 1117 14 12 15 15 8 6 11 0 1022 22 17 15 15 16 11 11 10 0; enddatan=@size(cities); !The model size;! Minimize total distance of the links;min=@sum(link(i,j)|i #ne# j: distance(i,j)*x(i,j));!There must be an arc out of city 1;@sum(cities(i)|i #gt# 1: x(1,i))>=1;!For city i, except the base (city 1);@for(cities(i) | i #gt# 1 :! It must be entered;@sum(cities(j)| j #ne# i: x(j,i))=1;! level(j)=levle(i)+1, if we link j and i;@for(cities(j)| j #gt# 1 #and# j #ne# i :level(j) >= level(i) + x(i,j)- (n-2)*(1-x(i,j)) + (n-3)*x(j,i););! The level of city is at least 1 but no more n-1, and is 1 if it links to base (city 1);@bnd(1,level(i),999999);level(i)<=n-1-(n-2)*x(1,i););! Make the x's 0/1;@for(link : @bin(x));程序二十五:sets:cities/1..10/:level; !level(i)= the level of city; link(cities, cities):distance, !The distance matrix;x; ! x(i,j)=1 if we use link i,j; endsetsdata: !Distance matrix, it need not be symmetirc; distance = 0 8 5 9 12 14 12 16 17 228 0 9 15 16 8 11 18 14 225 9 0 7 9 11 7 12 12 179 15 7 0 3 17 10 7 15 1512 16 9 3 0 8 10 6 15 1514 8 11 17 8 0 9 14 8 1612 11 7 10 10 9 0 8 6 1116 18 12 7 6 14 8 0 11 1117 14 12 15 15 8 6 11 0 1022 22 17 15 15 16 11 11 10 0; enddatan=@size(cities); !The model size;! Minimize total distance of the links;min=@sum(link(i,j)|i #ne# j: distance(i,j)*x(i,j));!There must be an arc out of city 1;@sum(cities(i)|i #gt# 1: x(1,i))>=1;!For city i, except the base (city 1);@for(cities(i) | i #gt# 1 :! It must be entered;@sum(cities(j)| j #ne# i: x(j,i))=1;! level(j)=levle(i)+1, if we link j and i;@for(cities(j)| j #gt# 1 #and# j #ne# i :level(j) >= level(i) + x(i,j)- (n-2)*(1-x(i,j)) + (n-3)*x(j,i););! The level of city is at least 1 but no more n-1, and is 1 if it links to base (city 1);@bnd(1,level(i),999999);level(i)<=n-1-(n-2)*x(1,i););! Make the x's 0/1;@for(link : @bin(x));程序二十六:sets:cities/1..10/:level; !level(i)= the level of city; link(cities, cities):distance, !The distance matrix;x; ! x(i,j)=1 if we use link i,j; endsetsdata: !Distance matrix, it need not be symmetirc; distance = 0 8 5 9 12 14 12 16 17 228 0 9 15 16 8 11 18 14 225 9 0 7 9 11 7 12 12 179 15 7 0 3 17 10 7 15 1512 16 9 3 0 8 10 6 15 1514 8 11 17 8 0 9 14 8 1612 11 7 10 10 9 0 8 6 1116 18 12 7 6 14 8 0 11 1117 14 12 15 15 8 6 11 0 1022 22 17 15 15 16 11 11 10 0; enddatan=@size(cities); !The model size;! Minimize total distance of the links;min=@sum(link(i,j)|i #ne# j: distance(i,j)*x(i,j));!For city i;@for(cities(i) :! It must be entered;@sum(cities(j)| j #ne# i: x(j,i))=1;! It must be departed;@sum(cities(j)| j #ne# i: x(i,j))=1;! level(j)=levle(i)+1, if we link j and i;@for(cities(j)| j #gt# 1 #and# j #ne# i :level(j) >= level(i) + x(i,j)- (n-2)*(1-x(i,j)) + (n-3)*x(j,i);););! Make the x's 0/1;@for(link : @bin(x));! For the first and last stop;@for(cities(i) | i #gt# 1 :level(i)<=n-1-(n-2)*x(1,i);level(i)>=1+(n-2)*x(i,1););程序二十九:sets:events/1..8/: d;operate(events, events)/! A B C D E 0 F G H I 0 J K;1,2 1,3 1,4 3,4 2,5 3,5 4,6 5,6 5,8 5,7 6,7 7,8 6,8/: a, m, b, et, dt, x;endsetsdata:a = 3 8 8 2 3 0 8 18 26 18 0 12 11; m = 5 9 11 4 4 0 16 20 33 25 0 15 21;b = 7 16 14 6 5 0 18 28 52 32 0 18 25;d = 1 0 0 0 0 0 0 -1;limit = 52;enddata@for(operate:et = (a+4*m+b)/6;dt = (b-a)^2/36;);max = Tbar;Tbar = @sum(operate: et*x);@for(events(i):@sum(operate(i,j): x(i,j)) - @sum(operate(j,i): x(j,i))=d(i););S^2=@sum(operate: dt*x);p=@psn((limit-Tbar)/S);@psn((days-Tbar)/S) = 0.95;程序三十:sets:Level/1..3/: P, z, Goal;Variable/1..2/: x;H_Con_Num/1..1/: b;S_Con_Num/1..4/: g, dplus, dminus;H_Cons(H_Con_Num, Variable): A;S_Cons(S_Con_Num, Variable): C;Obj(Level, S_Con_Num): Wplus, Wminus;endsetsdata:P= ? ? ?;Goal = ? ? 0;b = 12;g= 1500 0 16 15;A = 2 2;C = 200 300 2 -1 4 0 0 5;Wplus = 0 0 0 00 1 0 00 0 3 1;Wminus = 1 0 0 00 1 0 00 0 3 0;enddatamin=@sum(Level: P * z);@for(Level(i):z(i)=@sum(S_Con_Num(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)););程序三十一:sets:Level/1..4/: P, z, Goal;Variable/1..2/: x;S_Con_Num/1..4/: g, dplus, dminus;S_Cons(S_Con_Num, Variable): C;Obj(Level, S_Con_Num): Wplus, Wminus;endsetsdata:P= ? ? ? ?;Goal = ?, ?, ?, 0;g= 27500 800 320 900;C = 25 10 1 0 0 1 1 0;Wplus = 0 0 0 00 0 0 10 0 0 00 1 3 0;Wminus = 1 0 0 00 0 0 00 2 1 00 0 0 0;enddatamin=@sum(Level: P * z);@for(Level(i):z(i)=@sum(S_Con_Num(j): Wplus(i,j)*dplus(j))+@sum(S_Con_Num(j): Wminus(i,j)*dminus(j))); @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)););程序三十二:sets:Level/1..5/: P, z, Goal;Variable/1..3/: x;S_Con_Num/1..8/: g, dplus, dminus;S_Cons(S_Con_Num, Variable): C;Obj(Level, S_Con_Num): Wplus, Wminus;endsetsdata:P= ? ? ? ? ?;Goal = ?, ?, ?, ?, 0;g= 1700 50 50 80 100 120 100 1900;C = 5 8 12 1 0 0 0 1 0 0 0 1 1 0 0 0 1 0 0 0 1 5 8 12; Wplus = 0 0 0 0 0 0 0 00 0 0 0 0 0 0 00 0 0 0 0 0 0 10 0 0 0 0 0 0 01 0 0 0 0 0 0 0;Wminus = 1 0 0 0 0 0 0 00 20 18 21 0 0 0 00 0 0 0 0 0 0 00 0 0 0 20 18 21 00 0 0 0 0 0 0 0;enddatamin=@sum(Level: P * z);@for(Level(i):z(i)=@sum(S_Con_Num(j): Wplus(i,j)*dplus(j))+@sum(S_Con_Num(j): Wminus(i,j)*dminus(j))); @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)););程序三十二:sets:Level/1..8/: P, z, Goal;S_Con_Num/1..13/: dplus, dminus;Plant /1..3/: a;Customer /1..4/: b;Routes(Plant, Customer): c, x;endsetsdata:P= ? ? ? ? ? ? ? ?;Goal = ? ? ? ? ? ? ? 0;a = 300 200 400;b = 200 100 450 250;c = 5 2 6 73 54 64 5 2 3;enddatamin=@sum(Level: P * z);z(1) = dminus(9);z(2) = dminus(1);z(3) = dminus(2)+dminus(3)+dminus(4)+dminus(5);z(4) = dminus(6)+dminus(7)+dminus(8)+dminus(9);z(5) = dplus(10);z(6) = dplus(11);z(7) = dminus(12)+dplus(12);z(8) = dplus(13);@for(Plant(i):@sum(Customer(j): x(i,j)) <= a(i));x(3,1)+dminus(1)-dplus(1)=100;@for(Customer(j):@sum(Plant(i): x(i,j))+dminus(1+j)-dplus(1+j)=0.8*b(j);@sum(Plant(i): x(i,j))+dminus(5+j)-dplus(5+j)=b(j); );@sum(Routes: c*x)+dminus(10)-dplus(10)=3245;x(2,4)+dminus(11)-dplus(11)=0;@sum(Plant(i): x(i,1))-20/45*@sum(Plant(i): x(i,3)) +dminus(12)-dplus(12)=0;@sum(Routes: c*x)+dminus(13)-dplus(13)=2950;@for(Level(i)|i #lt# @size(Level):@bnd(0,z(i),Goal(i)););程序三十三:sets:optA/1..3/: x;optB/1..3/: y;AXB(optA,optB) : Ca, Cb;endsetsdata:Ca = 14 13 1213 12 1212 12 13;Cb = 13 14 1514 15 1515 15 14;enddataVa=@sum(AXB(i,j): Ca(i,j)*x(i)*y(j));Vb=@sum(AXB(i,j): Cb(i,j)*x(i)*y(j));@for(optA(i):@sum(optB(j) : Ca(i,j)*y(j))<=Va);@for(optB(j):@sum(optA(i) : Cb(i,j)*x(i))<=Vb);@sum(optA : x)=1; @sum(optB : y)=1;@free(Va); @free(Vb);程序三十四:sets:order/1..99/: TC, EOQ;endsets@for(order(i):EOQ(i)=D/i;TC(i)=0.5*C_P*EOQ(i)+C_D*D/EOQ(i););TC_min=@min(order: TC);Q=@sum(order(i): EOQ(i)*(TC_min #eq# TC(i)));N=D/Q;data:C_D = 12000;D = 96000;C_P = 3.6;enddata程序三十五:sets:order/1..99/: TC, EOQ, EOS;endsets@for(order(i):EOQ(i)=D/i;EOS(i)=C_P/(C_p+C_S)*EOQ(i);TC(i)=0.5*C_P*(EOQ(i)-EOS(i))^2/EOQ(i)+C_D*D/EOQ(i) +0.5*C_S*EOS(i)^2/EOQ(i););TC_min=@min(order: TC);Q=@sum(order(i): EOQ(i)*(TC_min #eq# TC(i)));S=@sum(order(i): EOS(i)*(TC_min #eq# TC(i)));N=D/Q;data:C_D = 12000;D = 96000;C_P = 3.6;C_S = 13.2;Enddata程序三十六:sets:range/1..4/: B, C, C_P, EOQ, Q, TC;endsetsdata:D = 40000;C_D = 9000;R = .2;B = 10000, 20000, 30000, 40000;C = 35.225, 34.525, 34.175, 33.825;enddata@for(range:C_P = R*C;EOQ = ( 2*C_D*D/C_P)^0.5;);Q(1) = EOQ(1)-(EOQ(1)-B(1)+1)*(EOQ(1) #ge# B(1));@for(range(i) | i #gt# 1:Q(i)=EOQ(i)+(B(i-1)-EOQ(i))*(EOQ(i) #lt# B(i-1))-(EOQ(i)- B(i)+1)*(EOQ(i) #ge# B(i)););@for(range(i):TC(i)=0.5*C_P(i)*Q(i)+C_D*D/Q(i)+C(i)*D);TC_min = @min(range: TC);Q_star = @sum(range: Q*( TC #eq# TC_min));T_star = Q_star/D;程序三十七:MODEL:TITLE 飞行管理问题的非线性规划模型;SETS:Plane/1..6/: x0, y0, cita0, cita1, d_cita;! cita0表示初始角度,cita1为调整后的角度,d_cita为调整的角度; link(plane, plane)|&1 #LT# &2: b,c;ENDSETSDATA:max_cita = 30;T_max = 0.283;V=800;ENDDATAINIT:d_cita = 0 0 0 0 0 0;ENDINIT@for(plane: cita1 - cita0 = d_cita);@for(link(i,j):b(i,j) = -2*(x0(i) -x0(j))*@sin ((cita1(i)+cita1(j))*3.14159265/360)+2*(y0(i) -y0(j))*@cos ((cita1(i)+cita1(j))*3.14159265/360);c(i,j) = (x0(i) -x0(j)) ^2 + (y0(i) -y0(j)) ^2 - 64;);! 避免碰撞的条件;! 右端点非负;@for(link(i,j): [Right](2*V*T_max*@sin((cita1(i)-cita1(j))*3.14159265/360))^2+ b(i,j)*(2*V*T_max*@sin((cita1(i)-cita1(j))*3.14159265/360))+ c(i,j) > 0);! 最小点非负;@for(link(i,j): [Minimum] @if(-b(i,j)/4/V/@sin((cita1(i)-cita1(j))*3.14159265/360) #gt#0 #and#-b(i,j)/4/V/@sin((cita1(i)-cita1(j))*3.14159265/360) #lt#T_max ,b(i,j)^2-4*c(i,j),-1) < 0);@for(link: @free(b));!调整角度上下限,单位为角度;@for(plane: @bnd( - max_cita, d_cita, max_cita));[obj] MIN = @SUM(plane: (d_cita)^2);END程序三十九:model:!铁路运输网的运费计算;SETS:! NOTES表示节点集合;NODES /S1,S2,S3,S4,S5,S6,S7,A1,A2,A3,A4,A5,A6,A7,A8,A9,A10,A11,A12,A13,A14,A15,B1,B2,B3,B4,B5,B6,B7,B8,B9,B10,B11,B12,B13,B14,B15,B16,B17/;! 派生集合ROADS表示的是网络中的直接连接的道路(弧),由于并非所有节点间都有道路直接连接,所以将弧具体列出,这是稀疏集合;ROADS(NODES, NODES)/! 要铺设的管道;A1,A2 A2,A3 A3,A4 A4,A5 A5,A6 A6,A7 A7,A8 A8,A9 A9,A10 A10,A11A11,A12 A12,A13 A13,A14 A14,A15! 公路网;B1,A2 B2,A3 B5,A4 B4,A5 B6,A6 B7,A7 S1,A7 B8,A8 B9,A9,B10,A10,B11,A11 B13,A12 B15,A13 S6,A14 B16,A14 B17,A15 S7,A15! 铁路网;B1,B3 B2,B3 B3,B5 B4,B6 B6,B7 B7,S1 B5,B8 B8,S1 B8,S2 B8,B9B9,S3 B9,B10 B10,B12 B12,B11 B11,S5 B12,S4 B12,B14 B14,B13B14,B15 B15,B16 B16,S6 B16,B17 B17,S7! 距离W0( i, j) 是节点i到j的直接距离(已知);/: W0;! 属性W表示基本的权矩阵(直接距离),D1(i,j)表示节点i到j的最优行驶路线的路长,C1(i,j)表示节点i到j铁路运输的最小单位运价(万元);LINK(NODES, NODES): W, D1, C1;! 属性U表示迭代过程的权矩阵(临时标号);NNN(Nodes,nodes,nodes):U;ENDSETSDATA:! 针对铁路网计算时,将公路网的距离定为充分大(BIG=20000);BIG=20000;W0 = 20000 20000 20000 20000 20000 20000 20000 20000 20000 2000020000 20000 20000 2000020000 20000 20000 20000 20000 20000 20000 20000 20000 2000020000 20000 20000 20000 20000 20000 20000450 80 1150 306 195 20 1100 202 1200 720690 520 170 88 462 690 160 70320 160 70 290 30;! 输出费用C1到文本文件中,以备后用;@TEXT(TrainCost.txt)=@writefor(nodes(i): @writefor(nodes(j):@format(c1(i,j),'5.0f')), @newline(1) );ENDDATACALC:! 无向网络,根据给定的直接距离具有对称性,得到初始距离矩阵;@FOR(LINK(i,j)|@IN(ROADS,i,j): W(i,j) = W0(i, j); W(j,i) = W0(i,j); );@FOR(LINK(i,j)|i#eq#j: W(i,j) = 0 );! 所有无直接连接的节点间的距离定为充分大;@FOR(LINK(i,j)|i#ne#j #and# #not#@IN(ROADS,i,j) #and##not#@IN(ROADS,j,i): W(i,j) = BIG;W(j,i) = BIG; );!以下三个循环语句就是最短路计算公式(Floyd-Warshall算法);! k=1的初值;@FOR(NNN(i,j,k)|k#eq#1: U(i,j,k) = W(i,j) );!迭代过程;@For(nodes(k)|k#lt#@size(nodes): @FOR(LINK(i,j): U(i,j,k+1) =@if(U(i,j,k) #le# U(i,k,k)+U(k,j,k),U(i,j,k), U(i,k,k)+U(k,j,k))));! 最后一次迭代得到D1;@FOR(NNN(i,j,k)|k#eq#@size(nodes): D1(i,j) =@if(U(i,j,k) #le# U(i,k,k)+U(k,j,k),U(i,j,k), U(i,k,k)+U(k,j,k)) );!以下就是按最短路D1查找相应运费C1的计算公式;@FOR(LINK|D1#eq#0: C1=0);@FOR(LINK|D1#gt#0 #and# D1#le#300: C1=20);@FOR(LINK|D1#gt#300 #and# D1#le#350: C1=23);@FOR(LINK|D1#gt#350 #and# D1#le#400: C1=26);@FOR(LINK|D1#gt#400 #and# D1#le#450: C1=29);@FOR(LINK|D1#gt#450 #and# D1#le#500: C1=32);@FOR(LINK|D1#gt#500 #and# D1#le#600: C1=37);@FOR(LINK|D1#gt#600 #and# D1#le#700: C1=44);@FOR(LINK|D1#gt#700 #and# D1#le#800: C1=50);@FOR(LINK|D1#gt#800 #and# D1#le#900: C1=55);@FOR(LINK|D1#gt#900 #and# D1#le#1000: C1=60);@FOR(LINK|D1#gt#1000: C1 = 60 + 5*@floor(D1/100-10)+@if(@mod(D1,100)#eq#0,0,5) );ENDCALCEnd程序四十:model:!公路运输网的运费计算;SETS:! NOTES表示节点集合;NODES /S1,S2,S3,S4,S5,S6,S7,A1,A2,A3,A4,A5,A6,A7,A8,A9,A10,A11,A12,A13,A14,A15,B1,B2,B3,B4,B5,B6,B7,B8,B9,B10,B11,B12,B13,B14,B15,B16,B17/; ! 派生集合ROADS表示的是网络中的直接连接的道路(弧),由于并非所有节点间都有道路直接连接,所以将弧具体列出,这是稀疏集合; ROADS(NODES, NODES)/! 要铺设的管道;A1,A2 A2,A3 A3,A4 A4,A5 A5,A6 A6,A7 A7,A8 A8,A9 A9,A10 A10,A11A11,A12 A12,A13 A13,A14 A14,A15! 公路网;B1,A2 B2,A3 B5,A4 B4,A5 B6,A6 B7,A7 S1,A7 B8,A8 B9,A9,B10,A10,。
lingo解决线性规划问题的程序(经典)
2024/1/27
求解整数规划问题
Lingo支持整数变量的定义和求 解,能够处理复杂的整数规划 问题。
求解非线性规划问题
Lingo具备强大的非线性求解能 力,能够处理包含非线性目标 函数和约束条件的问题。
数据分析和可视化
Lingo提供丰富的数据分析和可 视化工具,帮助用户更好地理 解问题和分析结果。
03
目标函数
04
以总运费为目标函数,求解最优 运输方案。
Lingo程序实现
使用Lingo语言描述问题,调用 Lingo求解器求解。
2024/1/27
22
资源分配问题
问题描述
有若干项任务需要完成,每项任务需要一定数量 的资源,且每项任务完成后有一定的收益。问题 是如何分配有限的资源给各项任务,使得总收益 最大。
将数学模型中的目标函数 输入到Lingo程序中,注意 正确设置优化方向(最大 化或最小化)。
将数学模型中的约束条件 逐一输入到Lingo程序中, 确保语法和逻辑正确。
保存编写好的Lingo程序, 并点击运行按钮开始求解 线性规划问题。
2024/1/27
18
程序运行与结果分析
查看运行结果
分析结果合理性
Lingo软件会自动求解线性规划问题,并显 示运行结果,包括目标函数值、决策变量 取值等。
根据问题的实际情况,分析运行结果的合 理性,确保解符合问题的实际要求。
调整模型或参数
输出结果报告
如果运行结果不合理或不符合预期,可以 调整数学模型或参数设置,并重新运行程 序进行求解。
2024/1/27
将运行结果整理成报告形式,包括问题背景 、数学模型、运行结果、结果分析等部分, 以便后续参考和使用。
2024版lingo解决线性规划问题的程序经典要点
资源分配问题案例
01
问题描述
资源分配问题涉及如何将有限的资源分配给不同的项目或部 门,以实现整体效益最大化的目标。
02 03
Lingo模型构建
在资源分配问题中,决策变量通常表示分配给不同项目或部 门的资源数量。目标函数可以是最大化整体效益或满足特定 目标下的资源分配,约束条件则包括资源总量的限制、项目 或部门的需求限制等。
数据处理能力
Excel在数据处理和表格计算方面 非常强大,而Lingo则更适合处理 复杂的优化问题。
求解规模
对于较小规模的线性规划问题, Excel的规划求解工具可以胜任, 但对于大规模问题,Lingo更具优 势。
扩展性
Lingo可以通过编写程序来解决各 种复杂的优化问题,而Excel则受 限于其内置的函数和工具。
对偶单纯形法
内点法
启发式算法
单纯形法是求解线性规 划问题的经典方法,它 通过迭代的方式在可行 域的顶点上寻找最优解。
对偶单纯形法是单纯形 法的一种改进,它通过 对偶问题的求解来得到 原问题的最优解,适用 于初始基可行解不易找 到的情况。
内点法是一种适用于大 规模线性规划问题的求 解方法,它通过在可行 域内部寻找最优解来避 免单纯形法在迭代过程 中可能出现的退化情况。
Lingo程序编写注意事项
变量命名规范 变量命名应具有描述性,避免使用无意 义的字符或数字组合,以提高代码可读
性和可维护性。 避免重复计算
在循环或迭代过程中,避免重复计算 相同的表达式或值,以减小计算量和
时间复杂度。
注释清晰明了 在关键代码处添加注释,解释代码功 能和实现思路,便于他人理解和修改。
Lingo软件功能与特点
功能丰富
Lingo软件提供了丰富的数学规划求解功能,包括 线性规划、非线性规划、整数规划、二次规划等。 用户可以根据实际问题需求选择合适的求解方法。
LINGO简单程序编写
例2.怎样表示:
100
程序: !集合段;
∑ ������������������ 150, ������ = 1,2, ,200
������ 1
sets:
a/1..100/:;
b/1..200/:; c(a,b):x;!派生集合;
endsets !目标与约束段; @for(b(j):@sum(a(i):x(i,j))>150.001);!集合元素的循环函数;
一维数组操作: 例1.怎样表示:
1
∑ ������ ≤ 90
1
程序: !集合段; sets: s/1..100/:x;!基本集合,集合名与属性变量; endsets !目标与约束段; @sum(s(i):x(i))<90!循环求和函数,要指明在哪个集合里做循环,把后面的xi相加;
例2.怎样赋值: b1=1,b2=0,b3=1,b4=2,b5=3,b6=5,b7=2,b8=6,b9=1,b10=2;
������ 1000
f = @if(X#LE#500,4*X,@IF(X#LE#1000,500+3*X,1500+2*X));
例 6.怎样表示:
������1 + 2������2 + 3������3 + ������4 ≥ 4
2������1 + 5������2 + ������3 + 2������4 ≥ 5
LINGO 逻辑运算符 #AND#(与) #OR# (或) #NOT#(非) #EQ# (等于) #NE# (不等于) #GT# (大于) #GE# (大于等于) #LT# (小于) #LE# (小于等于) 例如:2#gt#3#and#4#gt#2 结果:0(假)