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) :符号函数,如果 x0 返回 -1 ,否则返回 1 ; l @floor(x) :返回 x 的整数部分。当 x=0 时,返回不超过 x 的最大整数;当 x0 时,返回不低于 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 ) 如果元素在指定集中,返回 1 ;否则返回 0 。 l @index( primitive_set_element) 该函数返回在集 set_name 中原始集成员 primitive_set_element 的索引。如果 set_name 被忽略,那么 LINGO 将返回与 primitive_set_element 匹配的第一个原始集成员的索引。如果找不到,则产生一个错误。 l @wrap(index,limit) 该函数返回 j=index-k*limit ,其中 k 是一个整数,取适当值保证 j 落在区间 内。该函数相当于 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 ,那么数据就被输出到标准输出设备(大多数情形都是屏幕)。 @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 时,那么解将不可信,几乎不能用。该函数仅被用在模型的数据部分来输出数据。