lingo讲座
Lingo简明讲义

Lingo 简明讲义(莫永向老师)LINGO 是用来求解线性和非线性优化问题的简易工具1引例:当你在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.Objective value:800.0000表示最优目标函数值是800;2.X1=250,x2=100时目标函数取得最优值;3.Reduced cost 表示当非基变量(取值为0的变量)有微小变动时,目标函数的变化率(本例中没4.有非基变量,只有基变量x1,x2);5.Dual Price(对偶价格)表示当对应约束条件有微小变动时, 目标函数的变化率.即表示约束中不等式右端减少(增加)一个单位时,目标函数减少(增加)多少个单位. (详见谢金星编的<优化建模与lindo/lingo 软件>P35)例1.2 运输问题(见姜启源<数学模型(第三版)>p92):343332312423222114131211230200190150150190130140170220130160minx x x x x x x x x x x x ++++++++++++∑∑==⇔3141mini j ij ijx c..t s5060503332312423222114131211=++=+++=+++x x x x x x x x x x x 3,2,1,41==⇒∑=i p xi j ij501030101407080302414332313322212312111≤+≤≤++≤≤++≤≤++≤x x x x x x x x x x x 4,,1,31=≤≤⇒∑=j b xa j i ijj.4,3,2,1;3,2,1,0==≥j i x ij代码一:与例1.1类似代码二:MODEL:!集合段;sets:water/1..3/:p;house/1..4/:a,b;conect(water,house):x,c;endsets!数据段;data:p=50 60 50;a=30 70 10 10;b=80 140 30 50;c=160 130 220 170140 130 190 150150 190 200 230;enddata!目标函数;min=@sum(conect:c*x);x(3,4)=0;!约束1;@for(water(i):@sum(house(j):x(i,j))=p(i)); !约束2;@for(house(j):@sum(water(i):x(i,j))<=b(j)); @for(house(j):@sum(water(i):x(i,j))>=a(j)); End解释:如上例Lingo程序必须以Model:………End为起始程序分为以下几段:1.集合段(作用:定义变量)sets:………endsets2.数据段(作用:输入已知数据)data:………enddata3.主程序段(作用:在这段写目标函数和约束条件)以下分别说明:2.集集部分是LINGO模型的一个可选部分。
第4讲LINGO基本使用方法续34页PPT

优优优化化化建建建模模模
第4讲:LINGO基本使用方法
在LINGO中使用集合(续) 运算符和函数
21.09.2019
新余学院 建模组
上一页
下一页
Xinyu University MCM
优优优化化化建建建模模模
二、在LINGO中使用集合(续)
2.4 稠密集合与稀疏集合
setname [/member_list/] [: attribute_list];
其中setname为定义的集合名,member_list为元素列表, attribute_list为属性列表。元素列表可以采用显式列举法(即直接 将所有元素全部列出,元素之间用逗号或空格分开),也可以采用隐 类式型列举法。隐隐式式列列举举格法式可以有几示种例不同格式示,例集合表示的元素
分析 这是一个匹配(MATCHING)问题。把上表的效率矩阵
记为BENEFIT(由于对称性,这个矩阵只有严格上三角部分共28
个数取非零值)。
用MATCH(Si,Sj)=1表示同学Si,Sj组成一队 ,而
MATCH(Si,Sj)=0表示Si,Sj不组队。由于对称性,只需考虑
i<j共28个0-1变量(而不是全部32个变量)。
A2
8 67
A3 4
B1 6 7
B2
8 9
优优优化化化建建建模模模
C1 5T
C2 6
LB1 minLA16,LA28,LA3710 LA37;
LB2 minLA15,LA26,LA347 LA34; LC1 minLB16,LB2815 LB28; LC2 minLB17,LB2916 LB29;
L S0 ;
第3讲LINGO基本使用方法-资料

2019/10/30
新余学院 建模组
上一页
下一页
Xinyu University MCM
优优优化化化建建建模模模
例语1法可:以定se义tn一a个m名e[为/mstuedmenbts的er原_l始is集t/,][它:a具tt有ri成bu员tJeo_hlni、stJ]i;ll、Rose和Mike
•LINGO中函数一律需要以“”开头,其中整型变量函
数(BIN、GIN)和上下界限定函数(FREE、SUB、
SLB)与LINDO中的命令类似。而且0/1变量函数是
BIN函数。
2019/10/30
新余学院 建模组
上一页
下一页
Xinyu University MCM
输出结果: 运行菜单命令“LINGO|Solve”
4
输入窗口如下:
2019/10/30
新余学院 建模组
上一页
下一页
Xinyu University MCM
程序语句输入的备注:
优优优化化化建建建模模模
•LINGO总是根据“MAX=”或“MIN=”寻找目标函数, 而除注释语句和TITLE语句外的其他语句都是约束条 件,因此语句的顺序并不重要 。
•限定变量取整数值的语句为“GIN(X1)”和 “GIN(X2)”,不可以写成“GIN(2)”,否则LINGO将 把这个模型看成没有整数变量。
目前为止的 迭代次数
当前约束不满足的总量(不是不 满足的约束的个数):实数(即使 该值=0,当前解也可能不可行, 因为这个量中没有考虑用上下界 命令形式给出的约束)
2019/10/30
新余学院 建模组
上一页
lingo讲座.ppt

Erlang繁忙概率。 4.@pel(a,x) 当到达负荷为a,服务系统有x个服务器且不允许排队时的Erlang
繁忙概率。 5.@pfd(n,d,x) 自由度为n和d的F分布的累积分布函数。
如果x<0返回-1;否则,返回1
@floor(x)
返回x的整数部分。
@smax(x1,x2,…,xn) 返回x1,x2,…,xn中的最大值
@smin(x1,x2,…,xn) 返回x1,x2,…,xn中的最小值
概率函数 1.@pbn(p,n,x) 二项分布的累积分布函数。当n和(或)x不是整数时,用线性插
复杂变量:集合
Lingo中没有数组,代之以集合及其属性
集是一群相联系的对象,这些对象也称为集的成员。 一个集可能是一系列产品、卡车或雇员。每个集成员 可能有一个或多个与之有关联的特征,我们把这些特征 称为属性。属性值可以预先给定,也可以是未知的, 有待于LINGO求解。例如,产品集中的每个产品可以有 一个价格属性;卡车集中的每辆卡车可以有一个牵引力 属性;雇员集中的每位雇员可以有一个薪水属性,也可 以有一个生日属性等等。
何时会提升速度?
与数据段不同的是:模型中的变量在这里赋值之后,在模型中 几乎一定会被改变!
(2)Lingo中的运算符与内部函数
三类运算符:算术运算符, 逻辑运算符, 关系运算符
优先级 最高
最低
运算符 #NOT# -(负号) ^ */ + -(减法) #EQ# #NE# #GT# #GE# #LT# #LE# #AND# #OR# <(=) = >(=)
LINGO语言应用讲座

LINGO 语言应用讲座(一)Lingo 解方程、求极值以及简单规划问题例1求解非线性方程组⎪⎩⎪⎨⎧=+++=+4222222y y x x y x其LINGO 代码如下:model :x^2+y^2=2;2*x^2+x+y^2+y=4;@bnd(0.4,x,0.5);@bnd(1,y,2); end例2某工厂有两条生产线,分别用来生产M 和P 两种型号的产品,利润分别为200元/个和300元/个,生产线的最大生产能力分别为每日100和120,生产线每生产一个M 产品需要1个劳动日(1个工人工作8小时称为1个劳动日)进行调试、检测等工作,而美国P 产品需要2个劳动日,该厂工人每天共计能提供160劳动日,假如原材料等其他条件不受限制,问应如何安排生产计划,才能使获得的利润最大?解 设两种产品的生产量分别为1x 和2x ,则该问题的数学模型为 目标函数 21300200m ax x x z +=.约束条件 ⎪⎪⎩⎪⎪⎨⎧=≥≤+≤≤.2,1,0,1602,120,1002121i x x x x x i其LINGO 代码如下:Model:MAX=200*X1+300*X2; X1<=100; X2<=120;X1+2*X2<=160; EndGlobal optimal solution found.Objective value: 29000.00 Total solver iterations: 0Variable Value Reduced Cost X1 100.0000 0.000000 X2 30.00000 0.000000Row Slack or Surplus Dual Price 1 29000.00 1.0000002 0.000000 50.000003 90.00000 0.0000004 0.000000 150.0000该报告说明:运行2步找到全局最优解,目标函数值为29000,变量值分别为X1=100,X2=30.“Reduced Cost ”的含义是缩减成本系数(最优解中变量的Redced Cost 值自动取零),“Row ”是输入模型中的行号,“Slack or Surplus ”的意思为松弛或剩余,即约束条件左边与右边的差值,对于“<=”不等式,左边减右边的差值称为Surplus (剩余),当约束条件的两边相等时,松弛或剩余的值为零,如果约束条件无法满足,即没有可行解,则松弛或剩余的值为负数.“Dual price ”的意思是影子价格,上面报告中Row 2的松弛值为0,意思是第二行的约束条件,即第一条生产线的最大生产能力已经到达饱和状态(100个),影子价格为50,含义是:如果该生产线最大生产能力增加1,能使目标函数值,即利润增加50,;报告中Row3的松弛值为90,表示按照最优解安排生产(X20=30),则第三行的约束条件,即第条生产线的最大值不起作用,故影子价格为0; 例3 求解非线性规划问题4321max x x x x z +++=, ⎪⎪⎪⎩⎪⎪⎪⎨⎧≥≥≥≥≤+++≤++≤+≤.0,0,0,0,4.5321.121.1331.1,4841.121.1,4401.1,400..43214321321211x x x x x x x x x x x x x x t s其LINGO 代码如下: Model:Max=x1^(1/2)+x2^(1/2)+x3^(1/2)+x4^(1/2); x1<=400;1.1*x1+x2<=440;1.21*x1+1.1*x2+x3<=484;1.33*x1+1.21*x2+1.1*x3+x4<=532.4; end例 4.求函数)ln cos 5.1()(3x x x x e x f x++=-在区间(0.2,4)内的极小点和极小值以及极大值点和极大值.Model :Max =(x^3+1.5*@cos (x)+x*@log (x))*@exp (-x); @bnd (0.2,x,4); endModel :Min =(x^3+1.5*@cos (x)+x*@log (x))*@exp (-x); @bnd (0.2,x,4);end例5 基金的优化使用(2001年数学建模竞赛题).假设某校基金会得到了一笔数额为M万元的基金,打算将其存入银行,小基金会计划在n年内每年用部分本息奖励优秀师生,要求每年的奖金额相同,且在n年末仍保留原基金数额.银行存款税后年利率见表1.1.2.表1.1.2 银行存款税后利率表存期1年2年3年5年校基金会希望获得最佳的基金使用计划,以提高每年的奖金额,请在M=5000万元、n=5年的情况下设计具体存款方案.解 分析:假设首次发放奖金的时间是在基金到位后一年,一行每隔一年发放一次,每年发放的时间大致相同,小基金会希望获得最佳的基金使用计划,一提高每年的奖金额,且在n 年末仍保留原基金数额M ,实际上n 年中发放的奖金总额全部来自与利息.如果全部基金都存为一年定期,每年都用到期利息发放奖金,则每年的奖金数为5000*0.018=90万,这是没有优化的存款方案.显然,准备在两年后使用的款项应当存成两年定期,必存两次一年定期的收益高,以此类推.目标是合理分配基金的存款方案,使得n 年的利息总额最多.定义 收益比0432.1%16.212=+=a .按照银行存款税后利率表计算得到个存款年限对应的最优收益比见表1.1.3.表1.1.3 各存款年限对应的最优收益比存期年限1年2年3年4年(3+1方式) 5年最优收益比1.0181.04321.077761.097159681.144经分析得到两点结论:(1)一次性存成最长期,优于两个(或两个以上)较短期的组合(中途转存). (2)当存款年限需要组合时,收益比与组合的先后次序无关.建立模型 把总基金M 分成5+1份,分别用621,,,x x x 表示,其中521,,,x x x 分别存成1-5年定期,到期后本息合计用于当年发放奖金,6x 存5年定期,到期的本息合计等于原基金总数M.用S 表示每年用于奖励优秀师生的奖金额,用i a 表示第i 年的最优收益比. 目标函数是每年的奖金额最大,即max S.约束条件有3个:①各年度的奖金数额相等;②奖金总数为M ;③n 年末保留原基金总额M.于是得到模型如下: max S ,⎪⎪⎩⎪⎪⎨⎧=∑====.,,5,,2,1,..6561M x a M x i S x a t s i i i i (1.1.2)这是线性规划模型,用LINGO 软件求解,令M=5000,编写程序如下:其LINGO 代码如下:MAX=S;1.018*x1=S;1.0432*x2=S;1.07776*x3=S;1.07776*1.018*x4=S;1.144*x5=S;1.144*x6=M;M=5000;X1+x2+x3+x4+x5+x6=M;Global optimal solution found.Objective value: 135.2227Total solver iterations: 0Variable Value Reduced CostS 135.2227 0.000000X1 132.8317 0.000000X2 129.6230 0.000000X3 125.4664 0.000000X4 123.2479 0.000000X5 118.2016 0.000000X6 4370.629 0.000000M 5000.000 0.000000Row Slack or Surplus Dual Price1 135.2227 1.0000002 0.000000 -0.21105483 0.000000 -0.20595654 0.000000 -0.19935225 0.000000 -0.19582736 0.000000 -0.18780937 0.000000 -0.18780938 0.000000 0.40266319 0.000000 0.2148538例6某公司6个供货栈,库存货物总数分别为60,55,51,43,41,52,现由8个客户各要一批货,数量分别为35,37,22,32,42,32,43,38,各供货栈到8个客户处的单位货物运输价见表2表2供货栈到客户的单位货物运价(元/每单位)试确定各货栈到各客户的货物调运数量,使总的运费最小.解 引入决策变量ij x ,代表从第i 个货栈到第j 个客户的货物运量.用符号ij c 表示从第i 个货栈到第j 个客户的单位货物运价,i a 表示第i 个货栈的最大供货量,i d 表示第j 个客户的订货量.目标函数是总运输费用最小.约束条件有三条:①各货栈运出的货物总量不超过其库存数;②各客户收到的货物总量等于其订货数量;③决策变量ij x 非负.则本问题的数学模型为:∑∑===6181min i j ijij x c z ,⎪⎪⎪⎩⎪⎪⎪⎨⎧==≥==∑=≤∑==.8,,2,1,6,,2,1,0,8,,2,1,,6,,2,1,..6181 j i x j d x i a x t s ij j i ij i j ij(1.2.1)1.集合定义部分LINGO 将集合(SET )的概念引入建模语言,集合是一组相关对象构成的组合,代表模型中的实际事物,并于数学变量及常量联系起来,是实际问题到数学的抽象.例1.2.1中的6个仓库可以看成是一个集合,8个客户可以看成另外一个集合.每个集合在使用之前需要预先给出定义,定义集合时要明确三方面内容:集合的名称、集合内的成员(组成集合的个体,也称元素)、集合的属性(可以看成是与该集合有关的变量或常量,相当于数组).本例先定义仓库集合:WH/W1..W6/AI;其中WH 是集合的名称,W1..W6是集合内的成员,“..”是特定的省略号(如果不用省略号,也可以把成员一一列出来,成员之间用逗号或空格分开),表明该集合有个成员,分别对应6个货栈,AI 是集合的属性,它可以看成是一个一维数组,有6个分量,分别表示各货栈现有货物的总数.集合、成员、属性的命名规则与变量相同,可按自己的意愿,用有一定意义的字母数字串来表示,式中“/”和“/:”是规定的语法规则.本例还定义客户集合: VD/V1..V8/DJ;该集合有8个成员,DJ 是集合的属性(有8个分量)表示各客户的需求量.以上两个集合称为初始集合(或称基本集合,原始集合),初始集合的属性都相当一维数组.为了表示数学模型中从货栈到客户的运输关系以及与此相关的运输单价ij c 和运量ij x ,再定义一个表示运输关系(路线)的集合:LINKS(WH,VD):C,X;该集合以初始集合WH 和VD 为基础,称为衍生集合(或称派生集合).C 和X 是该衍生集合的两个属性.衍生集合的定义语句有如下要素组成:(1)集合的名称; (2)对应的初始集合;(3)集合的成员(可以省略不写明); (4)集合的属性(可以没有).定义衍生集合时可以用罗列的方式将衍生集合的成员一一列出来,如果省略不写,则默认衍生集合的成员取它所对应初始集合的所有可能的组合,上述衍生集合LINKS 的定义中没有指明成员,而它对应的初始集合WH 有6个成员,VD 有8个成员,因此LINKS 成员取WH 和VD 的所有可能组合,即集合LINKS 有48个成员,48个成员可以排列成一个矩阵,其行数与集合WH 的成员个数相等,列数与VD 的成员个数相等.相应地,集合LINKS 的属性C 和X 都相当于二维数组,各有48个分量,C 表示货栈i w 到客户j v 的单位货物运价,X 表示货栈i w i w 到客户jv的运量.本模型完整的集合定义为: SETS:WH/W1..W6/:AI; VD/V1..V8/:DJ; LINKS(WH,VD):C:X; ENDSETS注 集合定义部分以语句SETS :开始,一语句ENDSETS 结束,这两个语句必须单独成一行.ENDSETS 后面不加标点符号.2.数据初始化(数据段)以上集合中属性X (有48个分量)是决策变量,是待求未知数,属性AI 、DJ 和C (分别有6,8,48个分量)都是已知数,LINGO 建模语言通过数据初始化部分来实现对已知属性赋以初始值,格式为:DATA:AI=60,55,43,41,52;DJ=35,37,22,32,41,32,43,38; C=6,2,6,7,4,2,5,9 4,9,5,3,8,5,8,2 5,2,1,9,7,4,3,3 7,6,7,3,9,2,7,1 2,3,9,5,7,2,6,5 5,5,2,2,8,1,4,3; ENDDATA注 数据初始化部分以语句DATA :开始,以语句ENDDATA 结束,这两个语句必须单独成一行.数据之间的逗号和空格可以互相替换.3.目标函数和约束条件 目标函数表达式∑∑===6181mini j ij ij x c z 用LINGO 语句表示为:MIN=@SUM(LINKS(I,J):C(I,J)*X(I,J));式中@SUM 是LINGO 提供的内部函数,其作用是对某个集合的所有成员,求指定表达式的和,该函数需要两个参数,第一个参数是集合名称,指定对该集合的所有成员求和,如果此集合是一个初始集合,它有m 个成员,则求和运算对这m 个成员进行,相当于求∑=mi 1,第二个参数是一个表达式,表示求和运算对该表达式进行.此处@SUM 的第一个参数是LINKS(I,J),表达式求和运算对衍生集合LINKS 进行,该集合的维数是2,共有48个成员,运算规则是:先对48个成员分别求表达式C(I,J)*X(I,J)的值,然后求和,相当于求∑∑==6181i j ij ij x c ,表达式中的C 和X 是集合LINKS 的两个属性,它们各有48个分量.注 如果表达式中参与运算的属性属于同一个集合,则 @SUM 语句中索引(相当于矩阵或数组的下标)可以省略(隐藏),假如表达式中参与运算的属性属于不同的集合,则不能省略属性的索引.本例的目标函数可以表示成:MIN= (LINKS:C*X);约束条件)6,,2,1(81 =≤∑=i a x ij ij 实际上表示了6个表达式,用LINGO 语言表示该约束条件,语句为:@FOR(WH(I):@SUM(VD(J):X(I,J))<=AI(I));语句中的@FOR 是LINGO 提供的内部函数,它的作用是对某个集合的所有成员分别生成一个约束表达式,它有两个参数,第一个参数为WH ,它表示货栈,共有6个成员,故应生成6个约束表达式, @FOR 的第二个参数为是约束表达式的具体内容,此处再调用@SUM 函数,表示约束表达式的左边求和,是对集合VD 的8个成员,并且对表达式X(I,J)中第二维J 求和,即∑=81j ij x ,约束表达式的右边是集合WH 的属性AI ,它有个约束表达式一一对应.本语句中的属性分别属于不同的集合,所以不能省略索引I,J.注 @SUM 和@FOR 函数可以嵌套使用.同样地,约束条件8,,2,1,61 ==∑=j d x j j ij 用LINGO 语句表示为:@FOR(VD(J):@SUM(WH(I):X(I,J))=DJ(J)); 4. 完整的模型综上所述,本问题完整的LINGO 模型如下: MODEL: SETS:WH/W1..W6/:AI; VD/V1..V8/:DJ; LINKS(WH,VD):C,X; ENDSETS DATA:AI=60,55,43,41,52;DJ=35,37,22,32,41,32,43,38; C=6,2,6,7,4,2,5,94,9,5,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;ENDDATAMIN=@SUM(LINKS(I,J):C(I,J)*X(I,J)); !目标函数;@FOR(WH(I):@SUM(VD(J):X(I,J))<=AI(I)); !约束条件;@FOR(VD(J):@SUM(WH(I):X(I,J))=DJ(J));END注 LINGO模型以语句MODEL:开始,以语句END结束,这两个语句单独成一行.完整的模型由集合定义、数据段、目标函数和约束条件等部分所组成,这几个部分的先后次序无关紧要,!开头的语句是注释语句(可有可无).选菜单Lingo|Solve(或按Ctrl+S),或鼠标点击“求解”按钮,在“Solution Report”信息窗口中,看到具体求解结果为:Global optimal solution found at step: 17(计算步骤数)Objective value: 664.0000(目标函数值)Variable Value Reduced Cost(以下是调运方案) X(W1,V1) 0.0000000 5.000000X(W1,V2) 19.00000 0.000000……(以上省略了X(W1,V3)至X(W6,V6)的具体数值)X(W6,V7) 3.000000 0.000000X(W6,V8) 0.0000000 3.000000计算结果表明:目标函数值为664.0000,最优运输方案见表1.2.2.表1.2.2 最优运输方案问题:1.用LINGO 求解下列方程组的所有实数解:(1)⎩⎨⎧=+-=+.09.075.0,1322y x y x (2)⎩⎨⎧=+++=+.42,22222y y x x y x 2. 已知方程组⎪⎩⎪⎨⎧-=++=,9002600,)1300(13750022y y x u u y 且22236≤+y x ,其中x,y 是变量,u 是常数,问u 在什么范围内时该方程组有解?若u=1.2,求该方程组的解.3. 用LINGO 求解下列线性规划:(1)432181026m ax x x x x z +++=,⎪⎪⎩⎪⎪⎨⎧=≥≤++-≤++-≤--+.4,,1,0,10324,258233,204465..432143214321 i x x x x x x x x x x x x x t s i (2)65432181121110913m ax x x x x x x z +++++=,⎪⎪⎪⎪⎩⎪⎪⎪⎪⎨⎧=≥≤++≤++=+=+=+.6,,1,0,9003.12.15.0,8001.14.0,500,600,400..654321635241 i x x x x x x x x x x x x x t s i4.求解下列非线性规划:(1)21m in x x z --=,⎪⎩⎪⎨⎧≤≤≤≤+-+-≤++-≤.40,30,369688324,2882..21121314122131412x x x x x x x x x x x t s 5.用LINGO 求函数x x x x x x x f sin 502.05.1202.09)(5432++-+-=在区间(2,8)内的极小值点和极小值6.求函数)ln cos 5.1()(3x x x x e x f x ++=-在区间(0.2,4)内的极小点和极小值以及极大值点和极大值..(提示:sinx 表示为@sin(x), cosx 示为 @cos(x), lnx 表示为 @log(x), e x 表示为@exp(x))(本资料素材和资料部分来自网络,仅供参考。
第1讲Lingo软件基础学习(2014)

第1讲Lingo软件入门司守奎烟台市,海军航空工程学院数学教研室Email:sishoukui@1 Lingo软件的基本语法1.1 集合集合部分的语法为sets:集合名称1/成员列表1/:属性1_1,属性1_2,…,属性1_n1;集合名称2/成员列表2/:属性2_1,属性2_2,…,属性2_n2;派生集合名称(集合名称1,集合名称2):属性3_1,…,属性3_n3;endsets例26sets:product/A B/;machine/M N/;week/1..2/;allowed(product,machine,week):x;endsets1.2 数据数据部分的语法为data:属性1=数据列表;属性2=数据列表;enddata1.3 计算计算段部分不能含有变量,必须是已知数据的运算。
calc:b=0;a=a+1;endcalc1.4 模型的目标函数和约束条件这里就不具体给出了,下面通过具体例子给出。
1.5 子模型在LINGO 9.0 及更早的版本中,在每个LINGO 模型窗口中只允许有一个优化模型,可以称为主模型(MAIN MODEL)。
在LINGO 10.0 中,每个LINGO 模型窗口中除了主模型外,用户还可以定义子模型(SUBMODEL)。
子模型可以在主模型的计算段中被调用,这就进一步增强了LINGO 的编程能力。
子模型必须包含在主模型之内,即必须位于以“MODEL:”开头、以“END”结束的模块内。
同一个主模型中,允许定义多个子模型,所以每个子模型本身必须命名,其基本语法是:SUBMODEL mymodel:可执行语句(约束+目标函数);ENDSUBMODEL其中mymodel 是该子模型的名字,可执行语句一般是一些约束语句,也可能包含目标函数,但不可以有自身单独的集合段、数据段、初始段和计算段。
也就是说,同一个主模型内的变量都是全局变量,这些变量对主模型和所有子模型同样有效。
如果已经定义了子模型mymodel,则在计算段中可以用语句“@SOLVE( mymodel);”求解这个子模型。
2024年度LINGO基本教程完整版PPT大纲

2024/2/2
1
目录
2024/2/2
• 引言 • LINGO编程基础 • 线性规划问题求解 • 整数规划与非线性规划问题求解 • 约束条件处理技巧 • 优化算法介绍与应用 • 实际问题建模与求解案例分析 • 课程总结与展望
2
01
引言
Chapter
2024/2/2
拉格朗日乘子法
引入拉格朗日乘子,构造拉格朗 日函数,将等式约束问题转化为 无约束优化问题。
罚函数法
将等式约束条件转化为某种形式 的罚函数,加入到目标函数中, 通过求解无约束优化问题得到近 似解。
2024/2/2
22
不等式约束条件处理方法
积极约束法
将不等式约束条件转化为等式约束条件,引 入松弛变量,构造新的目标函数进行求解。
24
06
优化算法介绍与应用
Chapter
2024/2/2
25
梯度下降法原理及在LINGO中实现
01
梯度下降法基本原理
通过迭代求解目标函数的最小值,每次迭代沿着当前位置的负梯度方向
前进一段距离,直到达到最小值或满足停止条件。
2024/2/2
02 03
LINGO中实现梯度下降法
在LINGO中,可以使用内置函数或自定义程序来实现梯度下降法。需要 定义目标函数、梯度函数和迭代步长等参数,并通过循环迭代来逼近最 小值。
在LINGO中,可以使用内置函数或自定义程序来实现牛顿 法。需要定义目标函数、一阶导数和二阶导数等参数,并 通过循环迭代来逼近根。
牛顿法的优缺点
牛顿法具有收敛速度快、精度高等优点,但需要计算二阶 导数矩阵,计算量较大,且对初始值有一定要求。
《LINGO简介》课件

某些复杂的数学表达可能无法直接在 LINGO中表示。用户可以通过混合编 程或使用其他建模语言(如GAMS) 来解决这一问题。
对于特定行业或领域的定制化需求, LINGO可能无法直接提供相应的功能 。在这种情况下,用户可以通过扩展 LINGO的API或与其他软件的集成来 实现定制化需求。
感谢您的观看
目标函数的设置
目标函数定义
在LINGO中,需要定义一个目标函数来描述决策变量 的优化目标。
目标函数类型
目标函数可以是最大化或最小化形式,根据实际问题 的需求进行选择。
目标函数编辑器
LINGO提供了一个目标函数编辑器,用户可以在其中 方便地定义和编辑目标函数。
求解操作
求解器选择
在LINGO中,可以选择不同的求解器 来求解模型,根据模型的规模和复杂
LINGO软件广泛应用于生产计划、资源分配 、工艺流程优化等方面。
物流运输
LINGO软件用于运输路线规划、车辆调度、 仓储优化等问题求解。
金融投资
LINGO软件用于投资组合优化、风险管理、 信贷决策等问题求解。
科研领域
LINGO软件在数学建模、统计分析、机器学 习等领域有广泛应用。
02
LINGO软件的基本操作
物流配送问题
总结词
物流配送问题是一个复杂的优化问题,LINGO软件能够通过建立有效的数学模型,优化配送路线和成本。
详细描述
物流配送问题涉及到如何合理规划配送路线、分配运输资源,以最小化运输成本并确保及时送达。LINGO软件通 过构建配送问题的数学模型,帮助企业找到最优的配送方案,降低运输成本、提高运输效率。
LINGO软件与其他软件的比较与选择
MATLAB
MATLAB在科学计算和数据分析领域具有广泛的应用,但 相比之下,LINGO在求解优化问题方面更加专业和高效。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
s.t
3x1 2x2
x1
,
x2
,
x3
,
6x3 10x4 x4 0或1
10
4、非线性规划
min z |x1 | 2 | x2 | 3 | x3 | 4 | x4 |
x1
x2
x3
x4
0
s.t.x1 x2 x3 3x4 1
x1
x2
2x3
3x4
1 2
5、背包问题
一个旅行者的背包最多只能装 6kg 物品,现有4 件物品的重量和价值分别为 2 kg,3kg,3 kg, 4 kg;1 万元,1.2 万元,0.9 万元,1.1 万元。 问应怎样携带那些物品使得携带物品的价值最大?
LINGO的基本用法的几点注意事项
•语句是组成LINGO模型的基本单位,每个语句都 以分号“;”结尾,编写程序时应注意模型的可读 性。例如:一行只写一个语句,按照语句之间的嵌套
关系对语句安排适当的缩进,增强层次感。
•以感叹号“!”开始的是说明语句(说明语句也 需要以分号结束)。
Lingo简单引例
1、简单线性规划求解
一个简单的LINGO程序
LINGO的基本用法的几点注意事项
•LINGO中不区分大小写字母;变量和行名可以 超过8个字符,但不能超过32个字符,且必须以 字母开头。
•用LINGO解优化模型时已假定所有变量非负(除 非用限定变量取值范围的函数@free或@sub或 @slb另行说明)。
一个简单的LINGO程序
数学规划
g j (x) 0, j 1,...,l x D n
连 • 线性规划(LP) 目标和约束均为线性函数
续 优
• 非线性规划(NLP) 目标或约束中存在非线性函数
化 ✓ 二次规划(QP) 目标为二次函数、约束为线性
• 整数规划(IP) 决策变量(全部或部分)为整数
离 散
✓ 整数线性规划(ILP),整数非线性规划(INLP)
LINGO的界面
• LINGO软件的主窗口(用 户界面),所有其他窗口 都在这个窗口之内。
• 状态行(最左边显 示“Ready”,表示
“准备就绪”)
• 当前光标 的位置
• 模型窗口(Model Window),用于输入 LINGO优化模型(即 LINGO程序)。
• 当前时间
LINGO的文件类型
•.LG4:LINGO格式的模型文件,保存了模型窗口中所 能够看到的所有文本和其他对象及其格式信息;
max z 4x1 3x2
2x1 x2 10
S.T
x1 x2
x2 7
8
x1, x2 0
决策变量 x1, x2
2、整数规划
m ax z 40x1 90x2
9x1 7x2 56
S.T.7x1 20x2 70
x1
,
x2
0并且为整数
3、0/1规划求解
m ax f x12 0.4x2 0.8x3 1.5x4
目前为止的 迭代次数
当前约束不满足的总量(不是不 满足的约束的个数):实数(即使 该值=0,当前解也可能不可行, 因为这个量中没有考虑用上下界 命令形式给出的约束)
• 运行状态窗口
使用的特殊求解程序 : B-and-B (分枝定界算法) Global (全局最优求解程序) Multistart(用多个初始点求解的程序)
第一次运行时提示输入授权密码,如图:
LINGO软件的主要特色
两种命令模式 Windows模式: 通过下拉式菜单命令驱动LINGO运 行(多数菜单命令有快捷键,常用的菜单命令有快捷 按钮),图形界面,使用方便; (这里主要介绍这种模式)
命令行 模式:仅在命令窗口(Command Window)下操 作,通过输入行命令驱动LINGO运行 。
局部最优解与整体最优解
f(x)
* x1
ox2 x
• 局部最优解 (Local Optimal Solution, 如 x1 ) • 整体最优解 (Global Optimal Solution, 如 x2 )
优化模型的
min f (x)
简单分类
s.t. hi (x) 0, i 1,...,m
(6)能方便地与Excel、数据库等其他软件 交换数据。
优化模型和算法的重要意义
最优化: 在一定条件下,寻求使目标最大(小)的决策 最优化是工程技术、经济管理、科学研究、社 会生活中经常遇到的问题, 如:
结构设计 资源分配 生产计划 运输方案
解决优化问题的手段 • 经验积累,主观判断 • 作试验,比优劣 • 建立数学模型,求解最优策略
物品(j)
1
重量(kg)
2
价值(万元)
1
2
3
4
3
3
4
1.2
0.9
1.1
5、背包问题
x 建模:记 j 为旅行者携带第j 件物品的件数, 取
值只能为 0 或 1。 求目标函数的最大值:
f x1 1.2x2 0.9x3 1.1x4
约束条件:
2x1 3x2 3x3 4x4 6
用Lingo 软件求解0-1 规划
优 ✓ 纯整数规划(PIP), 混合整数规划(MIP)
化 ✓ 一般整数规划,0-1(整数)规划
优化模型的简单分类和求解难度
优化
连续优化
整数规划
线性规划
二次规划
非线性规划
问题求解的难度增加
Lingo软件基本认识
LINGO软件的安装
安装过程: 与LINDO for Windows类似.
安装文件20M多一点,需要接受安装协议、选择安装 目录(缺省C:\LINGO9)。 安装完成前,在出现的对话框(如图)中选择缺省的建 模(即编程)语言,系统推荐的是采用LINGO。安装后 可通过“LINGO|Options|File Format”命令修改缺省 的建模(即编程)语言。
•.MPS:示MPS(数学规划系统)格式的模型文件。
在LINGO中使用LINDO模型
在LINGO中可以直接使用LINDO语法编写的优化模型(即优化程序)。
① 选择菜单命令 “File|Open(F3)”, 可以看到 “打开文 件”对话框。 (如 图)
• 运行状态窗口
Variables(变量数量): 变量总数(Total)、 非线性变量数(Nonlinear)、 整数变量数(Integer)。
优化建模与Lingo 快速入门
培训内容
1、Lingo 概况及优化模型认识 2、 Lingo软件基本认识 3、 Lingo简单引例 4、Lingo集合、运算符和函数 5、 Lingo建模简例
1、Lingo概况
Lingo 使 美 国 Lindo 系 统 公 司 ( Lindo System Inc)开发的求解数学规划系列 软件中的一个(其他软件为Lindo,GINO, What is Best等),它的主要功能是求解 大型线性、非线性和整数规划问题,目 前的版本常用是9.0版、11.0版、12.0版。
•限定变量取整数值的语句为“@GIN(X1)”和 “@GIN(X2)”。不可以写成“@GIN(2)”,否则LINGO 将把这个模型看成没有整数变量。
程序语句输入的备注:
•LINGO中函数一律需要以“@”开头
①整型变量函数@GIN ②上下界限定函数(@FREE、@SUB、@SLB) ③0-1变量函数是@BIN
扩展 的求 解器 (求解 程序) 状态 框
目前为止找到的可行 解的最佳目标函数值
有效步数
目标函数值的界
特殊求解程序当前运行步数: 分枝数(对B-and-B程序); 子问题数(对Global程序); 初始点数(对Multistart程序)
• 运行状态窗口
注:凡是可以从一个约束直接解出变量取值时,这个 变量就不认为是决策变量而是固定变量,不列入统计 中;只含有固定变量的约束也不列入约束统计中。
•.LNG:文本格式的模型文件,不保存模型中的格式信 息(如字体、颜色、嵌入对象等);
•.LDT:LINGO数据文件; •.LTF:LINGO命令脚本文件; •.LGR:LINGO报告文件; •.LTX: LINDO格式的模型文件;
除“LG4”文件外, 另外几种格式的文件 都是普通的文本文件, 可以用任何文本编辑 器打开和编辑。
Constraints(约束数量): 约束总数(Total)、 非线性约束个数(Nonlinear)。
Nonzeros(非零系数数量): 总数(Total)、 非线性项系数个数(Nonlinear)。
Generator Memory Used (K) (内存使用 量)
• Elapsed Runtime (hh:mm:ss) (求解花费的时间)
一个简单的LINGO程序
例 直接用LINGO来解如下二次规划问题:
Max 98x1 277x2 x12 0.3x1x2 2x22 1
s.t. x1 x2 100
2
x1 2x2
3
x1, x2 0 为整数
4
输入窗口如下:
程序语句输入的备注:
•LINGO总是根据“MAX=”或“MIN=”寻找目标函数, 而除注释语句和TITLE(标题)语句外的其他语句都是 约束条件,因此语句的顺序并不重要 。
•Lingo 中“<”代表“<=”,“>”代表“>=”
输出结果: 运行菜单命令“LINGO|Solve”
最大利润=11077.5
最优整数解 X=(35,65)
输出结果备注:
LINGO是将它作为PINLP(纯整数非线性规划)来求解, 因此找到的是局部最优解。
通过菜单 “WINDOW| Status Window”看到状态窗 口,可看到最佳目标值 “Best Obj”与问题的上界 “Obj Bound”已经是一样的, 当前解的最大利润与这两个 值非常接近,是计算误差引 起的。如果采用全局最优求 解程序(后面介绍),可以验 证它就是全局最优解。