第一篇: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]] : expression_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);z(i,j)>30*zhongl(i,j+1));@for(link2(i,j)|j#eq#2:z(i,j)<30*zhongl(i,j);z(i,j)>30*zhongl(i,j+1));@for(link2(i,j)|j#eq#3:z(i,j)<20*zhongl(i,j);z(i,j)>20*zhongl(i,j+1));@for(link2(i,j)|j#eq#4:z(i,j)<10*zhongl(i,j));@for(nian(i):w1(i)=@sum(link2(i,k):z(i,k)));@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)));@sum(link1(i,j)|i#eq#5 #and# j#ge#2 #and# j#le#11:y(i,j))<175;@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: 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);z(i,j)>30*zhongl(i,j+1));@for(link2(i,j)|j#eq#2:z(i,j)<30*zhongl(i,j);z(i,j)>30*zhongl(i,j+1));@for(link2(i,j)|j#eq#3:z(i,j)<20*zhongl(i,j);z(i,j)>20*zhongl(i,j+1));@for(link2(i,j)|j#eq#4:z(i,j)<10*zhongl(i,j));@for(nian(i):w1(i)=@sum(link2(i,k):z(i,k)));!每年的种粮田地数量;
@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))<175;!五年后约束条件;
@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,说是指向内存.这时应用者应当注意阅读程序,注意修改数据段. 网上关于LINDO/LINGO的学习心得材料 1、LINDO 这个就是一开始的那个软件,主要求解线性规划、整数规划、二次规划问题。现在版本好像是6.1。 2、GINO 一开始的时候这也是一个求非线性规划的工具,甚至她还用来求解一些非线性的方程根。它的特点是:包含了丰富的数学函数,尤其是概率函数!但是随着像Mathematica/Matlab的迅速发展,他逐渐的消亡,并演化为现在的函数引擎LINDO API,呵呵,现在版本2.0。 3、LINGO/LINGO NL 大家现在看到的LINGO8.0在一开始也是两部分:LINGO and LINGO NL,他们分别用于求解线性、整数规划以及非线性、线性、整数规划问题。可见这很混乱,所以现在就统一成为了LINGO,它与LINDO的主要主要区别在于:她内建了建模语言,可以简约的得描述大规模的优化问题。现在版本是8.0。 4、What's the best 这是一个组件,主要处理由Excell/Access生成数据文件的规划问题,安装之后会在你的Office中添加一个名为What's the best的宏,启用后会在Excell中生成一个工具条,就像Adobe的pdf插件一样。现在版本是7.0。 注解:上面这些旨在说明这些软件名字是有各自的含义的,首先要明确他们各自的长处是什么,才能有的放矢!至于学习方法,很简单,阅读、运行程序自带实例。呵呵,打算每天一个例子吧:)一些他们的区别在具体例子中会比较说明! 说一下这里的lindo和lingo程序结构的差异: 1、基本程序架构(1)lindo是这样的: MAX 目标函数表达 ST 变量约束1 变量约束2 变量约束3 END(2)lingo是这样的: MAX=目标函数表达;变量约束1;变量约束2;变量约束3;注意:可见它们的基本frame不同,在lingo80中每个语句后面必须以分号结束,包括以开头的注释语句。 2、简单的示例 假设现在一个计算机厂商要生产两种型号的PC:标准型(standard)和增强型(turbo),由于生产线和劳动力工作时间的约束,使得标准型PC最多生产100台。增强型PC最多生产120台;一共耗时劳动力时间不能超过160小时。已知每台标准型PC可获利润$100,耗掉1小时劳动力工作时间;每台增强型PC可获利润$150,耗掉2小时劳动力工作时间。请问:该如何规划这两种计算机的生产量才能够使得最后获利最大? 这个问题是标准的线性规划,目标函数是100*standard+150*turbo最大!lindo/lingo的程序分别如下: (1)[lindo sourcecode]: max 100 standard+150 turbo st standard<=100 turbo<=120 standard+2 turbo<=160 end 运行结果如下: LP OPTIMUM FOUND AT STEP OBJECTIVE FUNCTION VALUE 1) 14500.VARIABLE VALUE REDUCED COST STANDARD 100.000000 0.000000 TURBO 30.000000 0.000000 ROW SLACK OR SURPLUS DUAL PRICES 2) 0.000000 25.000000 3) 90.000000 0.000000 4) 0.000000 75.000000 NO.ITERATIONS= 注解:第一行告知线性优化步数为2,下面是目标函数值=14500,在standard=100/turbo=30时取到;下面是对偶值。 (2)[lingo sourcecode]: max=100*standard+150*turbo;standard<=100;turbo<=120;standard+2*turbo<=160; 运行结果如下: Global optimal solution found at iteration: Objective value: 14500.00 Variable Value Reduced Cost STANDARD 100.0000 0.000000 TURBO 30.00000 0.000000 Row Slack or Surplus Dual Price 14500.00 1.000000 0.000000 25.00000 90.00000 0.000000 0.000000 75.00000 注意:同样的一个问题,lingo却用了3次迭代!实际上lingo的长处在于它的内建的建模语言,从而刻画大型的规划问题简单,小规模的规划问题好像lindo有更好的效率! 我实际上更喜欢用lingo,总觉得她和matlab更接近一点!特别是一些基本的数学运算符。非常不习惯lindo不用*表示乘,却用空格,sigh...从本部分介绍lingo的强大的数学优化建模语言。这是他专门为大规模优化建模提供的一套 规范语言,下面介绍简单的例子来说明他的基本组成。 一、原始问题(运输问题): 现在WW(Wireless Widgets)公司拥有6个仓库,向其8个销售商供应它的产品。要求每个 仓库供应不能超量,每个销售商的需求必须得到满足。WW公司需要决策具体的从每个仓库运输多少产品到每个销售商。以使得所花的运输费用最少? 二、问题的已知数据: 1、产品仓库数据: 仓库编号 产品库存量 1 2 3 4 5 6 2、销售商产品需求: 销售商编号 产品需求量 1 2 3 4 5 6 7 8 3、每件产品运输费用($): 销售商[右] V1 V2 V3 V4 V5 V6 V7 V8 仓库[下] Wh1 Wh2 Wh3 Wh4 Wh5 Wh6 三、目标函数描述: 线性优化建模的重要一步就是构造目标函数,正如上面提到的,在此问题中,WW 公司欲使总的运输费用最小。 现在令:变量VOLUME_I_J 表示从仓库I到销售商J运送的产品数目。这样我们就可以写出如下的目标函数: MIN = 6 * VOLUME_1_1 + 2 * VOLUME_1_2 + 6 * VOLUME_1_3 + 7 * VOLUME_1_4 +4 * VOLUME_1_5 +...8 * VOLUME_6_5 + VOLUME_6_6 + 4 * VOLUME_6_7 +3 * VOLUME_6_8; 当然上面是个简写形式。很明显的上面的目标函数如此的冗长,很容易导致输入错误。现实中的情况往往是销售商成千上万个,如果还是使用上述的方法就难以想象了。熟悉规划数学定义的人可以很轻易的用下面的方式表达上述的目标函数: Minimize SUM(ij)(COST_ij*VOLUME_ij)LINGO就是采用这种类似的方式来描述规划模型的,比如这个例子的等价的LINGO语句就是: MIN = @SUM(LINKS(I,J): COST(I,J)* VOLUME(I,J));总之:LINGO的规划语言很适合熟悉数学的人使用,很自然。上面的@SUM是系统函数,后面会介绍常见系统函数:P 四、变量约束: 这里有两种约束,第一种是供货约束,第二种是接货约束。例如:对于第一个销售商而言 VOLUME_1_1 + VOLUME_2_1 + VOLUME_3_1 + VOLUME_4_1 + VOLUME_5_1 + VOLUME_6_1 = 35; 如果使用原始的规划语句,要建如类似上面的语句8次呢:(有了建模语言就方便了: @FOR(VENDORS(J):@SUM(WAREHOUSES(I): VOLUME(I, J))= DEMAND(J));类似的: @FOR(WAREHOUSES(I): @SUM(VENDORS(J): VOLUME(I, J))<= CAPACITY(I));好了,到此为止我们的模型就建起来了: MODEL: MIN = @SUM(LINKS(I, J): COST(I, J)* VOLUME(I, J));@FOR(VENDORS(J): @SUM(WAREHOUSES(I): VOLUME(I, J))= DEMAND(J));@FOR(WAREHOUSES(I): @SUM(VENDORS(J): VOLUME(I, J))<= CAPACITY(I)); END 注释:从上面可以看出一个LINGO模型必须包含在MODEL/END中间,然后在中间依次给出目标函数,约束条件等。但是我们的数据该如何给出呢?也就是解决LINGO建模语言中的赋值问题,下面会接着介绍的,呵呵:) 五、定义变量集合: 我们要处理的实际建模问题中经常会遇到一类同样的问题:若干相关的对象集合。比如:工厂稽核、客户集合、车辆集合和雇员集合等等。通常我们希望:约束某个集合中的特定对象的条件也同样适用于同一集合内其他的对象。这恰好是LINGO建模语言的最基本的概念。LINGO允许在SETS段定义某些相关对象于同一个集合内。集合段以关键字SETS开始;以关键字ENDSETS结束。一旦你定义了集合,LINGO可以提供大量的集合循环函数(例如:@FOR), 通过简单的调用他们的语句就可以操作集合内的所有元素。 我们回到最初的例子:Wireless Widget 模型,定义如下的三个集合: 仓库集,销售商集,运输路线集。具体的定义如下: SETS: WAREHOUSES / WH1 WH2 WH3 WH4 WH5 WH6/: CAPACITY; VENDORS / V1 V2 V3 V4 V5 V6 V7 V8/ : DEMAND; LINKS(WAREHOUSES, VENDORS): COST, VOLUME; ENDSETS 注解:普通集合定义格式如下:集合名/成员列表/:成员共有属性。最后的LINKS集合,代表着48条运输路线。每条路线分别有两个属性COST和VOLUME。定义这种集合的语法和前面不同: LINKS(WAREHOUSES, VENDORS)上面前面两个集合称为“基本集合(Primarity Sets)”,第三个集合LINKS是“派生集合(Derived Sets)”;顾名思义他是由基本集合WAREHOUSES和VENDORS派生出来的。在这个例子中, LINGO生成每个可能的(warehouse, vendor)序对,这48个有序对组成了集合LINKS。下面从LINKS集合中调出的部分成员可以帮助我们认识这些序对的生成方式: 索引 运输线路 1 WH1-->V1 2 WH1-->V2 3 WH1-->V3......47 WH6-->V7 48 WH6-->V8 我们当然可以自己键入这些成员,但是LINGO在后台为我们节省了时间和劳动,我们只需搞明白他的工作原理就可。 六、集合变量赋值: LINGO允许用户在数据段中单独的给模型中变量赋值;比如下面是我们的这个例子的数据段: DATA: CAPACITY = 60 55 51 43 41 52; DEMAND = 35 37 22 32 41 32 43 38; COST = 6 2 6 7 4 2 5 9 9 5 3 8 5 8 2 2 1 9 7 4 3 3 6 7 3 9 2 7 1 3 9 5 7 2 6 5 5 2 2 8 1 4 3; ENDDATA 注解: [1]、数据段以关键字DATA开始;以关键字ENDDATA结尾。派生集合的赋值有个顺序问题,在这里它先初始化COST(WH1, V1), 接下来是从COST(WH1, V2)到COST(WH1, V8);然后是COST(WH2, V1), 依此类推。[2]、LINGO还支持从外部文件中导入数据,更一般化地,他甚至支持通过OLE连接到Excel, 或者创建到流行数据库的ODBC链接,这对于数据经常改变的模型非常重要的。 七、总结: 直到现在,我们使用LINGO建模语言建立的运输模型已经初具规模,全部模型是这样的: MODEL:!示例:6仓库/8销售商运输模型;SETS: WAREHOUSES/ WH1 WH2 WH3 WH4 WH5 WH6/: CAPACITY; VENDORS/ V1 V2 V3 V4 V5 V6 V7 V8/: DEMAND; LINKS(Warehouses, Vendors): COST, VOLUME;ENDSETS!目标函数;MIN = @SUM(LINKS(I, J): COST(I, J)* VOLUME(I, J));!需求约束;@FOR(VENDORS(J): @SUM(WAREHOUSES(I): VOLUME(I, J))= DEMAND(J));!供应约束;@FOR(WAREHOUSES(I): @SUM(VENDORS(J): VOLUME(I, J))<= CAPACITY(I));!数据段;DATA: CAPACITY = 60 55 51 43 41 52; DEMAND = 35 37 22 32 41 32 43 38; COST = 6 2 6 7 4 2 5 9 5 3 8 5 8 2 2 1 9 7 4 3 3 6 7 3 9 2 7 1 3 9 5 7 2 6 5 5 2 2 8 1 4 3 ENDDATA END 注解:在LINGO中使用!和;构造注释语句。另外提醒大家:不要忘了这里的VOLUME(I,J)是要求的具体每条运输线路的运货量:P 上面将LINGO8.0分成三部分大致的介绍完了,这其实也是我的学习过程。我每天只能拿出半个小时左右看看LINGO,今天比较幸运,比较闲,就写些感受吧:) 一、上面三篇后的小尾巴: 上面讲了这么多,最后为啥嘎然而止?实际上,上面的最后已经给出了运输模型的完整的LINGO建模语言描述的程序,只需点击一下运行就可。 二、体会: 为什么LINGO这个软件到现在为止还越来越有活力了呢?现在像Matlab/Maple?MathCAD这样的软件功能强大的很!这几天的使用让我稍有体会了: 1、线性规划这一块的欠缺:在matlab的最初的发展中,线性规划这一块就没考虑多大,当然,如果你非常熟悉单纯形法或分支定界法这样的算法的话,完全可以使用C或者matlab来解决一个具体的规划问题。但是LINDO公司有着独特的眼光,发现了将这些成熟的算法批量机械化的好处,形成了现在的LINDO系列优化软件。 2、线性规划的巨大使用价值:现实的金融/经济/社会等等方面非常多的出现线性规划问题,只要看一下现在的MBA/MPA的教材就知道这是多么基本的一项技术!正如此,LINDO系列软件的使用领域现在主要在这些社会领域,当然教育上也有相当的应用。 3、LINGO建模语言的统一性:熟悉数学优化的人就是知道LINDO公司实际上没做什么,只是将相应数学理论概念对应到面向对象编程中而已,但是这是具有创造性地!Matlab没做这些,尤其是线性/整数规划!当然对于非线性优化,Matlab的优化工具箱绝对是超级工具。 4、统一性:使用LINDO的语言,特别是建模语言,你能够比较清醒地认识你现在所处理的问题到底是哪一类规划问题?有助于更深刻地认识你所面临的问题。 三、下面的安排: 前面的这部分算是个入门吧!以后要慢慢的接触LINGO的强大的系统内置函数系统,先开个头吧,下面是LINGO系统中的所有函数的分类: 1、标准运算符 2、数学函数 3、金融函数 4、概率函数 5、变量范围限制函数 6、集合控制函数 7、集合循环函数 8、导入导出函数 9、杂项函数 呵呵!今天就写这些:P 实际应用科研中创新、管用的方法、思路往往是最Naive的!可能俺的水平太低?咋老是感觉这样呢,何时才能update呀。 群主2(291269111)2010-9-5 19:15:32 大家好,我是数学中国的站长madio,应数学中国培训组的要求在这里和大家交流一下lingo的学习体会。 群主2(291269111)2010-9-5 19:15:35 LINGO是用来求解线性和非线性优化问题的简易工具。LINGO内置了一种建立最优化模型的语言,可以简便地表达大规模问题,利用LINGO高效的求解器可快速求解并分析结果。 群主2(291269111)2010-9-5 19:15:39 我们关注近几年全国赛赛题的同学们都会发现,优化问题始终是数学建模的热点,近几年整数规划、二次规划的问题多次出现。 群主2(291269111)2010-9-5 19:15:45 优化问题往往有建模简单,求解困难的特点,如何找到我们所需要的全局最优解或者局部最优解是非常重要的,Lingo是我们完成优化建模求解的有效工具,它的学习直接关系到了我们建模的最终成败。 群主2(291269111)2010-9-5 19:15:50 答疑专贴: http://www.xiexiebang.computations列表框中,选择Prices and Ranges选项。灵敏性分析耗费相当多的求解时间,因此当速度很关键时,就没有必要激活它。 群主2(291269111)21:07:31 好了,由于很多网友晚上要断电,所以我们的课先讲到这,大家可以在数学中国社区论坛上和我继续交流,谢谢大家了! 群主2(291269111)21:07:49 感谢数学中国站长的精彩讲课!如果大家对培训中的内容有什么疑问,可以在【第三期培训答疑贴】中跟帖: http://www.madio.net/thread-101158-1-1.html 培训老师会及时回答大家的问题的! 群主2(291269111)21:08:04 第三期培训的讲稿一会会在培训咨询帖中公布: http://www.madio.net/thread-100805-1-1.html 大家有需要的可以自行下载! 群主2(291269111)21:08:24 第四期培训专题通知: 培训专题:《比赛注意事项及论文写作》 培训人:数学中国CEO(huashi3483)培训时间:9月6号晚8点 第四期为数学中国在国赛前准备的最后一期培训专题,CEO会向大家介绍比赛中的相关注意事项及论文写作的相关事宜,敬请期待! 感谢各位对数学中国的支持! 运筹学的应用简介及实例(lindo,lingo,ahp) 一.运筹学可以用于物流中心选址: 配送中心合理选址的目的是为了提高物流企业的服务质量,最大限度地增加物流企业的经济效益。科学合理的选址不仅能够减少货物运输费用,大幅度地降低运营成本,而且能为客户带来方便快捷的服务。二.运筹学可以用于路线选择: 利用运筹学中的图论和线性规划方法,对已有的空运、水运、公路运输、管道运输、铁路运输组成的交通网,根据不同的决策目标制定不同的调运方案,可以是最短时间的运输路线、最少费用的运输路线或是最大运输量最低运费的运输线路等,从而达到降低物流成本的目的。三.运筹学中排队论在物流中应用: 排队论主要研究具有随机性的拥挤现象,在物流中有许多问题涉及,诸如机场跑道设计和机场设施数量问题, 如何才能既保证飞机起降的使用要求, 又不浪费机场资源又如码头的泊位设计和装卸设备的购置问题, 如何达到既能满足船舶到港的装卸要求, 而又不浪费港口资源等等。四.运筹学中库存论在物流中应用: 库存论主要是研究物资库存策略的理论, 即确定物资库存量、补货频率和一次补货量。合理的库存是生产和生活顺利进行的必要保障, 可以减少资金的占用, 减少费用支出和不必要的周转环节, 缩短物资流通周期, 加速再生产的过程等。在物流领域中的各节点如工厂、港口、配送中心、物流中心、仓库、零售店等都或多或少地保有库存。 五.运筹学中对策论在物流中应用: 对策论研究有利害冲突的双方在竞争性的活动中是否存在自己制胜对方的最优策略, 以及如何找出这些策略等问题。在这些问题中, 把双方的损耗用数量来描述, 并找出双方最优策略。对策论的发展, 考虑有多方参加的竞争活动, 在这些活动中, 竞争策略要通过参加者多次的决策才能确定。参考文献: [1] 左元斌.运筹学在物流配送中心的应用研究[J].商场现代化,2006(458):125-127.[2] 李宇鸣.浅谈运筹学在物流管理中应用与发展[J].吉林工商学报,2007(4):55-56.[3] 田进波.运筹学在管理物流管理中的应用[J].石油工程建设,2010(36):153-155.LINDO求解目标规划: 题目:一个小型的无线电广播台考虑如何最好地来安排音乐、新闻和商业节目时间。依据规定,该台每天允许广播12小时,其中商业节目用以赢利,每小时可收入250美元,新闻节目每小时需支出40美元,音乐节目每播一小时费用为17.50美元。规定中,正常情况下商业节目只能占广播时间的20%,每小时至少安排5分钟新闻节目。问每天的广播节目该如何安排? 优先级如下:P1:满足规定要求;P2:每天的纯收入最大。试建立该问题的目标规划模型。 建立目标规划: 设安排商业节目x1小时,新闻x2小时,音乐x3小时,模型为: minzP1d1d2d3P2d4s..tx1x2x3d112x1d22.4x2d1250x140x217.5x3d4d46003 x1,x2,x3,d1,d2,d3,d4,d40LINDO求解: 第一步: 程序: 计算结果: 求解得:d1_+d2_+d3=0 第二步: 程序: 计算结果: 计算结果: 得到一个满意解: *x12.4*x21.0*x38.6d10.0d20.0d30.0d4190.5 LINGO求解目标规划: 题目: minzp1d1p2(d2d2)p3d32x1x211x1x2dd011s..tx12x2d2d2108x110x2dd5633x1,x2,di0程序: 计算结果: 得到一个满意解: x1*3.3*x23.3d10.0d10.0d0.0d20.0d30.0d34.02 层次分析法: 模型: 判断矩阵: 计算结果: xx远整理 培训心得体会 经过为期三周,总计六天的听特尔未来教育培训学习,我们学到了很多平时没被关注的东西,此次培训为我以后的教学工作提出了很多值得借鉴的指导意见。 本次教育培训主讲教师所采用的教学策略与教学方法,使我和所有参与培训的学员受益匪浅。这种培训方式给我们参与培训的教师提供更多交流的机会,使我们可以在集体合作交流、共享展示、相互评价中很轻松的完成培训内容。当然这也对参与培训的教师提出了一定的要求,必须具有完成培训任务所需要的技术、理念和相关知识。否则会不能很出色的完成培训任务。在这段时间里,我相信每位老师都遇到了挑战,但是更多的肯定是对教育教学的启迪。 在此次英特尔远程教育培训中我们有明确的学习目标,紧紧围绕“项目教学”这种方式展开。项目学习也是构建主义理论下所开展的一种教学方式。它充分发挥了以学生为中心,教师充当引导者的教学方式,让学生和教师共同利用头脑风暴确定学生感兴趣的项目,为学生创设了更多的学习机会,其中包括:课堂学习、网络学习、社会实践学习等。使学生的学习内容和范围都变得宽泛了,学生的思维得到了深化,学生的能力得到了发展,促进了学生积极的成为问题的解决者,真正的提高了学习的高效性。当然在学习之初,我经历了困惑、迷茫,但通过仔细的看教学短片,逐渐有了一定的头绪。通过模块一的学习,使我了解了项目单元构思的理论知识,知道了项目学习是让学生将所学知识与现实世界相联系的有效途径,对项目学习与传统教学进行了对比,从而使自己认真的思考了将项目教学的意义。同时也思考了对于自己来讲实施项目教学要面临的挑战,如果真的自己实施这种教学方式应该应用什么样的教学策略和教学方法才能满足不同学生的学习需求,鼓励学生接受并乐于这种学习方式。当然在项目学习理论中找到了一些解决办法,如:为学生设定学情调查表,找到不同层次学生的不同需求。模块二的教学内容为我实际开展项目教学指明了方向,从项目的教学的学习计划的制定、确定项目学习目标、设计框架问题到如何评价学生等。 我们深知,我们进行的培训并不是“英特尔未来教育”项目培训的全部。更重要的是这些接受了培训的教师回到自己的岗位后,在自己的教学中如何利用现代信息技术组织学生开展研究性学习,实现现代信息技术与学科教学的整合,进而掀起利用现代信息技术组织学生开展研究性学习的高潮,推动学校教学模式的改变,适应新课改以对教师教学的要求。如何才能使“英特尔未来教育”的教育理念、教学模式在学校领导、教师中深入人心,开花结果,这正是我们所思考的问题,也是我们需要迫切解决的问题。,英特尔未来教育十分重视融合现代教育观念教学手段,尤其是计算机网络在当今教育中的应用,计算机及互联网为教师和学生提供了更加方便、丰富,快捷的信息与知识。学生利用现代信息技术查找资料分析和解决问题的同时将涉及边缘或其它学科知识,而不仅仅局限在某一学科上,它打破了学科界限,这更容易使知识融合贯通,增强不同学科的相互渗透,使学生知识全面提高。但相对传统教学英特尔未来教育对教师提出了更高要求,它要求教师是综合型的,相关学科知识面要广,有教学机智善于处理教学中意料之外的突发事件,能处理好学生各种各样的问题。英特尔未来教育以计算机及网络为基本平台,在教学中融入了高科技,也是教学艺术与科学技术的整合。 “英特尔未来教育”给我们提供了新的教学理念,我意识到“问题化教学”新的教学模式已经是势在必行的时候了。但是无论是任何一种教学模式都不是死的条条框框,在实际的教学过程中必须加以灵活运用。“英特尔未来教育”要求我们应用计算机完成问题设计,但是,在我们农村学校,很多老师对计算机还只是从概念上的认识,根本谈不上操作和应用了,所以,“信息技术与学科的教学整合”在农村大面积推广实施是有一定的困难。当然,新的教学思想和新的教学理念必然推动着教育的发展。正如英特尔公司首席势行官克瑞格-贝瑞特博士说的,计算机和互联网不能自动带来教育的革命,因为计算机并不是什么神奇的魔法,而教师才是真正的魔术师。通过这次培训,我坚信“问题化教学”会在基础教育的创新发展中彰显神奇的魅力。 今后我会将在这里学到的新知识尽快地内化为自己的东西,运用于教育教学过程中去,将学到的知识运用于教育教学实践中去,让培训的硕果在教育事业的发展中大放光彩。在今后的日子里,我将不断地学习理论知识,用理论指导教学实践,研究和探索教育、教学规律,把科研和教学结合起来,做一个专家型、学者型的教师,使自己具有所教学知识方面的前瞻性。这样,才能培养出新时期“发现型、发明型、创造型、创新型”的学生。为了我们的教育,为了我们的学生,也为了我们自己,我会时时处处都要注重自己的师德修养和人格塑造,并加强自己的理论素养和专业技能的学习和提高,具有较强的教育科研意识和能力,有目的地总结教育经验,反思教学实践,一切从实际出发,切实担负起教师应尽的责任和义务,做好学生成长过程中的指路人。第二篇:Lingo,Lindo学习心得
第三篇:专题:lingo优化
第四篇:运筹学的应用简介及实例(lindo,lingo,ahp)
第五篇:学习心得