在优化求解器的世界里,LINGO是一匹黑马。 它的名字“Linear Interactive and General Optimizer”的缩写,既不华丽,也不花哨,但它拥有着强大的功能。它可以用于非线性规划的求解,也可以用于线性和非线性方程组的求解等。而且,它的特色在于内置建模语言和十几个内部函数,可以允许决策变量是整数,包括 0-1 整数规划。这使得LINGO非常灵活和方便,而且执行速度也非常快。此外,LINGO还可以方便地与其他软件交换数据,如EXCEL,数据库等。
然而,LINGO的魅力并不仅仅在于它的功能。LINGO18.0作为最新版本,其创新之处在于它可以更快地处理大规模的问题,让用户更快地得到结果。此外,它还能够自动地进行可行性分析,使得问题的求解更加准确。除此之外,LINGO还能够进行敏感性分析和参数优化,为用户提供更多的决策支持。如果您正在寻找一个优秀的优化求解器,LINGO18.0绝对是一个值得尝试的选择。
linggo提取地
pspuzi.com/?PbWDFKMBKUWS
总之,LINGO的强大功能、灵活性和执行速度使其成为一款不可多得的优化求解器。通过LINGO,您可以轻松地解决各种线性和非线性问题,并获得准确和高效的结果。如果您正在寻找一个性能卓越的优化求解器,那么LINGO18.0绝对是一个值得选择的工具。
LINGO安装教程1.右键解压到“Lingo 18.0”
2.打开【Setup】文件夹
3.选中Lingo 18.0,右击选择“以管理员身份运行”
4.点“Next”
5.选中I accept the terms in the license agreement,点“Next”
6.选择软件安装路径,点“Next”
7.点“Install”
8.软件正在安装
9.点“Finish”
10.打开【Crack】文件夹
11.复制Lingo_v18_x64_patcher文件
12.粘贴到软件安装位置(第6步设置的路径)
13.选中Lingo_v18_x64_patcher,右击选择“以管理员身份运行”
14.安装成功,关闭该界面
假设WWW公司有6个仓库,储存着8个分厂生产所需要的原材料。要求每一个仓库的供应量不能超过储存量,而且每一个分厂的需求必须得到满足。问:如何组织运输,使总运输费用最小?已知从6个仓库到8个分厂的运输费用表。
这个问题是一个典型的优化问题,通常称为运输问题。具体求解过程如下。
第一步:写出模型语言
1 构造目标函数。根据问题要求,可以设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;
很显然,这样输入太麻烦,如果用Lingo模型语言来描述则简洁的多。
首先将目标函数表示为我们熟悉的数学语言
Minimize aijCOSTij*VOLUMEij
然后将其转化为Lingo模型语言
MIN = @SUM( LINKS(I,J): COST(I,J) * VOLUME(I,J));
数学语言和Lingo模型语言之间的关系为:
数学语言 Lingo模型语言
Minimize MIN =aij @SUM( LINKS( I, J): )
COST ij COST(I,J)
* *
VOLUME ij VOLUME(I,J)
2 构造约束函数。
第j个分厂的需求:VOLUME_1_j + VOLUME_2_j + VOLUME_3_j +
VOLUME_4_j + VOLUME_5_j + VOLUME_6_j = 35;
则每一个分厂的需求用数学语言描述为
ai VOLUMEij = DEMANDj, 对所有j 分厂
Lingo模型语言描述为
@FOR( VENDORS( J):
@SUM( WAREHOUSES( I): VOLUME( I, J)) = DEMAND( J));
数学语言和Lingo模型语言之间的关系为:
数学语言 Lingo模型语言
for all j inVENDORS @FOR( VENDORS( J): )
ai @SUM( WAREHOUSES( I): )
VOLUME ij VOLUME( I, J)
= =
DEMAND j DEMAND( J)
第i个仓库的供应:ai VOLUME ij <= CAP i ,
每一个仓库的供应能力约束为 aj VOLUME ij <= CAP i , 对所有i 仓库
Lingo模型语言描述为
@FOR( WAREHOUSES( I):
@SUM( VENDORS( J): VOLUME( I, J))<= CAPACITY( I));
这样,我们就把运输问题的两个约束都用Lingo模型语言写出来了。从而就得到了一个完整的模型:
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
但是,我们还没有定义模型中的变量,且没有把已知数据传进来。
第二步:定义变量集合
在这个问题中,我们要定义三个集合,即:仓库集合、分厂集合及运输集合。
定义方式如下:
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
在这个定义中,三个变量集合包含在SETS和ENDSETS之间。仓库集合命名为WAREHOUSES,其中包含六个元素WHi(即六个仓库),且每个元素都有一个共同属性是供应量,命名为CAPACITY。分厂集合命名为VENDORS,其中包含八个元素Vj(即八个分厂),每个元素都有一个共同属性是需求量,命名为DEMAND。运输集合是由前两个集合派生出来的,用LINKS( WAREHOUSES, VENDORS)来表示这种派生关系,它中间包含48个元素,表示了从6个仓库到8个分厂之间的运输情况,其中每一个元素有两个属性,运输费用COST和运输量VOLUME。这样,我们就把模型中需要的所有变量都定义过了。
第三步:输入模型数据
按照所定义的变量,输入数据,格式如下:
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
4 9 5 3 8 5 8 2
5 2 1 9 7 4 3 3
7 6 7 3 9 2 7 1
2 3 9 5 7 2 6 5
5 5 2 2 8 1 4 3;
ENDDATA
可以看出,所有输入的数据都必须包含在DATA和ENDDATA之间。
经过这三步之后,我们就可以得到一个完整的Lingo文件。
MODEL:
!六个仓库供应八个分厂的一个运输问题;
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
4 9 5 3 8 5 8 2
5 2 1 9 7 4 3 3
7 6 7 3 9 2 7 1
2 3 9 5 7 2 6 5
5 5 2 2 8 1 4 3;
ENDDATA
END
求解可得:
Optimal solution found at step: 16
Objective value: 664.0000
求解报告(非零解)
Variable Value Reduced Cost
VOLUME( WH1, V2) 19.00000 0.0000000
VOLUME( WH1, V5) 41.00000 0.0000000
VOLUME( WH2, V4) 32.00000 0.0000000
VOLUME( WH2, V8) 1.000000 0.0000000
VOLUME( WH3, V2) 12.00000 0.0000000
VOLUME( WH3, V3) 22.00000 0.0000000
VOLUME( WH3, V7) 17.00000 0.0000000
VOLUME( WH4, V6) 6.000000 0.0000000
VOLUME( WH4, V8) 37.00000 0.0000000
VOLUME( WH5, V1) 35.00000 0.0000000
VOLUME( WH5, V2) 6.000000 0.0000000
VOLUME( WH6, V6) 26.00000 0.0000000
VOLUME( WH6, V7) 26.00000 0.0000000
通过前面两个例题,我们已经知道了如何利用Lingo软件去求解简单优化问题和比较复杂的优化问题。但是,这还不够,在变量集合的定义中,如果集合中的元素比较多,那么,采用枚举的定义方式就显得不合适;在输入数据时,如果数据量比较大,那么,采用在命令窗口中直接输入的方式就不可取。