版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、lingo大规模规划求解首先,让我们先看看一个非常简单的规划例子在LINGO软件中实现过程:目标函数:?(?2?+?-3?+5约束条件:?+?-3?<10?-2?>5?,?求解上面目标函数的最小值,我们在ling。中可编写如下代码:model:MIN=2*X1+X2-3*X3+5;X1+X2-3*X3<=10;X1-2*X2>=5GIN(X1);!整数约束;GIN(X2);GIN(X3);END可以看出,LINGO语舌和数学专业语言'很接近,很容易表小约束条件和目标函数可是对于规模很大的约束条件,难道我们也必须这样一条一条的输入吗,显然这样做是一件非常困难和繁琐
2、的事,lingo语言乂是如何表示约束条件规模巨大的规划问题呢,带着这样的疑问,让我们一步一步得看下面的内容:一、集合域在数学中集合的定义如下:集合:具有某种相同届性的对象放在一起,就形成了一个集合,集合中的每一个对象称作该集合的元素。在大规模的优化问题中,集合是必然存在的,比如在平板车建模中,各种规格集装箱就可以看成一个集合,在货物配送问题中154个城市可以看成一个集合。在lingo语言中,将某些对象看成一个集合便可以很方便地对集合中的每一个元素进行统一处理。集合域必须在模型的约束引用集合之前定义。集合域用关键字“sets”开始,“endsets”结束。集合分类:元素列表法元素过滤法直接列举法
3、隐式列举法基本集合定义统一语法格式:setname/member-list/:attribute-list;集合名/对象名1对象名2对象名n/:对象届性;集合定义的几种方法类型隐式列举格式示例示例集合表示的元素数字型1n15I.L34,5字符-数字犁stTiTigM.stringNcart0l.cu20ftcarlO1enrH)2.car2f!J<日期(星期)型dayM.dayXMON.FRIMOJUE,WED,THU.rRl门份型nionthM.mofithNOCT.JANOCLNOV,DECJAN年份月份型OCT200I.OCT200LNOV2D0LiwiilhYciirNJAN20
4、02DEC2001JAN2002setsrow/1.20/:d1,d2,-dn;!集合名/对象名/:对象届性;endsets派生集合定义方法:setsrow/1.20/;col/1.100/;page/1.50/;link(row.col):k1,k2kn;trd/(row.col.page):t1,t2,tn;endsetsK1可以表示某个省的某个城市的人口。t1可以表示某个省的某个城市某个人的收入。二、数据域:数据域是优化问题中已知得对象的届性值,例如:人的身高,体重;车辆的载重,行驶速度。数据域以关键字“data”开头,enddata”结束。数据域可以出现在模型中的任何地方。data:d
5、1=;k1=;t1=;enddata数据域的未知数值有时只想为一个集的部分成员的某个届性指定值,而让其余成员的该届性保持未知,以便让LINGO去求出它们的最优值。在数据声明中输入两个相连的逗号表示该位置对应的集成员的届性值未知。两个逗号问可以有空格。例3.8sets:years/1.5/:capacity;endsetsdata:capacity=,34,20,;enddata届性capacity的第2个和第3个值分别为34和20,其余的未知。实时数据处理在某些情况,对于模型中的某些数据并不是定值。譬如模型中有一个通货膨胀率的参数,我们想在2%至6%范围内,对不同的值求解模型,来观察模型的结果
6、对通货膨胀的依赖有多么敏感。我们把这种情况称为实时数据处理(whatifanalysis)0LINGO有一个特征可方便地做到这件事。在本该放数的地方输入一个问号(?)。data:interest_rate,inflation_rate=.085?;enddata每一次求解模型时,LINGO都会提示为参数inflation_rate输入一个值。在WINDOWS操作系统下,将会接收到一个类似下面的对话框:LLKGORuntimeInputX|PleaseinputavalueforIIHFLATIOI_KATE匚皿mok直接输入一个值再点击OK按钮,LING。就会把输入的值指定给inflation
7、_rate,然后继续求解模型。除了参数之外,也可以实时输入集的届性值,但不允许实时输入集成员名。三、初始域初始域是专门为初始化决策变量而定义的一块区域。初始部分是LINGO提供的另一个可选部分。在初始部分中,可以输入初始声明(initializationstatement),和数据部分中的数据声明相同。对实际问题的建模时,初始部分并不起到描述模型的作用,在初始部分输入的值仅被LINGO求解器当作初始点来用,并且仅仅对非线性模型有用。和数据部分指定变量的值不同,LINGO求解器可以自由改变初始部分初始化的变量的值。一个初始部分以“init:”开始,以“endinit”结束。初始部分的初始声明规则
8、和数据部分的数据声明规则相同。也就是说,我们可以在声明的左边同时初始化多个集届性,可以把集届性初始化为一个值,可以用问号实现实时数据处理,还可以用逗号指定未知数值。init:X,Y=0,.1;endinitY=log(X);XA2+YA2<=1;好的初始点会减少模型的求解时间。四、集合循环函数统一语法格式:function(setname(set_index_list)|condition:expression_list);其中:function是集合函数名,是FOR,MAX,MIN,PROD,SUME种之一;setname是集合名;set_index_list是集合索引列表(不需使用索
9、引时可以省略);condition是逻辑表达式描述的过虑条件(通常含有索引,无条件时可省略)expression_list是一个表达式(对FOR函数,可以是一组表达式)。五个集合函数名的含义如下:FOR(集合元素循环函数):对集合setname的每个元素独立地生成表达式,表达式由expression_list描述(通常是优化问题的约束)。MAX(集合届性的最大值函数):返回集合setname上的表达式的最大值。MIN(集合届性的最小值函数):返回集合setname上的表达式的最小值。PROD集合届性的乘积函数):返回集合setname±的表达式的积。SUM(集合届性的求和函数):返回
10、集合setname±的表达式的和。对应数学表达式与LINGO命令:数学表达式lingo命令君?=?(一维数组和)sum(row(i):x(i);舄?=?淳?=?务?(二维维数组和)sum(links(i,j):x(i,j);Z?=?淳?=?务?泓?矩阵点乘和)sum(links(i,j):x(i,j)*Y(i,j);口?=?务(岸组的积)prod(row(i):x(i);君?或务奔君?=?务?住?;,?)(比较m个一维数组的和)for(col(j):sum(row(i):x(i)<=sum(row(i):y(i);五、变量定界函数变量定界函数对变量的取值范围附加限制,共有以下四
11、种函数:BND(L,X,U):限制L=X<=Uo注意LINGO中命令SLBSUB类似函数SLBffiSUM.BIN(X):即限制X为0或1。注意LING。中这个函数的名字却不是INT(X).FREEX):取消对X的符号限制(即可取负数、0后正数)。GIN(X):限制X为整数。数学表达式LINGO命令?=?,?)for(row(i):bnd(0,x(i),20);?泌?e?=?,?)for(row(i):BIN(x(i);?靠?捱?=?.?.?.,.,for(row(i):FREEx(i);?£?=?;,?for(row(i):gin(x(i);六、条件控制器用丁集合循环函数中,
12、循环变量的范围控制。有两类控制方法:1是直接控制集合中对象的范围,2是通过控制对象届性值的范围来间接控制对象的范围。#NOT#否定#EQ#相等#NE#不等#AND#并且#0R#或者1#GT#大于#GE#大于等于#LT#小于#LE#小于等于数学表达式lingo命令Z?=?(B,2,,,n-3)sum(row(i)|i#LE#n-3:x(i);E?=?ij?=?(j>=5)sum(links(i,j)|j#GE#5:x(i,j);写?=?客?=?>0)sum(links(i,j)|x(i,j)#NE#0:x(i,j)*Y(i,j);口?=?(?补>0)prod(row(i)|x(
13、i)#NE#0:x(i);七、基本的数学函数在LING。中建立优化模型时引用大量的内部函数这些函数以""、。号打头.LINGO中包括相当丰富的数学函数,这些函数的用法非常简单,我们直接在下一歹0出ABS(X)绝对值函数,返回X的绝对值COS(X涂弦函数,返回X的余弦值(X的单位是弧度)EXP(冷旨数函数,返回xe的值(其中e为自然对数值的底,即2.718281,)FLOOR(X取整函数,返回X的整数部分(向最靠近0的方向取整).LGM(X)返回X的伽马(Gamma)函数的自然对数值(当X为整数时LGM(X)=LOG(X-1)!SX不为整数时,采用线性插值得到结果)LOG(X
14、)自然对数函数,返回自然对数值MOD(X,Y):模函数,返回X对Y的取模的结果,即X除以Y的余数,这里X余Y应是整数POW(X,Y浙数函数,返回yX的值.SIGN(X)符号函数,返回X的符号值(X<0是返回-1,X>=0时返回+1)SIN(X)正弦函数,返回X的正弦值(X的单位是弧度)95SMAX(list):最大值函数,返回一列数(list)的:最大值SMIN.(list):最小值函数,返回一列数(list)的:最小值SQR(X)乎方函数,返回X的平方即(X*X)的值SQRT(X)T方根函数,返回X的平方根的值TAN(X);正切函数,返回X的正切值(X的单位是弧度)。八、ling
15、o中其他常用命令WRAP(I,N)当I为于区间I,N内时直接返回I;一般地,返回J=I-K*N,其中J位于区间1,N,K为函数。可见这个函数相当于数学上用I对N取模函数的值+1,即WRAP(I,N)=MOD(I,N)+1此函数对N1无定义。SIZE(set_name)返回数据集set_name中包含元素的个数。IF(logical_condition,true_result,false_result)当逻辑表达式logical.condition的结果为真时,返回true_result,否则返回false_result。两如if(x#LT#100,20,1啪句,当X100时,返回20,否则返回
16、15。WARN(,text?,logical_condition)如果逻辑表达式logical_condition”的结果为真,显示'text'信息.USER(user_determined_arguments)该函数是允许R自己编写而函数(dl或0bj文件),该用户函数可能当用C或FORTRAN其他语言编写并编译,返回值为用户函数计算的结果.从编程角度来看,USER函数包含两个参数:第一个用于指定参数个数,第二个用于指定参数向量:而在LINGO中调用USER寸则直接指定对应的参数“user_determined_”(类似于C语言中的main(argc,argv)的编程和运行方式).更多细节请参考LINGO使用手册.1. 九、文件读写复制和粘贴功能对于数据量不是很大的集合而言,复制粘贴是最快捷最简单的方法,和其他软件操作一样,LINGO软件,支持从网页,文本文档,电子表格中复制数据。同样对其LINGO运行的结果,我们可以将求解报告窗口中的结果复制到其他地方。OLE函数,它可以从Excel中读取数据或将结果写入到Excel中输入数据:统一语法格式:variable_list=OLE('spreadsheet-);其
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 绿色科技风网络安全培训模板
- 艾滋病防治药品管理及临床应用课件
- 专利转让协议书范本(11篇)
- 广西农村信用社招聘公共基础知识(常识)模拟试卷6(题后含答案及解析)
- 人工智能导论知到智慧树章节测试课后答案2024年秋东北石油大学
- 临聘人员转长期合同申请
- 粮情测控合同
- 房租租赁合同能上学吗
- 房屋租赁合同签订的申请报告
- 《实践型教学模式》课件
- 安徽省合肥市包河区2023-2024学年三年级上学期语文期末试卷
- 2024-2025学年二年级数学上册期末乐考非纸笔测试题(二 )(苏教版)
- 2024年度智能制造生产线改造项目合同
- DB32T 4578.2-2023 丙型病毒性肝炎防治技术指南 第2部分:患者管理
- 广东省茂名市崇文学校2023-2024学年九年级上学期期末英语试卷(无答案)
- 眼科专科题库+答案
- 智能化安装合同补充协议
- 英语期末复习讲座模板
- 京东管理培训生
- 北京市西城区2023-2024学年六年级上学期语文期末试卷
- 市政苗木移植合同范例
评论
0/150
提交评论