规划模型MATLAB2013详解.ppt

  1. 1、本文档共112页,可阅读全部内容。
  2. 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
集操作函数:LINGO提供了几个函数帮助处理集 1.@in(set_name,primitive_index_1 [,primitive_index_2,…]) 如果元素在指定集中,返回1;否则返回0。 例4.7 全集为I,B是I的一个子集,C是B的补集。 sets: I/x1..x4/; B(I)/x2/; C(I)|#not#@in(B,1):; endsets 2.@index([set_name,] primitive_set_element) 该函数返回在集set_name中原始集成员primitive_set_element的索引。如果set_name被忽略,那么LINGO将返回与primitive_set_element匹配的第一个原始集成员的索引。如果找不到,则产生一个错误。 例4.8 如何确定集成员(B,Y)属于派生集S3。 sets: 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)); 看下面的例子,表明有时为@index指定集是必要的。 例4.9 sets: girls/debble,sue,alice/; boys/bob,joe,sue,fred/; endsets I1=@index(sue); I2=@index(boys,sue); ? I1的值是2,I2的值是3。我们建议在使用@index函数时最好指定集 3.@wrap(index,limit) 该函数返回j=index-k*limit,其中k是一个整数,取适当值保证j落在区间[1,limit]内。该函数相当于index模limit再加1。该函数在循环、多阶段计划编制中特别有用。 4.@size(set_name) 该函数返回集set_name的成员个数。在模型中明确给出集大小时最好使用该函数。它的使用使模型更加数据中立,集大小改变时也更易维护。 集循环函数 1.@for 该函数用来产生对集成员的约束。基于建模语言的标量需要显式输入每个约束,不过@for函数允许只输入一个约束,然后LINGO自动产生每个集成员的约束。 例4.10 产生序列{1,4,9,16,25} model: sets: number/1..5/:x; endsets @for(number(I): x(I)=I^2); end 2.@sum 该函数返回遍历指定的集成员的一个表达式的和。 例4.11 求向量[5,1,3,4,6,10]前5个数的和。 model: data: N=6; enddata sets: number/1..N/:x; endsets data: x = 5 1 3 4 6 10; enddata s=@sum(number(I) | I #le# 5: x); end 3.@min和@max 返回指定的集成员的一个表达式的最小值或最大值。 例4.12 求向量[5,1,3,4,6,10]前5个数的最小值,后3个数的最大值。 model: data: N=6; enddata sets: number/1..N/:x; endsets data: x = 5 1 3 4 6 10; enddata minv=@min(number(I) | I #le# 5: x); maxv=@max(number(I) | I #ge# N-2: x); end 下面看一个稍微复杂一点儿的例子。 例4.13 职员时序安排模型 一项工作一周7天都需要有人(比如护士工作),每天(周一至周日)所需的最少职员数为20、16、13、16、19、14和12,并要求每个职员一周连续工作5天,试求每周所需最少职员数,并给出安排。注意这里我们考虑稳定后的情况。 model: sets: days/mon..sun/: required,start; endsets data: !每天所需的最少职员数; required = 20 16 13 16 19 14 12; enddata !最小化每周所需职员数; min=@sum(days: start); @for(days(J): @sum(days(I) | I #le# 5: start(@wrap(J+I+2,7))) = required(J)); end 计算的部分结果为 Global optimal solution found at iteration: 0 Objective value:

您可能关注的文档

文档评论(0)

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

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

1亿VIP精品文档

相关文档