Lingo,Lindo学习心得

时间:2019-05-12 11:25:48下载本文作者:会员上传
简介:写写帮文库小编为你整理了多篇相关的《Lingo,Lindo学习心得》,但愿对你工作学习有帮助,当然你在写写帮文库还可以找到更多《Lingo,Lindo学习心得》。

第一篇:Lingo,Lindo学习心得

网上关于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呀。

第二篇: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,ahp)

运筹学的应用简介及实例(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小时,模型为:

minzP1d1d2d3P2d4s..tx1x2x3d112x1d22.4x2d1250x140x217.5x3d4d46003

x1,x2,x3,d1,d2,d3,d4,d40LINDO求解: 第一步: 程序:

计算结果:

求解得:d1_+d2_+d3=0 第二步: 程序:

计算结果:

计算结果:

得到一个满意解:

*x12.4*x21.0*x38.6d10.0d20.0d30.0d4190.5

LINGO求解目标规划:

题目:

minzp1d1p2(d2d2)p3d32x1x211x1x2dd011s..tx12x2d2d2108x110x2dd5633x1,x2,di0程序:

计算结果:

得到一个满意解:

x1*3.3*x23.3d10.0d10.0d0.0d20.0d30.0d34.02 层次分析法:

模型:

判断矩阵:

计算结果:

xx远整理

第四篇:lindo心得体会

学习心得

LINDO它是一套设计用来帮助您快速,方便和有效的构建和求解线性,非线性,和整数最优化模型的功能全面的工具.包括功能强大的建模语言,建立和编辑问题的 全功能环境,读取和写入Excel和数据库的功能,和一系列完全内置的求解程序.LINDO 可以将线性、非线性和整数问题迅速得予以公式表示,并且容易阅读、了解和修改。LINDO的建模语言允许您使用汇总和下标变量以一种易懂的直观的方式来表达模型,非常类似您在使用纸和笔。模型更加容易构建,更容易理解,因此也更容易维护。

LINDO建立的模型可以直接从数据库或工作表获取资料。同样地,LINDO可以将求解结果直接输出到数据库或工作表。使得您能够在您选择的应用程序中生成报告.LINDO拥有一整套快速的,内建的求解器用来求解线性的,非线性的(球面&非球面的),二次的,二次约束的,和整数优化问题.您甚至不需要指定或启动特定的求解器,因为LINDO会读取您的方程式并自动选择合适的求解器.您能够在LINDO内创建和求解模型,或您能够从您自己编写的应用程序中直接调用LINDO.对于开发交互式模型,LINDO提供了一整套建模环境来构建,求解和分析您的模型.对于构建turn-key解决方案,LINDO提供的可调用的DLL和OLE界面能够从用户自己写的程序中被调用.LINDO也能够从Excel宏或数据库应用程序中被直接调用.但LINDO也有它本身的缺点就是难处在于如何确切地定出各个目标的优先顺序以获得满意的求解结果。相对于Excel来讲它更专业,但操作不够Excel那么的简单。

使用时候注意事项:

1)目标函数及各约束条件之间一定要有“Subject to(ST)”分开。2)变量名不能超过8个字符。

3)变量与其系数间可以有空格,单不能有任何运算符号(如乘号“*”等)。

4)要输入<=或>=约束,相应以<或>代替即可。

5)一般LINDO中不能接受括号“()“和逗号“,“,例:400(X1+X2)需写成400X1+400X2;10,000需写成10000。

6)表达式应当已经过简化。不能出现 2 X1+3 X2-4 X1,而应写成-2X1+3 X2(1)每条语句后必须使用分号“;”结束。问题模型必须由MODEL命令开始,END结束。

(2)用MODEL命令来作为输入问题模型的开始,格式为MODEL:statement(语句)。

(3)目标函数必须由“min =”或“max =”开头。小整理:适用於向量的常用函数有: min(x): 向量x的元素的最小值 max(x): 向量x的元素的最大值 mean(x): 向量x的元素的平均值 median(x): 向量x的元素的中位数 std(x): 向量x的元素的标准差 diff(x): 向量x的相邻元素的差

sort(x): 对向量x的元素进行排序(Sorting)length(x): 向量x的元素个数

norm(x): 向量x的欧氏(Euclidean)长度 sum(x): 向量x的元素总和 prod(x): 向量x的元素总乘积 cumsum(x): 向量x的累计元素总和 cumprod(x): 向量x的累计元素总乘积 dot(x, y): 向量x和y的内 积 cross(x, y): 向量x和y的外积

变量名以字母开头,不能超过8个字符

变量名不区分大小写(包括LINDO中的关键字)目标函数所在行是第一行,第二行起为约束条件

行号(行名)自动产生或人为定义。行名以“)”结束 行中注有“!”符号的后面部分为注释。如:!It’s Comment.在模型的任何地方都可以用“TITLE” 对模型命名(最多72个字符),如: TITLE This Model is only an Example 变量不能出现在一个约束条件的右端

表达式中不接受括号“()”和逗号“,”等任何符号, 例: 400(X1+X2)需写为400X1+400X2 表达式应化简,如2X1+3X2-4X1应写成-2X1+3X2 缺省假定所有变量非负;可在模型的“END”语句后用“FREE name”将变量name的非负假定取消 可在 “END”后用“SUB” 或“SLB” 设定变量上下界 “>”(或“<”)号与“>=”(或“<=”)功能相同 变量与系数间可有空格(甚至回车), 但无运算符 变量名以字母开头,不能超过8个字符

变量名不区分大小写(包括LINDO中的关键字)目标函数所在行是第一行,第二行起为约束条件 行号(行名)自动产生或人为定义。行名以“)”结束 行中注有“!”符号的后面部分为注释。如:!It’s Comment.在模型的任何地方都可以用“TITLE” 对模型命名(最多72个字符),如: TITLE This Model is only an Example 变量不能出现在一个约束条件的右端

表达式中不接受括号“()”和逗号“,”等任何符号, 例: 400(X1+X2)需写为400X1+400X2 表达式应化简,如2X1+3X2-4X1应写成-2X1+3X2 缺省假定所有变量非负;可在模型的“END”语句后用“FREE name”将变量name的非负假定取消

可在 “END”后用“SUB” 或“SLB” 设定变量上下界

例如: “sub x1 10”的作用等价于“x1<=10”

但用“SUB”和“SLB”表示的上下界约束不计入模型的约束,也不能给出其松紧判断和敏感性分析。

14.“END”后对0-1变量说明:INT n 或 INT name 15.“END”后对整数变量说明:GIN n 或 GIN name

第五篇:专题:lingo优化

群主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会向大家介绍比赛中的相关注意事项及论文写作的相关事宜,敬请期待!

感谢各位对数学中国的支持!

下载Lingo,Lindo学习心得word格式文档
下载Lingo,Lindo学习心得.doc
将本文档下载到自己电脑,方便修改和收藏,请勿使用迅雷等下载。
点此处下载文档

文档为doc格式


声明:本文内容由互联网用户自发贡献自行上传,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任。如果您发现有涉嫌版权的内容,欢迎发送邮件至:645879355@qq.com 进行举报,并提供相关证据,工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。

相关范文推荐

    数学软件lindo,tora的验证实验

    实 验 报 告实验课程名称运筹学(数学规划)实验项目名称 lindo,tora的验证实验年级08 级(1)班专业应 用 数 学学生姓名学号理学院实验时间:2010年10 月20 日学生实验室守则一、按教......

    学习心得

    培训心得体会 经过为期三周,总计六天的听特尔未来教育培训学习,我们学到了很多平时没被关注的东西,此次培训为我以后的教学工作提出了很多值得借鉴的指导意见。 本次教育培训主......

    学习心得

    亚伟速录培训人才就业经验交流会学习心得 2010年12月18日,我参加了由北京市速记协会、人才中心策划主办的亚伟速录培训人才就业经验交流会。本次会议有52所大、中专院校及培......

    学习心得

    学习心得 晚自习让我学到了要归纳总结,将知识点串成线,连成网,建立知识体系。还要从系统的角度学习,正像素描一样,首先要将大框架勾勒出来,然后再详细的描绘一个个细 节,最后完成作......

    学习心得 -

    全国“小学特级教师创新力课堂观摩活动”学习心得 今天有幸参加枣庄举办的“小学特级教师创新力课堂观摩活动”,听了蔡宏圣老师的《百分数的认识》,我觉得课前交流这个部分是......

    学习心得

    学习干部选拔任用监督工作政策法规专题活动心得 作者:云中一野鹤 当前,按照省委组织部部署,在各级领导干部中集中开展一次关于干部选拔任用监督工作政策法规专题教育活动。我单......

    学习心得

    关于外出考察学习的总结 本次有幸参观了公司组织的到五家小区物业的学习参观,从保安人员的管理、车辆的管理、消防的管理、智能化设施的管理、保安人员的服务意识、礼仪礼貌......

    学习心得

    心得体会 通过政治学习我了解到郑德荣精神:“做爱岗敬业的标杆”。 他鞠躬尽瘁,忠于职守。“人生的最大欣慰和快乐,一是科研成果给人以启迪,服务于社会;二是学生青出于蓝而胜于蓝......