一部适合有一点点lingo编程基础的人阅读的lingo入门教程——重学lingo,发现很多遗忘的小知识,并将其整理成册——运算符、数学函数、金融函数、概率密度函数、变量定界与集操作函数

tech2025-07-25  7

一、序言

lingo是一款处理优化问题十分好用的软件。 虽然常常使用,但却许久未曾再系统的学习过,前段时间,重学MATLAB,发现了很多遗忘的知识点,今日,决定重学lingo,将易于遗忘的那些基本的语法,重新掌握到手。

二、运算符

对于运算符,大家都耳熟能详了,但是lingo中运算符的顺序,大家又知道多少呢? 下面给出(从高到低):

#not# - ^ * / + - #eq# #ne# #gt# #ge# #lt# #le# #and# #or# <= = >=(<都看做<=)(lingo中没有严格的小于,要通过加极小量来实现)

三、数学函数

基本的三角函数、指数函数、对数函数、符号函数等都不再加以说明了。 lgm(x)——返回x的gamma函数的自然对数 floor(x)——向零取整 smax(x1,x2,…,xn) smin(x1,x2,…,xn)——顾名思义,只是前面多了个s而已(我竟然以为之前没有)

四、金融函数

金融函数主要用于计算净值 @FPA(I,N)——返回后面情况下的总净现值 @FPL(I,N)——返回后面情形下的净现值

4.1净现值

你可能还不知道什么是净现值,巧了,我也不太清楚,于是我百度了一下,找到了如下的一组示例。 简单的说明一下,就是净现值是反应项目投资获利能力的一组指标。 大于0时,方案可行。 小于0时,不可行。 这个值自然是越大越好了。

五、概率函数

令人头疼的概率函数,他又来了。 算了,来吧来吧,该来的,躲不掉的。

确实是很多,非常多,而你只需浏览一遍,而不需要记住,没错,不需要记忆,有印象,知道有这么个函数,到时候需要的时候,来查阅就可以了。

告诉大家一个记忆技巧,记忆函数居然不如记忆英语要快, 概率函数除了随机数的几个之外,其余函数均由三个字母组成:

开头字母全是p——概率密度函数我们不是常用p来表示吗。 中间字母是与这个分布有关的英文符号 结尾字母常常与分布的常用参数有关

累积分布函数

5.1 @pbn(p,n,x)——二项分布的累积分布函数。

神奇的是n和x居然可以不是整数,不是整数的时候,程序会根据线性插值法来进行计算。(tql——太强了)

Binomial——大概是二项的意思。

有人常常说不知道里面的参数怎么用,各种解释也听不懂,给个图,会不会好理解一点?(感觉效果好或者不好,都可以给我留言)

5.2 @pcx(n,x)——自由度为n的卡方分布的累积分布函数。

Chi-square——大概是卡方的意思。

自由度参数n,在图片中的式子里,自由度为k。

5.3 @pfd(n,d,x)——自由度为n和d的F分布的累积分布函数。

F分布,中间字母自然是f。

我们这个求出的F分布,应该是参数未知的情形,也就是上图中的性质6,性质5可做了解,概率统计的课程学习中,常会用到这个函数。

5.4 @phg(pop,h,g)——超几何分布的累积分布函数

hypergeometric——大概是超几何的意思

注意,我们求解的累积分布。

5.5 @pps(a,x)——泊松分布(poisson)的累积分布函数

x可以不是整数,此时,依旧是采用线性插值法计算。

5.6 @ppl(a,x)——泊松分布的线性损失函数

这又是一个与泊松分布有关的函数,

它返回max(0,z-x)的期望值,其中随机变量z服从均值为a的泊松分布。

5.7 @psl(x)——单位正态线性损失函数,

这又是一个线性损失函数,

它返回max(0,z-x)的期望值,其中随机变量z服从均值为a的泊松分布。

5.8 @psn(x)——标准正态分布的累积分布函数

你以为概率分布函数到线性损失就结束了吗,最常用的正态分布可不能忘记啊。

5.9 @ptd(n,x)——自由度为n的t分布的累积分布函数

我决定不再找百科给大家解释说明了,分布写到了现在,大家也看到了现在,你我都已经没有灵魂了。。。。。。 所以,知识点就在这里,详细解释就靠大家了

不过,好消息,分布到这里就结束了,大家可以稍作休息,下面来介绍几个其他的硬核概率密度函数。 首先让我们来瞅一瞅三个与排队论有关的函数,不知道直接跳过,学习排队论之后再来看就懂了,我也只会排队论的几个简单的小模型,但下面三个函数,还是十分简单而且有用的。

5.10 @peb(a,x)——到达负荷a时,服务系统有x个服务器且允许无穷排队是的Erlang繁忙概率。

5.11 @peb(a,x)——与上一个函数的区别是,这个函数是不允许排队的繁忙概率。

5.12 @pfs(a,x,c)——当负荷上限为a,顾客数为c,平行服务器数量是x时,有限源的poisson服务系统的等待或返修顾客数的期望值。

a是顾客数乘以平均服务时间,再除以平均返修时间。

c,x可以不是整数,依旧采用插值法计算。

之后是两个随机数的产生函数

5.13 @qrand(seed)——产生(0,1)区间的拟随机数。

只允许在模型的数据部分使用,她将用拟随机数填满集属性。

这些随机数,是用分层抽样法生产的。

5.14 @rand(seed)——产生(0,1)区间的伪随机数,依赖于指定的种子。

常用法: U(k+1) = @rand( U(k) )

六、变量定界函数与集操作函数

6.1 变量定界函数

没什么好说的,常用,应当聊熟于心。

6.1.1 @bnd(L,x,U)——限制L<=x<=U

6.1.2 @free(x)——取消大于等于0的限制

6.1.3 @gin(x)—— 限制x为整型变量

6.1.4 @bin(x)—— 限制x为0-1变量

6.2 集操作函数

6.2.1 @in(集合名,元素1,…)

在集合中,返回1,否则,返回0

6.2.2 @index(集合名,元素)

集合名可以省略

6.2.3 @wrap(index,limit)

返回j=index-k*limit,类似于限制在【1,limit】区间了

6.2.4 @size(集合名)

返回元素个数

七、集合循环函数与输入输出函数

7.1 集合循环函数

@for,@max,@min,@sum,@size,@in等等,都很常用,不多说什么了。

7.2 输入和输出函数

7.2.1 @file函数

该函数从外部文件输入数据,可以放在模型的任何地方。 注意读入方式,以~结尾,作为记录结束标记,读取完最后一条记录后,lingo会关闭文件。 注意,同时打开的文件总数不能超过16个

7.2.2 @text函数

输出数据的函数,用于将数据输出值文本文件。

如果没有指定输出文件名,就会输出到标准输出设备(显示器)。

7.2.3 ole函数

从Excel中引入或者输出数据

7.2.4 @ranged(variable_or_row_name)

为了保持最优基不变,变量的费用系数或约束行的右端项允许减少的量

7.2.5 @rangeu(variable_or_row_name)

同上,不过输出允许增加的量

7.2.6 @status()

返回Lingo求解模型结束后的状态 0——GlobalOptimun 1——Infeasible 2——Unbounded 3——Undeterminded(不确定) 4——Feasible 5——InfeasibleorUnbounded(通常需要关闭预处理选项后,重新求解模型,以确定究竟是不可行还是无界) 6——LocalOptimun 7——LocallyInfeasible 8——Cutoff(目标函数的截断值被达到) 9——NumericError(遇到无定义的运算而终止)

7.2.7 @dual(variable_or_row_name)

返回变量的判别数(检验数) 或约束行的对偶(影子)价格(dualprice)

八、辅助函数

8.1 if(logical_condition,true_return,false_return)

为真,返回true_return 反之亦然

8.2 warn(‘text’,logical_condition)

为真,输出信息框。

最新回复(0)