您好,欢迎访问三七文档
当前位置:首页 > 行业资料 > 其它行业文档 > 学习LINGO语言课件.
2020年1月2日7时7分LINGO2020年1月2日星期四7时7分14秒2020年1月2日7时7分一.优化模型与优化软件简介二.LINGO软件的基本使用方法Outline三.LINGO程序流程控制和子模型2020年1月2日星期四7时7分14秒2020年1月2日7时7分一.优化模型与优化软件简介2020年1月2日星期四7时7分14秒2020年1月2日7时7分约束条件优化问题的一般形式njiDxljxgmixhtsxf)3(,...,1,0)()2(,...,1,0)(..)1()(min•无约束优化:只有目标函数,没有约束条件•有约束优化:目标函数和约束条件都有•普通方程组:没有(1)(3),只有(2)•不等式方程组:没有(1)(2),只有(3)2020年1月2日星期四7时7分14秒2020年1月2日7时7分优化类型•连续优化:全部决策变量取值均为连续数值(实数)•离散优化:部分或全部决策变量只取离散数值2020年1月2日星期四7时7分14秒2020年1月2日7时7分连续优化•线性规划(LP)目标和约束均为线性函数•非线性规划(NLP)目标或约束中有非线性函数二次规划(QP)目标为二次函数、约束为线性2020年1月2日星期四7时7分14秒2020年1月2日7时7分离散优化整数规划(IP)决策变量(全部或部分)为整数整数线性规划(ILP),整数非线性规划(INLP)纯整数规划(PIP),混合整数规划(MIP)一般整数规划,0-1(整数)规划2020年1月2日星期四7时7分14秒2020年1月2日7时7分常用优化软件1.LINDO/LINGO软件2.MATLAB优化工具箱/mathematica优化程序包3.EXCEL软件的优化功能4.SAS(统计分析)软件的优化功能2020年1月2日星期四7时7分14秒2020年1月2日7时7分建模时需要注意的几个基本问题1、尽量使用实数优化,减少整数约束和整数变量2、尽量使用光滑优化,减少非光滑约束的个数如:尽量少使用绝对值、符号函数、多个变量求最大/最小值、四舍五入、取整函数等2020年1月2日星期四7时7分14秒2020年1月2日7时7分建模时需要注意的几个基本问题3、尽量使用线性模型,减少非线性约束和非线性变量的个数(如x/y5改为x5y)4、合理设定变量上下界,尽可能给出变量初始值5、模型中使用的参数数量级要适当(如小于103)2020年1月2日星期四7时7分14秒2020年1月2日7时7分二.LINGO软件的基本使用方法2020年1月2日星期四7时7分14秒2020年1月2日7时7分§1LINGO入门2020年1月2日星期四7时7分14秒2020年1月2日7时7分max2x1+3x2St.4x1+3x2=103x1+5x2=12x1≥0x2≥0目标函数约束条件决策变量设有数学模型如下:2020年1月2日星期四7时7分14秒2020年1月2日7时7分第一步:启动Lingo屏幕显示如下:标记LINGO的外窗口是主框架窗口,主框架窗口的上面包含所有的命令菜单和命令工具栏;标记LINGOMODEL-LINGO1的子窗口是一个新的、空白的模型窗口。2020年1月2日星期四7时7分14秒2020年1月2日7时7分第二步:在模型窗口中输入模型model:max=2*x1+3*x2;4*x1+3*x210;3*x1+5*x212;endMax2x1+3x2St.4x1+3x2=103x1+5x2=12x1≥0x2≥02020年1月2日星期四7时7分14秒2020年1月2日7时7分第三步:求解模型1)选择菜单LINGO|Solve或者按工具栏的2020年1月2日星期四7时7分14秒2020年1月2日7时7分2)LINGO开始编译模型,如有语法错误将返回一个错误的消息并指明错误出现的位置;如果通过编译,LINGO将激活Solver运算器寻求模型的最优解;2020年1月2日星期四7时7分14秒2020年1月2日7时7分3)首先出现solverstatus窗口,其作用是监控solver的进展和显示模型的维数等信息;2020年1月2日星期四7时7分14秒2020年1月2日7时7分SolverStatus窗口2020年1月2日星期四7时7分14秒2020年1月2日7时7分4)计算完成后出现SolutionReport窗口显示模型解的详细信息;2020年1月2日星期四7时7分14秒2020年1月2日7时7分SolutionReport窗口•Globaloptimalsolutionfoundatiteration:2•Objectivevalue:7.454545•VariableValueReducedCost•x11.2727270.000000•x21.6363640.000000•RowSlackorSurplusDualPrice•17.4545451.000000•20.0000000.9090909E-01•30.0000000.54545452020年1月2日星期四7时7分14秒2020年1月2日7时7分ReducedCost:在max模型中:相应变量的reducedcost值表示当该变量每增加一个单位时目标函数减少的量。本例中此值均为02020年1月2日星期四7时7分14秒2020年1月2日7时7分ReducedCost:ReducedCost值列出最优单纯形表中判别数所在行的变量的系数,表示当变量有微小变动时,目标函数的变化率。其中基变量的reducedcost值应为0,对于非基变量Xj,相应的reducedcost值表示当某个变量Xj增加一个单位时目标函数减少的量(max型问题)。本例中此值均为0。2020年1月2日星期四7时7分14秒2020年1月2日7时7分SLACKORSURPLUS:给出约束条件的松驰变量或剩余变量的值;小于等于约束为松驰变量(SLACK);+大于等于约束为剩余变量(SURPLUS);-2020年1月2日星期四7时7分15秒2020年1月2日7时7分DUALPRICES:对偶价格或影子价格DUALPRICES表示当对应约束有微小变动时,目标函数的变化率,即约束条件右端的常数项每增加一个单位,目标函数相应获得的改变量。显然,如果在最优解处约束正好取等号(紧约束),该值才可能不是0;对于非紧约束对该值必为0,表示对应约束中不等式右端项的微小扰动不影响目标函数。2020年1月2日星期四7时7分15秒2020年1月2日7时7分§2Lingo的基本用法注意事项2020年1月2日星期四7时7分15秒2020年1月2日7时7分1)每一个模型都以model:开始,又以end结束,也可省略此结构;2020年1月2日星期四7时7分15秒2020年1月2日7时7分2)目标函数必须由min=或max=开头。2020年1月2日星期四7时7分15秒2020年1月2日7时7分3)可以用表示=;用表示=;Lingo无严格小于,欲使ab,可以适当选取小的正常数e表示成a+eb,2020年1月2日星期四7时7分15秒2020年1月2日7时7分4)LINGO的每一语句以;结束;5)注释以!开始,以;结束;2020年1月2日星期四7时7分15秒2020年1月2日7时7分6)变量名:.不区分大小写.由字母数字下划线组成.第一个字符必须是字母.变量名最长为32个字符2020年1月2日星期四7时7分15秒2020年1月2日7时7分7)LINGO编辑器用蓝色显示LINGO关键字绿色显示注释其他文本用黑色匹配的括号用红色高亮度显示2020年1月2日星期四7时7分15秒2020年1月2日7时7分8)变量和数字放在约束条件的左、右端均可;但最好变量在左,数字在右。9)Lingo变量默认域为非负实数,可以改变默认域.2020年1月2日星期四7时7分15秒2020年1月2日7时7分10)行名[name]例:[Objective]max=2*x+3*y;[Con1]4*x+3*y10;[Con2]3*x+5*y12;线性规划(行名).lg4默认为[1],[2],[3]2020年1月2日星期四7时7分15秒2020年1月2日7时7分•Globaloptimalsolutionfound.•Objectivevalue:7.454545•Totalsolveriterations:2•VariableValueReducedCost•X1.2727270.000000•Y1.6363640.000000•RowSlackorSurplusDualPrice•OBJECTIVE7.4545451.000000•CON10.0000000.9090909E-01•CON20.0000000.54545452020年1月2日星期四7时7分15秒2020年1月2日7时7分§3LINGO的建模语言2020年1月2日星期四7时7分15秒2020年1月2日7时7分以运输实例逐步分析6个仓库向8个小贩供应同一种货物,如何运,总运输费用最小?注:每个仓库可以向每个小贩供货,一共48个可能运货路线。仓库货存量、小贩需求量、每条路线的单位运输费用三个表如下:2020年1月2日星期四7时7分15秒2020年1月2日7时7分仓库货存量:capacity仓库号货存量w160w255w351w443w541w6522020年1月2日星期四7时7分15秒2020年1月2日7时7分小贩需求量:demand小贩代号货物需求量v135v237v322v432v541v632v743v8382020年1月2日星期四7时7分15秒2020年1月2日7时7分每单位货物运输费用表:cost小仓贩库v1v2v3v4v5v6v7v8w162674259w249538582w352197433w476739271w523957265w6552281432020年1月2日星期四7时7分15秒2020年1月2日7时7分•demand_j表示第j个小贩的需求量•capacity_i表示第i个仓库的库存量•cost_i_j表示从第i个仓库到第j个小贩的单位运输费用已知数量•volume_i_j表示从第i个仓库到第j个小贩的运输量2020年1月2日星期四7时7分15秒2020年1月2日7时7分数学模型可表示如下:)8,,2,1,6,,2,1(0__)6,,2,1(___)8,,2,1(___.)__*__(min81616181jijivolumeiicapacityjivolumejjdemandjivolumestjivolumejicostjiij2020年1月2日星期四7时7分15秒2020年1月2日7时7分当然目标函数可以如下输入:min=6*volume_1_1+2*volume_1_2+6*volume_1_3+...1*volume_6_6+4*volume_6_7+3*volume_6_8;2020年1月2日星期四7时7分15秒2020年1月2日7时7分但是较大模型如果像上面那样输入又费时,又容易出错!这就需要LINGO的建模语言2020年1月2日星期四7时7分15秒2020年1月2日7时7分LINGO的建模语言优点:1)可以用类似于标准数学符号的方式表示你的模型;2)可以用一个紧凑的语句表示一系列约束。3)数据可独立于模型:LINGO可以从文本文件、电子数据表、数据库中读取数据。2020年1月2日星期四7时7分15秒2020年1月2日7时7分LINGO模型的构成:5个段•目标函数与约束条件段•集合段(sets:endsets)•数据段(data:enddata)•初始段(init:endinit)•计算段(calc:endcalc)Lingo建模语言的重点和难点是:对集合概念的理解和正确使用2020年1月2日星期四7时7分15秒2020年1月2日7时7分为什么使用集合集合是LINGO建模语言的基础,是LINGO程序设计最强有力的基本构件。借
本文标题:学习LINGO语言课件.
链接地址:https://www.777doc.com/doc-2486146 .html