|||
1. 数学函数
l @abs(x):返回x的绝对值;
l @sin(x):返回x的正弦值,用弧度值;
l @cos(x):返回x的余弦值;
l @tan(x):返回x的正切值;
l @exp(x):返回常数e的x次方;
l @log(x):返回x的自然对数;
l @lgm(x):返回x的Gamma函数的自然对数;
l @sign(x):符号函数,如果x<0返回-1,否则返回1;
l @floor(x):返回x的整数部分。当x>=0时,返回不超过x的最大整数;当x<0时,返回不低于x的最大整数;
l @smax(x):返回x1...xn中的最大值;
l @smin(x):返回x1...xn中的最小值;
l @sqr(x):平方函数,返回x的平方的值;
l @sqrt(x):平方根函数,返回x的正的平方根的值;
l @pow(x,y):指数函数,返回x的y次方的值;
l @mod(x,y):模函数,返回x对y取模的结果,既x除以y的余数,这里x和y应该是整数。
2. 集合操作函数
l @in(set_name,primitive_index_1 [,primitive_index_2,…])
如果元素在指定集中,返回1;否则返回0。
l @index([set_name,] primitive_set_element)
该函数返回在集set_name中原始集成员primitive_set_element的索引。如果set_name被忽略,那么LINGO将返回与primitive_set_element匹配的第一个原始集成员的索引。如果找不到,则产生一个错误。
l @wrap(index,limit)
该函数返回j=index-k*limit,其中k是一个整数,取适当值保证j落在区间[1,limit]内。该函数相当于index模limit再加1。该函数在循环、多阶段计划编制中特别有用。
l @size(set_name)
该函数返回集set_name的成员个数。在模型中明确给出集大小时最好使用该函数。它的使用使模型更加数据中立,集大小改变时也更易维护。
3. 集合循环函数
l @for:该函数用来产生对集成员的约束。基于建模语言的标量需要显式输入每个约束,不过@for函数允许只输入一个约束,然后LINGO自动产生每个集成员的约束。
l @sum:该函数返回遍历指定的集成员的一个表达式的和。
l @min和@max:返回指定的集成员的一个表达式的最小值或最大值。
4. 变量界定函数
l @bnd(L,x,U):限制L<=X<=U。注意LINGO中没有与LINDO命令SLB,SUB类似的函数@SLB和@SUB;
l @Bin(x):限制x为0或1;
l @Free(x):取消对x的符号限制(即可取负数、0或正数);
l @Gin(x):限制x为正数。
5. 金融函数
l @fpa(I,n):返回如下情形的净现值:单位时段利率为I,连续n个时段支付,每个时段支付单位费用。若每个时段支付x单位的费用,则净现值可用x乘以@fpa(I,n)算得。
l @fpl(I,n):返回净现值。
6. 概率函数
l @pbn(p,n,x):二项分布的累积分布函数。当n和(或)x不是整数时,用线性插值法进行计算。
l @pcx(n,x):自由度为n的χ2分布的累积分布函数。
l @peb(a,x):当到达负荷为a,服务系统有x个服务器且允许无穷排队时的Erlang繁忙概率。
l @pel(a,x):当到达负荷为a,服务系统有x个服务器且不允许排队时的Erlang繁忙概率。
l @pfd(n,d,x):自由度为n和d的F分布的累积分布函数。
l @pfs(a,x,c):当负荷上限为a,顾客数为c,平行服务器数量为x时,有限源的Poisson服务系统的等待或返修顾客数的期望值。a是顾客数乘以平均服务时间,再除以平均返修时间。当c和(或)x不是整数时,采用线性插值进行计算。
l @phg(pop,g,n,x):超几何(Hypergeometric)分布的累积分布函数。pop表示产品总数,g是正品数。从所有产品中任意取出n(n≤pop)件。pop,g,n和x都可以是非整数,这时采用线性插值进行计算。
l @ppl(a,x):Poisson分布的线性损失函数,即返回max(0,z-x)的期望值,其中随机变量z服从均值为a的Poisson分布。
l @pps(a,x):均值为a的Poisson分布的累积分布函数。当x不是整数时,采用线性插值进行计算。
l @psl(x):单位正态线性损失函数,即返回max(0,z-x)的期望值,其中随机变量z服从标准正态分布。
l @psn(x):标准正态分布的累积分布函数。
l @ptd(n,x):自由度为n的t分布的累积分布函数。
l @qrand(seed):产生服从(0,1)区间的拟随机数。@qrand只允许在模型的数据部分使用,它将用拟随机数填满集属性。通常,声明一个m×n的二维表,m表示运行实验的次数,n表示每次实验所需的随机数的个数。在行内,随机数是独立分布的;在行间,随机数是非常均匀的。这些随机数是用“分层取样”的方法产生的。
7. 输入和输出函数
输入和输出函数可以把模型和外部数据比如文本文件、数据库和电子表格等连接起来。
l @file函数:该函数用从外部文件中输入数据,可以放在模型中任何地方。该函数的语法格式为@file(‘filename’)。这里filename是文件名,可以采用相对路径和绝对路径两种表示方式。@file函数对同一文件的两种表示方式的处理和对两个不同的文件处理是一样的,这一点必须注意。
l @text函数:该函数被用在数据部分用来把解输出至文本文件中。它可以输出集成员和集属性值。其语法为@text(['filename']),这里filename是文件名,可以采用相对路径和绝对路径两种表示方式。如果忽略filename,那么数据就被输出到标准输出设备(大多数情形都是屏幕)。@text函数仅能出现在模型数据部分的一条语句的左边,右边是集名(用来输出该集的所有成员名)或集属性名(用来输出该集属性的值)。我们把用接口函数产生输出的数据声明称为输出操作。输出操作仅当求解器求解完模型后才执行,执行次序取决于其在模型中出现的先后。
l @ole函数:@OLE是从EXCEL中引入或输出数据的接口函数,它是基于传输的OLE技术。OLE传输直接在内存中传输数据,并不借助于中间文件。当使用@OLE时,LINGO先装载EXCEL,再通知EXCEL装载指定的电子数据表,最后从电子数据表中获得Ranges。为了使用OLE函数,必须有EXCEL5及其以上版本。OLE函数可在数据部分和初始部分引入数据。@OLE可以同时读集成员和集属性,集成员最好用文本格式,集属性最好用数值格式。原始集每个集成员需要一个单元(cell),而对于n元的派生集每个集成员需要n个单元,这里第一行的n个单元对应派生集的第一个集成员,第二行的n个单元对应派生集的第二个集成员,依此类推。@OLE只能读一维或二维的Ranges(在单个的EXCEL工作表(sheet)中),但不能读间断的或三维的Ranges。Ranges是自左而右、自上而下来读。
l @ranged(variable_or_row_name):为了保持最优基不变,变量的费用系数或约束行的右端项允许减少的量。
l @rangeu(variable_or_row_name):为了保持最优基不变,变量的费用系数或约束行的右端项允许增加的量。
l @status():返回LINGO求解模型结束后的状态:
0 Global Optimum(全局最优)
1 Infeasible(不可行)
2 Unbounded(无界)
3 Undetermined(不确定)
4 Feasible(可行)
5 Infeasible or Unbounded(通常需要关闭“预处理”选项后重新求解模型,以确定模型究竟是不可行还是无界)
6 Local Optimum(局部最优)
7 Locally Infeasible(局部不可行,尽管可行解可能存在,但是LINGO并没有找到一个)
8 Cutoff(目标函数的截断值被达到)
9 Numeric Error(求解器因在某约束中遇到无定义的算术运算而停止)
通常,如果返回值不是0、4或6时,那么解将不可信,几乎不能用。该函数仅被用在模型的数据部分来输出数据。
Archiver|手机版|科学网 ( 京ICP备07017567号-12 )
GMT+8, 2024-11-1 09:27
Powered by ScienceNet.cn
Copyright © 2007- 中国科学报社