关于LINDO/LINGO的学习材料

(24) 2024-03-17 09:01:01

关于LINDO/LINGO的学习材料

1LINDO

这个就是一开始的那个软件,主要求解线性规划、整数规划、二次规划问题。现在版本好像是6.1

2GINO

一开始的时候这也是一个求非线性规划的工具,甚至她还用来求解一些非线性的方程根。它的特点是:包含了丰富的数学函数,尤其是概率函数!但是随着像Mathematica/Matlab的迅速发展,他逐渐的消亡,并演化为现在的函数引擎LINDO API,呵呵,现在版本2.0

3LINGO/LINGO NL

大家现在看到的LINGO8.0在一开始也是两部分:LINGO and LINGO NL,他们分别用于求解线性、整数规划以及非线性、线性、整数规划问题。可见这很混乱,所以现在就统一成为了LINGO,它与LINDO的主要主要区别在于:她内建了建模语言,可以简约的得描述大规模的优化问题。现在版本是8.0

4What's the best

这是一个组件,主要处理由Excell/Access生成数据文件的规划问题,安装之后会在你的Office中添加一个名为What's the best的宏,启用后会在Excell中生成一个工具条,就像Adobepdf插件一样。现在版本是7.0

 

注解:上面这些旨在说明这些软件名字是有各自的含义的,首先要明确他们各自的长处是什么,才能有的放矢!至于学习方法,很简单,阅读、运行程序自带实例。呵呵,打算每天一个例子吧🙂一些他们的区别在具体例子中会比较说明!

 

说一下这里的lindolingo程序结构的差异:

 

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      2

 

        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

注解:第一行告知线性优化步数为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:             3

  Objective value:                                 14500.00

 

 

                       Variable           Value        Reduced Cost

                       STANDARD        100.0000            0.000000

                          TURBO        30.00000            0.000000

 

                            Row    Slack or Surplus      Dual Price

                              1        14500.00            1.000000

                              2        0.000000            25.00000

                              3        90.00000            0.000000

                              4        0.000000            75.00000

注意:同样的一个问题,lingo却用了3次迭代!实际上lingo的长处在于它的内建的建模语言,从而刻画大型的规划问题简单,小规模的规划问题好像lindo有更好的效率!

我实际上更喜欢用lingo,总觉得她和matlab更接近一点!特别是一些基本的数学运算符。非常不习惯lindo不用*表示乘,却用空格,sigh...

 

从本部分介绍lingo的强大的数学优化建模语言。这是他专门为大规模优化建模提供的一套

规范语言,下面介绍简单的例子来说明他的基本组成。

 

一、原始问题(运输问题)

现在WW(Wireless Widgets)公司拥有6个仓库,向其8个销售商供应它的产品。要求每个

仓库供应不能超量,每个销售商的需求必须得到满足。WW公司需要决策具体的从每个仓库

运输多少产品到每个销售商。以使得所花的运输费用最少?

二、问题的已知数据:

1、产品仓库数据:

仓库编号      产品库存量

1               60

2               55

3               51

4               43

5               41

6               <

THE END

发表回复