LINGO的基本用法
§1.4 LINGO的运算符和函数
一、 LINGO的常用运算符. 1. 算术运算符.
^* / + -
2. 逻辑运算符.
分类
运算符
作用
#EQ#
两个运算对象相等时为真,否则为假
#NE#
两个运算对象不相等时为真,否则为假
运算对象是两个数
#GT# #GE#
左边大于右边时为真,否则为假 左边大于或等于右边时为真,否则为假
三、概率函数.
函数名
@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)
注: ① @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));
打开 打印
复制
取消
查找 匹配 括号
图示 后置 窗口 相关帮助 显示 选项 关闭所 在线
答案 设置 有窗口 帮助
文件菜单 LINGO菜单 帮助菜单 编辑菜单 窗口菜单
◆输出特殊格式文件
MPS格式文件 IBM开发的数学规划文件 标准格式
MPI格式文件 LINDO公司制定的数学规划 文件格式
◆用户基本信息
货栈
客户 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
5
2
2
8
1
4
3
试确定各货栈到各客户处的货物调运数量, 使总的运输费用 最小
解:设xij从第i个货栈到第j个客户的运货量, cij表示从第i个 货栈到第j个客户的单位货物运价, ai表示第i个货栈的 最大供货量, dj表示第j个客户的订货量 模型如下
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有两个参数:集合名称和表达式
对于“>=”不等式, 称之为剩余 (Surplus). 不等式左右两边值 相等时, 松弛和剩余的值为0; 如果约束条件无法满足, 则松弛 和剩余的值为负.
含义: 如果该生产线最大生产能力增加1, 能使目标函数值增 加50.
§1.2 了解LINGO的菜单
新建 保存 剪切 粘贴 重做 定位 求解 模型 窗口 平铺 上下文
该命令弹出一个对话框,要求 输入用户名和密码(这些信息 在用@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劳动日,假如原材料等其他条件不受限制, 问应该如何安排生产计划,才能使获得的利润最大?
#LT#
左边小于右边时为真,否则为假
#LE#
左边小于或等于右边时为真,否则为假
预算对象是逻辑值 或逻辑表达式
#NOT# #AND# #OR#
单目运算符,表示对运算对象取反(即真变假,假变真) 两个运算对象都真时为真,否则为假 两个运算对象都假时为假,否则为真
逻辑运算符优先级别:#NOT#最高, #AND#和#OR#最低
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
语句,较直观的方式描述较大规模的优化模型; (5) 将集合的概念引入编程语言,很容易将实际问题转换
为LINGO模型; (6) 能方便地与Excel、数据库等其他软件交换数据;
建模时需要注意的几个基本问题:
(1) 尽量使用实数优化模型,减少整数约束和整数变量的 个数;
(2) 尽量使用光滑优化模型,减少非光滑约束的个数; 如:尽量少地使用绝对值函数、符号函数、多个变量求最 大(或最小)值、四舍五入函数、取整函数等.
(6) 如果对变量的取值范围没有作特殊说明,则默认所有决 策变量都非负; (7) LINGO模型以语句“MODEL:”开头,以“END”结束, 对于比较简单的模型,这两句可以省略;
LINGO求解报告:
松弛或剩余
缩减成本系数 (相差值)
影子(对偶) 价格
注: ①最优解中变量的缩减成本系数值自动取零. ②约束条件中, 对于“<=”不等式, 称之为松弛 (Slack).
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的货栈集合ai和dj
WH / W1..W6 /: AI;
VD / V1..V8 /: DJ;
衍生集合的定义四要素: 集合的名称, 对应的初始集合, 集合的元素(可以省略), 集合 的属性(可以没有). 例. 定义集合,表示例3中从第i个货栈到第j个客户的运货量
解:设两种产品的生产量分别为x1和x2,则该数学模型为
【目标函数】 max z 200x1 300x2
x1 100
【约束条件】
x2 120 x1 2x2 160
x1, x2 0
再用LINGO处理……
输入LINGO如下: LINGO处理结果:
LINGO的语法规定: (1) 求目标函数的最大值和最小值分别用MAX= …或MIN= … 来表示;
◆灵敏度分析
该命令产生当前模型的灵敏度分析 报告: (1)最优解保持不变的情况下,目标
函数的系数变化范围; (2)在影子价格和缩减成本系数都
不变的前提下,约束条件右边的 常数变化范围;
例. 做下列模型的灵敏度分析
MAX=200*X1+300*X2; X1<=100; X2<=120; X1+2*X2<=160;
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结束,
这两个语句必须单独成一行;
②数据之间的逗号和空格可以替换
②如果需要严格小(大)于关系,如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)
例. 计算 2 #GT# 3 #AND# 4 #GT# 2
结果为 0(FALSE)
3. 关系运算符. 关系运算符通常用在条件表达式中,用来指定约束条件表 达式左边与右边必须满足的关系. 有以下三种: