
优化建模与LINGO简介.ppt
103页优优 化化 建建 模模优化建模与优化建模与LINDO/LINGO软件软件 优优 化化 建建 模模 最优化是工程技术、经济管理、科学研究、社最优化是工程技术、经济管理、科学研究、社会生活中经常遇到的问题会生活中经常遇到的问题, 如如:优化模型和算法的重要意义优化模型和算法的重要意义结构设计结构设计资源分配资源分配生产计划生产计划运输方案运输方案解决优化问题的手段解决优化问题的手段• 经验积累,主观判断经验积累,主观判断• 作试验,比优劣作试验,比优劣• 建立数学模型,求解最优策略建立数学模型,求解最优策略最优化最优化: : 在一定条件下,寻求使目标最大在一定条件下,寻求使目标最大( (小小) )的决策的决策 优优 化化 建建 模模优化问题三要素:优化问题三要素:决策变量决策变量;;目标函数目标函数;;约束条件约束条件约约束束条条件件决策变量决策变量优化问题的一般形式优化问题的一般形式• 无约束优化无约束优化(没有约束没有约束)与约束优化与约束优化(有约束有约束)• 可行解(只满足约束)与最优解可行解(只满足约束)与最优解(取到最优值取到最优值)目标函数目标函数 优优 化化 建建 模模局部最优解与整体最优解局部最优解与整体最优解 • 局部最优解局部最优解 (Local Optimal Solution, 如如 x1 )• 整体最优解整体最优解 (Global Optimal Solution, 如如 x2 )x*f(x)x1x2o 优优 化化 建建 模模优化模型的优化模型的简单分类简单分类• 线性规划线性规划(LP) 目标和约束均为线性函数目标和约束均为线性函数• 非线性规划非线性规划(NLP) 目标或约束中存在非线性函数目标或约束中存在非线性函数ü 二次规划二次规划(QP) 目标为二次函数、约束为线性目标为二次函数、约束为线性• 整数规划整数规划(IP) 决策变量决策变量(全部或部分全部或部分)为整数为整数ü 整数整数线性线性规划规划(ILP),整数,整数非线性非线性规划规划(INLP)ü 纯整数规划纯整数规划(PIP), 混合整数规划混合整数规划(MIP) ü 一般整数规划,一般整数规划,0-1(整数)规划(整数)规划连连续续优优化化离离散散优优化化数学规划数学规划 优优 化化 建建 模模优化模型的简单分类和求解难度优化模型的简单分类和求解难度 优化线性规划非线性规划二次规划连续优化整数规划 问题求解的难度增加 优优 化化 建建 模模2. 优化问题的建模实例优化问题的建模实例 优优 化化 建建 模模1桶牛奶 3公斤A1 12小时 8小时 4公斤A2 或获利24元/公斤 获利16元/公斤 50桶牛奶桶牛奶 时间时间480小时小时 至多加工至多加工100公斤公斤A1 制订生产计划,使每天获利最大制订生产计划,使每天获利最大 • 35元可买到元可买到1桶牛奶,买吗?若买,每天最多买多少桶牛奶,买吗?若买,每天最多买多少?• 可聘用临时工人,付出的工资最多是每小时几元可聘用临时工人,付出的工资最多是每小时几元? • A1的获利增加到的获利增加到 30元元/公斤,应否改变生产计划?公斤,应否改变生产计划? 每天:每天:线性规划模型-例线性规划模型-例1: 奶制品生产计划奶制品生产计划 优优 化化 建建 模模1桶牛奶 3公斤A1 12小时 8小时 4公斤A2 或获利24元/公斤 获利16元/公斤 x1桶牛奶生产桶牛奶生产A1 x2桶牛奶生产桶牛奶生产A2 获利获利 24×3x1 获利获利 16×4 x2 原料供应原料供应 劳动时间劳动时间 加工能力加工能力 决策变量决策变量 目标函数目标函数 每天获利每天获利约束条件约束条件非负约束非负约束 线性线性规划规划模型模型(LP)时间时间480小时小时 至多加工至多加工100公斤公斤A1 50桶牛奶桶牛奶 每天每天 优优 化化 建建 模模模型求解模型求解 图解法图解法 x1x20ABCDl1l2l3l4l5约约束束条条件件目标目标函数函数 Z=0Z=2400Z=3600z=c (常数常数) ~等值线等值线c在在B(20,30)点得到最优解点得到最优解目标函数和约束条件是线性函数目标函数和约束条件是线性函数 可行域为直线段围成的凸多边形可行域为直线段围成的凸多边形 目标函数的等值线为直线目标函数的等值线为直线 最优解一定在凸多边最优解一定在凸多边形的某个顶点取得。
形的某个顶点取得 优优 化化 建建 模模求解求解LP的基本思想的基本思想思路:从可行域的某一顶点开始,只需在有限多个思路:从可行域的某一顶点开始,只需在有限多个顶点中一个一个找下去,一定能得到顶点中一个一个找下去,一定能得到最优解最优解LP的约束和目标函数均为线性函数的约束和目标函数均为线性函数2维维可行域可行域 线段组成的凸多边形线段组成的凸多边形目标函数目标函数 等值线为直线等值线为直线最优解最优解 凸多边形的某个顶点凸多边形的某个顶点n维维超平面组成的凸多面体超平面组成的凸多面体等值线是超平面等值线是超平面凸多面体的某个顶点凸多面体的某个顶点LPLP的通常解法是单纯形法的通常解法是单纯形法(G. B. (G. B. DantzigDantzig, 1947), 1947) 优优 化化 建建 模模内点算法内点算法(Interior point method)• 20世纪世纪80年代人们提出的一类新的算法年代人们提出的一类新的算法——内点算法内点算法• 也是迭代法,但不再从可行域的一个顶点转换到另一个 也是迭代法,但不再从可行域的一个顶点转换到另一个顶点,而是直接从可行域的内部逼近最优解。
顶点,而是直接从可行域的内部逼近最优解 LPLP其他算法其他算法有效集有效集(Active Set)方法方法• LP是是QP的特例(只需令所有二次项为零即可)的特例(只需令所有二次项为零即可)• 可以用可以用QP的算法解的算法解QP(如如: 有效集方法有效集方法) 优优 化化 建建 模模线性规划模型的解的几种情况线性规划模型的解的几种情况 线性规划问题线性规划问题有有可可行行解解(Feasible)无无可可行行解解((Infeasible))有有最最优优解解((Optimal))无无最最优优解解(Unbounded) 优优 化化 建建 模模假设假设A产销平衡产销平衡假设假设Bp随随x (两种牌号两种牌号)增加而减小,呈线性关系增加而减小,呈线性关系某厂生产两个牌号的同一种产品,如何确定产量使利润最大某厂生产两个牌号的同一种产品,如何确定产量使利润最大二次规划模型-产销计划问题二次规划模型-产销计划问题 优优 化化 建建 模模目标目标利润最大利润最大= ( (100-x1-0.1 x2-2))x1 +((280-0.2x1-2x2-3))x2=98 x1 + 277 x2 -- x12 -- 0.3 x1 x2 -- 2x22 约束约束x1 + x2 ≤100 x1 ≤ 2 x2x1 , x2 ≥≥ 0 二次规划模型二次规划模型(QP)若还要求产量为整数,则是整数二次规划模型若还要求产量为整数,则是整数二次规划模型(IQP) 优优 化化 建建 模模非线性规划模型-选址问题非线性规划模型-选址问题某公司有某公司有6个建筑工地,位置坐标为个建筑工地,位置坐标为(ai, bi) (单位:公单位:公里里),水泥日用量水泥日用量di (单位:吨)单位:吨)假设:假设:料场料场和工地之间和工地之间有直线道路有直线道路 优优 化化 建建 模模用例中数据计算,最优解为总吨公里数为总吨公里数为总吨公里数为总吨公里数为136.2136.2线性规划模型线性规划模型(LP)决策变量:决策变量:ci j (料场料场j到到工地工地i的运量)的运量)~12维维 优优 化化 建建 模模选址问题:选址问题:NLPNLP2)改建两个新料场,需要确定新料场位置)改建两个新料场,需要确定新料场位置(xj,yj)和运量和运量cij ,,在其它条件不变下使总吨公里数最小。
在其它条件不变下使总吨公里数最小决策变量:决策变量:ci j,,(xj,yj)~16维维非线性规划模型非线性规划模型(NLP) 优优 化化 建建 模模整数规划整数规划 - - 聘用方案聘用方案决策变量决策变量:周一至周日每天:周一至周日每天(新新)聘用人数聘用人数 x1, x2,x7目标函数目标函数::7天天(新新)聘用人数之和聘用人数之和约束条件约束条件:周一至周日每天需要人数:周一至周日每天需要人数 优优 化化 建建 模模连续工作连续工作5天天周一工作的应是周一工作的应是(上上)周四至周一聘用周四至周一聘用的的设系统已进入稳态(不是开始的几周)设系统已进入稳态(不是开始的几周)聘用方案聘用方案整数规划整数规划模型模型(IP)(IP) 优优 化化 建建 模模丁的蛙泳成绩退步到丁的蛙泳成绩退步到1’15”2;;戊的自由泳成绩进戊的自由泳成绩进步到步到57”5, 组成接力队的方案是否应该调整组成接力队的方案是否应该调整??如何选拔队员组成如何选拔队员组成4 4 100100米混合泳接力队米混合泳接力队? ?0-1规划规划 -混合泳接力队的选拔-混合泳接力队的选拔 甲甲乙乙丙丙丁丁戊戊蝶泳蝶泳1’06”857”21’18”1’10”1’07”4仰泳仰泳1’15”61’06”1’07”81’14”21’11”蛙泳蛙泳1’27”1’06”41’24”61’09”61’23”8自由泳自由泳58”653”59”457”21’02”45名候选人的名候选人的百米成绩百米成绩穷举法穷举法:: 优优 化化 建建 模模目标目标函数函数若选择队员若选择队员i参加泳姿参加泳姿j 的比赛,记的比赛,记xij=1, , 否则记否则记xij=0 0-1规划模型规划模型 cij( (秒秒) )~队员队员i 第第j 种泳姿的百米成绩种泳姿的百米成绩约束约束条件条件每人最多入选泳姿之一每人最多入选泳姿之一 ciji=1i=2i=3i=4i=5j=166.857.2787067.4j=275.66667.874.271j=38766.484.669.683.8j=458.65359.457.262.4每种泳姿有且只有每种泳姿有且只有1 1人人 0-1规划规划: 整数规划的特例整数规划的特例 优优 化化 建建 模模无无约约束束优优化化更多的优化问题更多的优化问题线线性性规规划划非非线线性性规规划划网网络络优优化化组组合合优优化化整整数数规规划划不不确确定定规规划划多多目目标标规规划划目目标标规规划划动动态态规规划划连续优化连续优化离散优化离散优化从其他角度分类从其他角度分类• 应用广泛:应用广泛:生产和运作管理、经济与金融、图论和网生产和运作管理、经济与金融、图论和网络优化、目标规划问题、对策论、排队论、存储论,络优化、目标规划问题、对策论、排队论、存储论,以及更加综合、更加复杂的决策问题等以及更加综合、更加复杂的决策问题等 • 实际问题规模往往较大,用软件求解比较方便实际问题规模往往较大,用软件求解比较方便 优优 化化 建建 模模3. LINDO/LINGO软件简介软件简介 优优 化化 建建 模模LINDO LINDO 公司软件产品简要介绍公司软件产品简要介绍 美国芝加哥美国芝加哥(Chicago)大学的大学的Linus Schrage教授于教授于1980年前后开发年前后开发, 后来成立后来成立 LINDO系统公司(系统公司(LINDO Systems Inc.),), 网址:网址: LINDO: Linear INteractive and Discrete Optimizer (V6.1)LINDO API: LINDO Application Programming Interface (V4.1)LINGO: Linear INteractive General Optimizer (V10.0)What’s Best!: (SpreadSheet e.g. EXCEL) (V8.0)演演示示(试用试用)版、高级版、超级版、工业版、扩展版版、高级版、超级版、工业版、扩展版… (求解(求解问题规模问题规模和和选件选件不同)不同) 优优 化化 建建 模模 LP QP NLP IP 全局优化全局优化(选选) ILP IQP INLP LINGOLINGO软件的求解过程软件的求解过程 LINGO预处理程序预处理程序线性优化求解程序线性优化求解程序非线性优化求解程序非线性优化求解程序分枝定界管理程序分枝定界管理程序1. 确定常数确定常数2. 识别类型识别类型1. 单纯形算法单纯形算法2. 内点算法内点算法(选选)1、顺序线性规划法、顺序线性规划法(SLP) 2、广义既约梯度法、广义既约梯度法(GRG) (选选) 3、多点搜索、多点搜索(Multistart) (选选) 优优 化化 建建 模模建模时需要注意的几个基本问题建模时需要注意的几个基本问题 1、、尽量使用实数优化,减少整数约束和整数变量尽量使用实数优化,减少整数约束和整数变量2、、尽量使用光滑优化,减少非光滑约束的个数尽量使用光滑优化,减少非光滑约束的个数 如:尽量少使用绝对值、符号函数、多个变量求最如:尽量少使用绝对值、符号函数、多个变量求最大大/最小值、四舍五入、取整函数等最小值、四舍五入、取整函数等3、、尽量使用线性模型,减少非线性约束和非线性变量尽量使用线性模型,减少非线性约束和非线性变量的个数的个数 (如(如x/y <5 改为改为x<5y))4、、合理设定变量上下界,尽可能给出变量初始值合理设定变量上下界,尽可能给出变量初始值 5、、模型中使用的参数数量级要适当模型中使用的参数数量级要适当 (如小于如小于103) 优优 化化 建建 模模安装文件安装文件20M多一点,需要接受安装协议、选择安装多一点,需要接受安装协议、选择安装目录(缺省目录(缺省C:\LINGO9)。
LINGO软件的安装软件的安装安装过程安装过程: : 与与LINDO for WindowsLINDO for Windows类似类似. . 安装完成前,在出现的对话框安装完成前,在出现的对话框(如图如图)中选择缺省的建中选择缺省的建模模(即编程即编程)语言,系统推荐的是采用语言,系统推荐的是采用LINGO安装后可通过后可通过“LINGO|Options|File Format”命令修改缺命令修改缺省的建模(即编程)语言省的建模(即编程)语言 优优 化化 建建 模模第一次运行时提示输入授权密码,如图:第一次运行时提示输入授权密码,如图: 优优 化化 建建 模模一个简单的一个简单的LINGO程序程序例例 直接用LINGO来解如下二次规划问题:输入窗口如下:输入窗口如下: 优优 化化 建建 模模程序语句输入的备注:程序语句输入的备注:•LINGO总是根据总是根据“MAX=”或或“MIN=”寻找目标函数,寻找目标函数,而除注释语句和而除注释语句和TITLE语句外的其他语句都是约束条语句外的其他语句都是约束条件,因此语句的顺序并不重要件,因此语句的顺序并不重要 。
•限定变量取整数值的语句为限定变量取整数值的语句为“@GIN(X1)”和和“@GIN(X2)”,不可以写成,不可以写成“@GIN(2)”,否则,否则LINGO将把这个模型看成没有整数变量将把这个模型看成没有整数变量•LINGO中函数一律需要以中函数一律需要以“@”开头,其中整型变量开头,其中整型变量函数(函数(@BIN、、@GIN)和上下界限定函数()和上下界限定函数(@FREE、、@SUB、、@SLB)与)与LINDO中的命令类似而且中的命令类似而且0/1变量函数是变量函数是@BIN函数 优优 化化 建建 模模输出结果:输出结果:运行菜单命令运行菜单命令“LINGO|Solve” 最优整数解最优整数解X=(35,,65)最大利润最大利润=11077.5 优优 化化 建建 模模输出结果备注:输出结果备注:通过菜单 “WINDOW| Status Window”看到状态窗口,可看到最佳目标值“Best Obj”与问题的上界“Obj Bound”已经是一样的,当前解的最大利润与这两个值非常接近,是计算误差引起的如果采用全局最优求解程序(后面介绍),可以验证它就是全局最优解。
LINGO是将它作为PINLP(纯整数非线性规划)来求解,因此找到的是局部最优解 优优 化化 建建 模模一个简单的一个简单的LINGO程序程序LINGO的基本用法的几点注意事项的基本用法的几点注意事项 •LINGO中不区分大小写字母;变量和行名可以超过8个字符,但不能超过32个字符,且必须以字母开头•用LINGO解优化模型时已假定所有变量非负(除非用限定变量取值范围的函数@free或@sub或@slb另行说明)•变量可以放在约束条件的右端(同时数字也可放在约束条件的左端)但为了提高LINGO求解时的效率,应尽可能采用线性表达式定义目标和约束(如果可能的话)•语句是组成LINGO模型的基本单位,每个语句都以分号结尾,编写程序时应注意模型的可读性例如:一行只写一个语句,按照语句之间的嵌套关系对语句安排适当的缩进,增强层次感•以感叹号开始的是说明语句(说明语句也需要以分号结束)) 优优 化化 建建 模模集合的基本用法和集合的基本用法和LINGO模型的基本要素模型的基本要素 理解理解LINGO建模语言最重要的是理解集合(建模语言最重要的是理解集合(Set)及其)及其属性(属性(Attribute)的概念。
的概念 例例 SAILCO公司需要决定下四个季度的帆船生产量下公司需要决定下四个季度的帆船生产量下四个季度的帆船需求量分别是四个季度的帆船需求量分别是40条,条,60条,条,75条,条,25条,条,这些需求必须按时满足每个季度正常的生产能力是这些需求必须按时满足每个季度正常的生产能力是40条帆船,每条船的生产费用为条帆船,每条船的生产费用为400美元如果加班生产,美元如果加班生产,每条船的生产费用为每条船的生产费用为450美元每个季度末,每条船的美元每个季度末,每条船的库存费用为库存费用为20美元假定生产提前期为美元假定生产提前期为0,初始库存为,初始库存为10条船如何安排生产可使总费用最小?条船如何安排生产可使总费用最小?用用DEM,RP,OP,INV分别表示需求量、正常生产的产量、分别表示需求量、正常生产的产量、加班生产的产量、库存量,则加班生产的产量、库存量,则DEM,RP,OP,INV对每个对每个季度都应该有一个对应的值,也就说他们都应该是一个季度都应该有一个对应的值,也就说他们都应该是一个由由4个元素组成的数组,其中个元素组成的数组,其中DEM是已知的,而是已知的,而RP,OP,INV是未知数。
是未知数 优优 化化 建建 模模问题的模型问题的模型( (可以看出是可以看出是LP模型模型 )目标函数是所有费用的和目标函数是所有费用的和 约束条件主要有两个:约束条件主要有两个:1)能力限制:)能力限制:2)产品数量的平衡方程:)产品数量的平衡方程:加上变量的非负约束加上变量的非负约束 优优 化化 建建 模模注:注:LINDO中没有数组,只能对每个季度分别定义变量,如正常产量就要有RP1,RP2,RP3,RP4 4个变量等写起来就比较麻烦,尤其是更多(如1000个季度)的时候 记四个季度组成的集合QUARTERS={1,2,3,4},它们就是上面数组的下标集合,而数组DEM,RP,OP, INV对集合QUARTERS中的每个元素1,2,3,4分别对应于一个值LINGO正是充分利用了这种数组及其下标的关系,引入了“集合”及其“属性”的概念,把QUARTERS={1,2,3,4}称为集合,把DEM,RP,OP, INV称为该集合的属性(即定义在该集合上的属性) 优优 化化 建建 模模•QUARTERS集合的属性•DEM• RP•OP• INV•QUARTERS集合•2•3•4•1 集合及其属性集合及其属性 优优 化化 建建 模模集合元素及集合的属性确定的所有变量集合元素及集合的属性确定的所有变量集合QUARTERS的元素1234定义在集合QUARTERS上的属性DEMDEM(1)DEM(2) DEM(3) DEM(4)RPRP(1)RP(2)RP(3)RP(4)OPOP(1)OP(2)OP(3)OP(4)INVINV(1)INV(2)INV(3)INV(4) 优优 化化 建建 模模LINGO中定义集合及其属性中定义集合及其属性 LP模型在模型在LINGO中的一个典型输入方式中的一个典型输入方式 以以“MODEL::”开始开始 以以“END”结结束束集合定义部分从集合定义部分从(“SETS::”到到“ENDSETS” ):定:定义集合及其属性义集合及其属性集合定义部分从集合定义部分从(“DATA::”到到“ENDDATA” )给出优化目标给出优化目标和约束和约束 优优 化化 建建 模模目标函数的定义方式目标函数的定义方式@SUM(集合(下标):关于集合的属性的表达式集合(下标):关于集合的属性的表达式)对语句中冒号对语句中冒号“::”后面的表达式,按照后面的表达式,按照“::”前前面的集合指定的下标(元素)进行求和。
面的集合指定的下标(元素)进行求和 本例中目标函数也可以等价地写成本例中目标函数也可以等价地写成@SUM(QUARTERS(i): 400*RP(i) +450*OP(i) +20*INV(i) ),,“@SUM”相当于求和符号相当于求和符号“∑”,,“QUARTERS(i)”相当于相当于“iQUARTERS”的含义由于本例中目标函数对集合由于本例中目标函数对集合QUARTERS的所有元素的所有元素(下下标标) 都要求和,所以可以将下标都要求和,所以可以将下标i省去 优优 化化 建建 模模约束的定义方式约束的定义方式循环函数循环函数@FOR(集合集合(下标下标):关于集合的属性的约束关系式:关于集合的属性的约束关系式) 对冒号对冒号“::”前面的集合的每个元素(下标),冒号前面的集合的每个元素(下标),冒号“::”后面的约束关系式都要成立后面的约束关系式都要成立 本例中,每个季度正常的生产能力是本例中,每个季度正常的生产能力是40条帆船,这正是条帆船,这正是语句语句“@FOR(QUARTERS(I):RP(I)<40);”的含义由于对所有元素由于对所有元素(下标下标I),约束的形式是一样的,所以也约束的形式是一样的,所以也可以像上面定义目标函数时一样,将下标可以像上面定义目标函数时一样,将下标i省去,省去,这个语句可以简化成这个语句可以简化成“@FOR(QUARTERS:RP<40);” 。
优优 化化 建建 模模本例中,对于产品数量的平衡方程,由于下标本例中,对于产品数量的平衡方程,由于下标i=1时的时的约束关系式与约束关系式与i=2,,3,,4时有所区别,所以不能省略下时有所区别,所以不能省略下标标“i”实际上,实际上,i=1时要用到变量时要用到变量INV((0),但定义),但定义的属性变量中的属性变量中INV不包含不包含INV((0))(INV(0)=10是一个已是一个已知的知的)为了区别为了区别i=1和和i=2,,3,,4,把,把i=1时的约束关系式单独写时的约束关系式单独写出,即出,即“INV(1)=10+RP(1)+OP(1)-DEM(1);” ;;而对而对i=2,,3,,4对应的约束,对下标集合的元素(下标对应的约束,对下标集合的元素(下标i)增加了一个逻辑关系式)增加了一个逻辑关系式“i#GT#1”(这个限制条件(这个限制条件与集合之间有一个竖线与集合之间有一个竖线“|”分开,称为过滤条件)分开,称为过滤条件)限制条件限制条件“i#GT#1”是一个逻辑表达式,意思就是是一个逻辑表达式,意思就是i>1;;“#GT#”是逻辑运算符号,意思是是逻辑运算符号,意思是“大于(大于(Greater Than的字首字母缩写)的字首字母缩写)” 。
约束的定义方式约束的定义方式 优优 化化 建建 模模问题的求解:运行菜单命令问题的求解:运行菜单命令“LINGO|Solve” 全局最优解全局最优解RP=(40,40,40,25),OP=(0,10,35,0) 最小成本最小成本=78450 优优 化化 建建 模模注:注:由于输入中没有给出行名,所以行名是系统自动按照行号由于输入中没有给出行名,所以行名是系统自动按照行号1-9生成的 选择菜单命令选择菜单命令“LINGO|Generate|Disply model((Ctrl+G))”,可以得到展开形式的模型,可以得到展开形式的模型(如图如图),可以看到完整的模型,也,可以看到完整的模型,也能确定行号能确定行号(行号放在方括号行号放在方括号“[ ]”中,且数字前面带有下划线中,且数字前面带有下划线“_”) 最好在输入模型时用户主动设定约束的行名最好在输入模型时用户主动设定约束的行名(即约束名即约束名),使,使程序清晰些单一约束的行名设置方法就是将行名放在方括号程序清晰些单一约束的行名设置方法就是将行名放在方括号“[ ]”中,置于约束之前中,置于约束之前。
后面将结合具体例子介绍在使用集合的情况下如何设置行名后面将结合具体例子介绍在使用集合的情况下如何设置行名 优优 化化 建建 模模基本集合与派生集合基本集合与派生集合 例例 建筑工地的位置建筑工地的位置(用平面坐标用平面坐标a, b表示,距离单位:表示,距离单位:公里公里)及水泥日用量及水泥日用量d(吨吨)下表给出有两个临时料场位下表给出有两个临时料场位于于P (5,1), Q (2, 7),日储量各有日储量各有20吨从A, B两料场分别两料场分别向各工地运送多少吨水泥,使总的吨公里数最小两个向各工地运送多少吨水泥,使总的吨公里数最小两个新的料场应建在何处,节省的吨公里数有多大?新的料场应建在何处,节省的吨公里数有多大?112233445566a1.258.750.55.7537.25b1.250.754.7556.57.75d3547611 优优 化化 建建 模模建立模型建立模型记工地的位置为记工地的位置为 ,水泥日用量为,水泥日用量为 ;料场;料场位置为位置为 ,日储量为,日储量为 ;从料场;从料场 向工地向工地 的的运送量为运送量为 。
使用现有临时料场时,决策变量只有使用现有临时料场时,决策变量只有 (非负),所以这是(非负),所以这是LP模型;当为新模型;当为新建料场选址时决策变量为建料场选址时决策变量为 和和 ,由于目标函数,由于目标函数 对对 是非线性的,是非线性的,所以在新建料场时是所以在新建料场时是NLP模型先解模型先解NLP模型,而把现有临时料场的位置作模型,而把现有临时料场的位置作为初始解告诉为初始解告诉LINGO 优优 化化 建建 模模本例中集合的概念本例中集合的概念利用集合的概念,可以定义需求点利用集合的概念,可以定义需求点DEMAND和供应点和供应点SUPPLY两个集合,分别有两个集合,分别有6个和个和2个元素个元素(下标下标)但决策变量策变量(运送量运送量) 与集合与集合DEMAND和集合和集合SUPPLY都有关系的该如何定义这样的属性?都有关系的该如何定义这样的属性?集合的属性相当于以集合的元素为下标的数组这里的集合的属性相当于以集合的元素为下标的数组这里的 相当于二维数组它的两个下标分别来自集合相当于二维数组。
它的两个下标分别来自集合DEMAND和和SUPPLY,因此可以定义一个由二元对组,因此可以定义一个由二元对组成的新的集合,然后将成的新的集合,然后将 定义成这个新集合的属性定义成这个新集合的属性 优优 化化 建建 模模输入程序输入程序 定义了三个集合,其中定义了三个集合,其中LINK在前在前两个集合两个集合DEMAND 和和SUPPLY的的基础上定义基础上定义表示集合表示集合LINK中的元素就是集合中的元素就是集合DEMAND 和和SUPPLY的元素组合成的有序二元组,的元素组合成的有序二元组,从数学上看从数学上看LINK是是DEMAND 和和SUPPLY的笛的笛卡儿积,也就是说卡儿积,也就是说LINK={((S,,T))|SDEMAND,,TSUPPLY}因此,其属性因此,其属性C也就是一个也就是一个6*2的矩阵(或者说的矩阵(或者说是含有是含有12个元素的二维数组)个元素的二维数组)LINGO建模语言也称为矩阵生成器(建模语言也称为矩阵生成器(MATRIX GENERATOR)类似DEMAND 和和SUPPLY直接把元素列举出直接把元素列举出来的集合,称为来的集合,称为基本集合基本集合(primary set),而把而把LINK这种基于其它这种基于其它集合而派生出来的二维或多维集合称为集合而派生出来的二维或多维集合称为派生集合派生集合(derived set)。
由于是由于是DEMAND 和和SUPPLY生成了派生集合生成了派生集合LINK,所以,所以DEMAND 和和SUPPLY 称为称为LINK的的父集合父集合 优优 化化 建建 模模输入程序输入程序 初始段 INGO对数据是按列赋值的 语句的实际赋值顺序是X=(5,2), Y=(1,7), 而不是X=(5,1), Y=(2,7) 等价写法:“X=5,2; Y=1,7;”同理,数据段中对常数数组A,B的赋值语句也可以写成A, B=1.25 1.25 8.75 0.75 0.5 4.75 5.75 5 3 6.5 7.25 7.75; 优优 化化 建建 模模输入程序输入程序 定义目标和约束,与前例的方法是类似(这里包含了派生集合),请特别注意进一步体会集合函数@SUM和@FOR的用法由于新建料场的位置理论上讲可以是任意的,所以在约束的最后(模型的“END”语句上面的一行)用@free函数取消了变量X、Y的非负限制 优优 化化 建建 模模解答解答:运行菜单命令运行菜单命令“LINGO|Solve” 局部最优解局部最优解X(1)=7.249997,, X(2)=5.695940,,Y(1)=7.749998,, Y(2)=4.928524,,C(略),(略),最小运量最小运量=89.8835(吨公里吨公里)。
问题问题:最小运量最小运量89.8835是不是全局最优是不是全局最优 是用是用“LINGO|Options”菜单命令打开选项对话框,在菜单命令打开选项对话框,在“Global Solver”选项卡上选择选项卡上选择“Use Global Solver”, 激激活全局最优求解程序活全局最优求解程序 优优 化化 建建 模模问题问题:最小运量最小运量89.8835是不是全局最优是不是全局最优 为减少计算工作量,对为减少计算工作量,对X,,Y的取值再做一些限制虽然理论上的取值再做一些限制虽然理论上新建料场的位置可以是任意的,但显然最佳的料场位置不应该离新建料场的位置可以是任意的,但显然最佳的料场位置不应该离工地太远,至少不应该超出现在工地太远,至少不应该超出现在6个工地所决定的坐标的最大、个工地所决定的坐标的最大、最小值决定的矩形之外,即最小值决定的矩形之外,即: 0.5<=x<=8.75, 0.75<=y<=7.75. 可以用可以用@bnd函数加上函数加上这个条件取代模型这个条件取代模型END上面的行,运行上面的行,运行NLP模型,全局最优模型,全局最优求解程序花费的时间求解程序花费的时间仍然很长,运行仍然很长,运行27分分35秒时人为终止求解秒时人为终止求解(按下按下“Interrupt Solver”按钮按钮)得到左得到左边模型窗口和全局求边模型窗口和全局求解器的状态窗口解器的状态窗口此时目标函数值的下界(此时目标函数值的下界(Obj Bound=85.2638)与目前得到的最好)与目前得到的最好的可行解的目标函数值(的可行解的目标函数值(Best Obj=85.2661)相差已经非常小,可)相差已经非常小,可以认为已经得到了全局最优解。
以认为已经得到了全局最优解 优优 化化 建建 模模计算结果计算结果 工地与料场示意图工地与料场示意图 : “*”表示料场,表示料场,“+”表示工地表示工地 可以认为是模型的最后结果可以认为是模型的最后结果 附注:如果要把料厂P(5, 1), Q (2, 7)的位置看成是已知并且固定的,这时是LP模型只需要把初始段的“X Y =5,1,2,7;”语句移到数据段就可以了此时,运行结果告诉我们得到全局最优解(变量C的取值这里略去),最小运量136.2275(吨公里) 优优 化化 建建 模模稠密集合与稀疏集合稠密集合与稀疏集合 包含了两个基本集合构成的所有二元有序对的派生集合包含了两个基本集合构成的所有二元有序对的派生集合称为称为稠密集合稠密集合(简称稠集简称稠集)有时候,在实际问题中,一有时候,在实际问题中,一些属性些属性(数组数组) 只在笛卡儿积的一个真子集合上定义,这只在笛卡儿积的一个真子集合上定义,这种派生集合称为种派生集合称为稀疏集合稀疏集合(简称疏集简称疏集)例例 (最短路问题最短路问题) 在纵横交错的公路网中,货车司机希望找到一条在纵横交错的公路网中,货车司机希望找到一条从一个城市到另一个城市的最短路从一个城市到另一个城市的最短路. 下图表示的是公路网下图表示的是公路网, 节点表节点表示货车可以停靠的城市示货车可以停靠的城市,弧上的权表示两个城市之间的距离弧上的权表示两个城市之间的距离(百公百公里里). 那么那么,货车从城市货车从城市S出发到达城市出发到达城市T,如何选择行驶路线如何选择行驶路线,使所经使所经过的路程最短过的路程最短?STA1 A2 A3 B1 B2 C1 C2 633665874678956 优优 化化 建建 模模STA1 A2 A3 B1 B2 C1 C2 633665874678956分析分析 假设从假设从S到到T的最优行驶路线的最优行驶路线 P 经过城市经过城市C1, 则则P中从中从S到到C1的子路的子路也一定是从也一定是从S到到C1的最优行驶路线的最优行驶路线; 假设假设 P 经过城市经过城市C2, 则则P中从中从S到到C2的子路也一定是从的子路也一定是从S到到C2的最的最优行驶路线优行驶路线. 因此因此, 为得到从为得到从S到到T的最优行驶路线的最优行驶路线, 只需要先求出从只需要先求出从S到到Ck(k=1,2)的最优行驶路线的最优行驶路线, 就可以方便地得到从就可以方便地得到从S到到T的最优行驶的最优行驶路线路线. 同样同样,为了求出从为了求出从S到到Ck(k=1,2)的最优行驶路线的最优行驶路线, 只需要先求出从只需要先求出从S到到Bj(j=1,2)的最优行驶路线的最优行驶路线; 为了求出从为了求出从S到到Bj(j=1,2)的最优行驶路线的最优行驶路线, 只需要先求出从只需要先求出从S到到Ai (i=1,2,3)的最优行驶路线的最优行驶路线. 而而S到到Ai(i=1,2,3)的最优行驶路线是的最优行驶路线是很容易得到的很容易得到的(实际上实际上, 此例中此例中S到到Ai(i=1,2,3)只有唯一的道路只有唯一的道路) 优优 化化 建建 模模分析分析 STA1 A2 A3 B1 B2 C1 C2 633665874678956此例中可把从S到T的行驶过程分成4个阶段,即 S→Ai (i=1,2或3), Ai → Bj(j=1或2), Bj → Ck(k=1或2), Ck → T. 记d(Y,X)为城市Y与城市X之间的直接距离(若这两个城市之间没有道路直接相连,则可以认为直接距离为∞),用L(X)表示城市S到城市X的最优行驶路线的路长: 优优 化化 建建 模模本例的计算本例的计算STA1 A2 A3 B1 B2 C1 C2 633665874678956所以, 从S到T的最优行驶路线的路长为20. 进一步分析以上求解过程, 可以得到从S到T的最优行驶路线为S→ A3→ B2→ C1 → T.这种计算方法在数学上称为动态规划(Dynamic Programming) 优优 化化 建建 模模本例的本例的LINGO求解求解“CITIES”(城市城市):一个基本集合一个基本集合(元素通过枚举给出元素通过枚举给出)L:CITIES对应的属性变量对应的属性变量(我们要求的最短路长我们要求的最短路长) “ROADS”(道路):由CITIES导出的一个派生集合(请特别注意其用法),由于只有一部分城市之间有道路相连,所以不应该把它定义成稠密集合,将其元素通过枚举给出,这就是一个稀疏集合。
D:稀疏集合ROADS对应的属性变量(给定的距离) 优优 化化 建建 模模本例的本例的LINGO求解求解从模型中还可以看出:这个从模型中还可以看出:这个LINGO程序可以没有目标程序可以没有目标函数,这在函数,这在LINGO中,可以用来找可行解中,可以用来找可行解(解方程组和解方程组和不等式组不等式组)在数据段对在数据段对L进行赋值,只有进行赋值,只有L(S)=0已已知,后面的值为空知,后面的值为空(但位置必须留出来,但位置必须留出来,即逗号即逗号“,,”一个也不能少,否则会出一个也不能少,否则会出错错)如果这个语句直接写成如果这个语句直接写成“L=0;;”,语法上看也是对的,但其含义是,语法上看也是对的,但其含义是L所所有元素的取值全部为有元素的取值全部为0,所以也会与题,所以也会与题意不符 优优 化化 建建 模模本例的本例的LINGO求解求解虽然集合虽然集合CITIES中的元素不是数字,但当中的元素不是数字,但当它以它以CITIES(I)的形式出现在循环中时,引的形式出现在循环中时,引用下标用下标I却实际上仍是正整数,也就是说却实际上仍是正整数,也就是说I指指的正是元素在集合中的位置的正是元素在集合中的位置(顺序顺序),一般称,一般称为元素的索引为元素的索引(INDEX)。
在在@for循环中的过滤条件里用了一个函数循环中的过滤条件里用了一个函数“@index”, 其作用是返回一个元素在集合其作用是返回一个元素在集合中的索引值,这里中的索引值,这里@index(S)=1(即元素即元素S在在集合中的索引值为集合中的索引值为1),所以逻辑关系式,所以逻辑关系式“I#GT#@index(S)”可以可以直接等价地可以可以直接等价地写成写成“I#GT#1” 这里@index(S)实际上还实际上还是是@index(CITIES,S)的简写,即返回的简写,即返回S在集在集合合CITIES中的索引值中的索引值 优优 化化 建建 模模本例的本例的LINGO求解结果求解结果从S到T的最优行驶路线的路长为20(进一步分析,可以得到最优行驶路线为S→ A3→ B2→ C1 → T) 本例中定义稀疏集合本例中定义稀疏集合ROADS的方法是将其元素通过枚举的方法是将其元素通过枚举给出,有时如果元素比较多,用起来不方便另一种定给出,有时如果元素比较多,用起来不方便另一种定义稀疏集合的方法是义稀疏集合的方法是“元素过滤元素过滤”法,能够从笛卡儿积法,能够从笛卡儿积中系统地过滤下来一些真正的元素。
中系统地过滤下来一些真正的元素 优优 化化 建建 模模集合的使用小结集合的使用小结 集合的不同类型及其关系集合的不同类型及其关系 集合集合派生集合派生集合稀疏集合稀疏集合稠密集合稠密集合基本集合基本集合元素列表法元素列表法 元素过滤法元素过滤法 直接列举法直接列举法 隐式列举法隐式列举法 优优 化化 建建 模模运算符及其优先级运算符及其优先级 算术运算符算术运算符加、减、乘、除、乘方等数学运算(即数与数之间的运算,运算结果也是数)LINGO中的算术运算符有以下5种:+(加法),—(减法或负号),*(乘法),/(除法),^ (求幂) 优优 化化 建建 模模逻辑运算符逻辑运算符运算结果只有“真”(TRUE)和“假”(FALSE)两个值(称为“逻辑值”),LINGO中用数字1代表TRUE,其他值(典型的值是0)都是FALSE在LINGO中,逻辑运算(表达式)通常作为过滤条件使用,逻辑运算符有9种,可以分成两类:#AND#(与),#OR#(或),#NOT#(非):逻辑值之间的运算,它们操作的对象本身已经是逻辑值或逻辑表达式,计算结果也是逻辑值EQ#(等于),#NE#(不等于),#GT#(大于),#GE#(大于等于),#LT#(小于),#LE#(小于等于):是“数与数之间”的比较,也就是它们操作的对象本身必须是两个数, 计算得到的结果是逻辑值。
优优 化化 建建 模模关系运算符关系运算符表示是“数与数之间”的大小关系,在LINGO中用来表示优化模型的约束条件LINGO中关系运算符有3种:<(即<=,小于等于),=(等于),>(即>=,大于等于)(在优化模型中约束一般没有严格小于、严格大于关系)运算符的优先级运算符的优先级 优先级最高 最低运算符#NOT#—(负号)^ */+—(减法)#EQ# #NE# #GT# #GE# #LT# #LE##AND# #OR#< = > 优优 化化 建建 模模变量定界函数变量定界函数对变量的取值范围附加限制,共有以下四种:对变量的取值范围附加限制,共有以下四种:•@BND(L, X, U) :限制:限制L <= X <= U 注意注意LINGO中中没有与没有与LINDO命令命令SLB、、SUB类似的函数类似的函数@SLB和和@SUB•@BIN(X) :限制:限制X为为0或或1注意LINDO中的命令是中的命令是INT,但,但LINGO中这个函数的名字却不是中这个函数的名字却不是@INT(X)•@FREE(X)::取消对取消对X的符号限制(即可取负数、的符号限制(即可取负数、0或或正数)正数)•@GIN(X)::限制限制X为整数为整数 优优 化化 建建 模模 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) 平铺窗口上下文相关的帮助 优优 化化 建建 模模文件文件(File)主菜单主菜单File|Export File…优化模型输出到文件,有两个子菜单,分别表示两种输出格式(都是文本文件): MPS Format(MPS格式):是IBM公司制定的一种数学规划文件格式。
MPI Format(MPI格式):是LINDO公司制定的一种数学规划文件格式File|User Database Info 弹出对话框,用户输入用户使用数据库时需要验证的用户名(User ID)和密码(Password),这些信息在使用@ODBC()函数访问数据库时要用到 优优 化化 建建 模模编辑(编辑(Edit)主菜单)主菜单将WINDOWS剪贴板中的内容粘贴到当前光标处•“Edit|Paste(粘贴命令)” 仅用于剪贴板中的内容是文本的情形•“Edit|Paste Special …(特殊粘贴命令)”可以用于剪贴板中的内容不是文本的情形,可以插入其它应用程序中生成的对象(Object)或对象的链接(Link) 例如,LINGO模型中可能会在数据段用到从其它应用程序中生成的数据对象(如EXCEL电子表格数据),这时用“Edit|Paste Special …”是很方便的Edit|Paste 和和Edit|Paste Special … 优优 化化 建建 模模编辑(编辑(Edit)主菜单)主菜单Edit|Match Parenthesis用于匹配模型中的括号:•如果当前没有选定括号,则把光标移动到离当前光标最近的一个括号并选中这个括号。
•当选定一个括号后,则把光标移动到与这个括号相匹配的括号并选中这个括号Edit|Paste Function还有下一级子菜单和下下一级子菜单,用于按函数类型选择LINGO的某个函数,粘贴到当前光标处 优优 化化 建建 模模编辑(编辑(Edit)主菜单)主菜单Edit|Select Font弹出对话框,控制显示字体、字形、大小、颜色、效果等注:这些显示特性只有当文件保存为LINGO格式(*.LG4)的文件时才能保存下来此外,如果“按语法显示色彩”选项是有效的(参见“LINGO|Options”),在模型窗口中将不能通过“Edit|Select Font”菜单命令控制文本的颜色 优优 化化 建建 模模编辑(编辑(Edit)主菜单)主菜单Edit|Insert New Object 插入其它应用程序中生成的整个对象或对象的链接前面介绍过的“Edit|Paste Special …”与此类似,但“Paste Special”命令一般用于粘贴某个外部对象的一部分,而这里的命令是插入整个对象或对象的链接Edit|Links在模型窗口中选择一个外部对象的链接,然后选择“Edit|Links(链接)”命令,则弹出一个对话框,可以修改这个外部对象的链接属性。
优优 化化 建建 模模编辑(编辑(Edit)主菜单)主菜单Edit|Object Properties在模型窗口中选择一个链接或嵌入对象(OLE),然后选择“Edit|Object Properties(对象属性)”命令,则弹出一个对话框,可以修改这个对象的属性主要包括以下属性:•display of the object:对象的显示;•the object's source: 对象的源;•type of update (automatic or manual): 修改方式(自动或人工修改);•opening a link to the object:打开对象的一个链接;•updating the object:修改对象;•breaking the link to the object:断开对象的链接 优优 化化 建建 模模 LINGO系统系统(LINGO)主菜单主菜单LINGO|LOOK(模型显示)(模型显示) 模型窗口下才能使用,按照LINGO模型的输入形式以文本方式显示,显示时对输入的所有行(包括说明语句)按顺序编号将弹出一个对话框,在对话框中选择“All”将对所有行进行显示,也可以选择“Selected”输入起始行,这时只显示相应行的内容。
LINGO|Generate和和LINGO|Picture 都是在模型窗口下才能使用,它们的功能是按照LINGO模型的完整形式(例如将属性按下标(集合的每个元素)展开)显示目标函数和约束(只有非零项会显示出来) 优优 化化 建建 模模 LINGO系统系统(LINGO)主菜单主菜单LINGO|Generate结果以代数表达式的形式给出,按照是否在屏幕上显示结果的要求,可以选择“Display model(Ctrl+G)”和“Don’t display model(Ctrl+Q)”两个子菜单供选择在屏幕上不显示时,运行该命令的目的可能仅仅是为了以后选择适当的求解程序使用例如,选址问题,LINGO|Generate命令显示的结果如图注:在LINGO 8.0以及更早以前的版本中,如果有非线性变量项,对应的非线性变量前的系数将以问号(“?”)显示 优优 化化 建建 模模 LINGO系统系统(LINGO)主菜单主菜单LINGO|Generate结果按照矩阵形式以图形方式给出例:选址问题,该命令的结果如图该显示中非线性项的系数以黑色显示为“?”,线性项的系数为正时显示为兰色,为负则为红色(本例没有红色)。
在这个图形上单击鼠标右键,可以出现一个相关联的显示控制菜单(如图中写有“Zoom In”的菜单所示),这个菜单可以控制图形显示的内容的放大(Zoom In)、缩小(Zoom Out)、显示全部内容(View All),也可以控制该窗口是否显示行名(Row Names)、变量名(Var Names)、滚动条(Scroll Bars) 优优 化化 建建 模模 LINGO系统系统(LINGO)主菜单主菜单LINGO|Options命令命令打开一个含有7个选项卡的窗口,通过它修改LINGO系统的各种控制参数和选项新的设置生效新的设置生效,并关闭窗口当前设置变为默认设置,下次启动LINGO时这些设置仍然有效恢复LINGO系统定义的原始默认设置(缺省设置)废弃本次操作,退出对话框显示本对话框的帮助信息 优优 化化 建建 模模LINGO|Options|Interface(界面)选项卡(界面)选项卡错误信息对话框:如果选择该选项,求解程序遇到错误时将打开一个对话框显示错误,关闭该对话框后程序才会继续执行;否则,错误信息将在报告窗口显示,程序仍会继续执行 弹出屏幕:如果选择该选项,则LINGO每次启动时会在屏幕上弹出一个对话框,显示LINGO的版本和版权信息;否则不弹出 解的截断:小于等于这个值的解将报告为“0”(缺省是10-9) 填充数据库表:当LINGO向电子表(如EXCEL文件)或数据库中输出数据时,如果电子表或数据库中用来接收收据的空间大于实际输出的数据占用的空间,是否对多余的表空间进行数据填充?(缺省值为不进行填充) 优优 化化 建建 模模LINGO|Options|Interface(界面)选项卡(界面)选项卡状态栏:如果选择该选项,则LINGO系统在主窗口最下面一行显示状态栏;否则不显示状态窗口:如果选择该选项,则LINGO系统每次运行LINGO| Solve命令时会在屏幕上弹出状态窗口;否则不弹出工具栏:如果选择该选项,则显示工具栏;否则不显示简洁输出:如果选择该选项,则LINGO系统对求解结果报告等将以简洁形式输出;否则以详细形式输出 优优 化化 建建 模模LINGO|Options|Interface(界面)选项卡(界面)选项卡LINGO扩展格式:模型文件的缺省保存格式是lg4格式(这是一种二进制文件,只有LINGO能读出)LINDO纯文本格式:模型文件的缺省保存格式变为LINDO格式(纯文本)LINGO纯文本格式:模型文件的缺省保存格式变为lng格式(纯文本) 优优 化化 建建 模模LINGO|Options|Interface(界面)选项卡(界面)选项卡行数限制:语法配色的行数限制(缺省为1000)。
LINGO模型窗口中将LINGO关键此显示为兰色,注释为绿色,其他为黑色,超过该行数限制后则不再区分颜色特别地,设置行数限制为0时,整个文件不再区分颜色括号匹配:如果选择该选项,则模型中当前光标所在处的括号及其相匹配的括号将以红色显示;否则不使用该功能延迟:设置语法配色的延迟时间(秒,缺省为0,从最后一次击键算起) 优优 化化 建建 模模LINGO|Options|Interface(界面)选项卡(界面)选项卡报告发送到命令窗口:如果选择该选项,则输出信息会发送到命令窗口;否则不使用该功能输入信息反馈:如果选择该选项,则用File|Take Command命令执行命令脚本文件时,处理信息会发送到命令窗口;否则不使用该功能页面大小限制:命令窗口每次显示的行数的最大值为Length(缺省为没有限制),显示这么多行后会暂停,等待用户响应;每行最大字符数为Width(缺省为74,可以设定为64-200之间),多余的字符将被截断行数限制:命令窗口能显示的行数的最大值为Maximum(缺省为800);如果要显示的内容超过这个值,每次从命令窗口滚动删除的最小行数为Minimum(缺省为400) 优优 化化 建建 模模LINGO|Options|General Solver(通用求解程序通用求解程序)选项卡选项卡矩阵生成器的内存限制:缺省值为32M,矩阵生成器使用的内存超过该限制,LINGO将报告"The model generator ran out of memory" 运行限制:迭代次数:求解一个模型时,允许的最大迭代次数(缺省值为无限)运行限制:运行时间:求解一个模型时,允许的最大运行时间(秒)(缺省值为无限)对偶计算:求解时控制对偶计算的级别,有三种可能的设置:None: 不计算任何对偶信息;Prices:计算对偶价格(缺省设置);Prices and Ranges:计算对偶价格并分析敏感性;Prices, Opt Only: 只计算最优行的对偶价格 。
优优 化化 建建 模模LINGO|Options|General Solver(通用求解程序通用求解程序)选项卡选项卡固定变量的归结、简化:求解前对固定变量的归结程度(相当于预处理程度):None:不归结; Always:总是归结;Not with global and multistart:在全局优化和多初值优化程序中不归结模型的重新生成:控制重新生成模型的频率,有三种可能的设置:Only when text changes:只有当模型的文本修改后才再生成模型;When text changes or with external references:当模型的文本修改或模型含有外部引用时(缺省设置);Always:每当有需要时 优优 化化 建建 模模LINGO|Options|General Solver(通用求解程序通用求解程序)选项卡选项卡线性化程度:决定求解模型时线性化的程度,有四种可能的设置:Solver Decides:若变量数小于等于12个,则尽可能全部线性化;否则不做任何线性化(缺省设置)None:不做任何线性化Low:对函数@ABS(), @MAX(), @MIN(), @SMAX(), @SMIN(),以及二进制变量与连续变量的乘积项做线性化High:同上,此外对逻辑运算符#LE#, #EQ#, #GE#, #NE#做线性化线性化的误差限:设置线性化的误差限(缺省值为10-6)线性化的大M系数:设置线性化的大M系数(缺省值为106) 优优 化化 建建 模模LINGO|Options|General Solver(通用求解程序通用求解程序)选项卡选项卡允许无限制地使用基本集合的成员名:选择该选项可以保持与LINGO4.0以前的版本兼容:即允许使用基本集合的成员名称直接作为该成员在该集合的索引值(LINGO4.0以后的版本要求使用@INDEX函数)检查数据和模型中的名称是否重复使用:选择该选项,LINGO将检查数据和模型中的名称是否重复使用,如基本集合的成员名是否与决策变量名重复检查数据和模型中的名称是否重复使用:选择该选项,LINGO将检查数据和模型中的名称是否重复使用,如基本集合的成员名是否与决策变量名重复最小化内存使用量:是否最小化内存使用量。
缺省设置为“是”使用这个功能的一个缺点是可能引起计算速度下降 优优 化化 建建 模模LINGO|OPTIONS|Linear Solver(线性求解程序线性求解程序)选项卡选项卡求解时的算法,有四种可能的设置:•Solver Decides:LINGO自动选择算法(缺省设置)•Primal Simplex:原始单纯形法•Dual Simplex:对偶单纯形法•Barrier: 障碍法 (即内点法)模型降维:控制是否检查模型中的无关变量,从而降低模型的规模:•Off:不检查•On:检查•Solver Decides:LINGO自动决定(缺省设置)初始线性可行性误差限:控制线性模型中约束满足的初始误差限(缺省值为3*10-6).最后线性可行性误差限:控制线性模型中约束满足的最后误差限(缺省值为10-7). 优优 化化 建建 模模LINGO|OPTIONS|Linear Solver(线性求解程序线性求解程序)选项卡选项卡原始单纯形法:有三种可能的设置:Solver Decides:LINGO自动决定(缺省设置)Partial:LINGO 对一部分可能的出基变量进行尝试Devex:用Steepest-Edge(最陡边)近似算法对所有可能的变量进行尝试,找到使目标值下降最多的出基变量对偶单纯形法:有三种可能的设置:Solver Decides:LINGO自动决定(缺省设置)Dantzig:按最大下降比例法确定出基变量Steepest-Edge:最陡边策略,对所有可能的变量进行尝试,找到使目标值下降最多的出基变量价格策略(决定出基变量的策略) 优优 化化 建建 模模LINGO|OPTIONS|Linear Solver(线性求解程序线性求解程序)选项卡选项卡冷启动时:设置LINGO|Debug命令调试所使用的程序(冷启动的含义是不从当前基开始,而是从头开始运行)。
有四种可能的设置:Solver Decides:LINGO自动选择算法(缺省设置)Primal Simplex:原始单纯形法Dual Simplex:对偶单纯形法Barrier: 障碍法 (即内点法) 热启动时同冷启动(热启动的含义是从当前基开始运行) 调试时采用的求解程序矩阵分解:选择该选项,LINGO将尝试将一个大模型分解为几个小模型求解;否则不尝试检查模型的数据平衡性:选择该选项,LINGO检查模型中的数据是否平衡(数量级是否相差太大)并尝试改变尺度使模型平衡;否则不尝试 优优 化化 建建 模模LINGO|OPTIONS|Nonlinear Solver(非线性求解程序非线性求解程序)选项选项卡卡初始非线性可行性误差限:控制模型中约束满足的初始误差限(缺省值为10-3)最后非线性可行性误差限:控制模型中约束满足的最后误差限(缺省值为10-6)非线性规划的最优性误差限:当目标函数在当前解的梯度小于等于这个值以后,停止迭代(缺省值为2*10-7)缓慢改进的迭代次数的上限:当目标函数在连续这么多次迭代没有显著改进以后,停止迭代(缺省值为5)非线性求解程序的版本:在个别情况下,可能老版本会更有效些,可能的选择有:Solver Decides:LINGO自动选择 (缺省设置,目前就是2.0版);Ver 1.0:选择1.0 版本;Ver 2.0:选择2.0 版本。
优优 化化 建建 模模LINGO|OPTIONS|Nonlinear Solver(非线性求解程序非线性求解程序)选项选项卡卡导数计算方式:设置导数计算方式,有5种选择:Solver Decides:LINGO自动选择 (缺省设置)Backward analytical:前向解析法计算导数;Forward analytical:前向解析法计算导数Central differences:中心差分法计算数值导数Forward differences:前向差分法计算数值导数生成初始解:选择该选项, LINGO将用启发式方法生成初始解;否则不生成(缺省值)识别二次规划:选择该选项, LINGO将判别模型是否为二次规划,若是则采用二次规划算法(包含性规划的内点法中);否则不判别(缺省值)策略 优优 化化 建建 模模LINGO|OPTIONS|Nonlinear Solver(非线性求解程序非线性求解程序)选项选项卡卡SLP方向:选择该选项, LINGO在每次迭代时用SLP (Successive LP,逐次线性规划)方法寻找搜索方向(缺省值)有选择地检查约束:选择该选项, LINGO在每次迭代时只检查必须检查的约束(如果有些约束函数在某些区域没有定义,这样做会出现错误);否则,检查所有约束(缺省值)策略最陡边策略:选择该选项, LINGO在每次迭代时将对所有可能的变量进行尝试,找到使目标值下降最多的变量进行迭代;缺省值为不使用最陡边策略 优优 化化 建建 模模LINGO|OPTIONS|Integer Pre-Solver(整数预处理程序整数预处理程序)选项卡选项卡最小时间:每个分枝节点使用启发式搜索的最小时间(秒)水平:控制采用启发式搜索的次数(缺省值为3,可能的值为0-100). 启发式方法的目的是从分枝节点的连续解出发,搜索一个好的整数解。
探测水平(级别):控制采用探测(Probing)技术的级别(探测能够用于混合整数线性规划模型,收紧变量的上下界和约束的右端项的值)可能的取值为:Solver Decides:LINGO自动决定(缺省设置)1-7:探测级别逐步升高启发式方法约束的割(平面) 优优 化化 建建 模模LINGO|OPTIONS|Integer Pre-Solver(整数预处理程序整数预处理程序)选项卡选项卡最大迭代检查的次数:为了寻找合适的割,最大迭代检查的次数应用节点:控制在分枝定界树中,哪些节点需要增加割(平面),可能的取值为:Root Only:仅根节点增加割(平面)All Nodes:所有节点均增加割(平面)Solver Decides:LINGO自动决定(缺省设置)相对上限:控制生成的割(平面)的个数相对于原问题的约束个数的上限(比值),缺省值为0.75约束的割(平面)对根节点的次数(缺省值为200)对其他节点的次数(缺省值为2)类型:控制生成的割(平面)的策略 优优 化化 建建 模模LINGO|OPTIONS|Integer Solver(整数求解程序整数求解程序)选项卡选项卡控制分枝策略中优先对变量取整的方向,有三种选择:Both:LINGO自动决定(缺省)Up:向上取整优先Down:向下取整优先绝对误差限:当变量与整数的绝对误差小于这个值时,该变量被认为是整数。
缺省值为10-6分枝控制分枝策略中优先对哪些变量进行分枝,有两种选择:LINGO Decides:LINGO自动决定(缺省设置)Binary:二进制(0-1)变量优先整性相对误差限:当变量与整数的相对误差小于这个值时,该变量被认为是整数缺省值为8*10-6 优优 化化 建建 模模LINGO|OPTIONS|Integer Solver(整数求解程序整数求解程序)选项卡选项卡热启动:当以前面的求解结果为基础,热启动求解程序时采用的算法,有四种可能的设置:LINGO Decides:LINGO自动选择算法(缺省)Primal Simplex:原始单纯形法Dual Simplex:对偶单纯形法Barrier: 障碍法 (即内点法)目标函数的绝对误差限:当当前目标函数值与最优值的绝对误差小于这个值时,当前解被认为是最优解(也就是说:只需要搜索比当前解至少改进这么多个单位的解)缺省值为8*10-8LP求解程序冷启动:当不以前面的求解结果为基础,冷启动求解程序时采用的算法,有四种可能的设置( 同热启动)最优性目标函数的相对误差限:当当前目标函数值与最优值的相对误差小于这个值时,当前解被认为是最优解(也就是说:只需要搜索比当前解至少改进这么多百分比的解)。
缺省值为5*10-8 优优 化化 建建 模模LINGO|OPTIONS|Integer Solver(整数求解程序整数求解程序)选项卡选项卡最优性开始采用相对误差限的时间(秒):在程序开始运行后这么多秒内,不采用相对误差限策略;此后才使用相对误差限策略缺省值为100秒 误差限篱笆值(同LINDO)节点选择:控制如何选择节点的分枝求解,有以下选项:LINGO Decides: LINGO自动选择(缺省设置)Depth First:按深度优先Worst Bound:选择具有最坏界的节点Best Bound:选择具有最好的界的节点强分枝的层数:控制采用强分枝的层数也就是说,对前这么多层的分枝,采用强分枝策略所谓强分枝,就是在一个节点对多个变量分别尝试进行预分枝,找出其中最好的解(变量)进行实际分枝 优优 化化 建建 模模LINGO|OPTIONS|Global Solver(全局最优求解程序全局最优求解程序)选项卡选项卡 全局最优求解程序使用全局最优求解程序:选择该选项,LINGO将用全局最优求解程序求解模型,尽可能得到全局最优解(求解花费的时间可能很长);否则不使用全局最优求解程序,通常只得到局部最优解变量上界设定变量的上界,缺省值为1010设置这个界的三种应用范围:None: 所有变量都不使用这个上界;All: 所有变量都使用这个上界;Selected:先找到第1个局部最优解,然后对满足这个上界的变量使用这个上界(缺省设置) 优优 化化 建建 模模LINGO|OPTIONS|Global Solver(全局最优求解程序全局最优求解程序)选项卡选项卡 全局最优求解程序只搜索比当前解至少改进这么多个单位的解(缺省值为10-6)按绝对值控制两类误差限全局最优求解程序在凸化过程中增加的约束的误差限(缺省值为10-7) 优优 化化 建建 模模LINGO|OPTIONS|Global Solver(全局最优求解程序全局最优求解程序)选项卡选项卡 全局最优求解程序策略第1次对变量分枝时使用的分枝策略Absolute Width(绝对宽度)Local Width(局部宽度)Global Width(全局宽度)Global Distance(全局距离)Abs (Absolute) Violation(绝对冲突)Rel (Relative) Violation(相对冲突,缺省设置)选择活跃分枝节点的方法:Depth First(深度优先)Worst Bound(具有最坏界的分枝优先,缺省)Reformulation:模型重整的级别:None(不重整)Low(低)Medium(中)High(高,缺省) 优优 化化 建建 模模LINGO|OPTIONS|Global Solver(全局最优求解程序全局最优求解程序)选项卡选项卡 多初始点求解程序尝试次数:设定用多少个初始点尝试求解,有以下几种可能的设置:Solver Decides:由LINGO决定(缺省设置,对小规模NLP问题为5次,对大规模问题不使用多点求解程序)Off:不使用多点求解程序N(>1的正整数):N点求解。
