Lingo是一门主要求解非线性规划数学模型的编程软件,记得最初接触Lingo是在阅读《数学建模教程》一书,该书在第五章主要讲解使用Lingo来解决优化问题,也是在那个时候认识到了Lingo的强大之处。Lingo的使用就比如解决一道简单的数学问题,而你只须要使用Lingo支持的编程规范给其提供充足的已知条件便可,以后会自动使用相关算法为您解答。为了往后更加方便的查询Lingo相关知识,因此将Lingo的基本使用在此记录。html
关于Lingo的下载及安装问题博主已作整理,可参考本篇教程 Lingo安装web
^:乘方
*:乘
/:除
+:加
-:减算法
在Lingo中,逻辑运算符主要用于集循环函数的条件表达式中,来控制在函数中哪些集成员被包含,哪些被排斥。express
符号 | 说明 |
---|---|
#and# | 且,& |
#or# | 或,|| |
#not# | 非,! |
#eq# | 等于,== |
#ne# | 不等于,!= |
#gt# | 大于,> |
#ge# | 大于等于,>= |
#lt# | 小于,< |
#le# | 小于等于,<= |
= 、<= 、 >=编程
函数 | 说明 |
---|---|
@abs(x) | 绝对值 |
@sin(x) | 正弦值,采用弧度制 |
@cos(x) | 余弦值 |
@tan(x) | 正切 |
@exp(x) | 指数,![]() |
@log(x) | 天然对数 |
@lgm(x) | gamma函数的天然对数 |
@sign(x) | x<0返回-1,不然返回返回1 |
@floor(x) | 取整 |
@smax(![]() |
取(![]() |
@smin(![]() |
取(![]() |
集循环函数用于遍历整个集,其基本语法以下:app
@function(setname[(set_index_list)[|conditional_qualifier]]:
expression_list);
@function相应于下面罗列的四个集循环函数之一;setname是要遍历的集;set_ index_list是集索引列表;conditional_qualifier是用来限制集循环函数的范围,当集循环函数遍历集的每一个成员时,LINGO都要对conditional_qualifier进行评价,若结果为真,则对该成员执行@function操做,不然跳过,继续执行下一次循环。expression_list是被应用到每一个集成员的表达式列表,当用的是@for函数时,expression_list能够包含多个表达式,其间用逗号隔开。这些表达式将被做为约束加到模型中。当使用其他的三个集循环函数时,expression_list只能有一个表达式。若是省略set_index_list,那么在expression_list中引用的全部属性的类型都是setname集。函数
@for函数用来对集中的成员造成约束。优化
例:产生序列[1,4,9,16,25]spa
sets:
nums/1..5/: x;
endsets
@for(nums(i): x(i)=i^2);
@sum函数返回遍历指定集成员的一个表达式的和.net
例:求[1,2,3,4,5,6,7]中前五个数的和
sets:
nums/1..7/: x;
endsets
@for(nums(i): x(i)=i);
s = @sum(nums(i) | i #le# 5: x(i));
这两个函数分别用于返回指定集成员的一个表达式的最大值和最小值
例:求[1,2,3,4,5,6,7,8,9,10]中前五个数的最大值,后五个数的最小值
sets:
nums/1..10/: x;
endsets
@for(nums(i): x(i)=i);
min_value = @max(nums(i) | i #le# 5: x);
max_value = @min(nums(i) | i #ge# 6: x);
该函数主要是对决策变量作附加限制,通常用于@for函数中,主要有以下四种:
函数 | 说明 |
---|---|
@bin(x) | 限制x为0或1 |
@bnd(a,x,b) | 限制x取a到b之间的值 |
@free(x) | x取实数 |
@gin(x) | x取整数 |
Lingo中还有其余大量的函数,好比金融函数、几率函数、变量界定函数,因为目前博主占时用不上,因此就暂且不记录了,待须要时再作进一步更新。