LINGO基本语法和编程.ppt

  1. 1、本文档共63页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
LINGO基本语法和编程

目标函数,求和式可嵌套使用,但注意嵌套的层次。 当二维数组为稀疏数组时,相应的求和为数组定义中已定义的数组元素的求和。 循环函数 @FOR(集合(下标):关于集合的属性的约束关系式) 对冒号“:”前面的集合的每个元素(下标),冒号“:”后面的约束关系式都要成立 前面例中,每个季度正常的生产能力是40条帆船,这正是语句“@FOR(QUARTERS(I):RP(I)40;);”的含义。 由于对所有元素(下标I),约束的形式是一样的,所以也可以像上面定义目标函数时一样,将下标i省去, 这个语句可以简化成“@FOR(QUARTERS:RP40);” 。 每一个For循环实际上对应很多条约束。For循环可与SUM嵌套,但一定是For在外,SUM在内,不可能SUM中配For循环,语法不符,另一方面Sum潜在有循环的功能。 特别注意For循环的循环变量。一旦循环变量错误,代码表示的语法与模型可能差别很大。 任意I和J,match(i,j)为0或1,这里可以用二维下标。 For循环中同样可以对下标执行限制操作,称为过滤条件。 其它常用函数 @Bin(变量):变量为0-1变量。 @GIN(变量):变量为正整数变量。 @Free(变量):对变量类型没有限制。 @MAX(下标:变量):对所有下标表示的变量求最大值。 @MIN(下标:变量):对所有下标表示的变量求最小值。 @Prod(下标:变量):对所有下标表示的变量求乘积。 @BND(变量,L,H):对变量限制范围。 运算符及其优先级 算术运算符 加、减、乘、除、乘方等数学运算(即数与数之间的运算,运算结果也是数)。 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# = 谢 谢! * 下面我们就来看看每一段有什么用,如何定义 * 1 首先理解集合:类似于一般程序语言里面的数组定义,其中冒号前为定义数组名字和维度,冒号后为定义数组变量,数组名字相当于下标作用,数字变量才是程序中实际使用的变量 2 注意数组维度的定义方式:较少时,可直接列出来,还可以用字母表示下标 3 二维或高维数字定义方式:使用一维数组叠加,尽量减少3维以上的数组的定义 4 最后注意语句后面以分号结尾 * 数据段负责给常数赋值 1 一个问题:为什么要用常数?将来直接写到模型中去不好吗? 2 数据之间可以用空格隔开,也可以用都好隔开,注意分号结尾 3 矩阵可通过回车分行表示成矩阵数据形式 * 即给变量赋初值,注意这是是给要求的变量赋初值,若是给常量赋值,则在数据段 那么为什么要给变量赋初值呢?对于优化问题,由于普遍采用的迭代算法,迭代算法的基本过程就是从一个初值出发不断迭代靠近最优值,所以好的初值能够加快算法的收敛。 * 那么为什么要计算段呢?这个计算过程也可以放到约束条件中去啊,确实可以这样 使用计算段主要是为了书写程序的方便,有些模型中使用的量不是直接来自于常量,而是常量经过适当计算得到的得到的另外一个量,当然这个量也可以写在模型代码中,但可能导致程序显得读起来比较不清晰 * 1 目标函数以MAX=或min=为开始,以分号为语句结尾 2 约束条件对应于模型的每条约束条件,以分号结尾 3 目标函数和约束条件中用得最多的两个函数是@sum和@for,等会会专门讲解这两个函数,看名字可以知道一个是求和,一个是循环 4 大家注意到这一个段用到

文档评论(0)

yaocen + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档