Lingo基本操作

Lingo基本操作

@

前言

Lingo是一门主要求解非线性规划数学模型的编程软件,记得最初接触Lingo是在阅读《数学建模教程》一书,该书在第五章主要讲解使用Lingo来解决优化问题,也是在那个时候认识到了Lingo的强大之处。Lingo的使用就好比解决一道简单的数学问题,而你只需要使用Lingo支持的编程规范给其提供充足的已知条件即可,之后会自动使用相关算法为您解答。为了日后更加方便的查询Lingo相关知识,所以将Lingo的基本使用在此记录。

关于Lingo的下载及安装问题博主已做整理,可参考本篇教程 Lingo安装

一、Lingo基本运算符

1.1 算术运算符

^:乘方
*:乘
/:除
+:加
-:减

1.2 逻辑运算符

在Lingo中,逻辑运算符主要用于集循环函数的条件表达式中,来控制在函数中哪些集成员被包含,哪些被排斥。

符号说明
#and#且,&
#or#或,||
#not#非,!
#eq#等于,==
#ne#不等于,!=
#gt#大于,>
#ge#大于等于,>=
#lt#小于,<
#le#小于等于,<=

1.3 关系运算符

= 、<= 、 >=

二、函数

2.1 标准数学函数

函数说明
@abs(x)绝对值
@sin(x)正弦值,采用弧度制
@cos(x)余弦值
@tan(x)正切
@exp(x)指数,$e^x$
@log(x)自然对数
@lgm(x)gamma函数的自然对数
@sign(x)x<0返回-1,否则返回返回1
@floor(x)取整
@smax($x_1,x_2,\cdots,x_n$)取($x_1,x_2,\cdots,x_n$) 中的最大值
@smin($x_1,x_2,\cdots,x_n$)取($x_1,x_2,\cdots,x_n$) 中的最小值

2.2 集循环函数

集循环函数用于遍历整个集,其基本语法如下:

@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集。

2.2.1 @for

@for函数用来对集中的成员形成约束。

例:产生序列[1,4,9,16,25]

sets:
nums/1..5/: x;
endsets

@for(nums(i): x(i)=i^2);
f11f3a292df5e0fede20f83e516034a85edf72d0.jpg
2.2.2 @sum

@sum函数返回遍历指定集成员的一个表达式的和

例:求[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));
91529822720e0cf339223ec40746f21fbe09aa3c.jpg
2.2.3 @max,@min

这两个函数分别用于返回指定集成员的一个表达式的最大值和最小值

例:求[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);
cdbf6c81800a19d8eb24f93a3efa828ba61e46ed.jpg
2.2.4 变量界定函数

该函数主要是对决策变量做附加限制,一般用于@for函数中,主要有如下四种:

函数说明
@bin(x)限制x为0或1
@bnd(a,x,b)限制x取a到b之间的值
@free(x)x取实数
@gin(x)x取整数
2.2.5 说明

Lingo中还有其他大量的函数,比如金融函数、概率函数、变量界定函数,由于目前博主占时用不上,所以就暂且不记录了,待需要时再做进一步更新。

三、待更新

转载于:https://www.cnblogs.com/LiT-26647879-510087153/p/9721057.html

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
1.LINGO 10.0 最显著的新特征在于增强了用LINGO 编程的能力。这主要包括: (1) 程序流程的控制 在 LINGO 9.0 及更早的版本的计算段(CALC)中,控制程序流程的只有一种语句,即 集合循环函数@FOR 引导的语句,此外所有计算段中的语句是顺序执行的。LINGO10.0 在 计算段中增加了控制程序流程的语句,主要包括条件分支控制(@IFC 或@IFC/@ELSE 语 句)、条件循环控制(@WHILE 语句)、循环跳出控制(@BREAK 语句)、程序暂停控制 (@PAUSE 语句)以及程序终止控制(@STOP 语句)。 (2) 子模型(SUBMODEL) 在 LINGO 9.0 及更早的版本中,在每个LINGO 模型窗口中只允许有一个优化模型,可 以称为主模型(MAIN MODEL)。在LINGO 10.0 中,每个LINGO 模型窗口中除了主模型 外,用户还可以定义子模型(SUBMODEL)。子模型可以在主模型的计算段中被调用,这就 进一步增强了LINGO 的编程能力。相应的新增函数还包括@SOLVE、@GEN、@PIC、 @SMPI、@RELEASE 等。 (3) 其他新增函数 LINGO10.0 增加了输出函数@TABLE,可以更方便地以格式化的表格形式输出数据; 新增了数学函数@NORMSINV,即标准正态分布的分布函数的逆函数;新增了缺省输出设 备(文件)的重定义函数@DIVERT;新增了参数设置函数@SET 和@APISET 等。 2.对LINGO 内部采用的一些求解程序(如混合整数规划、非线性优化和全局优化求 解程序,包括一些相应的选项)的功能进行了完善和改进,使求解过程更快速、更可靠,对 模型进行调试的能力和对模型错误进行更准确定位的能力也得到了进一步增强。 3.增加了对一些新的软硬件的支持,如支持64 位运算和更大的内存等,以及支持Java JNI 接口技术,新的@ODBC 函数支持Microsoft SQL Server 等。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值