• 1.50 MB
  • 2022-04-29 14:26:52 发布

最新学习LINGO语言课件ppt课件PPT课件

  • 152页
  • 当前文档由用户上传发布,收益归属用户
  1. 1、本文档共5页,可阅读全部内容。
  2. 2、本文档内容版权归属内容提供方,所产生的收益全部归内容提供方所有。如果您对本文有版权争议,可选择认领,认领后既往收益都归您。
  3. 3、本文档由用户上传,本站不保证质量和数量令人满意,可能有诸多瑕疵,付费之前,请仔细先通过免费阅读内容等途径辨别内容交易风险。如存在严重挂羊头卖狗肉之情形,可联系本站下载客服投诉处理。
  4. 文档侵权举报电话:19940600175。
'学习LINGO语言课件ppt课件 一.优化模型与优化软件简介二.LINGO软件的基本使用方法Outline三.LINGO程序流程控制和子模型11/21/2021 建模时需要注意的几个基本问题1、尽量使用实数优化,减少整数约束和整数变量2、尽量使用光滑优化,减少非光滑约束的个数如:尽量少使用绝对值、符号函数、多个变量求最大/最小值、四舍五入、取整函数等11/21/2021 建模时需要注意的几个基本问题3、尽量使用线性模型,减少非线性约束和非线性变量的个数(如x/y<5改为x<5y)4、合理设定变量上下界,尽可能给出变量初始值5、模型中使用的参数数量级要适当(如小于103)11/21/2021 二.LINGO软件的基本使用方法11/21/2021 §1LINGO入门11/21/2021 max2x1+3x2St.4x1+3x2<=103x1+5x2<=12x1≥0x2≥0目标函数约束条件决策变量设有数学模型如下:11/21/2021 第一步:启动Lingo屏幕显示如下:标记LINGO的外窗口是主框架窗口,主框架窗口的上面包含所有的命令菜单和命令工具栏;标记LINGOMODEL-LINGO1的子窗口是一个新的、空白的模型窗口。11/21/2021 第二步:在模型窗口中输入模型model:max=2*x1+3*x2;4*x1+3*x2<10;3*x1+5*x2<12;endMax2x1+3x2St.4x1+3x2<=103x1+5x2<=12x1≥0x2≥011/21/2021 第三步:求解模型1)选择菜单LINGO|Solve或者按工具栏的11/21/2021 2)LINGO开始编译模型,如有语法错误将返回一个错误的消息并指明错误出现的位置;如果通过编译,LINGO将激活Solver运算器寻求模型的最优解;11/21/2021 3)首先出现solverstatus窗口,其作用是监控solver的进展和显示模型的维数等信息;11/21/2021 SolverStatus窗口11/21/2021 4)计算完成后出现SolutionReport窗口显示模型解的详细信息;11/21/2021 SolutionReport窗口Globaloptimalsolutionfoundatiteration:2Objectivevalue:7.454545VariableValueReducedCostx11.2727270.000000x21.6363640.000000RowSlackorSurplusDualPrice17.4545451.00000020.0000000.9090909E-0130.0000000.545454511/21/2021 ReducedCost:在max模型中:相应变量的reducedcost值表示当该变量每增加一个单位时目标函数减少的量。本例中此值均为011/21/2021 ReducedCost:ReducedCost值列出最优单纯形表中判别数所在行的变量的系数,表示当变量有微小变动时,目标函数的变化率。其中基变量的reducedcost值应为0,对于非基变量Xj,相应的reducedcost值表示当某个变量Xj增加一个单位时目标函数减少的量(max型问题)。本例中此值均为0。11/21/2021 SLACKORSURPLUS:给出约束条件的松驰变量或剩余变量的值;小于等于约束为松驰变量(SLACK);+大于等于约束为剩余变量(SURPLUS);-11/21/2021 DUALPRICES:对偶价格或影子价格DUALPRICES表示当对应约束有微小变动时,目标函数的变化率,即约束条件右端的常数项每增加一个单位,目标函数相应获得的改变量。显然,如果在最优解处约束正好取等号(紧约束),该值才可能不是0;对于非紧约束对该值必为0,表示对应约束中不等式右端项的微小扰动不影响目标函数。11/21/2021 §2Lingo的基本用法注意事项11/21/2021 1)每一个模型都以model:开始,又以end结束,也可省略此结构;11/21/2021 2)目标函数必须由min=或max=开头。11/21/2021 3)可以用<表示<=; 用>表示>=;Lingo无严格小于,欲使a=required(j));11/21/2021 @size(setname)返回集合setname中所包含的成员个数。11/21/2021 第二章LINGO与其它软件交换数据11/21/2021 拷贝、粘贴FromExelPastefromexel.lg411/21/2021 输入输出函数用来与外部数据源连接@text()、@ole()、@file()、@odbc()、@dual()11/21/2021 @file(‘filename’)在模型的集合和数据部分使用,从文本文件输入数据.11/21/2021 sets:warehouses/@file(‘1.txt’)/:capacity;vendors/@file(‘1.txt’)/:demand;links(warehouses,vendors):cost,volume;endsets运输实例的数据可以从文本文件输入:11/21/2021 data:capacity=@file("1.txt");demand=@file("1.txt");cost=@file("1.txt");enddata1.txt文件内容1.txt11/21/2021 @text(‘filename’)在模型的数据部分使用,向文本文件输出数据.Outputtotext.lg411/21/2021 @ole(‘spreadsheet_file’ [,range_name_list])在模型的数据和集合部分使用,与excel交换数据11/21/2021 运输实例的数据可以从Excel输入:sets:warehouses:capacity;vendors:demand;links(warehouses,vendors):cost,volume;endsets11/21/2021 data:warehouses,vendors,capacity,demand,cost=@ole(‘2.xls’,‘warehouses’, ‘vendors’,‘capacity’, ‘demand’, ‘cost’);enddata11/21/2021 在Excel中定义单元格范围名称的方法:①按鼠标左键拖曳选择单元格范围,②释放鼠标按钮,③选择“插入|名称|定义”,④输入希望的名字,⑤点击“确定”按钮。11/21/2021 2.xls从Excel输入数据.lg411/21/2021 @odbc(["data_source"[,"table_name"[,col_1"[,"col_2"...]]]])在模型的数据部分使用,与数据库进行数据传输11/21/2021 运输实例的数据可以从数据库输入:sets:warehouses:capacity;vendors:demand;links(warehouses,vendors):cost,volume;endsets11/21/2021 data:warehouses,capacity=@odbc(); vendors,demand=@odbc(); links,cost=@odbc(); @odbc()=volume;enddata11/21/2021 trans.mdb与数据库的数据传递.lg411/21/2021 第三章LINGO的内部函数11/21/2021 1.标准运算符•算术运算符:^*/+-•逻辑运算符:#EQ##NE##GE##GT##LE##LT##NOT##AND##OR#11/21/2021 •关系运算符:=<=>=可以用<表示<=或<11/21/2021 运算符的优先级优先级运算符最高#NOT#—(负号)^*/+—(减法)#EQ##NE##GT##GE##LT##LE##AND##OR#最低<(=)=>(=)11/21/2021 lingo变量默认域为非负实数@free(variable)取消默认域,使变量可以取任意实数@gin(variable)限制变量取整数值@bin(variable)限制变量取值为0,1@bnd(low,variable,up)限制变量于一个有限的范围3.变量界定函数11/21/2021 练习1x1=2,x2=3,Z*=-17练习111/21/2021 练习2X1=1X2=0X3=1Z=8练习211/21/2021 @abs(x)、@cos(x)、@sin(x)、@tan(x)、@exp(x)、@sign(x)@floor(x)(返回x的整数部分)@smax(x1,x2,…,xn)(返回x1,x2,…,xn的最大值)@smin(x1,x2,…,xn)4.数学函数11/21/2021 5.条件控制@if(logical_condition,true_result,false_result)计算logical_condition,若真返回true_result否则返回false_result.11/21/2021 7个选项卡(可设置80-90个控制参数)11/21/2021 范例11/21/2021 整数规划整数规划.lg411/21/2021 二次规划的例子(lingo).lg411/21/2021 递规调用.lg4已知,求a[7]11/21/2021 学习方法:(1)上课各位老师讲的每个有数据的规划模型上机用lingo语言实践;(2)LINGO的help下有一项AdditionalExamplesofLINGOModeling,可以仔细研究每个例子的模型。11/21/2021 某车间有甲、乙两台机床,可用于加工三种工件。假定这两台车床的可用台时数分别为800和900,三种工件的数量分别为400、600和500,且已知用三种不同车床加工单位数量不同工件所需的台时数和加工费用如下表。问怎样分配车床的加工任务,才能既满足加工工件的要求,又使加工费用最低?练习311/21/2021 练习3车床类型单位工件所需加工台时数单位工件的加工费用可用台时数工件1工件2工件3工件1工件2工件3甲0.41.11.013910800乙0.51.21.31112890011/21/2021 解1设在甲车床上加工工件1、2、3的数量为x1、x2、x3,在乙车床上加工工件1、2、3的数量分别为x4、x5、x6。可建立以下线性规划模型:11/21/2021 解2设在甲车床上加工工件i的数量为x(i),单位工件所需加工台时数为timex(i),单位工件的加工费用为costx(i),在乙车床上加工工件i的数量为y(i),单位工件所需加工台时数为timey(i)单位工件的加工费用为costy(i)工件i的加工数量为demand(i)11/21/2021 数学模型11/21/2021 Lingo建模sets:Chechuang/1..3/:costx,costy,timex,timey,x,y,demand;endsets11/21/2021 Lingo建模min=@sum(chechuang:costx*x+costy*y)@sum(chechuang:timex*x)<800;@sum(chechuang:timey*y)<900;@for(chechuang:x+y=demand);@for(chechuang:@gin(x);@gin(y));11/21/2021 data:costx=13,9,10;costy=11,12,8;timex=0.4,1.1,1;timey=0.5,1.2,1.3;demand=400,600,500;enddata练习311/21/2021 Lingo-Generate-DisplaymodelMODEL:[_1]MIN=13*X_1+11*Y_1+9*X_2+12*Y_2+10*X_3+8*Y_3;[_2]0.4*X_1+1.1*X_2+X_3<=800;[_3]0.5*Y_1+1.2*Y_2+1.3*Y_3<=900;[_4]X_1+Y_1=400;[_5]X_2+Y_2=600;[_6]X_3+Y_3=500;@GIN(X_1);@GIN(Y_1);@GIN(X_2);@GIN(Y_2);@GIN(X_3);@GIN(Y_3);END11/21/2021 练习4---求S到T的最短路56774968658336C1B1C2B2A1A2A3TS611/21/2021 model:sets:cities/s,a1,a2,a3,b1,b2,c1,c2,t/:l;roads(cities,cities)/s,a1s,a2s,a3a1,b1a1,b2a2,b1a2,b2a3,b1a3,b2b1,c1b1,c2b2,c1b2,c2c1,tc2,t/:d;endsets11/21/2021 data:d=633658674678956;enddata11/21/2021 l(1)=0;@for(cities(i)|i#gt#@index(s):l(i)=@min(roads(j,i):l(j)+d(j,i)));end最短路.lg411/21/2021 三.LINGO程序流程控制和子模型11/21/2021 1、程序流程控制条件分支控制条件循环控制11/21/2021 条件分支控制1、@ifc或@ifc/@else语句2、其基本的使用语法是:@ifc(condition:可执行语句1;[@else可执行语句2;])其中condition是一个逻辑表达式(表示相应的条件),当condition的逻辑值为“真(条件成立)时,程序执行语句1;否则程序执行语句2。11/21/2021 条件分支控制请读者注意,@ifc函数和以前用过的@if函数的功能是不同的:@ifc是引导流程控制语句的函数(按照不同条件选择不同的程序分支进行执行),而@if一个算术函数,按照不同条件返回不同的计算结果或表达式。11/21/2021 条件循环控制在LINGO10.0以上版本中,有两种条件循环控制语句:@for和@while。@while语句的使用语法是:@while(condition:可执行语句;)当逻辑表达式condition为“真”时,执行相应的一条或多条可执行语句(多条之间用分号分隔),直到condition的值为假为止。请注意,@while条件循环控制语句只能出现在计算段(calc)中。11/21/2021 条件循环控制在条件循环控制中,还经常会使用到@break:不需要任何参数,其功能是立即终止当前循环,继续执行当前循环外的下一条语句。@pause([‘message’]):暂停程序执行,并弹出一个窗口,等待用户选择继续执行或者终止程序。@stop([‘message’]):终止程序的运行,并弹出一个窗口,说明程序已经停止运行。11/21/2021 二分法查找数据采用二分搜索算法,从一个递增排列的正整数数列X中找到某个具体的数KEY在数列X中所在的位置二分法查找.lg411/21/2021 2、子模型子模型必须包含在主模型之内,即必须位于以“model:”开头、以“end”结束的模块内。同一个主模型中,允许定义多个子模型,所以每个子模型本身必须命名,子模型定义:@submodelmymodel:可执行语句(约束+目标函数);endsubmodel其中mymodel是该子模型的名字,可执行语句不可以有自身单独的集合段、数据段、初始段和计算段。也就是说,同一个主模型内的变量都是全局变量,这些变量对主模型和所有子模型同样有效。11/21/2021 2、子模型子模型调用:@solve([submodel_name[,…,submodel_name_n]])参数可以是多个子模型的名字,即同时求解多个子模型。也可以没有参数,如果没有参数则求解出现在语句“@solve();”之前的所有子模型。11/21/2021 1个子模型.lg44个子模型.lg4子模型调用例子11/21/2021 '