LINGO的基本用法

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
该命令弹出一个对话框,要求 输入用户名和密码(这些信息 在用@ODBC函数访问数据 库要用到)
◆选择性粘贴
该命令把Window剪贴板中 的内容插入到光标所在位置.
◆插入新对象
◆链接
修改模型内插入对象的链接 性质. ◆对象的性质
在模型中选择一个链接或嵌 入对象,用本命令可以查看和 修改这个对象的属性.
(3) 尽量使用线性优化模型,减少非线性约束和非线性变 量的个数(如x/y < 5改为x < 5y) ; (4) 合理设定变量的上下界,尽可能给出变量的初始值;
(5) 模型中使用的单位的数量级要适当(如小于103);
2. LINGO的基本用法.
例1. 某工厂有两条生产线,分别用来生产M和P两种型号的产 品,利润分别为200元/个和300元/个,生产线的最大生产 能力分别为每日100和120,生产线每生产一个M产品需要 1个劳动日(1个工人工作8小时为1个劳动日)进行调试、 检测等工作,而每个P产品需要2个劳动日,该厂工人每天 共计能提供160劳动日,假如原材料等其他条件不受限制, 问应该如何安排生产计划,才能使获得的利润最大?
注: ① @FOR是LINGO提供的内部函数,其作用是对某个集 合的所有成员分别生成一个约束表达式.
@FOR有两个参数:集合名和约束表达式 这里的集合名表示对该集合所有成员生成对应约束表达式
6
xij d j , j 1, 2, ,8;
i 1
用LINGO语句表示为:
@FOR(VD(J): @SUM(WH(I): X(I, J)) =DJ(J));
集合的名称/集合的元素/:集合的属性;
例. 定义例2的货栈集合ai和dj
WH / W1..W6 /: AI;
VD / V1..V8 /: DJ;
衍生集合的定义四要素: 集合的名称, 对应的初始集合, 集合的元素(可以省略), 集合 的属性(可以没有). 例. 定义集合,表示例3中从第i个货栈到第j个客户的运货量
(6) 如果对变量的取值范围没有作特殊说明,则默认所有决 策变量都非负; (7) LINGO模型以语句“MODEL:”开头,以“END”结束, 对于比较简单的模型,这两句可以省略;
LINGO求解报告:
松弛或剩余
缩减成本系数 (相差值)
影子(对偶) 价格
注: ①最优解中变量的缩减成本系数值自动取零. ②约束条件中, 对于“<=”不等式, 称之为松弛 (Slack).
返回值
返回X的绝对值 返回X的正弦值 返回X的余弦值 返回X的正切值 返回X的自然对数值 返回eX的值(e为自然常数,e=2.7182818……) 返回X的符号值 返回这一系列数中的最大值 返回这一系列数中的最小值 返回X的整数部分(向最靠近0的方向取整) 返回X的gamma函数的自然对数值 返回X除以Y的余数(X和Y都是整数) 返回指数XY的值(该函数可用X^Y代替) 返回X的平方值(该函数可用X^2代替) 返回X的正的平方根(该函数可用X^(1/2)代替)
解:设两种产品的生产量分别为x1和x2,则该数学模型为
【目标函数】 max z 200x1 300x2
x1 100
【约束条件】
x2 120 x1 2x2 160
x1, x2 0
再用LINGO处理……
输入LINGO如下: LINGO处理结果:
LINGO的语法规定: (1) 求目标函数的最大值和最小值分别用MAX= …或MIN= … 来表示;
打开 打印
复制
取消
查找 匹配 括号
图示 后置 窗口 相关帮助 显示 选项 关闭所 在线
答案 设置 有窗口 帮助
文件菜单 LINGO菜单 帮助菜单 编辑菜单 窗口菜单
◆输出特殊格式文件
MPS格式文件 IBM开发的数学规划文件 标准格式
MPI格式文件 LINDO公司制定的数学规划 文件格式
◆用户基本信息
LINGO的基本用法
LINGO入门 LINGO的菜单 用LINGO编程语言建立模型 LINGO的运算符和函数
第一章 LINGO的基本用法
§1.1 LINGO入门
1. LINGO的主要功能特色:
(1) 既能求解线性规划问题,也有较强的求解非线性规划 问题的能力;
(2) 输入模型简练直观; (3) 运行速度快,计算能力强; (4) 内置建模语言,提供几十个内部函数,从而能以较少
68
min z
cij xij ;
i1 j 1
8
xij ai ,i 1, 2, , 6;
j 1
6
xij d j , j 1, 2, ,8;
i 1
xij 0,,i 1, 2, , 6, j 1, 2, ,8;
1. 集合定义部分
集合是一组相关对象构成的组合 集合分为初始(基本\原始)集合和衍生(派生)集合 集合在使用之前需要预先给出定义, 初始集合的定义三要素: 集合的名称, 集合的元素, 集合的属性(可视为与该集合有关 的变量或常量). 初始集合的定义格式:
例. 计算 2 #GT# 3 #AND# 4 #GT# 2
结果为 0(FALSE)
3. 关系运算符. 关系运算符通常用在条件表达式中,用来指定约束条件表 达式左边与右边必须满足的关系. 有以下三种:
= <= >=
注:①LINGO没有单独的“<”和“>”关系,如果出现了单 个“<”和“>”,LINGO认为是省略了“=”.
◆灵敏度分析
该命令产生当前模型的灵敏度分析 报告: (1)最优解保持不变的情况下,目标
函数的系数变化范围; (2)在影子价格和缩减成本系数都
不变的前提下,约束条件右边的 常数变化范围;
例. 做下列模型的灵敏度分析
MAX=200*X1+300*X2; X1<=100; X2<=120; X1+2*X2<=160;
②如果需要严格小(大)于关系,如A严格小于B,可
以表示成:A B
这里 是一个小的正数,它的值依赖于模型中A小于B多 少才算不等.
二、数学函数.
函数名
@ABS(X) @SIN(X) @COS(X) @TAN(X) @LOG(X) @EXP(X) @SIGN(X) @SMAX(X1,X2,…,Xn) @SMIN(X1,X2,…,Xn) @FLOOR(X) @LGM(X) @MOD(X,Y) @POW(X,Y) @SQR(X) @SQRT(X)
【目标函数系数变化范围】 【约束条件右边常数的变化范围】
(不限)
注: 灵敏性分析耗费相当多的求解时间,因此当速度很关键 时,就没有必要激活它
◆生成模型的展开形式
为当前模型生成一个用代数表达式 表示的完整形式,即LINGO将所 有基于集合的表达式(目标函数和 约束条件)扩展成为等价的完全展 开的普通数学表达式模型.
◆生成图形
由模型生成图形,以矩阵形式显示 模型的系数.
◆调试
调试结果,找到充分行(Sufficient Rows)和必要行 (Necessary Rows). ◆模型统计资料
◆查看(以为本方式显示模型内容)
◆命令行窗口
主要是为用户交互地测试命令脚本 而设计.(通常不用)
◆状态窗口
[扩展求解器状态]
3. 目标函数和约束条件.
68
例2的目标函数:min z
cij xij ;
i1 j 1
用LINGO语句表示为:
MIN = @SUM(LINKS(I, J): C(I, J)*X(I, J));
注: ① @SUM是LINGO提供的内部函数,其作用是对某个 集合的所有成员,求指定表达式的和. @SUM有两个参数:集合名称和表达式
[求解器状态]
[变量] [约束] [非零系数]
[内存使用量] [已运行时间]
§1.3 用LINGO编程语言建立模型
一、 LINGO模型的基本组成.
例2.某公司有6个供货栈, 库存货物总数分别为60, 55, 51, 43, 41, 52, 现有8个客户各要一批货, 数量分别为35, 37, 22, 32, 41, 32, 43, 38. 各供货栈到8个客户处的单位货物运输价见下表
三、概率函数.
函数名
@PSN(X) @PPS(A,X) @PBN(P,N,X) @PHG(POP,G,N,X) @PFD(N,D,X) @PCX(N,X) @PTD(N,X) @RAND(SEED) @QRAND(SEED) @PEB(A,X) @PEL(A,X) @PPL(A,X) @PFS(A,X,C) @PSL(X)
② 如果表达式中参与运算的属性属于同一个集合,则 @SUM的索引可以省略. 即
MIN = @SUM(LINKS: C*X);
8
例2的约束条件:
xij ai , i 1, 2, , 6;
j 1
用LINGO语句表示为:
@FOR(WH(I): @SUM(VD(J): X(I, J))<=AI(I));
xij, 和第i个货栈到第j个客户的单位货物运价cij.
LINKS (WH, VD) :C, X;
注: 如果集合的元素省略不写, 则默认衍生集合的元素取它所 对应初始集合的所有可能组合.
2. 数据初始化. 如何给例2中的集合AI, DJ, C, X赋值?
DATA: AI = 60, 55, 51, 43, 41, 52; DJ = 35, 37, 22, 32, 41, 32, 43, 38; C = 6, 2, 6, 7, 4, 2, 5, 9 4, 9, 5, 3, 8, 5, 8, 2
(2) 每个语句必须以分号“;”结束,每行可以有多个语句,语 句可以跨行;
(3) 变量名称必须以字母(A-Z)开头,由字母、数字(0-9)和 下划线“_”组成,长度不超过32个字符,不区分大小写;
(4) 可以给语句加上标号,例如[OBJ] MAX= … ;
(5) 以“!”开头,以“;”结束的语句是注释语句;
§1.4 LINGO的运算符和函数
一、 LINGO的常用运算符. 1. 算术运算符.
^* / + -
2. 逻辑运算符.
分类
运算符
作用
#EQ#
两个运算对象相等时为真,否则为假
#NE#
两个运算对象不相等时为真,否则为假
运算对象是两个数
#GT# #GE#
左边大于右边时为真,否则为假 左边大于或等于右边时为真,否则为假
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结束,
这两个语句必须单独成一行;
②数据之间的逗号和空格可以替换
货栈
客户 V1 V2 V3 V4 V5 V6 V7 V8
W1
6
2
6
7
4
2
5
9
W2
4
9
5
3
8
5
8
2
W3
5
2
1
9
7
4
3
3
W4
7
6
7
3
9
2
7
1
W5
2
3
9
5
7
2
6
5
W6
5
wenku.baidu.com
5
2
2
8
1
4
3
试确定各货栈到各客户处的货物调运数量, 使总的运输费用 最小
解:设xij从第i个货栈到第j个客户的运货量, cij表示从第i个 货栈到第j个客户的单位货物运价, ai表示第i个货栈的 最大供货量, dj表示第j个客户的订货量 模型如下
对于“>=”不等式, 称之为剩余 (Surplus). 不等式左右两边值 相等时, 松弛和剩余的值为0; 如果约束条件无法满足, 则松弛 和剩余的值为负.
含义: 如果该生产线最大生产能力增加1, 能使目标函数值增 加50.
§1.2 了解LINGO的菜单
新建 保存 剪切 粘贴 重做 定位 求解 模型 窗口 平铺 上下文
#LT#
左边小于右边时为真,否则为假
#LE#
左边小于或等于右边时为真,否则为假
预算对象是逻辑值 或逻辑表达式
#NOT# #AND# #OR#
单目运算符,表示对运算对象取反(即真变假,假变真) 两个运算对象都真时为真,否则为假 两个运算对象都假时为假,否则为真
逻辑运算符优先级别:#NOT#最高, #AND#和#OR#最低
语句,较直观的方式描述较大规模的优化模型; (5) 将集合的概念引入编程语言,很容易将实际问题转换
为LINGO模型; (6) 能方便地与Excel、数据库等其他软件交换数据;
建模时需要注意的几个基本问题:
(1) 尽量使用实数优化模型,减少整数约束和整数变量的 个数;
(2) 尽量使用光滑优化模型,减少非光滑约束的个数; 如:尽量少地使用绝对值函数、符号函数、多个变量求最 大(或最小)值、四舍五入函数、取整函数等.
相关文档
最新文档