首页 LINGO培训-王峰

LINGO培训-王峰

举报
开通vip

LINGO培训-王峰nullLingo使用教程 东南大学数模培训材料 2011.7.2Lingo使用教程 东南大学数模培训材料 2011.7.2null优化问题三要素:决策变量;目标函数;约束条件优化问题的一般形式 无约束优化(没有约束)与约束优化(有约束) 可行解(只满足约束)与最优解(取到最优值)null局部最优解与整体最优解 局部最优解 (Local Optimal Solution, 如 x1 ) 整体最优解 (Global Optimal Solution, 如 x2 )null优化模型的 简单分类 线性规划(LP) ...

LINGO培训-王峰
nullLingo使用教程 东南大学数模培训材料 2011.7.2Lingo使用教程 东南大学数模培训材料 2011.7.2null优化问题三要素:决策变量;目标函数;约束条件优化问题的一般形式 无约束优化(没有约束)与约束优化(有约束) 可行解(只满足约束)与最优解(取到最优值)null局部最优解与整体最优解 局部最优解 (Local Optimal Solution, 如 x1 ) 整体最优解 (Global Optimal Solution, 如 x2 )null优化模型的 简单分类 线性规划(LP) 目标和约束均为线性函数 非线性规划(NLP) 目标或约束中存在非线性函数 二次规划(QP) 目标为二次函数、约束为线性 整数规划(IP) 决策变量(全部或部分)为整数 整数线性规划(ILP),整数非线性规划(INLP) 纯整数规划(PIP), 混合整数规划(MIP) 一般整数规划,0-1(整数)规划(ZOP)连续优化离散优化数学规划优化模型的简单分类和求解难度 优化模型的简单分类和求解难度 优化线性规划 非线性规划 二次规划 连续优化整数规划 问题求解的难度增加 LP,ILP,BILP,NLP,INLP,QP,IQP,PIP,ZOPnull线性规划问题LP的 标准 excel标准偏差excel标准偏差函数exl标准差函数国标检验抽样标准表免费下载红头文件格式标准下载 形式MATLAB命令:linprog, bintprogMATLAB优化工具箱能求解的优化模型MATLAB优化工具箱能求解的优化模型优化工具箱3.0 (MATLAB 7.0 R14)连续优化离散优化无约束优化非线性 极小 fminunc非光滑(不可 微)优化 fminsearch非线性 方程(组) fzero fsolve全局 优化 暂缺非线性 最小二乘 lsqnonlin lsqcurvefit线性规划 linprog 纯0-1规划 bintprog 一般IP(暂缺) 非线性规划 fmincon fminimax fgoalattain fseminf 上下界约束 fminbnd fmincon lsqnonlin lsqcurvefit 约束线性 最小二乘 lsqnonneg lsqlin约束优化二次规划 quadprog LINDO 公司软件产品简要介绍 LINDO 公司软件产品简要介绍 美国芝加哥(Chicago)大学的Linus Schrage教授于1980年前后开发, 后来成立 LINDO系统公司(LINDO Systems Inc.), 网址:http://www.lindo.com LINDO: Linear INteractive and Discrete Optimizer (V6.1) LINDO API: LINDO Application Programming Interface LINGO: Linear INteractive General Optimizer (V13.0) What’s Best!: (SpreadSheet e.g. EXCEL)演示(试用)版、高级版、超级版、工业版、扩展版… (求解问题规模和选件不同)nullLINDO/LINGO软件能求解的模型优化线性规划 非线性规划 二次规划 连续优化整数规划 LINDOLINGOnullLINGO软件的功能与特点LINGO模型的优点 集成了线性(非线性) / 连续(整数) 优化功能 具有多点搜索 / 全局优化功能 提供了灵活的编程语言(矩阵生成器),可方便地输入模型 提供与其他数据文件的接口 提供与其他编程语言的接口 LINDO API 可用于自主开发 运行速度较快LINGO软件的求解过程 LINGO软件的求解过程 LP QP NLP IP 全局优化(选) ILP IQP INLP LINGO预处理程序线性优化求解程序 非线性优化求解程序 分枝定界管理程序 1. 确定常数 2. 识别类型1. 单纯形算法 2. 内点算法(选)1、顺序线性规划法(SLP) 2、广义既约梯度法(GRG) (选) 3、多点搜索(Multistart) (选) nullLINGO provides all of the tools you will need to get up and running quickly. You get the LINGO User Manual (in printed form and available via the online Help), which fully describes the commands and features of the program. Also included with super versions and larger is a copy of Optimization Modeling with LINGO, http://www.lindo.com/index.php?option=com_content&view=article&id=38&Itemid=24 a comprehensive modeling text discussing all major classes of linear, integer and nonlinear optimization problems. LINGO also comes with dozens of real-world based examples for you to modify and expand. null例1.在LINGO中求解LP问题:LINGO代码: min=2*x1+3*x2; x1+x2>=350; x1>=100; 2*x1+x2<=600;null线性规划模型的解的几种情况 线性规划模型的解的几种情况 null例2.如何在LINGO中求解如下的IQP问题:LINGO代码: max=98*x1+277*x2-x1^2-0.3*x1*x2-2*x2^2; x1+x2<=100; x1<2*x2; @gin(x1);@gin(x2);nullnull整数规划 - 例1.4: 聘用 方案 气瓶 现场处置方案 .pdf气瓶 现场处置方案 .doc见习基地管理方案.doc关于群访事件的化解方案建筑工地扬尘治理专项方案下载 决策变量:周一至周日每天(新)聘用人数 x1, x2,x7目标函数:7天(新)聘用人数之和约束条件:周一至周日每天工作人数满足需要null连续工作5天设系统已进入稳态(不是开始的几周)聘用方案整数规划 模型(IP)null采用集合的LINGO 程序 model: sets: days/mon..sun/: required,start; endsets data: !每天所需的最少职员数; required = 20 16 13 16 19 14 12; enddata !最小化每周所需职员数; min=@sum(days: start); @for(days(J): @sum(days(I) | I #le# 5: start(@wrap(J+I+2,7))) >= required(J)); endnull例2。 职员时序安排模型 一项工作一周7天都需要有人(比如护士工作),每天(周一至周日)所需的最少职员数为20、16、13、16、19、14和12,并要求每个职员一周连续工作5天,试求每周所需最少职员数,并给出安排。注意这里我们考虑稳定后的情况。 model: sets: days/mon..sun/: required,start; endsets data: !每天所需的最少职员数; required = 20 16 13 16 19 14 12; enddata !最小化每周所需职员数; min=@sum(days: start); @for(days(J): @sum(days(I) | I #le# 5: start(@wrap(J+I+2,7))) >= required(J)); end最优解决方案是:每周最少需要22个职员,周一安排8人,周二安排2人,周三无需安排人,周四安排6人,周五和周六都安排3人,周日无需安排人。LINDO /LINGO软件LINDO /LINGO软件LINGO: Linear INteractive General Optimizer (V12.0) 求解数学规划问题 Min Z = f (x) s.t x  D ( Rn ) 需要掌握的几个重要方面 基本语法结构 掌握集合(SETS)的应用 正确阅读求解报告 正确理解求解状态窗口 学会设置基本的求解选项(OPTIONS)一、Lingo基本语法一、Lingo基本语法1、定义了目标函数为MIN=.. 2、以一个分号“;”结尾 ——除SETS, ENDSETS, DATA , ENDDATA, END之外 3、变量可以放在约束条件右端,也可放在约束条件的左端。 4、默认假定各变量非负。 5、注释:“!” 6、<、>为≤、≥建模时需要注意的几个基本问题 建模时需要注意的几个基本问题 尽量使用实数优化,减少整数约束和整数变量 尽量使用光滑优化,减少非光滑约束的个数 尽量少使用绝对值、符号函数、多个变量求最大/最小值、四舍五入、取整函数等 尽量使用线性模型,减少非线性约束和非线性变量的个数 如x/y <5 改为x<5y 合理设定变量上下界,尽可能给出变量初始值 模型中使用的参数数量级要适当 不同参数绝对值数量级之间差距一般要求小于3nullLINGO函数   LINGO有9种类型的函数: 1.  基本运算符:包括算术运算符、逻辑运算符和关系运算符 2.  数学函数:三角函数和常规的数学函数 3.  金融函数:LINGO提供的两种金融函数 4.  概率函数:LINGO提供了大量概率相关的函数 5.  变量界定函数:这类函数用来定义变量的取值范围 6.  集操作函数:这类函数为对集的操作提供帮助 7.  集循环函数:遍历集的元素,执行一定的操作的函数 8.  数据输入输出函数:这类函数允许模型和外部数据源相联系, 进行数据的输入输出 9.  辅助函数:各种杂类函数null过滤条件使用——结果:0 14.1运算符及其优先级null4.1.3 关系运算符 在LINGO中,关系运算符主要是被用来指定一个表达式的左边是否等于、小于等于、或者大于等于右边,形成模型的一个约束条件。关系运算符与逻辑运算符#eq#、#le#、#ge#截然不同,前者是模型中该关系运算符所指定关系的为真描述,而后者仅仅判断一个该关系是否被满足:满足为真,不满足为假。 LINGO有三种关系运算符:“=”、“<=”和“>=”。LINGO中还能用“<”表示小于等于关系,“>”表示大于等于关系。LINGO并不支持严格小于和严格大于关系运算符。然而,如果需要严格小于和严格大于关系,比如让A严格小于B: A=0时,返回不超过x的最大整数; 当x<0时,返回不低于x的最大整数。 @smax(x1,x2,…,xn) 返回x1,x2,…,xn中的最大值 @smin(x1,x2,…,xn) 返回x1,x2,…,xn中的最小值Lingo内部函数——”@”null4.3 金融函数 目前LINGO提供了两个金融函数。 1.@fpa(I,n) 返回如下情形的净现值:单位时段利率为I,连续n个时段支付,每个时段支付单位费用。若每个时段支付x单位的费用,则净现值可用x乘以@fpa(I,n)算得。净现值就是在一定时期内为了获得一定收益在该时期初所支付的实际费用。 例4.4 贷款买房问题 贷款金额50000元,贷款年利率5.31%,采取分期付款方式(每年年末还固定金额,直至还清)。问拟贷款10年,每年需偿还多少元? LINGO代码如下: 50000 = x * @fpa(.0531,10); 答案 八年级地理上册填图题岩土工程勘察试题省略号的作用及举例应急救援安全知识车间5s试题及答案 是x=6573.069元。 2.@fpl(I,n) 返回如下情形的净现值:单位时段利率为I,第n个时段支付单位费用.@fpl(I,n)的计算公式为 null 4.4 概率函数 1.@pbn(p,n,x) 二项分布的累积分布函数。当n和(或)x不是整数时,用线性插值法进行计算。 2.@pcx(n,x) 自由度为n的χ2分布的累积分布函数。 3.@peb(a,x) 当到达负荷为a,服务系统有x个服务器且允许无穷排队时的Erlang繁忙概率。 4.@pel(a,x) 当到达负荷为a,服务系统有x个服务器且不允许排队时的Erlang繁忙概率。 5.@pfd(n,d,x) 自由度为n和d的F分布的累积分布函数。 6.@pfs(a,x,c) 当负荷上限为a,顾客数为c,平行服务器数量为x时,有限源的Poisson服务系统的等待或返修顾客数的期望值。a是顾客数乘以平均服务时间,再除以平均返修时间。当c和(或)x不是整数时,采用线性插值进行计算。null7.@phg(pop,g,n,x) 超几何(Hypergeometric)分布的累积分布函数。pop表示产品总数,g是正品数。从所有产品中任意取出n(n≤pop)件。pop,g,n和x都可以是非整数,这时采用线性插值进行计算。 8.@ppl(a,x) Poisson分布的线性损失函数,即返回max(0,z-x)的期望值,其中随机变量z服从均值为a的Poisson分布。 9.@pps(a,x) 均值为a的Poisson分布的累积分布函数。当x不是整数时,采用线性插值进行计算。 10.@psl(x) 单位正态线性损失函数,即返回max(0,z-x)的期望值,其中随机变量z服从标准正态分布。 11.@psn(x) 标准正态分布的累积分布函数。 12.@ptd(n,x) 自由度为n的t分布的累积分布函数。 13.@qrand(seed) 产生服从(0,1)区间的拟随机数。@qrand只允许在模型的数据部分使用,它将用拟随机数填满集属性。通常,声明一个m×n的二维表,m表示运行实验的次数,n表示每次实验所需的随机数的个数。在行内,随机数是独立分布的;在行间,随机数是非常均匀的。这些随机数是用“分层取样”的方法产生的。null4.5 变量界定函数 变量界定函数实现对变量取值范围的附加限制,共4种: @bin(x) 限制x为0或1 @bnd(L,x,U) 限制L≤x≤U @free(x) 取消对变量x的默认下界为0的限制,即x可以取任意实数 @gin(x) 限制x为整数 在默认情况下,LINGO规定变量是非负的,也就是说下界为0,上界为+∞。@free取消了默认的下界为0的限制,使变量也可以取负值。@bnd用于设定一个变量的上下界,它也可以取消默认下界为0的约束。  null4.6 集合操作函数 LINGO提供了几个函数帮助处理集。 1.@in(set_name,primitive_index_1 [,primitive_index_2,…]) 如果元素在指定集中,返回1;否则返回0。 2.@wrap(index,limit) 该函数返回j=index-k*limit,其中k是一个整数,取适当值保证j落在区间[1,limit]内。该函数相当于index模limit再加1。该函数在循环、多阶段计划编制中特别有用。 3.@size(set_name) 该函数返回集set_name的成员个数。在模型中明确给出集大小时最好使用该函数。它的使用使模型更加数据中立,集大小改变时也更易维护。null4.7 集循环函数 集循环函数遍历整个集进行操作。其语法为 @function(setname[(set_index_list)[|conditional_qualifier]]: expression_list); @function相应于下面罗列的四个集循环函数之一;setname是要遍历的集;set_ index_list是集索引列表;conditional_qualifier是用来限制集循环函数的范围,当集循环函数遍历集的每个成员时,LINGO都要对conditional_qualifier进行评价,若结果为真,则对该成员执行@function操作,否则跳过,继续执行下一次循环。expression_list是被应用到每个集成员的表达式列表,当用的是@for函数时,expression_list可以包含多个表达式,其间用逗号隔开。这些表达式将被作为约束加到模型中。当使用其余的三个集循环函数时,expression_list只能有一个表达式。如果省略set_index_list,那么在expression_list中引用的所有属性的类型都是setname集。null1.@for 该函数用来产生对集成员的约束。基于建模语言的标量需要显式输入每个约束,不过@for函数允许只输入一个约束,然后LINGO自动产生每个集成员的约束。 例4.10 产生序列{1,4,9,16,25} model: sets: number/1..5/:x; endsets @for(number(I): x(I)=I^2); endnull2.@sum 该函数返回遍历指定的集成员的一个表达式的和。 例4.11 求向量[5,1,3,4,6,10]前5个数的和。 model: data: N=6; enddata sets: number/1..N/:x; endsets data: x = 5 1 3 4 6 10; enddata s=@sum(number(I) | I #le# 5: x); endnull3.@min和@max 返回指定的集成员的一个表达式的最小值或最大值。 例4.12 求向量[5,1,3,4,6,10]前5个数的最小值,后3个数的最大值。 model: data: N=6; enddata sets: number/1..N/:x; endsets data: x = 5 1 3 4 6 10; enddata minv=@min(number(I) | I #le# 5: x); maxv=@max(number(I) | I #ge# N-2: x); endnull4.8 输入和输出函数 输入和输出函数可以把模型和外部数据比如文本文件、数据库和电子表格等连接起来。 1.@file函数 该函数用从外部文件中输入数据,可以放在模型中任何地方。该函数的语法格式为@file(’filename’)。这里filename是文件名,可以采用相对路径和绝对路径两种表示方式。@file函数对同一文件的两种表示方式的处理和对两个不同的文件处理是一样的,这一点必须注意。null2.@text函数 该函数被用在数据部分用来把解输出至文本文件中。它可以输出集成员和集属性值。其语法为 @text([’filename’]) 这里filename是文件名,可以采用相对路径和绝对路径两种表示方式。如果忽略filename,那么数据就被输出到标准输出设备(大多数情形都是屏幕)。@text函数仅能出现在模型数据部分的一条语句的左边,右边是集名(用来输出该集的所有成员名)或集属性名(用来输出该集属性的值)。 我们把用接口函数产生输出的数据声明称为输出操作。输出操作仅当求解器求解完模型后才执行,执行次序取决于其在模型中出现的先后。null3.@ole函数 @OLE是从EXCEL中引入或输出数据的接口函数,它是基于传输的OLE技术。OLE传输直接在内存中传输数据,并不借助于中间文件。当使用@OLE时,LINGO先装载EXCEL,再通知EXCEL装载指定的电子数据表,最后从电子数据表中获得Ranges。为了使用OLE函数,必须有EXCEL5及其以上版本。OLE函数可在数据部分和初始部分引入数据。 @OLE可以同时读集成员和集属性,集成员最好用文本格式,集属性最好用数值格式。原始集每个集成员需要一个单元(cell),而对于n元的派生集每个集成员需要n个单元,这里第一行的n个单元对应派生集的第一个集成员,第二行的n个单元对应派生集的第二个集成员,依此类推。 @OLE只能读一维或二维的Ranges(在单个的EXCEL工作表(sheet)中),但不能读间断的或三维的Ranges。Ranges是自左而右、自上而下来读。null4.@ranged(variable_or_row_name) 为了保持最优基不变,变量的费用系数或约束行的右端项允许减少的量。 5.@rangeu(variable_or_row_name) 为了保持最优基不变,变量的费用系数或约束行的右端项允许增加的量。 6.@status() 返回LINGO求解模型结束后的状态: 0 Global Optimum(全局最优) 1 Infeasible(不可行) 2 Unbounded(无界) 3 Undetermined(不确定) 4 Feasible(可行) 5 Infeasible or Unbounded(通常需要关闭“预处理”选项后重新求解模型,以确定模型究竟是不可行还是无界) 6 Local Optimum(局部最优) 7 Locally Infeasible(局部不可行,尽管可行解可能存在,但是LINGO并没有找到一个) 8 Cutoff(目标函数的截断值被达到)null9 Numeric Error(求解器因在某约束中遇到无定义的算术运算而停止) 通常,如果返回值不是0、4或6时,那么解将不可信,几乎不能用。该函数仅被用在模型的数据部分来输出数据。 例4.17 model: min=@sin(x); data: @text()=@status(); enddata end 部分计算结果为: Local optimal solution found at iteration: 33 Objective value: -1.000000   6 Variable Value Reduced Cost X 4.712388 0.000000 结果中的6就是@status()返回的结果,表明最终解是局部最优的。 7.@dual @dual(variable_or_row_name)返回变量的判别数(检验数)或约束行的对偶(影子)价格(dual prices)。Lingo条件判断函数Lingo条件判断函数分段函数@IF(logical_condition, true_result, false_result)例5 求解最优化问题LINGO代码如下: model: min=fx+fy; fx=@if(x #gt# 0, 100,0)+2*x; fy=@if(y #gt# 0,60+3*y,2*y); x+y>=30; endnullnull5. LINGO常用菜单命令 1. 求解模型(Slove) 从LINGO菜单中选用“求解”命令、单击“Slove”按钮或按Ctrl+S组合键可以将当前模型送入内存求解。 2. 求解结果...(Solution...) 从LINGO菜单中选用“Solution...”命令、单击“Solution...”按钮或直接按Ctrl+O组合键可以打开求解结果的对话框。这里可以指定查看当前内存中求解结果的那些内容。 3. 查看...(Look...) 从LINGO菜单中选用“Look...”命令或直接按Ctrl+L组合键可以查看全部的或选中的模型文本内容。 4. 灵敏性分析(Range,Ctrl+R) 用该命令产生当前模型的灵敏性分析报告:研究当目标函数的费用系数和约束右端项在什么范围(此时假定其它系数不变)时,最优基保持不变。灵敏性分析是在求解模型时作出的,因此在求解模型时灵敏性分析是激活状态,但是默认是不激活的。为了激活灵敏性分析,运行LINGO|Options…,选择General Solver Tab, 在Dual Computations列表框中,选择Prices & Ranges选项。灵敏性分析耗费相当多的求解时间,因此当速度很关键时,就没有必要激活它。二、Lingo集合二、Lingo集合某公司有6个建筑工地,位置坐标为(ai,bi) (单位:公里),水泥日用量di (单位:吨)例4 选址问题假设:料场和工地之间有直线道路 (1)现有2料场,位于A(5,1),B(2,7),记(xj,yj),j=1,2, 日储量ej各有20吨。 目标:制定每天的供应计划,即从A, B两料场分别向各工地运送多少吨水泥,使总的吨公里数最小。null用例中数据计算,最优解为总吨公里数为136.2线性规划模型(LP)决策变量:ci j (料场j到工地i的运量)~12维1、Lingo建模语言基本使用1、Lingo建模语言构成:4个段目标与约束段 集合段(SETS ENDSETS) 数据段(DATA ENDDATA) 初始段(INIT ENDINIT) (计算段 (CALC ENDCALC))目标与约束段目标与约束段MODEL: Title Location Problem; sets: demand/1..6/:a,b,d; supply/1..2/:x,y,e; link(demand,supply):c; endsets data: 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; enddata init: x,y=5,1,2,7; endinit min=@sum(link(i,j):c(i,j)*((x(j)-a(i))^2+(y(j)-b(i))^2)^(1/2)); @for(demand(i):@sum(supply(j):c(i,j))=d(i);); @for(supply(i):@sum(demand(j):c(j,i))<=e(i);); END集合段数据段初始段供应约束需求需求点的位置供需量供应初始点目标需求约束连接2、Lingo的集合Set及其属性Attribute2、Lingo的集合Set及其属性Attribute例1 建筑工地位置坐标 (ai,bi) 、水泥日用量di : 对每个建筑工地(6个)都有一个对应的值 都是一个由6个元素组成的数组——是已知的 料场位置坐标 (xj,yj) 、日储量ej 对每个料场(2个)都有一个对应的值 都是一个由2个元素组成的数组——目前是已知的 料场到建筑工地的供应计划 c i j 对每个料场与建筑工地之间(6×2)都有一个对应的值 是一个6×2 个元素组成的矩阵——是未知数 LINDO无数组,每个变量输入——麻烦Lingo的集合Set——下标集合——100个工地?集合Set及其属性Attribute集合Set及其属性Attribute定义数组下标集合demand/1..6/———表示6个建筑工地 a,b,d称为该集合的属性 ———表示坐标(ai,bi) 、水泥日用量di 定义数组下标集合supply/1..2/———表示6个建筑工地 该集合的属性x,y,e ———表示坐标(xj,yj) 、日储量ej 定义数组下标集合link(demand,supply)———表示6×2个料场到建筑工地的连接 该集合的属性c ———表示每个料场与建筑工地之间供应计划c i j1到6的整数例4建立 下标集合例4需求点的位置供需量sets: demand/1..6/:a,b,d; supply/1..2/:x,y,e; link(demand,supply):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,y=5,1,2,7; e=20,20; enddata赋值需求供应连接基本 集合派生 集合Lingo 建模语言——集合段 数据段3、定义集合Set3、定义集合Set直接把元素列举出来 定义格式 ——集合名 元素列表 属性列表 setname [/member_list/] [: attribute_list]; [ …… ] —— 可选项 元素列表 显式列举法——列出全部元素, 用逗号或空格分开 隐式列举法—— 1..n 属性列表缺省——集合可在程序中作为一循环变量使用,构造更复杂的派生集合 元素列表缺省——必须在数据段给出元素列表赋值基本集合primary set派生集合derived set派生集合derived set基于其它集合而派生出来的二维或多维集合 定义格式 ——集合名 父集合列表 元素列表 属性列表 setname(parent_set_list) [/member_list/] [: attribute_list]; 元素列表缺省 所有组合——稠密集合、或数据段列表赋值 元素列表——稀疏集合 元素列表法——枚举 元素过滤法——利用过滤条件 setname(parent_set_list) [|filtrate_condition] [:attribute_list];集合的类型集合的类型 集合 派生集合 基本集合 稀疏集合 稠密集合 元素列表法 元素过滤法 直接列举法 隐式列举法setname [/member_list/] [: attribute_list];setname(parent_set_list) [/member_list/] [: attribute_list];SETS: CITIES /A1,A2,A3,B1,B2/; ROADS(CITIES, CITIES)/ A1,B1 A1,B2 A2,B1 A3,B2/:D; ENDSETSSETS: STUDENTS /S1..S8/; PAIRS( STUDENTS, STUDENTS) | &2 #GT# &1: BENEFIT, MATCH; ENDSETS3、Lingo集合循环函数3、Lingo集合循环函数难点!重点!循环操作函数——集合上的元素——下标:集合函数名@function(setname [(set_index_list)[|condition]]:expression_list);集合名集合索引列表过滤条件表达式FOR MAX MIN SUM PROD例1目标:吨公里@for(demand(i):@sum(supply(j):c(i,j))=d(i);); @for(supply(i):@sum(demand(j):c(j,i))<=e(i););例1约束:需求 供应min=@sum(link(i,j):c(i,j)*((x(j)-a(i))^2+(y(j)-b(i))^2)^(1/2));4、Lingo变量定界函数默认:非负实数变量4、Lingo变量定界函数例4约束:非负目标与约束段目标与约束段MODEL: Title Location Problem; sets: demand/1..6/:a,b,d; supply/1..2/:x,y,e; link(demand,supply):c; endsets data: 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,y=5,1,2,7; e=20,20; enddata min=@sum(link(i,j):c(i,j)*((x(j)-a(i))^2+(y(j)-b(i))^2)^(1/2)); @for(demand(i):@sum(supply(j):c(i,j))=d(i);); @for(supply(i):@sum(demand(j):c(j,i))<=e(i);); END集合段数据段供应约束需求需求点的位置需求量供应供应点目标需求约束连接结果:总吨公里数为136.228供应量例6 选址问题2)改建两个新料场,需要确定新料场位置(xj,yj)和运量cij ,在其它条件不变下使总吨公里数最小。决策变量: ci j,(xj,yj)~16维非线性规划模型例6 选址问题目标:吨公里约束:需求 供应nullLINGO集合段数据段初始段目标与 约束段 最优:85.266(吨公里 ) NLP:从数据段移到初始段局部null最优:89.8835(吨公里 )局部若对新料场位置加以限制四、 LINGO的菜单及对话框界面四、 LINGO的菜单及对话框1、LINGO的界面主窗口模型窗口 Model Window状态栏当前时间 当前光标 位置 2、LINGO的工具栏2、LINGO的工具栏File|Open (F3) 打开文件File|Print (F7) 打印文件Edit|Copy (Ctrl+C) 复制Edit|Undo (Ctrl+Z) 取消操作Edit|Find (Ctrl+F) 查找 LINGO|Solution (Alt+O)显示解答Edit|Match Parenthesis (Ctrl+P) 匹配括号LINGO|Options (Ctrl+I) 选项设置Window|Close All (Alt+X) 关闭所有窗口Help|Contents (F1) 在线帮助File|New (F2) 新建文件 File|Save (F4) 保存文件Edit|Cut (Ctrl+X) 剪切Edit|Paste (Ctrl+V) 粘贴Edit|Redo (Ctrl+Y) 恢复操作Edit | Go To Line (Ctrl+T) 定位某行LINGO|Solve (Ctrl+S) 求解模型LINGO|Picture (Ctrl+K) 模型图示Window|Send to Back (Ctrl+B) 窗口后置Window|Tile (Alt+T) 平铺窗口上下文相关的帮助 3、LINGO的菜单栏File Export File… User Database Info Edit Paste Paste Special … Match Parenthesis Paste Function Select Font Insert New Object Links Object Properties3、LINGO的菜单栏LINGO LOOK Generate Picture File Generate Options4、LINGO的运行状态窗口Variables(变量数量): 变量总数(Total)、 非线性变量数(Nonlinear)、 整数变量数(Integer)。Constraints(约束数量): 约束总数(Total)、 非线性约束个数(Nonlinear)。Nonzeros(非零系数数量): 总数(Total)、 非线性项系数个数(Nonlinear)Generator Memory Used (K) (内存使用量)Elapsed Runtime (hh:mm:ss)(求解花费的时间) 4、LINGO的运行状态窗口运行状态窗口求解器(求解程序)状态框当前模型的类型 :LP,QP,ILP,IQP,PILP, PIQP,NLP,INLP,PINLP (以I开头表示IP,以PI开头表示PIP) 当前解的状态 : "Global Optimum", "Local Optimum", "Feasible", "Infeasible“(不可行), "Unbounded“(无界), "Interrupted“(中断), "Undetermined“(未确定) 解的目标函数值 当前约束不满足的总量(不是不满足的约束的个数):实数(即使该值=0,当前解也可能不可行,因为这个量中没有考虑用上下界命令形式给出的约束) 目前为止的迭代次数 运行状态窗口运行状态窗口扩展的求解器(求解程序)状态框使用的特殊求解程序 : B-and-B (分枝定界算法) Global (全局最优求解程序) Multistart(用多个初始点求解的程序) 目前为止找到的可行解的最佳目标函数值 目标函数值的界 特殊求解程序当前运行步数: 分枝数(对B-and-B程序); 子问题数(对Global程序); 初始点数(对Multistart程序)有效步数 运行状态窗口5、Options 7个选项卡可设置80-90个控制参数 5、Options 7个选项卡Interface界面 General Solver通用求解 Linear Solver线性求解 Nonlinear Solver非线性求解 Integer Pre-Solver整数预处理 Integer Solver整数求解 Global Solver全局最优求解null LINGO系统(LINGO)主菜单LINGO|Options命令打开一个含有7个选项卡的窗口,通过它修改LINGO系统的各种控制参数和选项。新的设置生效新的设置生效,并关闭窗口当前设置变为默认设置,下次启动LINGO时这些设置仍然有效恢复LINGO系统定义的原始默认设置(缺省设置)废弃本次操作,退出对话框显示本对话框的帮助信息 nullLINGO|Options|Interface(界面)选项卡错误信息对话框:如果选择该选项,求解程序遇到错误时将打开一个对话框显示错误,关闭该对话框后程序才会继续执行;否则,错误信息将在报告窗口显示,程序仍会继续执行 弹出屏幕:如果选择该选项,则LINGO每次启动时会在屏幕上弹出一个对话框,显示LINGO的版本和版权信息;否则不弹出 解的截断:小于等于这个值的解将报告为“0” (缺省是10-9) 填充数据库表:当LINGO向电子表(如EXCEL文件)或数据库中输出数据时,如果电子表或数据库中用来接收收据的空间大于实际输出的数据占用的空间,是否对多余的表空间进行数据填充?(缺省值为不进行填充) nullLINGO|Options|Interface(界面)选项卡状态栏:如果选择该选项,则LINGO系统在主窗口最下面一行显示状态栏;否则不显示状态窗口:如果选择该选项,则LINGO系统每次运行LINGO| Solve命令时会在屏幕上弹出状态窗口;否则不弹出工具栏:如果选择该选项,则显示工具栏;否则不显示简洁输出:如果选择该选项,则LINGO系统对求解结果报告等将以简洁形式输出;否则以详细形式输出nullLINGO|Options|Interface(界面)选项卡LINGO扩展格式:模型文件的缺省保存格式是lg4格式(这是一种二进制文件,只有LINGO能读出)LINDO纯文本格式:模型文件的缺省保存格式变为LINDO格式(纯文本)LINGO纯文本格式:模型文件的缺省保存格式变为lng格式(纯文本)nullLINGO|Options|Interface(界面)选项卡行数限制:语法配色的行数限制(缺省为1000)。LINGO模型窗口中将LINGO关键字显示为兰色,注释为绿色,其他为黑色,超过该行数限制后则不再区分颜色。特别地,设置行数限制为0时,整个文件不再区分颜色。括号匹配:如果选择该选项,则模型中当前光标所在处的括号及其相匹配的括号将以红色显示;否则不使用该功能延迟:设置语法配色的延迟时间(秒,缺省为0,从最后一次击键算起)。nullLINGO|Options|Interface(界面)选项卡报告发送到命令窗口:如果选择该选项,则输出信息会发送到命令窗口;否则不使用该功能输入信息反馈:如果选择该选项,则用File|Take Command命令执行命令脚本文件时,处理信息会发送到命令窗口;否则不使用该功能页面大小限制:命令窗口每次显示的行数的最大值为Length(缺省为没有限制),显示这么多行后会暂停,等待用户响应;每行最大字符数为Width(缺省为74,可以设定为64-200之间),多余的字符将被截断行数限制:命令窗口能显示的行数的最大值为Maximum(缺省为800);如果要显示的内容超过这个值,每次从命令窗口滚动删除的最小行数为Minimum(缺省为400)nullLINGO|Options|General Solver(通用求解程序)选项卡矩阵生成器的内存限制:缺省值为32M,矩阵生成器使用的内存超过该限制,LINGO将报告"The model generator ran out of memory" 运行限制: 迭代次数:求解一个模型时,允许的最大迭代次数(缺省值为无限)运行限制: 运行时间:求解一个模型时,允许的最大运行时间(秒)(缺省值为无限)对偶计算:求解时控制对偶计算的级别,有三种可能的设置: None: 不计算任何对偶信息; Prices:计算对偶价格(缺省设置); Prices and Ranges:计算对偶价格并分析敏感性; Prices, Opt Only: 只计算最优行的对偶价格 。nullLINGO|Options|General Solver(通用求解程序)选项卡固定变量的归结、简化:求解前对固定变量的归结程度(相当于预处理程度): None:不归结; Always:总是归结; Not with global and multistart:在全局优化和多初值优化程序中不归结。 模型的重新生成:控制重新生成模型的频率,有三种可能的设置: Only when text changes:只有当模型的文本修改后才再生成模型; When text changes or with external references:当模型的文本修改或模型含有外部引用时(缺省设置); Always:每当有需要时。nullLINGO|Options|General Solver(通用求解程序)选项卡线性化程度:决定求解模型时线性化的程度,有四种可能的设置: Solver Decides:若变量数小于等于12个,则尽可能全部线性化;否则不做任何线性化(缺省设置) None:不做任何线性化 Low:对函数@ABS(), @MAX(), @MIN(), @SMAX(), @SMIN(),以及二进制变量与连续变量的乘积项做线性化 High:同上,此外对逻辑运算符#LE#, #EQ#, #GE#, #NE#做线性化线性化的误差限:设置线性化的误差限(缺省值为10^-6)线性化的大M系数:设置线性化的大M系数(缺省值为10^6)nullLINGO|Options|General Solver(通用求解程序)选项卡允许无限制地使用基本集合的成员名:选择该选项可以保持与LINGO4.0以前的版本兼容:即允许使用基本集合的成员名称直接作为该成员在该集合的索引值(LINGO4.0以后的版本要求使用@INDEX函数)检查数据和模型中的名称是否重复使用:选择该选项,LINGO将检查数据和模型中的名称是否重复使用,如基本集合的成员名是否与决策变量名重复检查数据和模型中的名称是否重复使用:选择该选项,LINGO将检查数据和模型中的名称是否重复使用,如基本集合的成员名是否与决策变量名重复最小化内存使用量:是否最小化内存使用量。缺省设置为“是”。使用这个功能的一个缺点是可能引起计算速度下降nullLINGO|OPTIONS|Linear Solver(线性求解程序)选项卡求解时的算法,有四种可能的设置: Solver Decides:LINGO自动选择算法(缺省设置) Primal Simplex:原始单纯形法 Dual Simplex:对偶单纯形法 Barrier: 障碍法 (即内点法)模型降维:控制是否检查模型中的无关变量,从而降低模型的规模: Off:不检查 On:检查 Solver Decides:LINGO自动决定(缺省设置)初始线性可行性误差限:控制线性模型中约束满足的初始误差限(缺省值为3*10^-6).最后线性可行性误差限:控制线性模型中约束满足的最后误差限(缺省值为10^-7).nullLINGO|OPTIONS|Linear Solver(线性求解程序)选项卡原始单纯形法:有三种可能的设置: Solver Decides:LINGO自动决定(缺省设置) Partial:LINGO 对一部分可能的出基变量进行尝试 Devex:用Steepest-Edge(最陡边)近似算法对所有可能的变量进行尝试,找到使目标值下降最多的出基变量对偶单纯形法:有三种可能的设置: Solver Decides:LINGO自动决定(缺省设置) Dantzig:按最大下降比例法确定出基变量 Steepest-Edge:最陡边策略,对所有可能的变量进行尝试,找到使目标值下降最多的出基变量价格策略(决定出基变量的策略) nullLINGO|OPTIONS|Linear Solver(线性求解程序)选项卡冷启动时:设置LINGO|Debug命令调试所使用的程序(冷启动的含义是不从当前基开始,而是从头开始运行)。有四种可能的设置: Solver Decides:LINGO自动选择算法(缺省设置) Primal Simplex:原始单纯形法 Dual Simplex:对偶单纯形法 Barrier: 障碍法 (即内点法) 热启动时同冷启动(热启动的含义是从当前基开始运行) 调试时采用的求解程序矩阵分解:选择该选项,LINGO将尝试将一个大模型分解为几个小模型求解;否则不尝试检查模型的数据平衡性:选择该选项,LINGO检查模型中的数据是否平衡(数量级是否相差太大)并尝试改变尺度使模型平衡;否则不尝试nullLINGO|OPTIONS|Nonlinear
本文档为【LINGO培训-王峰】,请使用软件OFFICE或WPS软件打开。作品中的文字与图均可以修改和编辑, 图片更改请在作品中右键图片并更换,文字修改请直接点击文字进行修改,也可以新增和删除文档中的内容。
该文档来自用户分享,如有侵权行为请发邮件ishare@vip.sina.com联系网站客服,我们会及时删除。
[版权声明] 本站所有资料为用户分享产生,若发现您的权利被侵害,请联系客服邮件isharekefu@iask.cn,我们尽快处理。
本作品所展示的图片、画像、字体、音乐的版权可能需版权方额外授权,请谨慎使用。
网站提供的党政主题相关内容(国旗、国徽、党徽..)目的在于配合国家政策宣传,仅限个人学习分享使用,禁止用于任何广告和商用目的。
下载需要: 免费 已有0 人下载
最新资料
资料动态
专题动态
is_216112
暂无简介~
格式:ppt
大小:2MB
软件:PowerPoint
页数:0
分类:其他高等教育
上传时间:2011-07-07
浏览量:8