LINGO 软件的基本使用方法(6)

2019-03-15 22:17

则括号内的表达式优先进行计算)。 优先级 运算符 最高

#NOT# —(负号) ^ * /

+ —(减法)

#EQ# #NE# #GT# #GE# #LT# #LE# #AND# #OR# 最低 < = > 表 6

3.5 LINGO 函数一览

LINGO 中还包括相当丰富的数学函数和控制语句。在 LINGO 中建立优化模型时可以引用大量 的内部函数,这些函数以‖@‖符号打头。 1)常用的数学函数

@ABS(X) 返回变量 X 的绝对值。

@COS(X) 返回变量 X 的余弦值(X 的单位是弧度)。 @EXP(X) 返回

的值(其中 e 为自然对数的底,即 2.718281...)。

e

X

@FLOOR( X) 返回的整数部分(向最靠近 0 的方向取整)。

@LGM(X) 返回变量 X 的 gamma(伽玛)函数的自然对数值(当 X 为整数时 LGM(X) = LOG(X-1)!;当 X 不为整数时,采用线性插值得到结果)。 @LOG(X) 返回变量 X 的自然对数值。

@SIGN(X) 返回变量 X 的符号值( X < 0 时返回-1, X >= 0 时返回+1)。 @SIN(X) 返回变量 X 的正弦值(X 的单位是弧度)。 @SMAX(list ) 返回一列数(list)的最大值。 @SMIN(list ) 返回一列数(list)的最小值。

@TAN(X) 返回变量 X 的正切值(X 的单位是弧度)。 2)集合循环函数

集合循环函数的用法如下:

@function( setname [ ( set_index_list)[ | condition]] : expression_list);

其中 function 是集合函数名,有 FOR、MAX、MIN、SUM 四种; setname 是集合名; set_index_list 是集合索引列表(不需使用索引时可以省略);condition 是用逻辑表达式 描述的条件(通常含有索引,无条件时可以省略);expression_list 是一个表达式(对@FOR 函数,可以是一组表达式)。集合函数名的含义如下:

@FOR 对集合 setname 的每个元素独立地生成约束,约束由 expression_list 描述。 @MAX 返回集合 setname 上的表达式的最大值。 @MIN 返回集合 setname 上的表达式的最小值。 @SUM 返回集合 setname 上的表达式的和。

19

Page 20 3)集合处理函数

@IN( set_name, primitive_index_1 [, primitive_index_2 ...])

如 果 集 合 set_name 中 包 含 本 集 合 的 元 素 索 引 primitive_index_1 [, primitive_index_2 ...]所对应的元素,则返回 1,否则返回 0。元素索引用―&1‖、―&2‖

或@INDEX 函数等形式给出,这里―&1‖表示对应于第 1 个父集合的元素的索引值,―&2‖表示对

应于第 2 个父集合的元素的索引值。

例如,如果我们想定义一个学生集合 STUDENTS(基本集合),然后由它派生一个及格学生的 集合 PASSED 和一个不及格学生的集合 FAILED,可以如下定义: SETS:

STUDENTS / ZHAO, QIAN, SUN, LI/:; PASSED( STUDENTS) /QIAN,SUN/:;

FAILED( STUDENTS) | #NOT# @IN( PASSED, &1):; ENDSETS

又如,如果集合 C 是由集合 A,B 派生的,例如: SETS: A / 1..3/:; B / X Y Z/:;

C( A, B) / 1,X 1,Z 2,Y 3,X/:; ENDSETS

现在假设我们想判断 C 中是否包含元素(2,Y),则可以利用以下语句(对本例,C 中确实包含元

素(2,Y),所以 X=1):

X = @IN( C, @INDEX( A, 2), @INDEX( B, Y)); @INDEX( [set_name,] primitive_set_element)

给出元素 primitive_set_element 在集合 set_name 中的索引值(即顺序位置的编号)。

如 果 省 略 set_name , LINGO 按 模 型 中 定 义 的 集 合 顺 序 找 到 第 一 个 含 有 元 素

primitive_set_element 的集合,并返回索引值。如果在所有集合中均没有找到该元素,会给 出出错信息。 @WRAP(I,N)

当 I 位于区间[1, N ]内时直接返回 I;一般地,返回 J = I - K *N , 其中 J 位于区间 [1, N ], K 为整数。可见这个,此函数相当于数学上用 I 对 N 取模函数的值+1,即@WRAP(I,N)=I

(mode N)+1。此函数对 N<1 无定义。可以想到,此函数的目地之一是可以用来防止集合的索引 越界。

@SIZE (set_name)

返回数据集 set_name 中包含元素的个数。 4)变量界定函数

变量函数对变量的取值范围附加限制。共四种:

@BND(L, X, U) 限制 L <= X <= U。

@BIN(X) 限制 X 为 0 或 1。

@FREE(X) 取消对 X 的符号限制(即可取负数、0 或正数)。 @GIN(X) 限制 X 为整数。

20

Page 21 5)财务函数

@FPA(I,N) 返回如下情形下的净现值:单位时段利率为 I,连续 N 个时段支付,每个时段支 付单位费用。即@FPA(I,N) =

1 1 1

1 1 1

( ) ( ( ) ) / + = ?

= +

I I

n n N I N

@FPL(I,N) 返回如下情形下的净现值:单位时段利率为 I,第 N 个时段支付单位费用。即 @FPL(I,N)

=

+

( )

1 1 I N

6)概率函数

这里我们只是列出这些函数的简要功能,由于牵涉较多概率论和随机过程的概念,请大家参阅 有关概率论和随机过程的书籍。 @PSN(X) 标准正态分布的分布函数。

@PSL(X) 单位正态线性损失函数,即返回 MAX(0, Z-X)的期望值, 其中 Z 为标准正态随 机变量。

@PPS(A,X) 均值为 A 的 Poisson 分布的分布函数(当 X 不是整数时,采用线性插值进行计 算)。

@PPL(A,X) Poisson 分布的线性损失函数,即返回 MAX(0, Z-X)的期望值, 其中 Z 为 均值为 A 的 Poisson 随机变量。

@PBN(P,N,X) 二项分布的分布函数(当 N 和(或)X 不是整数时,采用线性插值进行计算)。 @PHG(POP,G,N,X) 超几何(Hypergeometric)分布的分布函数(当 POP,G,N 和(或) X 不是整数时,采用线性插值进行计算)。也就是说,这个就是如下概率:当总共有 POP 个球,其中 G 个是白球的,那么随机地从中取出 N 个球,白球不超过 X 个的概率。 @PEL(A,X) 当到达负荷为 A,服务系统有 X 个服务器且不允许排队时的 Erlang 损失概率。 @PEB(A,X) 当到达负荷为 A,服务系统有 X 个服务器且允许无穷排队时的 Erlang 繁忙概率。 @PFS(A,X,C) 当负荷上限为 A,顾客数为 C,平行服务器数量为 X 时,有限源的 Poisson 服务系统的等待或返修顾客数的期望值。(A 是顾客数乘以平均服务时间,再除以平均返 修时间。当 C 和(或)X 不是整数时,采用线性插值进行计算)。 @PFD(N,D,X) 自由度为 N 和 D 的 F 分布的分布函数。 @PCX(N,X) 自由度为 N 的 Chi-squared 分布的分布函数。 @PTD(N,X) 自由度为 N 的 t 分布的分布函数。

@QRAND(SEED) 返回 0 与 1 之间的拟均匀随机数(SEED 为种子,缺省时取当前计算机时间)。

该函数只能用在数据段,拟均匀随机数可以认为是―超均匀‖的随机数。 @RAND(SEED) 返回 0 与 1 之间的伪均匀随机数(SEED 为种子)。 7)文件输入输出函数

@DUAL( variable_or_row_name)

返回解答中变量的判别数(reduced cost)或约束行的对偶(影子)价格(dual prices)。 @FILE(filename)

当前模型引用其他 ASCII 码文件中的数据或文本时可以采用该语句(但不允许嵌套使用), 其中 filename 为存放数据的文件名,该文件中记录之间用―~‖分开。例如: MODEL:

21

Page 22 SETS:

MYSET / @FILE(myfile.txt) / : @FILE(myfile.txt); ENDSETS

MIN = @SUM( MYSET( I): SHIPPED( I) * COST( I)); @FOR( MYSET( I): SHIPPED( I) > NEED( I); SHIPPED( I) < SUPPLY( I));

DATA:

COST = @FILE( myfile.txt); NEED = @FILE( myfile.txt); SUPPLY = @FILE( myfile.txt); ENDDATA END

myfile.txt 文件的内容可以是如下格式: Seattle,Detroit,Chicago,Denver COST,NEED,SUPPLY,SHIPPED 12,28,15,20

1600,1800,1200,1000 1700,1900,1300,1100 @ODBC 和@OLE

分别提供 LINGO 与 ODBC 和 OLE 的接口,我们将在下章详细介绍。 @POINTER( N)

在 Windows 下使用 LINGO 的动态连接库(Dynamic Link Library,简写为 DLL) ,直接 从共享的内存中传送数据。 @RANGED( variable_or_row_name)

为了保持最优基不变,变量的费用系数或约束行的右端项允许减少的量(参见第 2 章 2.3 节敏 感性分析中的 allowable decrease)。 @RANGEU( variable_or_row_name)

为了保持最优基不变,变量的费用系数或约束行的右端项允许增加的量(参见第 2 章 2.3 节敏 感性分析中的 allowable increase)。 @STATUS()

返回 LINGO 求解模型结束后的最后状态: 0

Global Optimum (全局最优) 1

Infeasible(不可行)

22

Page 23 2

Unbounded (无界) 3

Undetermined (不确定) 4

(LINGO 中没有使用该值) 5

Infeasible or Unbounded (通常需要关闭―预处理‖选项后重新求解模型,以确 定究竟是不可行还是无界) 6

Local Optimum(全局最优) 7


LINGO 软件的基本使用方法(6).doc 将本文的Word文档下载到电脑 下载失败或者文档不完整,请联系客服人员解决!

下一篇:湿接头及横隔板模板技术交底

相关阅读
本类排行
× 注册会员免费下载(下载后可以自由复制和排版)

马上注册会员

注:下载文档有可能“只有目录或者内容不全”等情况,请下载之前注意辨别,如果您已付费且无法下载或内容有问题,请联系我们协助你处理。
微信: QQ: