常用函数

  • 基本数学函数
  • 集合循环函数
  • 集合操作函数
  • 变量定界函数
    • 参考文献

基本数学函数

@abs(x):绝对值函数,返回x的绝对值;
@cos(x):余弦函数,返回x的余弦值(x的单位是弧度);
@exp(x):指数函数,返回 e x e^x ex的值(其中e为自然对数的底);
@floor(x):取整函数,返回x的整数部分(向最靠近0的方向取整);
@lgm(x):返回x的伽马(Gamma)函数的自然对数值(当x为整数时,lgm(x)=log(x-1);当x不为整数时,采用线性插值得到结果);
@log(x):自然对数函数,返回x的自然对数值;
@mod(x,y):模函数,返回x对y取模结果,即x除以y的余数,这里x和y应该是整数;
@pow(x,y):指数函数,返回 x y x^y xy的值。
@sign(x):符号函数,返回x的符号值(x<0时返回-1,x=0时返回0,x>0时返回+1);
@sin(x):正弦函数,返回x的正弦值(x的单位是弧度);
@smax(list):最大值函数,返回一列数(list)的最大值;
@smin(list):最小值函数,返回一列数(list)的最小值;
@sqr(x):平方函数,返回x的平方(即x*x)的值;
@sqrt(x):平方根函数,返回x的正的平方根的值;
@tan(x):正切函数,返回x的正切值(x的单位是弧度)。

集合循环函数

集合循环函数是指对集合上的元素(下标)进行循环操作的函数。一般用法如下:

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

其中:
function是集合函数名,是for,max,min,prod,sum五种之一;
setname是集合名;
set_index_list是集合索引列表(不需使用索引时可以省略);
condition是用逻辑表达式描述的过滤条件(通常含有索引,无条件时可以省略);
expression_list是一个表达式(对@for函数,可以是一组表达式);
五个集合函数名的含义如下:
@for(集合元素的循环函数):对集合setname的每个元素独立地生成表达式,表达式由expression_list描述(通常是优化问题的约束)。
@max(集合属性的最大值函数):返回集合setname上的表达式的最大值。
@min(集合属性的最小值函数):返回集合setname上的表达式的最小值。
@prod(集合属性的乘积函数):返回集合setname上的表达式的积;
@sum(集合属性的求和函数):返回集合setname上的表达式的和。

集合操作函数

集合操作函数是指对集合进行操作的函数,主要有@in,@index,@wrap,@size四种,下面分别简要介绍其一般的用法。

@index([set_name,]primitive_set_element);

这个函数给出元素primitive_set_element在集合set_name中的索引值(即按定义集合时元素出现顺序的位置编号)。如果省略集合名set_name,lingo按模型中定义的集合顺序找到第一个含有元素primitive_set_element的集合,并返回索引值。如果在所有集合中都没有找到该元素,会给出错误信息。
请注意,按照上面所说的索引值的含义,集合set_name的一个索引值是一个正整数(即对集合中一个对应元素的顺序编号),且只能位于1和集合的元素个数(即@size(set_name),该函数的含义见后面)之间,超出这个范围就没有意义了。
例如:

sets:girls/debbie,sue,alice/;boys/bob,joe,sue,fred/;
endsets

可以看到女孩和男孩中都有名为sue的小孩。这是调用函数@index(sue)将返回索引值2,这相当于@index(girls,sue),因为集合girls的定义出现在集合Boys之前。如果真的要找男孩中名为sue的小孩的索引,应该使用@index(boys,sue),这时将返回索引值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),则可以利用以下语句:

X=@in(C,@index(A,2),@index(B,Y));

对本例,这里的X既是集合B的元素,后来又对X赋值1。在lingo中这是允许的,因为前者的X是集合的元素,后者X是变量,二者逻辑上没有任何关系(除了同名外),所以不会出现混淆,更谈不上后者会冲掉前者的问题。

@wrap(I,N);

当I位于区间[1,N]内时直接返回I,一般地,返回J=I-K*N,其中J位于区间[1,N],K为整数。可见这个函数类似于数学上用I对N取模,即当@mod(I,N)>1时,@wrap(I,N)=@mod(I,N),但当@mod(I,N)=0时,@wrap(I,N)=N。此函数对N<1无定义。
此函数的目的之一是可以用来防止集合的索引值越界。这是因为前面说过:任何一个集合S的索引值只能位于1和@size(S)之间,超过这个范围就没有意义了,所以用户在编写lingo程序时,应注意避免lingo模型求解时,出现集合的索引值越界的错误。

@size(set_name);

返回数据集set_name中包含元素的个数。

变量定界函数

变量定界函数对变量的取值范围附加限制,共有以下四种函数:
@bnd(L,X,U):限制L<=X<=U。
@bin(X):限制X为0或1。
@free(X):取消对X的符号限制(即可取负数,0或正数)。
@gin(X):限制X为整数。

参考文献

谢金星,薛毅. 优化建模与LINDO/LINGO软件. 北京:清华大学出版社,2018.

Lingo学习笔记(二)——常用函数相关推荐

  1. jquery学习笔记及常用函数封装

    二.JQuery 学习笔记及常用函数封装 https://download.csdn.net/download/weixin_42530002/13087988 1.JQuery入门 (1).css选 ...

  2. DAX圣经学习笔记1 - 常用函数

    目录 一.常用函数 聚合函数 逻辑函数 信息函数 算术函数 三角函数 文本函数 一.常用函数 聚合函数 区分计数函数 Comment COUNT 数字类型 COUNTA 所有类型 COUNTBLANK ...

  3. Go 语言学习笔记(二):函数

    目录 函数 函数定义 函数签名和匿名函数 defer 闭包 概念 panic 和 recover 函数 函数是程序执行的一个基本语法结构,Go 语言的很多特性是基于函数这个基础实现的,比如命名类型的方 ...

  4. Scala2.11.7学习笔记(二)函数定义

    鲁春利的工作笔记,好记性不让烂笔头 函数定义 def 函数名(参数列表) : 返回类型 = {函数体} 说明: 返回类型默认为空(Unit,类似于Java的void): 函数体中默认最后一行为该函数的 ...

  5. Mr.J-- jQuery学习笔记(二)--核心函数jQuery对象

    核心函数 函数列表 函数说明:jQuery()    主要用于获取HTML DOM元素并将其封装为jQuery对象 jQuery(): jQuery()函数是jQuery库的最核心函数,jQuery的 ...

  6. C#学习笔记二(函数高级参数)

    1.Out参数 作用:使用Out参数主要是用于返回多个变量 示例: 1 int[] b = { 1, 2, 3, 4, 5 }; //有一个数组 2 int max; //用来接收返回的最大值 3 i ...

  7. 【Python学习笔记二】函数七十二变

    Python定义函数语法: def 函数名(参数):函数体 注意:通常用几个return 返回结果,如果方法体中没有return,默认返回 None:如果要在方法体中返回None,则写为 return ...

  8. ES6学习笔记二arrow functions 箭头函数、template string、destructuring

    接着上一篇的说. arrow functions 箭头函数 => 更便捷的函数声明 document.getElementById("click_1").onclick = ...

  9. 吴恩达《机器学习》学习笔记二——单变量线性回归

    吴恩达<机器学习>学习笔记二--单变量线性回归 一. 模型描述 二. 代价函数 1.代价函数和目标函数的引出 2.代价函数的理解(单变量) 3.代价函数的理解(两个参数) 三. 梯度下降- ...

  10. MATLAB学习笔记——二维和三维绘图

    MATLAB学习笔记--二维和三维绘图 近期练习matlab的二维和三维绘图,整理一下,以防忘记. 文章目录 MATLAB学习笔记--二维和三维绘图 一.二维绘图 1.plot命令 2.fplot 命 ...

最新文章

  1. ARP探测目标工具arping常用命令集合大学霸IT达人
  2. java list加入listview_Android ListView自动生成列表条目的实例
  3. php中的select case语句吗,VBS教程:VBScript 语句-Select Case 语句
  4. CSS系列:CSS中盒子模型
  5. 扎克伯格的中文夜:想要成功就不能放弃
  6. win7锁定计算机会断网吗,win7系统如何设置电脑定时断网
  7. 用友软件动态密码安全认证解决方案
  8. 金蝶kiss对计算机软件的要求,金蝶软件的产品适用范围分析
  9. Ubuntu下安装Hadoop
  10. 如何给单词快速加双引号
  11. 安装了java后,为什么有些jar不能执行
  12. 打印机扫描显示服务器没有响应,打印机扫描一体机能够打印却不能扫描,提示缺少WIA的驱动程序...
  13. 一键快速打开IE的Internet选项->连接->局域网设置
  14. xls与csv文件区别
  15. 手把手教你用深度学习做物体检测(二):数据标注
  16. Java返回报文有单双引号_Spring MVC 响应结果有反斜杠转义字符+双引号
  17. 秒杀Excel的动态可视化报表,不用学python,用它仅需10分钟
  18. 8086CPU有哪些寄存器组成?各有什么用途?标志寄存器的各标志位在什么情况下置位?
  19. python+openpyxl报KeyError: “There is no item named ‘[].xml‘ in the archive“
  20. Dinic算法寻找网络最大流的Java实现

热门文章

  1. 第二章 基本Bean的装载
  2. STM32中断优先级概念
  3. 算法思想之递归分治回溯
  4. oracle授权查询
  5. 【Java基础总结】类加载顺序,new关键字,访问权限修饰符与方法重载等【二】
  6. 干货 :深度学习的主流模型及应用
  7. OpenCV-Python 级联分类器训练 | 六十三
  8. C++的继承和派生(一)父类和派生类(子类)的介绍以及派生类的访问控制
  9. gdb调试,GDB调试opencore源码
  10. 「Linux-基础」CentOS8 权限管理