好文档就是一把金锄头!
欢迎来到金锄头文库![会员中心]
电子文档交易市场
安卓APP | ios版本
电子文档交易市场
安卓APP | ios版本

数学软件LINGO.ppt

52页
  • 卖家[上传人]:公****
  • 文档编号:588031337
  • 上传时间:2024-09-07
  • 文档格式:PPT
  • 文档大小:468.02KB
  • / 52 举报 版权申诉 马上下载
  • 文本预览
  • 下载提示
  • 常见问题
    • 数学软件数学软件 LINGO—— LINGO的集合功能1 LINGOLINGO软件简介软件简介n一、一、LINGO中的集合中的集合n二、集合循环函数二、集合循环函数n三、集合操作函数三、集合操作函数n四、运用定义集合的方法求解规划问题四、运用定义集合的方法求解规划问题n五、基本数学函数五、基本数学函数2 一、一、LINGOLINGO中的集合中的集合集集合合是是一一群群相相联联系系的的对对象象,,这这些些对对象象也也称称为为集集合合的的成成员员一一个个集集合合可可能能是是一一系系列列产产品品、、卡卡车车或或雇雇员员每每个个集集合合成成员员可可能能有有一一个个或或多多个个与与之之有有关关联联的的特特征征,,我我们们把把这这些些特特征征称称为为属属性性属属性性值值可可以以预预先先给给定定,,也也可可以以是是未未知知的的,,有有待待于于LINGO求解集集合合实实例例::产产品品集集合合中中的的每每个个产产品品可可以以有有一一个个价价格格属属性性;;卡卡车车集集合合中中的的每每辆辆卡卡车车可可以以有有一一个个牵牵引引力力属属性性;;雇雇员员集集合合中中的的每每位位雇雇员员可可以以有有一一个薪水属性,也可以有一个生日属性等等。

      个薪水属性,也可以有一个生日属性等等3 一、一、LINGOLINGO中的集合中的集合 集合部分集合部分是是LINGO模型的一个模型的一个可选可选部部分在LINGO模型中使用集合之前,必须模型中使用集合之前,必须在集合部分事先定义集合部分以关键字在集合部分事先定义集合部分以关键字“sets:”开始,以开始,以“endsets”结束 一个模型可以没有集合部分,或有一一个模型可以没有集合部分,或有一个简单的集合部分,或有多个集合部分个简单的集合部分,或有多个集合部分一个集合部分可以放置于模型的任何地方,一个集合部分可以放置于模型的任何地方,但是一个集合及其属性在模型约束中被引但是一个集合及其属性在模型约束中被引用之前必须定义了它们用之前必须定义了它们 4 一、一、LINGOLINGO中的集合中的集合 LINGO有两种类型的集合:有两种类型的集合:原始集合原始集合(primitive set)和和派生集合派生集合(derived set) 一个一个原始集合原始集合是由一些最基本的对象组是由一些最基本的对象组成的 一个一个派生集合派生集合是用一个或多个其它集合是用一个或多个其它集合来定义的,也就是说,它的成员来自于其来定义的,也就是说,它的成员来自于其它已存在的集合。

      它已存在的集合 5 原始集合定义方法原始集合定义方法 LINGO可识别的集合只有两种类型:可识别的集合只有两种类型:原始集合原始集合和和派生集合派生集合 为了定义一个原始集合,必须说明以为了定义一个原始集合,必须说明以下几点:下几点: ((1)集合的名字;)集合的名字;((2)集合的成员(可选);)集合的成员(可选);((3)集合成员的属性(可选)集合成员的属性(可选)定义一个原始集合,用下面的语法:定义一个原始集合,用下面的语法: setname[/member_list/][:attribute_list]; 6 原始集合定义方法原始集合定义方法setname[/member_list/][:attribute_list]; ((1))setname是你选择的来标记集合的是你选择的来标记集合的名字,最好具有较强的可读性集合名字名字,最好具有较强的可读性集合名字必须严格符合标准命名规则:以拉丁字母必须严格符合标准命名规则:以拉丁字母或下划线(或下划线(_)为首字符,其后由拉丁字母)为首字符,其后由拉丁字母((A—Z)、下划线、阿拉伯数字()、下划线、阿拉伯数字(0,,1,,…,,9)组成的总长度不超过)组成的总长度不超过32个字符的个字符的字符串,且不区分大小写。

      字符串,且不区分大小写 7 原始集合定义方法原始集合定义方法setname[/member_list/][:attribute_list]; ((2))member_list是集合成员列表如是集合成员列表如果集合成员放在集合定义中,那么对它们果集合成员放在集合定义中,那么对它们可采取显式罗列和隐式罗列两种方式如可采取显式罗列和隐式罗列两种方式如果集合成员不放在集合定义中,那么可以果集合成员不放在集合定义中,那么可以在随后的数据部分定义它们在随后的数据部分定义它们 8 原始集合定义方法原始集合定义方法1. 当显式罗列成员时,必须为每个成员输入一当显式罗列成员时,必须为每个成员输入一个不同的名字,中间用个不同的名字,中间用空格空格或或逗号逗号搁开,允许混搁开,允许混合使用例:可以定义一个名为例:可以定义一个名为students的原始集合,的原始集合,它具有成员它具有成员John、、Jill、、Rose和和Mike,属性有,属性有sex和和age::9 原始集合定义方法原始集合定义方法2. 当隐式罗列成员时,不必罗列出每个集合成当隐式罗列成员时,不必罗列出每个集合成员可采用如下语法:员可采用如下语法:setname/member1..memberN/ [: attribute_list]; 这里的这里的member1是集合的第一个成员名,是集合的第一个成员名,memberN是集合的最末一个成员名。

      是集合的最末一个成员名LINGO将自动产生中间的所有成员名将自动产生中间的所有成员名LINGO也接受也接受一些特定的首成员名和末成员名,用于创建一些一些特定的首成员名和末成员名,用于创建一些特殊的集合特殊的集合10 原始集合定义方法原始集合定义方法隐式成员列表格式隐式成员列表格式 示例示例 所产生集合成员所产生集合成员 1..n 1..5 1, 2, 3, 4, 5 StringM..StringN Car2..Car14 Car2, Car3, Car4, ……, Car14 DayM..DayN Mon..Fri Mon, Tue, Wed, Thu, Fri MonthM..MonthN Oct..Jan Oct, Nov, Dec, Jan MonthYearM..MonthYearN Oct2001..Jan2002 Oct2001, Nov2001, Dec2001, Jan200211 原始集合定义方法原始集合定义方法3. 集合成员不放在集合定义中,而在随后的数集合成员不放在集合定义中,而在随后的数据部分来定义例如:据部分来定义例如:12 原始集合定义方法原始集合定义方法注意:注意:开头用感叹号(开头用感叹号(!),末尾用分号(),末尾用分号(;)表示)表示注释注释,可跨多行。

      可跨多行在集合部分只定义了一个集合在集合部分只定义了一个集合students,,并未指定成员在数据部分罗列了并未指定成员在数据部分罗列了集合成员集合成员John、、Jill、、Rose和和Mike,并对,并对属性属性sex和和age分别给出了值分别给出了值集合成员无论用何种字符标记,它的索引集合成员无论用何种字符标记,它的索引都是从都是从1开始连续计数在开始连续计数在attribute_ list可以可以指定一个或多个集合成员的属性,指定一个或多个集合成员的属性,属性属性之间必须之间必须用逗号隔开用逗号隔开13 派生集合定义方法派生集合定义方法为了定义一个派生集合,必须详细声明:为了定义一个派生集合,必须详细声明: ((1)集合的名字;)集合的名字;((2)父集合的名字;)父集合的名字;((3)集合成员(可选);)集合成员(可选);((4)集合成员的属性(可选))集合成员的属性(可选) 可用下面的语法定义一个派生集合:可用下面的语法定义一个派生集合:setname(parent_set_list)[/member_list/][:attribute_list]; 14 派生集合定义方法派生集合定义方法((1))setname是集合的名字。

      是集合的名字2))parent_set_list是是已已定定义义的的集集合合的的列列表表,,多多个个时时必必须须用用逗逗号号隔隔开开如如果果没没有有指指定定成成员员列列表表,,那那么么LINGO会会自自动动创创建建父父集集合合成成员员的的所所有有组组合合作作为为派派生生集集合合的的成成员员派派生生集集合合的的父父集集合合既既可可以以是是原原始始集集合合,,也也可以是其它的派生集合可以是其它的派生集合3))/member_list/((4)):attribute_list后面关于(后面关于(3)()(4)的介绍同原始集合)的介绍同原始集合15 派生集合定义方法派生集合定义方法16 派生集合定义方法派生集合定义方法成成员员列列表表被被忽忽略略时时,,派派生生集集合合成成员员由由父父集集合合成成员员所所有有的的组组合合构构成成,,这这样样的的派派生生集集合合成成为为稠稠密密集集合合如如果果限限制制派派生生集集合合的的成成员员,,使使它它成成为为父父集集合合成成员员所所有有组组合合构构成成的的集集合合合合的的一一个个子子集集合合,,这这样样的的派派生生集集合合成成为为稀稀疏疏集集合合同同原原始始集集合合一一样样,,派派生生集集合成员的声明也可以放在数据部分。

      合成员的声明也可以放在数据部分例如上例中:例如上例中:LINGO生生成成了了三三个个父父集集合合的的所所有有组组合合共共八八组组作作为为allowed集集合合的的成成员员列列表表如如下下::(A,M,1),,(A,M,2),, (A,N,1),, (A,N,2),, (B,M,1),,(B,M,2),,(B,N,1),,(B,N,2) 17 派生集合定义方法派生集合定义方法一个派生集合的成员列表有两种方式生成:一个派生集合的成员列表有两种方式生成:方式方式1. 显式罗列;显式罗列;方式方式2. 设置成员资格过滤器设置成员资格过滤器当采用当采用方式方式1时,必须显式罗列出所有要包含在时,必须显式罗列出所有要包含在派生集合中的成员,并且罗列的每个成员必须属派生集合中的成员,并且罗列的每个成员必须属于稠密集合于稠密集合使用前面的例子,显式罗列派生集合的成员:使用前面的例子,显式罗列派生集合的成员:allowed(product,machine,week)/A M 1, A N 2, B N 1/; 18 派生集合定义方法派生集合定义方法 如果需要生成一个大的、稀疏的集合,那么如果需要生成一个大的、稀疏的集合,那么显式罗列就会很罗嗦、很繁杂。

      幸运地是许多稀显式罗列就会很罗嗦、很繁杂幸运地是许多稀疏集合的成员都满足一些条件以和非成员相区分疏集合的成员都满足一些条件以和非成员相区分我们可以采用我们可以采用方式方式2,把这些逻辑条件看作过滤,把这些逻辑条件看作过滤器,在器,在LINGO生成派生集合的成员时把使逻辑生成派生集合的成员时把使逻辑条件为假的成员从稠密集合中过滤掉条件为假的成员从稠密集合中过滤掉这里顺便罗列一下这里顺便罗列一下LINGO运算符:运算符:19 派生集合定义方法派生集合定义方法LINGO运算符:运算符: ((1)算术运算符:)算术运算符:+(加),(加),-(减或负号),(减或负号),*(乘),(乘),/(除),(除),^(求幂)(求幂)((2)逻辑运算符:)逻辑运算符:#and#(与),(与),#or#(或)(或),,#not#(非)(非)((3)关系运算符:)关系运算符:#eq#(等于),(等于),#ne#(不等于),(不等于),#gt#(大于),(大于),#ge#(大于等(大于等于),于),#lt#(小于),(小于),#le#(小于等于)(小于等于)20 派生集合定义方法派生集合定义方法通过通过方式方式2设置成员资格过滤器的实例:设置成员资格过滤器的实例:21 一、一、LINGOLINGO中的集合(小结中的集合(小结1 1)) 总的来说,总的来说,LINGO可识别的集合只有两种可识别的集合只有两种类型:类型:原始集合原始集合和和派生集合派生集合。

      在一个模型中,在一个模型中,原始集合原始集合是基本的对象,不是基本的对象,不能再被拆分成更小的组分原始集合可以由能再被拆分成更小的组分原始集合可以由显式显式罗列罗列和和隐式罗列隐式罗列两种方式来定义当用显式罗列两种方式来定义当用显式罗列方式时,需在集合成员列表中逐个输入每个成员方式时,需在集合成员列表中逐个输入每个成员当用隐式罗列方式时,只需在集合成员列表中输当用隐式罗列方式时,只需在集合成员列表中输入首成员和末成员,而中间的成员由入首成员和末成员,而中间的成员由LINGO产产生22 一、一、LINGOLINGO中的集合(小结中的集合(小结2 2)) 另一方面,另一方面,派生集合派生集合是由其它的集合来创建是由其它的集合来创建这些集合被称为该派生集合的父集合(原始集合这些集合被称为该派生集合的父集合(原始集合或其它的派生集合)一个派生集合既可以是稀或其它的派生集合)一个派生集合既可以是稀疏的,也可以是稠密的疏的,也可以是稠密的稠密集合稠密集合包含了父集合包含了父集合成员的所有组合(有时也称为父集合的笛卡尔乘成员的所有组合(有时也称为父集合的笛卡尔乘积)稀疏集合稀疏集合仅包含了父集合的笛卡尔乘积的仅包含了父集合的笛卡尔乘积的一个子集合,可通过一个子集合,可通过显式罗列显式罗列和和成员资格过滤器成员资格过滤器这两种方式来定义。

      这两种方式来定义显式罗列方法显式罗列方法就是逐个罗列就是逐个罗列稀疏集合的成员稀疏集合的成员成员资格过滤器方法成员资格过滤器方法通过使用通过使用稀疏集合成员必须满足的逻辑条件从稠密集合成稀疏集合成员必须满足的逻辑条件从稠密集合成员中过滤出稀疏集合的成员员中过滤出稀疏集合的成员23 二、集合循环函数二、集合循环函数集合循环函数遍历整个集合进行操作其集合循环函数遍历整个集合进行操作其语法为:语法为:@function(setname[(set_index_list)[|conditional_qualifier]]:expression_list); @function相应于下面罗列的五个集合循环相应于下面罗列的五个集合循环函数之一:函数之一:@for, @sum, @prod, @min, @max24 二、集合循环函数二、集合循环函数语法说明语法说明::@function(setname[(set_index_list)[|conditional_qualifier]]:expression_list); (1)setname是要遍历的集合;(2)set_ index_list是集合索引列表;(3)conditional_qualifier是用来限制集合循环函数的范围,当集合循环函数遍历集合的每个成员时,LINGO都要对conditional_qualifier进行评价,若结果为真,则对该成员执行@function操作,否则跳过,继续执行下一次循环。

      25 二、集合循环函数二、集合循环函数语法说明:语法说明:@function(setname[(set_index_list)[|conditional_qualifier]]:expression_list); (4)expression_list是被应用到每个集合成员的表达式列表,当用的是@for函数时,expression_list可以包含多个表达式,其间用逗号隔开这些表达式将被作为约束加到模型中当使用其余的四个集合循环函数时,expression_list只能有一个表达式如果省略set_index_list,那么在expression_list中引用的所有属性的类型都是setname集合 26 二、集合循环函数二、集合循环函数(一)(一)@for该函数用来产生对集合成员的约束基于建模该函数用来产生对集合成员的约束基于建模语言的标量需要显式输入每个约束,不过语言的标量需要显式输入每个约束,不过@for函数允许只输入一个约束,然后函数允许只输入一个约束,然后LINGO自动产生每个集合成员的约束自动产生每个集合成员的约束例:例: 产生序列产生序列{1,4,9,16,25}27 二、集合循环函数二、集合循环函数(二)(二)@sum与与@prod函数函数@sum返回遍历指定的集合成员的一个表返回遍历指定的集合成员的一个表达式的和。

      函数达式的和函数@prod返回遍历指定的集合成返回遍历指定的集合成员的一个表达式的积员的一个表达式的积例:求向量例:求向量[5,,1,,3,,4,,6,,10]前前5个数的个数的和与后和与后3个数的积:个数的积:28 二、集合循环函数二、集合循环函数(三)(三)@min和和@max返回指定的集合成员的一个表达式的最小值或返回指定的集合成员的一个表达式的最小值或最大值例:求向量例:求向量[5,,1,,3,,4,,6,,10]前前5个数的个数的最小值,后最小值,后3个数的最大值个数的最大值29 三、集合操作函数三、集合操作函数 LINGO提供了几个函数帮助处理集合提供了几个函数帮助处理集合一)(一)@in(二)(二)@index(三)(三)@wrap(四)(四)@size30 三、集合操作函数三、集合操作函数(一)(一)@in@in(set_name,primitive_index_1 [,primitive_index_2,…]) 如果元素在指定集合中,返回如果元素在指定集合中,返回1;否则返回;否则返回0 例例 全集合为全集合为I,,B是是I的一个子集合,的一个子集合,C是是B的的补集合。

      补集合sets: I/x1..x4/; B(I)/x2/; C(I)|#not#@in(B,&1):; endsets 31 三、集合操作函数三、集合操作函数(二)(二)@index@index([set_name,] primitive_set_element) 该函数返回在集合该函数返回在集合set_name中原始集合成员中原始集合成员primitive_set_element的索引如果的索引如果set_name被忽略,那么被忽略,那么LINGO将返回与将返回与primitive_set_element匹配的第一个原始匹配的第一个原始集合成员的索引如果找不到,则产生一个错集合成员的索引如果找不到,则产生一个错误32 三、集合操作函数三、集合操作函数(二)(二)@index例例 如何确定集合成员如何确定集合成员(B,Y)属于派生集合属于派生集合S3sets: S1/A B C/; S2/X Y Z/; S3(S1,S2)/A X, A Z, B Y, C X/; endsets X=@in(S3,@index(S1,B),@index(S2,Y)); 33 三、集合操作函数三、集合操作函数(二)(二)@index看下面的例子,表明有时为看下面的例子,表明有时为@index指定集合指定集合是必要的。

      是必要的例例 sets: girls/debble,sue,alice/; boys/bob,joe,sue,fred/; endsets I1=@index(sue); I2=@index(boys,sue); I1的值是的值是2,,I2的值是的值是3我们建议在使用我们建议在使用@index函数时最好指定集合函数时最好指定集合34 三、集合操作函数三、集合操作函数(三)(三)@wrap@wrap(index,limit) 该函数返回该函数返回j=index-k*limit,其中,其中k是一个是一个整数,取适当值保证整数,取适当值保证j落在区间落在区间[1,,limit]内该函数相当于该函数相当于index模模limit再加再加1该函数在该函数在循环、多阶段计划编制中特别有用循环、多阶段计划编制中特别有用35 三、集合操作函数三、集合操作函数(四)(四)@size@size(set_name) 该函数返回集合该函数返回集合set_name的成员个数在模的成员个数在模型中明确给出集合大小时最好使用该函数它型中明确给出集合大小时最好使用该函数它的使用使模型更加数据中立,集合大小改变时的使用使模型更加数据中立,集合大小改变时也更易维护。

      也更易维护36 四、运用定义集合的方法求解规划问题四、运用定义集合的方法求解规划问题37 四、运用定义集合的方法求解规划问题四、运用定义集合的方法求解规划问题  任务A任务B任务C任务D任务E员工11415131811员工210810813员工32625272423员工44235473441员工5131518101438 四、运用定义集合的方法求解规划问题四、运用定义集合的方法求解规划问题解法一解法一::直接将算式输入LINGO中进行运算(不过变量较多时,会感觉输入过程有大量重复),即可获得结果39 四、运用定义集合的方法求解规划问题四、运用定义集合的方法求解规划问题结果为:指派员工结果为:指派员工1做任务做任务C,员工,员工2做任务做任务A,员工,员工3做任务做任务E,员工,员工4做任务做任务B,员工,员工5做任做任务务D,最小总耗时为,最小总耗时为Z((=13+10+23+35+10))=91小时必须注意到必须注意到:另一个解(指派员工:另一个解(指派员工1做任务做任务C,员工,员工2做任务做任务B,员工,员工3做任务做任务E,员工,员工4做做任务任务D,员工,员工5做任务做任务A,最小总耗时为,最小总耗时为Z((=13+8+23+34+13))=91小时)却小时)却并并没有被求得没有被求得】】40 四、运用定义集合的方法求解规划问题四、运用定义集合的方法求解规划问题解法二解法二::运用定义集合的方法进行求解,可得到相同的运算结果。

      41 四、运用定义集合的方法求解规划问题四、运用定义集合的方法求解规划问题解法一解法一::直接将算式输入LINGO中进行运算,即可获得结果42 四、运用定义集合的方法求解规划问题四、运用定义集合的方法求解规划问题解法二解法二::运用定义集合的方法进行求解,可得到相同的运算结果43 四、运用定义集合的方法求解规划问题四、运用定义集合的方法求解规划问题44 四、运用定义集合的方法求解规划问题四、运用定义集合的方法求解规划问题例例3 酒酒精精问问题题::体体重重约约70KG的的某某人人在在短短时时间间内内喝喝下下2瓶瓶啤啤酒酒后后,,隔隔一一定定时时间间测测量量他他的的血血液液中中的的酒酒精精含含量量,,得得到到的的数数据据如如下下表表,,试试建建立立饮饮酒后血液中酒精含量的数学模型酒后血液中酒精含量的数学模型时间(t小时)0.250.50.7511.522.533.5酒精含量y306875828277686858时间(t小时)44.5567891011酒精含量y515041383528251815时间(t小时)1213141516    酒精含量y1210774    45 四、运用定义集合的方法求解规划问题四、运用定义集合的方法求解规划问题46 四、运用定义集合的方法求解规划问题四、运用定义集合的方法求解规划问题47 四、运用定义集合的方法求解规划问题四、运用定义集合的方法求解规划问题48 四、运用定义集合的方法求解规划问题四、运用定义集合的方法求解规划问题49 五、基本数学函数五、基本数学函数绝对值绝对值@abs(x)、、余弦余弦@cos(x)、、指数指数@exp(x)、、取整取整@floor(x)、、Gamma-对数对数@lgm(x)【【Gamma函数的自然对数函数函数的自然对数函数】】、、自然对数自然对数@log(x)、、模取余模取余@mod(x,y)、、次幂次幂@pow(x,y)、、符号符号@sign(x)【【x<0时时值值为为-1,,x>=0时时值值为为1, 与与MATLAB的的sign( )不同不同】】、、50 五、基本数学函数五、基本数学函数正弦正弦@sin(x)、、一列数一列数(list)的最大值的最大值@smax(list)、、一列数一列数(list)的最小值的最小值@smin(list)、、平方平方@sqr(x)、开平方、开平方@sqrt(x)、正切、正切@tan(x)另外还有一个逻辑判断函数另外还有一个逻辑判断函数@IF::@IF(逻辑表达式逻辑表达式, True_value, False_value)【【当逻辑表达式的值为当逻辑表达式的值为True时,输出时,输出True_value;;为为False时,输出时,输出False_value。

      非零的值为非零的值为True,,0为为False】】51 1. P163练习题练习题1、、2 、、3 ,,文件名分别为:文件名分别为:ex6_2_1set.lg4、、ex6_2_2set.lg4 、、ex6_2_3set.lg4 2. 再现教材再现教材P158-159的程序文件的程序文件:assign0.lg4、、assign.lg4要求:提交程序文件和相应的截图文件(图形文件格要求:提交程序文件和相应的截图文件(图形文件格式为式为 JPG格式,文件名主名相同)格式,文件名主名相同)发给:发给:admin@system.mail上机作业上机作业52 。

      点击阅读更多内容
      关于金锄头网 - 版权申诉 - 免责声明 - 诚邀英才 - 联系我们
      手机版 | 川公网安备 51140202000112号 | 经营许可证(蜀ICP备13022795号)
      ©2008-2016 by Sichuan Goldhoe Inc. All Rights Reserved.