LINGO基本用法
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
LINGO基本用法
1、概况 (1)
2、LINGO的基本用法 (1)
3、用LINGO编程语言建立模型 (2)
4、建立LINGO/LINDO优化模型需要注意的几个基本问题 (3)
5、对求解结果的分析 (3)
LINGO基本用法
LINGO是专门用来求解各种规划问题的软件包,其功能十分强大,是求解优化模型的最佳选择。
1、概况
LINGO是美国LINDO系统公司开发的求解数学规划系列软件中的一个,它的主要功能是求解大型线性、非线性和整数规划问题,LINGO分为Demo、Solve Suite、Super、Hyper、Industrial、Extended等六种不同版本。只有Demo版是免费的。LINGO的不同版本对模型的变量总数,非线性变量的数目,整形变量数目和约束条件的数量作出了不同的限制。LINGO的主要功能:
(1) 既能求解线性规划问题,也有较强的求解非线性规划问题的能力;
(2) 输入模型简练直观
(3) 运行速度快,计算能力强
(4) 内置建模语言,提供几十个内部函数,从而能以较少语句,较直观的方式描述较大规模的优化模型
(5) 将集合的概念引入编程语言,很容易将实际问题转换为LINGO模型
(6) 能方便地与Excel,数据库等其他软件交换数据
2、LINGO的基本用法
通常一个优化模型由下列三部分所组成:
(1) 目标函数:一般表示成求某个数学表达式的最大值或最小值。
(2) 决策变量:目标函数值取决于哪些变量
(3) 约束条件:对变量附加一些条件限制(通常用等式或不等式表示)
注:LINGO默认所有决策变量都非负,因而变量非负条件可以不必输入。
LINGO的语法规定:
(1) 求目标函数的最大值或最小值分别用MAX=…或MIN=…来表示;
(2) 每个语句必须以分号";"结束,每行可以有多个语句,语句可以跨行;
(3) 变量名称必须以字母(A~Z)开头,由字母,数字(0~9)和下划线所组成,长度不超过32个字符,不区分大小写;
(4) 可以给语句加上标号,例如[OBJ] MAX= 20*X1+300*X2;
(5) 以!开头,以;号结束的语句是注释语句;
(6) 如果对变量的取值范围没有作特殊说明,则默认所有决策变量都非负;
(7) LINGO模型以语句“MODEL:”开头,以“END”结束,对于比较简单的模型,这两个语句可以省略。
模型窗口,错误信息窗口,求解状态窗口,解的报告窗口。
3、用LINGO编程语言建立模型
LINGO模型的基本组成:
(1) 集合定义部分:集合的名称,集合内的成员(组成集合的个体,元素),集合的属性(可以看成是与集合有关的变量或常量)
sets:
gd/1..6/:x,y,d;
lch/A,B/:px,py,e;
links(gd,lch):c;
endsets
gd是定义的工地集合,成员6个,x,y,d分别是该集合的属性,每个属性可看作一个一维数组(6个分量),分别表示6个工地的x,y位置坐标,6个工地每天的水泥日用量。
LINKS定义衍生集合(派生集合)
links(gd,lch):c; 定义了一个表示运输关系(线路)的集合,该集合以初始集合gd和lch为基础,称为衍生集合。c是该衍生集合的一个属性,表示某个料场到某个工地之间的运输量,可理解为一个二维数组。
衍生集合的定义语句有如下要素组成:集合的名称,对应的初始集合,集合的成员(可以省略不写明),集合的属性(可以没有)。
定义衍生集合时可以用罗列的方式将衍生集合的成员一一列出来,如果省略不写,则默认衍生集合的成员取它所对应初始集合的所有可能的组合。上述衍生集合的成员共12个。
(2) 数据初始化(数据段)
data:
x=1.25 8.75 0.5 5.75 3 7.25;
y=1.25 0.75 4.75 5 6.5 7.75;
d=3,5,4,7,6,11;
px=5,2; py=1,7;
e=20,20;
enddata
给定义的所有集合的已知属性赋初值,衍生集合的未知属性C是决策变量(12个成员),是待求未知数。
(3)目标函数和约束条件
min z = ∑∑
==
-
+
-
6 1
2
2
2
1
)
(
)
(
i
i
j
i
j
j
ij
y
py
x
px
C
⎪⎪⎩⎪⎪⎨⎧=≤==∑∑==1,2j ,6 ... 1,2,i ..61
ij 2
1ij j i i j e C d C t s min =@sum (links(i,j):c(i,j)*((px(j)-x(i))^2+(py(j)-y(i))^2)^(1/2)); @for (gd(i):@sum (lch(j):c(i,j))=d(i));
@for (lch(j):@sum (gd(i):c(i,j))<=e(j));
• @for(s:e) 该函数常用在约束条件中,表示对集合s 中的每个成员都生成一个约束
条件表达式,表达式的具体形式由参数e 描述.
• @sum(s:e) 对集合s 中的每个成员,分别得到表达式e 的值,然后返回所有这些值的
和.
4、建立LINGO/LINDO 优化模型需要注意的几个基本问题
(1) 尽量使用实数优化模型,尽量减少整数约束和整数变量的个数
(2) 尽量使用光滑优化模型,尽量避免使用非光滑函数
(3) 尽量使用线性优化模型,尽量减少非线性约束和非线性变量的个数
(4) 合理设定变量的上下界,尽可能给出变量的初始值
(5) 模型中使用的单位的数量级要适当
5、对求解结果的分析
线性规划问题的求解结果
Global optimal solution found.
Objective value: 136.2275
Total solver iterations: 1
Variable Value Reduced Cost
X( 1) 1.250000 0.000000
X( 2) 8.750000 0.000000
X( 3) 0.5000000 0.000000
X( 4) 5.750000 0.000000
X( 5) 3.000000 0.000000
X( 6) 7.250000 0.000000
Y( 1) 1.250000 0.000000
Y( 2) 0.7500000 0.000000
Y( 3) 4.750000 0.000000
Y( 4) 5.000000 0.000000
Y( 5) 6.500000 0.000000
Y( 6) 7.750000 0.000000
D( 1) 3.000000 0.000000
D( 2) 5.000000 0.000000