最优化模型计算_第1页
最优化模型计算_第2页
最优化模型计算_第3页
最优化模型计算_第4页
最优化模型计算_第5页
已阅读5页,还剩25页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

最优化模型计算第一页,共三十页,编辑于2023年,星期三LINGO的菜单与参数设置LINGO的主界面上有一个工具条,其上有一些按钮按钮的功能自左往右依次为:第二讲最优化问题的LINGO建模在线帮助、上下文帮助新建、打开、保存、打印剪切、复制、粘贴取消、重做查找、定位、括号匹配求解、显示解答、模型图示、选项设置窗口后置、关闭所有窗口、平铺窗口用户可以通过3种不同方式执行LINGO操作,一是工具条按钮,二是菜单选择,三是快捷键第二页,共三十页,编辑于2023年,星期三第二讲最优化问题的LINGO建模文件(File)菜单新建(New):创建一个新的“Model”窗口,输入待求解的模型; 打开(Open):打开一个已经存在的一个模型文件或者文本文件

保存(Save):将当前窗口中的模型、结果、命令序列等保存为文件; 另存为(SaveAs):将当前窗口中的内容保存为指定格式文件; 关闭(Close):关闭当前窗口打印(Print):打印当前窗口的内容 打印设置(PrintSetup):设置打印格式 打印预览(PrintPreview):预览待打印内容输出到日志文件(LogOutput):将之后在命令窗口输入的所有命令,保存到一个日志文件TakeCommands:将LINGO命令的脚本文件提交给系统进程运行; ImportLingo:打开一个LINGO格式的模型文件,并转化为LINGO程序ExportFile:输出MPS或MPI格式文件,其中MPS是IBM开发的数学规划格式,MPI是LINGO制定的数学规划格式第三页,共三十页,编辑于2023年,星期三第二讲最优化问题的LINGO建模编辑(Edit)菜单粘贴特定(PasteSpecial):将Windows剪贴板中的内容插入到光标所在位置,以方便浏览,所插入内容不参与LINGO程序的运行GoToLine:将光标移动到指定行粘贴函数(PasteFunction):将LINGO的内部函数粘贴到当前插入点匹配括号(MatchParenthesis):在程序中选择一个括号,查找与其匹配的另一半括号插入新对象(InsertNewObject):新建或将一个已存在文件作为链接对象插入到当前位置; 连接(Link):修改插入对象的连接性质;对象性质(ObjectProperties):选择一个链接或插入对象,查看或修改该对象的属性SelectFont:控制显示字体、字形、大小、颜色、效果等第四页,共三十页,编辑于2023年,星期三第二讲最优化问题的LINGO建模Lingo菜单求解模型(Slove):将当前模型送入内存求解灵敏性分析(Range):产生当前模型的灵敏性分析,给出最优解不变时,目标函数系数的变化范围;在影子价格和最优基不变的条件下,约束右端常数项的变化范围。灵敏性分析影响速度,且需要先激活1模型通常形式(Generate):生成当前LINGO模型的代数表达式的完整形式,相当于编译选项(Options):打开含7个选项卡的对话框,可以设置LINGO界面,以及求解模型的80-90个控制参数求解结果(Solution):打开求解结果的对话框,选择用文本或图表方式查看内存中的求解结果1调试(Debug):当求解结果为无可行解或目标函数无界时,执行调试命令寻找错误1模型统计(ModelStatistics):显示模型统计资料;查看(Look):以文本方式显示模型内容第五页,共三十页,编辑于2023年,星期三第二讲最优化问题的LINGO建模窗口(Windows)菜单命令行窗口(CommandWindows):在“:”提示符后可以输入LINGO的命令行命令状态窗口(StatusWindows):用LINGO求解模型时,它会调用适当的求解器,该命令显示求解器的状态,以监视求解器的进展和模型大小等Variables:Total总变量数,Nonlinear非线性变量数,Integers整数变量数Constraints:Total总约束数,Nonlinear非线性约束数Total:Total总非零参数数,Nonlinear非线性非零参数数中断求解器(InterruptSolver):让LINGO在下一次迭代时停止求解第六页,共三十页,编辑于2023年,星期三第二讲最优化问题的LINGO建模LINGO的参数设置Interface(界面)选项GeneralSolver(通用求解器)选项第七页,共三十页,编辑于2023年,星期三第二讲最优化问题的LINGO建模LINGO的参数设置LinearSolver(线性求解器)选项NonlinearSolver(非线性求解器)选项第八页,共三十页,编辑于2023年,星期三第二讲最优化问题的LINGO建模LINGO的参数设置IntegerPre-Solver(整数预处理求解器)选项IntegerSolver(整数求解器)选项第九页,共三十页,编辑于2023年,星期三第二讲最优化问题的LINGO建模LINGO的参数设置GlobalSolver(全局最优求解器)选项第十页,共三十页,编辑于2023年,星期三

LPQPNLPIP

ILPIQPINLP

LINGO软件的求解过程

LINGO预处理程序线性优化求解程序非线性优化求解程序分枝定界管理程序1.确定常数2.识别类型1.单纯形算法2.内点算法(选)1、顺序线性规划法(SLP)2、广义既约梯度法(GRG)(选)

3、多点搜索(Multistart)(选)

第二讲最优化问题的LINGO建模全局优化(选)第十一页,共三十页,编辑于2023年,星期三第二讲最优化问题的LINGO建模LINGO的集合定义与应用在建模过程中,总会遇到一群或多群相联系的对象,LINGO允许把这些相联系的对象聚合成集(sets)。借助于集,可以将诸多相似的约束仅用一个简明的复合公式来表示,从而快速方便地建立规模较大的模型,发挥LINGO建模语言的优势。LINGO有两种集:原始集(primitiveset)由一些最基本的对象组成;派生集(derivedset)是由一个或多个其它集生成得到的集合段是LINGO模型的一个可选部分;集合段以关键字“sets:”开始,以“endsets”结束;一个模型可以没有集合段、一个简单的集合段或者多个集合段;集合段可以在模型的任何地方,但是集合及其属性在模型约束中被引用前必须先定义。

第十二页,共三十页,编辑于2023年,星期三SETS:setname[/member_list/][:attribute_list];ENDSETS

原始集在定义时必须声明·集的名字·集的成员(可选)·集的属性(可选)

Setname是集的名字,具备较好可读性。命名规则:以拉丁字母或下划线(_)为首字符,其后由拉丁字母(A—Z)、下划线、阿拉伯数字(0,1,…,9)组成的总长度不超过32个字符的字符串,不区分大小写第二讲最优化问题的LINGO建模其中“[]”表示该部分内容可选

Member_list是集成员列表。可以在集定义中,用显式或隐式列举2种方式给出;也可以在随后的数据部分定义它们例2.1定义一个名为students的原始集,它具有成员John、Jill、Rose和Mike,属性有sex(0表示女生、1表示男生)和age。第十三页,共三十页,编辑于2023年,星期三第二讲最优化问题的LINGO建模SETS:STUDENTS/JOHN,JILL,ROSE,MIKE/:SEX,AGE;ENDSETS

法1显式列举:输入每个成员名字,中间用空格或逗号搁开,允许混合使用

SETS:

setname/member1..memberN/[:attribute_list];ENDSETS

法2隐式列举:不列举每个成员,采用如下格式

其中member1是集的第一个成员名,memberN是集的最末一个成员名,LINGO自动产生中间的所有成员名。LINGO也接受一些特定的首成员名和末成员名,用于创建一些特殊的集。

第十四页,共三十页,编辑于2023年,星期三第二讲最优化问题的LINGO建模sets:students:sex,age;endsetsdata: !数据段;students,sex,age=John116Jill014Rose017Mike113;enddata法3数据段列举:集成员不放在集定义中,而在随后的数据段来定义

SETS:STUDENTS/1..4/:SEX,AGE;ENDSETS

方法1和方法2在数据段,才对集合属性进行赋值DATA:

SEX=1001;AGE=16141713;ENDDATA

在集合段只定义了一个集students,并未指定成员。在数据段定义了集成员John、Jill、Rose和Mike,并对属性sex和age分别赋值第十五页,共三十页,编辑于2023年,星期三第二讲最优化问题的LINGO建模派生集在定义时必须声明·集的名字

·父集的名字

·集的成员(可选)·集的属性(可选)SETS:setname(parent_set_list)[/member_list/][:attribute_list];ENDSETS

parent_set_list是已定义的集的列表,多个时须用逗号隔开;派生集的父集既可以是原始集,也可以是其它的派生集。member_list如果没有指定集合成员列表,那么LINGO会自动创建父集成员的所有组合作为派生集成员。这样的派生集称为稠密集

如果限制派生集的成员,使它成为父集成员所有组合的一个子集,这样的派生集称为稀疏集稀疏集可以用两种方式来定义:直接列举法和元素过滤法。下面各举一例加以说明。第十六页,共三十页,编辑于2023年,星期三设给定的7项工作构成集合TASK,4个属性TIME、ES、LS、SLACK分别表示工作持续时间、最早开始时间、最晚开始时间、时间差LS减ES第二讲最优化问题的LINGO建模例2.2某投资公司正在准备开发一个新项目,需要完成方案设计(Design)、需求预测(Forecast)、竞争力评估(Survey)、价格设置(Price)、流水线规划(Schedule)、成本支出(CostOut)、销售培训(Train)等7项工作。完成各项工作所需时间和工作间顺序如下请根据项目的PERT计划网络,确定关键路径。第十七页,共三十页,编辑于2023年,星期三派生集PRED是由2个基本集TASKS为父集构成的第二讲最优化问题的LINGO建模SETS:

TASKS:TIME,ES,LS,SLACK;PRED(TASKS,TASKS);ENDSETSDATATASKS=DESIGN,FORECAST,SURVEY,PRICE,SCHEDULE,COSTOUT,TRAIN;TIME=10,14,3,3,7,4,10;PRED=DESIGN,FORECASTDESIGN,SURVEY,FORECAST,PRICE,FORECAST,SCHEDULE,SURVEY,PRICE,SCHEDULE,COSTOUT,PRICE,TRAIN,COSTOUT,TRAIN;ENDDATA模型的集合段和数据段如下基本集TASK的成员不在定义中列出,而在随后的数据段进行定义稀疏派生集PRED的成员,可以在集合段中通过元素列举法定义,也可以在数据段中用元素列举法定义第十八页,共三十页,编辑于2023年,星期三设8名调查员构成基本集ANALYSTS;派生集PAIRS是由2个ANALYSTS为父集构成的稀疏集,其属性RATING为效率矩阵,MATCH(i,j)=1表示调查员i和j组成一队,0表示不组队。例2.3匹配问题:8名调查员准备分成4个调查队(每队两人)前往4个地区进行社会调查。设两两之间组队的效率如表所示(由于对称性只列出了上三角部分),问如何组队可以使总效率最高?则模型的集合段和数据段可以表示为第二讲最优化问题的LINGO建模第十九页,共三十页,编辑于2023年,星期三基本集ANALYSTS只规定了集合成员,而没有集合属性SETS:

ANALYSTS/1..8/;PAIRS(ANALYSTS,ANALYSTS)|&2#GT#&1:RATING,MATCH;ENDSETSDATARATING=9342156173521442921552876234;ENDDATA派生集是稀疏集时,可以用竖线“|”来标记一个元素过滤器的开始。“&1”、“&2”分别表示派生集的第1、2个父集的索引,它可以取遍该父集的所有成员;“#GT#”是逻辑运算符,用来判断是否“大于”SETS:

setname(parent_set_list)[|逻辑表达式][/member_list/][:attribute_list];ENDSETS左边是用元素过滤器定义稀疏派生集的一般形式,元素过滤器是一个逻辑表达式,将不满足逻辑表达式的元素排除在派生集成员之外第二讲最优化问题的LINGO建模第二十页,共三十页,编辑于2023年,星期三集操作函数包括@in()、@index()、@wrap()、@size()四个第二讲最优化问题的LINGO建模LINGO的集合函数LINGO的集合函数分为两类:集操作函数与集循环函数@in(set_name,primitive_index_1[,primitive_index_2,…])如果集合set_name中包含成员primitive_index_1[,primitive_index_2,…]所对应的元素,则返回1;否则返回0。@index([set_name,]primitive_set_element))返回在集set_name中的成员primitive_set_element的索引@wrap(index,limit)返回index模limit再加1。该函数常用于循环、多阶段计划@size(set_name)返回集set_name的成员个数,即确定集的大小第二十一页,共三十页,编辑于2023年,星期三集循环函数包括@for()、@sum()、@min()、@max()第二讲最优化问题的LINGO建模集循环函数遍历整个集进行操作。其语法为@function(set_name[(set_index_list)[|conditional_qualifier]]:expression);@for(set_name[(set_index_list)[|conditional_qualifier]]:expression_list);

表示对集合set_name中的每个满足conditional_qualifier的成员构造一个由expression确定的约束条件表达式其中@function为上面的四个集循环函数之一;set_name是要遍历的集合;set_index_list是集索引列表;conditional_qualifier是用来限制集循环函数的范围,当集循环函数遍历集的每个成员时,LINGO都要对conditional_qualifier进行评价,若结果为真,则对该成员执行@function操作,否则跳过,继续执行下一次循环;expression是被应用到每个集成员的表达式set_index_list是可选项,如果不用,表达式expression将被应用到集的每个成员@for()函数的expression可以包含多个表达式,它们之间用分号隔开,这些表达式都将作为模型中的约束第二十二页,共三十页,编辑于2023年,星期三接下来,我们将通过一系列实际问题的建模过程,逐步学习、掌握集合与集合函数的应用方法和技巧第二讲最优化问题的LINGO建模@sum(set_name[(set_index_list)[|conditional_qualifier]]:expression);

表示对集合set_name中每个满足conditional_qualifier的成员,分别得到一个由表达式expression确定的值,返回所有这些值的和@min(set_name[(set_index_list)[|conditional_qualifier]]:expression);

表示对集合set_name中每个满足conditional_qualifier的成员,分别得到一个由表达式expression确定的值,返回所有这些值的最小值@max(set_name[(set_index_list)[|conditional_qualifier]]:expression);

表示对集合set_name中每个满足conditional_qualifier的成员,分别得到一个由表达式expression确定的值,返回所有这些值的最大值例2.2的LINGO模型程序如下第二十三页,共三十页,编辑于2023年,星期三第二讲最优化问题的LINGO建模SETS:TASKS:TIME,ES,LS,SLACK;PRED(TASKS,TASKS);ENDSETSDATA:TASKS=DESIGN,FORECAST,SURVEY,PRICE,SCHEDULE,COSTOUT,TRAIN;TIME=10,14,3,3,7,4,10;PRED=DESIGN,FORECAST, DESIGN,SURVEY, FORECAST,PRICE,FORECAST,SCHEDULE, SURVEY,PRICE, SCHEDULE,COSTOUT,PRICE,TRAIN,COSTOUT,TRAIN;ENDDATA@FOR(TASKS(J)|J#GT#1:ES(J)=@MAX(PRED(I,J):ES(I)+TIME(I)));@FOR(TASKS(I)|I#LT#LTASK:LS(I)=@MIN(PRED(I,J):LS(J)-TIME(I)));@FOR(TASKS(I):SLACK(I)=LS(I)-ES(I));ES(1)=0;LTASK=@SIZE(TASKS);LS(LTASK)=ES(LTASK);第1个@FOR函数计算工作j的最早开始时间第2个@FOR函数计算工作i的最迟开始时间第3个@FOR函数计算工作i的最迟-最早开始时间差本模型没有目标函数,只有一些约束条件,程序执行时仅仅需要进行简单计算第二十四页,共三十页,编辑于2023年,星期三第二讲最优化问题的LINGO建模例2.3的LINGO模型程序如下MODEL:SETS:

ANALYSTS/1..8/;PAIRS(ANALYSTS,ANALYSTS)|&2#GT#&1:RATING,MATCH;ENDSETSDATA:RATING=9342156,173521,442921552,876,23,4;ENDDATAMIN=

@SUM(PAIRS(I,J):RATING(I,J)*MATCH(I,J));@FOR(ANALYSTS(I):@SUM(PAIRS(J,K)|J#EQ#I#OR#K#EQ#I:MATCH(J,K))=1);@FOR(PAIRS(I,J):@BIN(MATCH(I,J)));END第2个父集元素的索引(用&2表示)大于第1个父集元素的索引(用&1表示)时,作为派生集的成员第1个@FOR函数保证每个调查员I在而且只能在一个调查组。第2个@FOR函数确定集合MATCH的元素只能取0或1。第二十五页,共三十页,编辑于2023年,星期三第二讲最优化问题的LINGO建模例2.4选址问题:某公司有6个建筑工地,位置坐标为(ai,bi)(单位:公里),水泥日用量di

(单位:吨)由下表给出,假设:料场和工地之间有直线道路公司目前有2个临时存放水泥的场地(简称料场),分别位于A(5,1)和B(2,7),记为(xi,yi)(i=1,2),日储量ei

各有20吨。(1)制定每天的供应计划,即从A,B两料场分别向各工地运送多少吨水泥,可以使总的吨公里数最小。

(2)为进一步减少吨公里数,打算舍弃目前的2个临时料场,改建2个新料场,日储量仍各为20吨,问建在何处最好?(1)设决策变量cij表示料场j到工地i的运量,这是一个12维的变量第二十六页,共三十页,编辑于2023年,星期三第二讲最优化问题的LINGO建模因为料场到各工地的距离是常数,目标函数和约束条件也都是常数,所以该模型是线性规划模型MODEL:SETS:

gd/1..6/:a,b,d;!定义6个工地;

lch/A,B/:x,y,e;!定义2个料场;

links(gd,lch):c;!c为运量;

ENDSETSDATA:a=1.258.750.55.7537.25;b=1.250.754.7556.57.75;!工地位置;

d=3547611;!工地水泥需求;

x=52;y=17;!料场位置;

e=2020;!料场日存储量;

ENDDATAMIN=@SUM(links(i

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论