LINGO学习心得[1]_lingo学习心得

学习培训心得体会 时间:2020-02-27 14:16:16 收藏本文下载本文
【www.daodoc.com - 学习培训心得体会】

LINGO学习心得[1]由刀豆文库小编整理,希望给你工作、学习、生活带来方便,猜你可能喜欢“lingo学习心得”。

朱旭生LINGO学习心得

LINGO的主要特点:一是数学化的语言,用的是数学模型比较直观;二是数据段与程序语句段分开,甚至可以利用不在lingo文件中的外界数据文件来给变量赋值.1.可以利用EXCEL与LINGO之间直接传递数据;从EXCEL到LINGO的语句为 “变量=@OLE(„EXCEL文件的详细名称(包括路径)‟)”;从LINGO到EXCEL的语句为

“@OLE(„EXCEL文件的详细名称(包括路径)‟)=变量”.放在LINGO数据区

注意:这里的电子表格EXCEL的数据段应该取名,方法是用鼠标左键锁定数据区后从菜单“插入”中选“名称”,再选“定义”,在弹出的表格中输入该数据段的名称(英文,本来在excel中是可以定义中文名称的,但是作为lingo变量则不能)。输出的EXCEL表格也是如此定义数据区。

输出的表格可以与输入的表格不在同一个文件里,在lingo程序运行前定义出输出区域的名称。

注意在用cut,paste功能时很容易多出一些标点符号,使得语句不符合语法规则!

2。在解大型问题时,可能会出现计算时LINGO内存不够,这时应该修改LINGO选择项“Option”中的相关选项。

3。象本例中,我们对EXCEL的表格中的数据进行处理(关于11或10补)时,也可以利用LINGO来完成。

4。条件语句:@IF(logical_condition, true_result, false_result),如下面程序:

MIN = COST;COST = XCOST + YCOST;XCOST = @IF(X #GT# 0, 100, 0)+ 2 * X;YCOST = @IF(Y #GT# 0, 60, 0)+ 3 * Y;X + Y >= 30;

其中生产产品X的成本为分段函数:x=0时,成本为0;x>0时,成本为 100+2x,即生产准备费为100.5.变量取名规则:以英文字母打头,后面可以跟英文字母,数字0-9,以及下划线_.变量中的字母大小写不区别,如:XAB与Xab,xab等价.6.SETS段: 定义一个同样属性的集合,如同学们,老师们,宿舍群等等,他们在建模过程中往往表示为同学1,同学2,„„,同学n,以下方式等价: 同学们/同学1,同学2,同学3,同学4,同学5,同学6,同学7,同学8,同学9,同学10/:分数;同学们/同学1..同学10/:分数; 同学们/1..10/:分数;注:最后一种表示方式必须是从数字1开始标,但是中间那个可以是/同学3..同学10/

7。循环语句:

@function(setname [(set_index_list)[ | conditional_qualifier]] : expreion_list);有:@FOR,@SUM,@MAX, @MIN.8控制函数: @IN(set_name, primitive_index_1 [, primitive_index_2...])This returns TRUE if the set member referenced by the index tuple(primitive_index_1, primitive_index_2,...)is contained in the set_name set.As the following example shows, the @IN operator is useful for generating complements of subsets in set membership conditions.这个函数主要用于定义一个集合的子集合,或是用来判断某个元素是否在集合中,返回逻辑值0,1。但是下面的命令不能执行:

@for(S(i):y(i)=@sum(b(k)|(i,k)@in(link(i,k)):x(i,k)));事实上,象这种在稀疏集里求和与稠密集一样,可以这样来求: @for(S(i):y(i)=@sum(link(i,k):x(i,k)));

@INDEX([set_name,] primitive_set_element)

结果是该元素在集合中的位置,为一个自然数.@WRAP(INDEX, LIMIT)

以LIMIT为周期变量取值循环,如 MON..SUN ,LIMIT=7;值为8相应于1,即为MON.@SIZE(set_name)

返回该集合中的元素个数,即集合的规模.9.与取整有关的函数

在LINGO8.0中与取整有关的函数是 @floor(x),其意义是0,x之间最靠近x整数:如 @floor(1.2)=1,@floor(2)=2,@floor(-2.3)=-2.故x>0时 @floor就是取整函数;为了表示不小于x的最小整数,我们可以用下面的命令: f=@floor(x)+@if(@floor(x)#EQ#x,0,1);

10.如果结果报告中有大量的取零值的变量,结果往往显得很繁琐,此时可以选择仅仅输出非零变量及其值,则当窗口在源程序窗口时,从菜单lingo的下拉菜单solution的弹出窗口中:

但此时一般不会显示目标函数值,应该专门为其取一个变量名,并其其相应的最小或最大.在解答农场计划时:我们遇到了一些问题,主要是不能求解,说是没有可行解,但是,如果不求最大,则很容易找到可行解,其目标函数值也接近最优值.我们在分析最优解应当是最后一年里不养小母牛(在五年内不能产生效益),由此推导得第三年把所有生下来的小牛(无论公母)全部卖掉.这才可以求出局部最优解,进一步求得全局最优解.model: sets: nian/1..5/:u,v,f1,f2,g1,g2,r,rf1,rf2,rg1,rg2,w1,w2,h,rh,d,nainiu,xiaoniu;zhl/1..12/:;link1(nian,zhl):x,y;lt/1..4/:;link2(nian,lt):z,zhongl;endsets!max=lirun;

lirun=@sum(nian(i):r(i));@for(nian(i):f1(i)=0.6*0.99*@sum(link1(i,j)|j#gt#2:x(i,j)));@for(nian(i):g1(i)=0.7*0.99*@sum(link1(i,j)|j#gt#2:x(i,j)));@for(nian(i):f2(i)=1.1*z(i,1)+0.9*z(i,2)+0.8*z(i,3)+0.65*z(i,4));@for(nian(i):g2(i)=1.5*w2(i));

@for(link1(i,j)|i#eq#1:x(i,j)=10);@for(link1(i,j)|j#le#2:y=0.95*x);@for(link1(i,j)|j#gt#2:y=0.98*x);@for(link2(i,j)|j#lt#4:zhongl(i,j)>zhongl(i,j+1));@for(link2(i,j)|j#eq#1:z(i,j)30*zhongl(i,j+1));@for(link2(i,j)|j#eq#2:z(i,j)30*zhongl(i,j+1));@for(link2(i,j)|j#eq#3:z(i,j)20*zhongl(i,j+1));@for(link2(i,j)|j#eq#4:z(i,j)50;@for(link2(i,j):@bin(zhongl));end

但是加进去了一些最优解满足的条件后可以求出全局最优解: model: sets: nian/1..5/:u,v,f1,f2,g1,g2,r,rf1,rf2,rg1,rg2,w1,w2,h,rh,d,nainiu,xiaoniu;zhl/1..12/:;link1(nian,zhl):x,y;lt/1..4/:;

link2(nian,lt):z,zhongl;endsets data: @ole(F:lingsjnongch.xls,'nianchniu','zhtian','xiaogn','xiaomn','maili','mailia','maiti','maitia','gongshi','gshgz', 'niansh','xiaoniu','nainiu')=x,z,u,v,f1,f2,g1,g2,h,rh,r,xiaoniu,nainiu;enddata max=lirun;lirun=@sum(nian(i):r(i));@for(nian(i):f1(i)=0.6*0.99*@sum(link1(i,j)|j#gt#2:x(i,j)));!每年的粮食需求量;

@for(nian(i):g1(i)=0.7*0.99*@sum(link1(i,j)|j#gt#2:x(i,j)));!每年的甜菜需求量;

@for(nian(i):f2(i)=1.1*z(i,1)+0.9*z(i,2)+0.8*z(i,3)+0.65*z(i,4));!每年的粮食生产量;

@for(nian(i):g2(i)=1.5*w2(i));!每年的甜菜生产量;

@for(link1(i,j)|i#eq#1:x(i,j)=10);!第一年年初的各类牛的数量,初值;@for(link1(i,j)|j#le#2:y=0.95*x);!各年年末的小牛的数量分布;@for(link1(i,j)|j#gt#2:y=0.98*x);!各年年末的产奶牛的数量分布;

@for(link2(i,j)|j#lt#4:zhongl(i,j)>zhongl(i,j+1));!最优解优先选择产粮量高的天种粮;

@for(link2(i,j)|j#eq#1:z(i,j)30*zhongl(i,j+1));@for(link2(i,j)|j#eq#2:z(i,j)30*zhongl(i,j+1));@for(link2(i,j)|j#eq#3:z(i,j)20*zhongl(i,j+1));@for(link2(i,j)|j#eq#4:z(i,j)

@for(nian(i):nainiu=@sum(link1(i,j)|j#gt#2:x(i,j)));!每年的产奶牛的总数;@for(nian(i):xiaoniu=@sum(link1(i,j)|j#le#2:x(i,j)));!每年的小牛的总数;@for(nian(i):w1(i)+w2(i)+0.99*nainiu+0.6666667*0.975*xiaoniu=220);!土地约束;

@for(nian(i):h=10*@sum(link1(i,j)|j#le#2:0.975*x(i,j))+42*@sum(link1(i,j)|j#gt#2:0.99*x(i,j))+4*w1(i)+14*w2(i));!劳动时间;

@for(nian(i):r(i)=270*0.99*nainiu(i)+120*y(i,12)+30*u(i)+40*v(i)-rh(i)+rf2(i)-rf1(i)+rg2(i)-rg1(i)-50*0.975*xiaoniu(i)-15*w1(i)-10*w2(i)-@sum(nian(k)|k#le#i:d(k)));!每年的货币收入;

@for(nian(i):rh=@if(h#le#5500,4000,4000+1.2*(h-5500)));!劳动时间方面的支出;

@for(nian(i):rf1=@if(f1#gt#f2,90*(f1-f2),0));!购粮支出;@for(nian(i):rf2=@if(f2#gt#f1,75*(f2-f1),0));!卖粮收入;@for(nian(i):rg1=@if(g1#gt#g2,70*(g1-g2),0));!购甜菜支出;

@for(nian(i):rg2=@if(g2#gt#g1,50*(g2-g1),0));!卖甜菜收入;

@for(nian(i):d=@if(@sum(link1(i,j):x(i,j))#gt#130,39.8504*(@sum(link1(i,j):x(i,j))-130),0));!因当年的投资还贷数量;

@for(link1(i,j)|i#lt#5 #and# j#le#11:x(i+1,j+1)=y(i,j));!连接关系;@for(link1(i,j)|i#lt#5 #and# j#eq#1:x(i+1,j)=0.55*@sum(link1(i,k)|k#gt#2:y(i,k))-v(i));!留下来的小母牛;

@for(nian(i):u(i)=0.55*@sum(link1(i,j)|j#gt#2:y(i,j)));!小公牛数量;@for(nian(i)|i#ge#3:v(i)=u(i));!最优解必定在最后一年里没有小牛;

@sum(link1(i,j)|i#eq#5 #and# j#ge#2 #and# j#le#11:y(i,j))

@sum(link1(i,j)|i#eq#5 #and# j#ge#2 #and# j#le#11:y(5,j))>50;@for(link2(i,j):@bin(zhongl));end

model:!旅行商问题(TSP),从城市1出发,经过每个城市一次回到城市1;sets: city:u;link(city,city):c,x;endsets data: n=30;!输入城市数,n比较小时可用提示n=?,n比较大时不能这样作,死机;city,c=@ole(F:lingsjTSP2.xls,'city','feiyong');

enddata

min=@sum(link(i,j)|i#ne#j:c*x);@for(city(i):@sum(city(j)|i#ne#j:x(i,j))=1);@for(city(j):@sum(city(i)|i#ne#j:x(i,j))=1);@for(link(i,j)|i#gt#1 #and# j#gt#1 #and# i#ne#j:u(i)-u(j)+n*x(i,j)

注:由于通用程序中含有城市个数n,因此必须在数据段指定n的值;一个好的方法是即时输入法,用n=?即可.但是当n=30时,这样做会死lingo,说是指向内存.这时应用者应当注意阅读程序,注意修改数据段.

下载LINGO学习心得[1]word格式文档
下载LINGO学习心得[1].doc
将本文档下载到自己电脑,方便修改和收藏。
点此处下载文档

文档为doc格式

    热门文章
      整站推荐
        点击下载本文