您好,欢迎访问三七文档
当前位置:首页 > 商业/管理/HR > 信息化管理 > 如何在lingo中使用集合1
例题1.在lingo中输入下列线性规划模型,并求解Ajijixjidz),(),(),(mins.t.1),1(Vjjx,,},10,,2,1{,0),(x,),(,1,1),(VVAVViiijixjjixVi为非负实数所有的数值如下表:dd=08591214121617228091516811181422590791171212179157031710715151216930810615151481117809148161211710109086111618127614801111171412151586110102222171515161111100;分析:这个模型输入的难点,在于变量的数量太多,足足有100个。约束条件也比较多,有没有什么方便的输入方法?下面介绍lingo中集合的建立新建lingo文件输入下面内容model:sets:V/1..10/;!创建集合V;A(V,V):d,x;!创建集合A是V乘V.而d,x是与A同结构的,即d,x分别是10*10矩阵;endsetsmin=@sum(A(i,j):d(i,j)*x(i,j));!创建目标函数;@sum(V(j):x(1,j))=1;!第一个约束条件;@for(V(j)|j#gt#1:!i#gt#1为逻辑判断语句表示i1是返回真值,但这里不能直接写i1,因为是关系运算符不是逻辑运算符;@sum(V(i):x(i,j))=1;);!利用循环函数表达:当i1(即i从2到10)时,{x(i,j):j=1..10}的和等于1;@for(V(i):x(i,i)=0;);data:d=08591214121617228091516811181422590791171212179157031710715151216930810615151481117809148161211710109086111618127614801111171412151586110102222171515161111100;!输入d的数值;enddataend这个模型如果按照常规输入是什么样子呢?Lingo也提供这样的功能点lingo菜单选generate点displaymodel得到下面的界面(部分截图)可见,这个规划如果普通输入的话,工作量是很大的,而且容易出错。运行结果(部分截图)这个报告很不简洁,因为我们只需要显示x中非零部分,其他信息都不是我们关心的。有什么办法可以使得报告更简洁?点lingo菜单,选solution,做如下设置,可以使得报告更加简洁设置完后结果是练习1.求下列线性规划模型Ajijixjidz),(),(*),(maxs.t.ViibjixVj),(),(),(jix为非负实数,(i,j)A这里V={1,2,3,…,7},VVA.b=49384944585047;d=1231212234122341121511222311212353122213241111211;参考答案例题2.一家公司需要决定四个季度的帆船生产量,下四个季度的需求分别为40,60,75,25条,需要按时满足,每个季度生产能力是40条,每条生产费用400美元。如果加班,每条船的生产费为450美元。每个季度末,每条船的库存费用为20美元。假定生产提前期为0,库存为10条,如何安排生产使得总费用最小?创建lingo文件,输入运行结果注1:如果创建一个集合包含的元素较多,例如月份,只需Sets:Month/1..12/endsets而不需要把1到12都罗列出来.注2:上面的程序由三部分组成(集合段,目标和约束段,数据段),但一般lingo程序可以由五部分组成(新增“初值设定“和”计算”两部分)(1)集合段sets开始,endsets结束(2)目标函数(min=或max=)和约束段(一些等式或不等式,或逻辑判断语句)(3)数据段data开始,enddata结束(4)初始段,用于初值设定,init开始,endinit结束,对集合对属性(数组)定义初值(因为求解算法一般是迭代算法,用户如果能给出一个比较好的迭代初值,对提高算法的效果是有益处的)(5)计算段,以calc开始,endcalc结束,作用在于对一些原始数据进行计算处理。为什么要设计这个段呢?因为在实际问题中,可能出现输入的原始数据不能再模型中直接使用,需要进行“预处理”。练习2.用lingo求解下列问题练习3.利用lingo的集合编写程序求解下列问题练习4,利用lingo求解下列问题
本文标题:如何在lingo中使用集合1
链接地址:https://www.777doc.com/doc-2519403 .html