您好,欢迎访问三七文档
LINGO教程共53页1LINGO教程LINGO是用来求解线性和非线性优化问题的简易工具。LINGO内置了一种建立最优化模型的语言,可以简便地表达大规模问题,利用LINGO高效的求解器可快速求解并分析结果。§1LINGO快速入门安装:实验室的所有电脑都已经事先安装好了Lingo8(或者9,10,11)。如果要在自己的电脑上安装这个软件,建议从网上下载一个破解版的,按照提示一步一步地安装完毕。简单例子:当你在windows系统下开始运行LINGO时,会得到类似于下面的一个窗口:外层是主框架窗口,包含了所有菜单命令和工具条,其它所有的窗口将被包含在主窗口之下。在主窗口内的标题为LINGOModel–LINGO1的窗口是LINGO的默认模型窗口,建立的模型都要在该窗口内编码实现。下面举两个例子。例1某工厂在计划期内要安排生产I、II两种产品,已知生产单位产品所需的设备台时及A、B两种原材料的消耗,如表所示。产品I产品II设备128台时原材料A4016kg原材料B0412kgLINGO教程共53页2该工厂每生产一件产品I可获利2元,每生产一件产品II可获利3元,问应该如何安排生产计划使该厂获利最多?我们用下面的数学模型来描述这个问题。设x_1、x_2分别表示在计划期内产品I、II的产量。因为设备的有效台时是8,这是一个限制产量的条件,所以在确定产品I、II的产量时,要考虑不超过设备的有效台时数,即可用不等式表示为x_1+2x_2=8同理,因原材料A、B的限量,可以得到以下不等式4x_1=164x_2=12该工厂的目标是在不超过所有资源限量的条件下,如何确定产量x_1、x_2以得到最大的利润。若用z表示利润,这时z=2x_1+3x_2.综合上述,该计划问题可用数学模型表示为:目标函数maxz=2x_1+3x_2约束条件x_1+2x_2=84x_1=164x_2=12x_1、x_2=0一般来说,一个优化模型将由以下三部分组成:1.目标函数(ObjectiveFunction):要达到的目标。2.决策变量(Decisionvariables):每组决策变量的值代表一种方案。在优化模型中需要确定决策变量的最优值,优化的目标就是找到决策变量的最优值使得目标函数取得最优。3.约束条件(Constraints):对于决策变量的一些约束,它限定决策变量可以取的值。在写数学模型时,一般第一行是目标函数,接下来是约束条件,再接着是一些非负限制等。在模型窗口输入如下代码:Max=2*x1+3*x2;!Thisisalinearprogram.X1+2*x2=8;LINGO教程共53页34*x116;4*x212;注意:1.每一个lingo表达式最后要跟一个分号;2.多数电脑中没有符号,lingo中=代替;为了方便可以用代替小于等于,用代替大于等于。3.我们可以添加一些注释,增加程序的可读性。注释以一个!(叹号必须在英文状态下输入,它会自动变为绿色)开始,以;(分号)结束。4.Lingo中不区分变量名的大小写。变量名必须以字母(A-Z)开头,后面的字符可以是字母、数字、下划线。变量名不能超过32个字符。点击工具栏上的按钮或者用Lingo菜单下的solve求解这个模型,如果模型没有语法错误,即可得到如下结果。Globaloptimalsolutionfound.已经找到全局最优解Objectivevalue:14.00000目标函数值Infeasibilities:0.000000不可行的约束数Totalsolveriterations:1迭代次数VariableValueReducedCostX14.0000000.000000X22.0000000.000000RowSlackorSurplusDualPrice114.000001.00000020.0000001.50000030.000000LINGO教程共53页40.125000044.0000000.000000ReducedCost()非基变量变为基变量时目标函数的系数必须的增加值。DualPrice(对偶价格或者影子价格)在编译阶段没有语法错误,lingo会调用内部的求解器开始为你的模型搜索最优解,还最后会显示一个求解状态窗口:求解状态窗口内各项:VariablesBox(变量框)Total:模型中的变量总个数(totalnumberofvariablesinthemodel)Nonlinear:模型中非线形变量的个数(thenumberofthetotalvariablesthatarenonlinear)注:X*X+Y=100;中X是非线性变量,Y是线性变量。Integer:模型中整数变量的个数(totalnumberofintegervariablesinthemodel)LINGO教程共53页5注意:计算各种变量个数时,不计算可以确定变量值的变量。如:如果约束条件中x=10,那么这个变量不被看做是一个变量ConstraintsBoxTotal:所有的约束条件个数(totalconstraintsintheexpandedmodel)Nonlinear:所有的非线性约束的个数(thenumberoftheseconstraintsthatarenonlinear)NonzeroesBox(约束框)Total:模型中非零系数的个数。Nonlinear:非线性变量个数。如果一个约束条件里中的所有变量都是确定的,则约束条件不进行计数。TheNonzerosboxshowsthetotalnonzerocoefficientsinthemodelandthenumberofthesethatappearonnonlinearvariablesNonzeroesBox(非零框)显示该模型的总非零系数和非线性的这些变量出现的数目。GeneratorMemoryUsedBox求解时使用的内存量ElapsedRuntimeBox求解模型时用的时间,这个会受电脑运行的其他程序的影响。SolverStatusBoxFieldDescriptionModelClassDisplaysthemodel’sclassification.PossibleclassesareLP(线性规划),QP(二次规划),ILP(整数线性规划),IQP(整数二次规划),PILP(纯整数线性规划),PIQP(纯整数二次规划),NLP(非线性规划),INLP(整数非线性规划),andPINLP(纯整数非线性规划).StateGivestheStatusofthecurrentsolution.LINGO教程共53页6PossiblestatesareGlobalOptimum(全局最优),LocalOptimum(局部最优),Feasible(可行),Infeasible(不可行),Unbounded(无界),Interrupted(中断),andUndetermined(不确定).Objective目标函数的当前值Currentvalueoftheobjectivefunction.Infeasibility约束条件冲突的个数IterationsNumberofsolveriterations.(算法的迭代次数)ExtendedSolverStatusBoxFieldDescriptionSolverTypeThetypeofspecializedsolverinuse,andwillbeeitherB-and-B(分支定界法),Global(全局最优求解法),orMultistart(多个初始点求解法).BestObjTheobjectivevalueofthebestsolutionfoundsofar.(目前得到的最优解对应的目标函数值)ObjBoundThetheoreticalboundontheobjective.(目标函数值的理论上下界)StepsThenumberofstepstakenbytheextendedsolver.(特殊的几种求解程序运行的步骤数:如分支定界法已求解的分支数,全局最优法已求解的子问题数)ActiveThenumberofactivesubproblemsremainingtobeanalyzed(有效的步数)。Lingo程序的一些规则:1.在Lingo中最开始都是“MAX=”或者“MIN=”开始表示求目标函数的最大或者最小值。2.变量和它前面的系数之间要用“*”连接,中间可以有空格。3.变量名不区分大小写,但必须以字母开始,不超过32个字符。4.数学表达式结束时要用分号“;”表示结束。表达式可以写在多行上,但是表达式中间不能用分号。LINGO教程共53页75.在电脑系统中一般没有“小于等于”符号,在Lingo采用“=”来表示“小于等于”,用“=”表示“大于等于”。小于等于也可以用更简单的“”表示,大于等于用“”表示。Lingo模型语言:例1.2运输问题使用LINGO软件计算6个仓库8个销售地的最小费用运输问题。产销单位运价如下表。单位销地运价产地V1V2V3V4V5V6V7V8库存量WH16267425960WH24953858255WH35219743351WH47673927143WH52395726541WH65522814352需求量3537223241324338设VOLUME_i_j为从仓库i运送到销售地j那里的货物量,那么我们的目标函数可以表示为:MIN=6*VOLUME_1_1+2*VOLUME_1_2+6*VOLUME_1_3+7*VOLUME_1_4+4*VOLUME_1_5+...8*VOLUME_6_5+VOLUME_6_6+4*VOLUME_6_7+3*VOLUME_6_8;这里我们只列出了48个项中的9项,输入这么多的数据非常麻烦,而且容易出错。而运用Lingo提供的模型语言则可以很容易的来描述这个目标函数,而且很容易扩充模型。LINGO教程共53页8在数学上可以用数学符号表示目标函数为:MinimizeΣijCOSTij•VOLUMEij运用Lingo模型语言来描述上面的目标函数,这样的描述简短,容易输入,容易读,更容易理解。MIN=@SUM(LINKS(I,J):COST(I,J)*VOLUME(I,J));也就是说,在仓库和销售地之间的所有可能运送调价下求运送总运费最小。下面比较一些数学表述和Lingos的语法MathNotationLINGOSyntaxMinimizeMIN=Σij@SUM(LINKS(I,J):)COSTijCOST(I,J)•*VOLUMEijVOLUME(I,J)接下来看约束条件:在模型里有两类约束,第一类是销售地要得到需要的货物量,我们称这类约束为需求约束。第二类称为容量限制,每个仓库运出的货物量不能大于它的库存量。先考虑第一个销售地的约束,VOLUME_1_1+VOLUME_2_1+VOLUME_3_1+VOLUME_4_1+VOLUME_5_1+VOLUME_6_1=35;剩下还要输入7个类似的约束。用运用数学符号表述这个约束:ΣiVOLUMEij=DEMANDj,对每个销售地j成立。对应的Lingo模型语言描述是:@FOR(VENDORS(J):@SUM(WAREHOUSES(I):VOLUME(I,J))=DEMAND(J));比较一些数学符号和Lingo语法MathNotationLINGOSyntax对于每个销售地j@FOR(VENDORS(J):LINGO教程共53页9Σi@SUM(WAREHOUSES(I):VOLUMEijVOLUME(I,J))==DEMANDjDEMAND(J));类似的仓库的容量限制用Lingo语言描述为:@FOR(WAREHOUSES(I):@SUM(VENDORS(J):VOLUME(I,J))=CAPACITY(I));目前我们得到下面的Lingo模型:MODEL:MIN=@SUM(LINKS(I,J):COST
本文标题:Lingo教程
链接地址:https://www.777doc.com/doc-4472943 .html