您好,欢迎访问三七文档
数学建模LINGO优化软件LINGO软件简介•目标与约束段•集合段(SETSENDSETS)•数据段(DATAENDDATA)•初始段(INITENDINIT)•计算段(CALC)LINGO模型的构成:5个段LINGO模型的优点•包含了LINDO的全部功能•提供了灵活的编程语言(矩阵生成器)•外层是主框架窗口,包含了所有菜单命令和工具条,其它所有的窗口将被包含在主窗口之下。在主窗口内的标题为LINGOModel–LINGO1的窗口是LINGO的默认模型窗口,建立的模型都都要在该窗口内编码实现。下面举两个例子。1、LINGO快速入门当你在windows下开始运行LINGO系统时,会得到类似下面的一个窗口:例1.1如何在LINGO中求解如下的LP问题:0,6002100350..32min212112121xxxxxxxtsxx•在模型窗口中输入如下代码:•min=2*x1+3*x2;•x1+x2=350;•x1=100;•2*x1+x2=600;•然后点击工具条上的按钮即可LINGO的基本组成:•例6个仓库的库存货物总数分别为60,55,51,43,41,52,8个客户各要货物分别是35,37,22,32,41,32,43,38,仓库到客户的单位货物运输价如下表:使总运费最小?v1v2v3v4v5v6v7v8w162674259w249538582w352197433w476739271w523957265w655228143解:设xij表示从i仓库至j客户的运量,cij表示从i仓库至j客户的单位运价,ai表示从i仓库库存量,bj表示从j客户需求量。•目标:总运费最少;约束(1)各仓库运出量不能大于其库存(2)各客户收到货物总量等于其订货量(3)xij非负.8,,1,6,,1,0,8,,2,1,b,6,,2,1,..min61816181LLLLjixjxiaxtsxczijjiijijijijijij定义集合部分:集合是一组相关对象构成的组合代表模型中的实物,并与变量常量关联。•集合有三部分:名称(实物)、成员(实物个数)、属性(变量与常量,相当于数组);如仓库集合:WH(实物);w1..w6(6个成员);AI(仓库的库存量,是个含有6个成员的一维数组)定义如下:•WH/w1..w6/:AI;VD/v1..v8/:DJ;•运费、运量都是与仓库、客户相关联,定义如下:•LINKS(WH,VD):C,X;!此为派生集,要有如下要素•名称;对应初始集;集合成员(可选);集合的属性(可以没有);SETS:!单独成行,有标点:WH/w1..w6/:AI;VD/v1..v8/:DJ;LINKS(WH,VD):C,X;ENDSETS!单独成行,无标点2.数据初始化:DATA:AI=60,55,51,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,3ENDDATA目标函数与约束条件:•MIN=@SUM(LINKS(I,J):C(I,J)*X(I,J));6181minijijijxcz@SUM(参数1:参数2):用来求指定表达式的和;参数1是集合名称,对指定集合的满足条件的成员求和;参数2是表达式,表示对该表达式进行求和。I,J是下标,若参与运算的属性属于同一集合,下标可省。LINKS(I,J)共有48个成员,先对48个成员求表达式C(I,J)*X(I,J),然后求和。•MIN=@SUM(LINKS:C*X);约束条件:•有6个约束不等式,且是关于集合仓库的,而且每个不等式的左边是求和:,6,,2,1,81iaxijij@FOR(WH(I):@SUM(VD(J):X(I,J))=AI(I));@FOR(参数1:参数2);对某个集合的所有成员分别生成一个约束条件;参数1表示对满足条件的集合成员生成对应的约束表达式,本例表示对WH的6个成员生成6个不等式;参数2是约束表达式的具体内容。,8,,2,1,61jdxjiij@FOR(VD(J):@SUM(WH(I):X(I,J))=DJ(j));MODEL:SETS:WH/w1..w6/:AI;VD/v1..v8/:DJ;LINKS(WH,VD):C,X;ENDSETSDATA:AI=60,55,51,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(VD(J):@SUM(WH(I):X(I,J))=DJ(j));@FOR(WH(I):@SUM(VD(J):X(I,J))=AI(I));ENDLINGO模型—例:选址问题某公司有6个建筑工地,位置坐标为(ai,bi)(单位:公里),水泥日用量di(单位:吨)i123456a1.258.750.55.7537.25b1.250.754.7556.57.75d35476111)现有2料场,位于A(5,1),B(2,7),记(xj,yj),j=1,2,日储量ej各有20吨。假设:料场和工地之间有直线道路目标:制定每天的供应计划,即从A,B两料场分别向各工地运送多少吨水泥,使总的吨公里数最小。用例中数据计算,最优解为i1234561ic(料场A)3507012ic(料场B)0040610总吨公里数为136.22,1,6,...,1,..])()[(min612121612/122jecidctsbyaxcjijiiijjjiijijij线性规划模型决策变量:cij(料场j到工地i的运量)~12维MODEL:SETS:gd/1..6/:a,b,d;lch/A,B/:x,y,e;LINKS(gd,lch):C;ENDSETSDATA:a=1.25,8.75,0.5,5.75,3,7.25;b=1.25,0.75,4.75,5,6.5,7.75;d=3,5,4,7,6,11;x=5,2;y=1,7;e=20,20;ENDDATAmin=@sum(links(i,j):c(i,j)*((x(j)-a(i))^2+(y(j)-b(i))^2)^(1/2));@for(lch(j):@SUM(gd(i):c(i,j))=e(j));@for(gd(i):@SUM(lch(j):c(i,j))=d(i));选址问题:NLP2)改建两个新料场,需要确定新料场位置(xj,yj)和运量cij,在其它条件不变下使总吨公里数最小。2,1,6,...,1,..])()[(min612121612/122jecidctsbyaxcjijiiijjjiijijij决策变量:cij,(xj,yj)~16维非线性规划模型MODEL:SETS:gd/1..6/:a,b,d;lch/A,B/:x,y,e;LINKS(gd,lch):C;ENDSETSDATA:a=1.25,8.75,0.5,5.75,3,7.25;b=1.25,0.75,4.75,5,6.5,7.75;d=3,5,4,7,6,11;e=20,20;ENDDATAmin=@sum(links(i,j):c(i,j)*((x(j)-a(i))^2+(y(j)-b(i))^2)^(1/2));@for(lch(j):@SUM(gd(i):c(i,j))=e(j));@for(gd(i):@SUM(lch(j):c(i,j))=d(i));LINGO函数LINGO有9种类型的函数:1.基本运算符:包括算术运算符、逻辑运算符和关系运算符2.数学函数:三角函数和常规的数学函数3.金融函数:LINGO提供的两种金融函数4.概率函数:LINGO提供了大量概率相关的函数5.变量界定函数:这类函数用来定义变量的取值范围6.集操作函数:这类函数为对集的操作提供帮助7.集循环函数:遍历集的元素,执行一定的操作的函数8.数据输入输出函数:这类函数允许模型和外部数据源相联系,进行数据的输入输出9.辅助函数:各种杂类函数运算符的优先级优先级运算符最高#NOT#—(负号)^*/+—(减法)#EQ##NE##GT##GE##LT##LE##AND##OR#最低(=)=(=)三类运算符:算术运算符逻辑运算符关系运算符算术运算符算术运算符是针对数值进行操作的。LINGO提供了5种二元运算符:^乘方﹡乘/除﹢加﹣减LINGO唯一的一元算术运算符是取反函数“﹣”。这些运算符的优先级由高到底为:高﹣(取反)^﹡/低﹢﹣逻辑运算符在LINGO中,逻辑运算符主要用于集循环函数的条件表达式中,来控制在函数中哪些集成员被包含,哪些被排斥。在创建稀疏集时用在成员资格过滤器中。•#not#否定该操作数的逻辑值,#not#是一个一元运算符•#eq#若两个运算数相等,则为true;否则为flase•#ne#若两个运算符不相等,则为true;否则为flase•#gt#若左边的运算符严格大于右边的运算符,则为true;否则为flase•#ge#若左边的运算符大于或等于右边的运算符,则为true;否则为flase•#lt#若左边的运算符严格小于右边的运算符,则为true;否则为flase•#le#若左边的运算符小于或等于右边的运算符,则为true;否则为flase•#and#仅当两个参数都为true时,结果为true;否则为flase•#or#仅当两个参数都为false时,结果为false;否则为true2#gt#3#and#4#gt#2,其结果为假(0)关系运算符•在LINGO中,关系运算符主要是被用在模型中,来指定一个表达式的左边是否等于、小于等于、或者大于等于右边,形成模型的一个约束条件。关系运算符与逻辑运算符#eq#、#le#、#ge#截然不同,前者是模型中该关系运算符所指定关系的为真描述,而后者仅仅判断一个该关系是否被满足:满足为真,不满足为假。•LINGO有三种关系运算符:“=”、“=”和“=”。LINGO中还能用“”表示小于等于关系,“”表示大于等于关系。LINGO并不支持严格小于和严格大于关系运算符。然而,如果需要严格小于和严格大于关系,比如让A严格小于B:AB,那么可以把它变成如下的小于等于表达式:•A+ε=B,•这里ε是一个小的正数,它的值依赖于模型中A小于B多少才算不等。数学函数•@abs(x)返回x的绝对值•@sin(x)返回x的正弦值,x采用弧度制•@cos(x)返回x的余弦值•@tan(x)返回x的正切值•@exp(x)返回常数e的x次方•@log(x)返回x的自然对数•@lgm(x)返回x的gamma函数的自然对数•@sign(x)如果x0返回-1;否则,返回1LINGO9.0版本•@mod(x,y)返回X除以Y的余数(X,Y都是整数)•@pow(x,y)返回指数XY的值,等价于X^Y•@sqr(x)返回x的平方值即X^2•@sqrt(x)返回x的正的平方根即X^(1/2)•@floor(x)返回x的整数部分。当x=0时,返回不超过x的最大整数;当x0时,返回不低于x的最大整数。•@smax(x1,x2,…,xn)返回x1,x2,…,xn中的最大值•@smin(x1,x2,…,xn)返回x1,x2,…,xn中的最小值变量界定函数•变量界定函数实现对变量取值范围的附加限制,共4种:•@bin(x)限制x为0或1•@bnd(L,x,U)限制L≤x≤U•@free(x)取消对变量x的默认下界为0的限制,•即x可以取任意实数•@gin(x)限制x为整数•在默认情况下,LINGO规定变量是非
本文标题:LINGO教程讲解
链接地址:https://www.777doc.com/doc-4759362 .html