LINGO的入门介绍

【数学建模】技术革新——Lingo的使用超详解 Lingo是一款功能强大的数学建模和优化求解工具,广泛用于线性规划、整数规划和非线性规划等领域。其基本语法包括变量声明、常量声明、目标函数定义和约束条件设置。通过@VARIABLES和@CONSTANTS关键字声明变量和常量,使用MAX或MIN定义目标函数,并通过线性或非线性表达式设置约束条件。Lingo支持二进制变量和整数变量声明,通过@BIN和@GIN关键字实现。注释可以用!添加,以提高代码可读性。掌握这些基础知识,可以帮助用户构建并求解复杂的优化模型。 阅读详情
AI摘要

本文介绍了LINGO软件,一种强大的优化问题求解工具,适用于线性规划、非线性规划等问题。文章详细讲解了LINGO的基本语法、函数使用及实例演示,是数学建模和优化问题解决者的必备指南。

LINGO初步介绍

LINGO是用来解决优化问题的一个特别好用的软件,可以快速求解线性规划、非线性规划、线性和非线性方程组等等,是数学建模中求优化问题的解不可缺少的工具之一。

首先让我们来看一个问题:

                                                        \large max \quad z = 72x_1+64x_2 \\ \\ s.t.\left\{\begin{array}{rcl} x_1+x_2 \leq 50, \\ 12x_1+8x_2 \leq 480, \\ 3x_1 \leq 100, \\ x_1,x_2 \geq 0, \end{array}\right.

对于解决这种线性规划问题  ,可以采用 matlab中的库函数 linprog,但更方便的,还是采用 lingo编程,语法也十分简单

max=72*x1+64*x2;
x1+x2<=50;
12*x1+8*x2<=480;
3*x1<=100;

几行代码也就算出结果,当然你可能会问,代码中为什么没有限制x1 和 x2 都要大于0,这是因为LINGO 中默认所有的变量都是非负的,在LINGO 中就不需写出对应的约束。

 

LINGO基本用法

(1)LINGO 的数学规划模型包含目标函数、决策变量、约束条件三个要素。
(2)在LINGO 程序中,每一个语句都必须要用一个英文状态下的分号结束,一个语句可以分几行输入。
(3)LINGO 的注释以英文状态的!开始,必须以英文状态下的分号结束;
(4)LINGO 的变量不区分字母的大小写,必须以字母开头,可以包含数字和下划线,不超过32 个字符。
(5)LINGO 程序中,只要定义好集合后,其他语句的顺序是任意的。
(6)LINGO 中的函数以“@”开头。
(7)LINGO 程序默认所有的变量都是非负的。
(8)LINGO 程序中"<"或">"号与 "\large \leq"或 " \large \geq" 号功能相同。

 

LINGO 软件的基本语法

 

1.3.1 集合

集合部分的语法为
sets:
集合名称1/成员列表1/:属性1_1,属性1_2,…,属性1_n1;
集合名称2/成员列表2/:属性2_1,属性2_2,…,属性2_n2;
派生集合名称(集合名称1,集合名称2):属性3_1,…,属性3_n3;
endsets
例1.4
sets:
product/A B/;

machine/M N/;
week/1..2/;
allowed(product,machine,week):x;
endsets

1.3 .2 .2 数据


数据部分的语法为 数据部分的语法为 数据部分的语法为 数据部分的语法为
data: data:
属性 1= 数据列表; 数据列表; 数据列表;
属性 2= 数据列表; 数据列表; 数据列表;
enddata nddata


1.4 LINGO函数

 

1.4.1 算术运算符

^ 乘方

﹡ 乘

/ 除

﹢ 加

﹣ 减

1.4.2 逻辑运算符

在 LINGO 中,逻辑运算符主要用于集循环函数的条件表达式中,来控制在函数中哪些 集成员被包含,哪些被排斥。在创建稀疏集时用在成员资格过滤器中。 LINGO 具有9种逻辑运算符

#not# 否定该操作数的逻辑值,#not#是一个一元运算符。

#eq# 若两个运算数相等,则为 true;否则为 false。

#ne# 若两个运算符不相等,则为 true;否则为 false。

#gt# 若左边的运算符严格大于右边的运算符,则为 true;否则为 false。

#ge# 若左边的运算符大于或等于右边的运算符,则为 true;否则为 false。

#lt# 若左边的运算符严格小于右边的运算符,则为 true;否则为 false。

#le# 若左边的运算符小于或等于右边的运算符,则为 true;否则为 false。

#and# 仅当两个参数都为 true 时,结果为 true;否则为 false。

#or# 仅当两个参数都为 false 时,结果为 false;否则为 true。

1.4.4 数学函数

LINGO 提供了大量的标准数学函数

@abs(x)返回 x 的绝对值。

@sin(x)返回 x 的正弦值,x 采用弧度制。

@cos(x)返回 x 的余弦值。

@tan(x)返回 x 的正切值。

@exp(x)返回常数 e 的 x 次方。

@log(x)返回 x 的自然对数。

@lgm(x)返回 x 的 gamma 函数的自然对数。

@mod(x,y)返回 x 除以 y 的余数。

@sign(x)如果 x0 时返回 1,当 x=0 时返回 0。

@floor(x)返回 x 的整数部分。当 x>=0 时,返回不超过 x 的最大整数;当 x<0 时,返回 不低于 x 的最大整数。

@smax(x1,x2,…,xn)返回 x1,x2,…,xn 中的最大值。

@smin(x1,x2,…,xn)返回 x1,x2,…,xn 中的最小值。

 

1.4.5 变量界定函数

变量界定函数实现对变量取值范围的附加限制,共 4 种

@bin(x)限制 x 为 0 或 1;

@bnd(L,x,U)限制 L≤x≤U;

@free(x)取消对变量 x 的默认下界为 0 的限制,即 x 可以取任意实数;

@gin(x)限制 x 为整数。

在默认情况下,LINGO 规定变量是非负的,也就是说下界为 0,上界为+∞。@free 取 消了默认的下界为 0 的限制,使变量也可以取负值。@bnd 用于设定一个变量的上下界,它也 可以取消默认下界为 0 的约束。

1.4.6 集循环函数

@for:该函数用来产生对集成员的约束。

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

@min 和@max:返回指定的集成员的一个表达式的最小值或最大值。

 

例题:

以上这些都是LINGO的基本语法和函数使用的知识,接下来我用一些题目来教大家具体如何使用

                                                        \large min \quad \sqrt{x^2+y^2+z^2} \\ s.t. \left\{\begin{aligned} x+y+z=1 \\ z=x^2+y^2 \end{aligned} \right.

min=(x^2+y^2+z^2)^(1/2);
x+y+z=1;
z=x^2+y^2;
@free(x); @free(y);

 

可以看出 结果和 此时自变量的取值。

再来一个例题:

                                                   \large min \sqrt{ \sum_{i=1}^{100}x_i^2} \\ s.t. \left\{ \begin{aligned} \sum_{i=1}^{100}x_i=1, \\ x_{100}=\sum_{i=1}^{99}x_i^2, \end{aligned} \right.

代码如下:

sets:
var/1..100/:x;
endsets
min=@sqrt(@sum(var(i):x(i)^2));
@sum(var(i):x(i))=1;
x(100)=@sum(var(i)|i#le#99:x(i)^2);
@for(var(i)|i#le#99:@free(x(i)));

以上就是 LINGO 基本入门知识,以后还会继续分享! 在此感谢司守奎老师的课件和PDF!

 

 

Lingo 基本使用 LINGO是用来解决优化问题的一个特别好用的软件,可以快速求解线性规划、非线性规划、线性和非线性方程组等等,是数学建模中求优化问题的解不可缺少的工具之一(1)LINGO的数学规划模型包含目标函数、决策变量、约束条件三个要素;(2)LINGO程序中,每一个语句都必须要用一个英文状态下的分号结束,一个语句可以分几行输入;(3)LINGO的注释以英文状态的!开始,必须以英文状态下的分号结束;(4)LINGO的变量不区分字母的大小写,必须以字母开头,可以包含数字和下划线,不超过32个字符;......... 阅读详情

相关推荐

Lingo基本操作(入门)

参考up主:Lingo(1):基础篇——基本界面与解方程_哔哩哔哩_bilibili Lingo使用的是一种用于线性规划、整数规划、非线性规划的高级编程语言。适用于各种类型的优化和规划问题。 注: 1.Lingo默认所有变量都大于等于0,非负的条件不必多写。(若需要变量x小于0,可以用@free(x)解除默认限制) 2.Lingo不区分大小写。 3.一个线性规划只能含有一个目标函数。 4.“!”开头,“;”结尾为注释,例如 !我

m0_61302825的博客 8531

lingo入门教程之二 --- 集合运用

lingo中的集合用法很多,这里主要通过几个例题来进行讲解 对于每一个问题,都要先找到对应的目标函数,然后对相应值进行初始化,然后找到约束条件等进行求解 例1:SAILCO公司需要决定下四个季度的帆船生产量。下四个季度的帆船需求量分别是40条,60条,75条,25条,这些需求必须按时满足。每个季度正常的生产能力是40条帆船,每条船的生产费用为400美元。如果加班生产,每条船的生产费用为4...

breeze_blows的博客 3万+

数学建模——LINGO入门学习笔记(1)

参考资料为中国大学MOOC 西北工业大学 数学建模; 本文章为相关学习笔记; 希望对大家有所帮助;

m0_52609088的博客 2523

lingo入门

开启敏感性分析LINGO不询问是否进行敏感性分析,敏感性分析需要将来通过修改系统选项启动敏感性分析后,再调用“REPORT|RANGE”菜单命令来实现。现在同样可以把模型和结果报告保存在文件中。1.打开solver中的options选项2.找到options中将默认的改为别忘记应用3.写好代码后,按Ctrl + r即可。

qq_74289024的博客 6350

lingo入门教程之一 初识lingo

lingo对于一些线性或者非线性的规划,优化问题非常有效首先介绍一下,在lingo中运行程序时出现的页面(在工具栏点击类似靶子一样的图标便可运行)Solver status:求解器(求解程序)状态框Model Class:当前模型的类型:LP,QP,ILP,IQP,PILP,PIQP,NLP,INLP,PINLP(以I开头表示IP,以PI开头表示PIP)State...

Octal_H的博客 2791

LINGO软件入门

LINGO中的集       对实际问题建模的时候,总会遇到一群或多群相联系的对象,比如工厂、消费者群体、交通工具和雇工等等。LINGO允许把这些相联系的对象聚合成集(sets)。一旦把对象聚合成集,就可以利用集来最大限度的发挥LINGO建模语言的优势。 1、为什么使用集 集是LINGO建模语言的基础,是程序设计最强有力的基本构件。借助于集,能够用一个单一的、长的、简明的复合公式表示一系列相

69小石头的博客 3032

Lingo快速入门——基础知识详解

介绍Lingo基础知识及快速入门Lingo

m0_73173195的博客 3358

Lingo保姆级安装教程及新手快速入门指南

Lingo 18.0是一款功能强大的数学建模软件,功能齐全,建模速度快。

kstt20230206的博客 5453

LINGO使用教程(一)

LINGO是用来求解线性和非线性优化问题的简易工具。LINGO内置了一种建立最优化模型的语言,可以简便地表达大规模问题,利用LINGO高效的求解器可快速求解并分析结果。 1.LINGO快速入门 当你在windows下开始运行LINGO系统时,会得到类似下面的一个窗口: 外层是主框架窗口,包含了所有菜单命令和工具条,其它所有的窗口将被包含在主窗口之下。在主窗口内的标题为LINGO Mo...

weixin_30338497的博客 2677

Lingo软件入门【数学建模】,学好前端开发

集合模块以sets: 开头,endsets 结尾,这是固定的格式,无法更改。这之间定义的是lingo中的集合,也就是编程中的数组。集合名称/1…n/:变量1,变量2…;其中,第一个斜线前的名称表示这个集合的名称,它可以任意取名字。第一个斜线和第二个斜线中间表示集合(数组)的索引值从1到n,具体题目中n取实际的值,例如/1…3/表示数组长度是3,索引分别是1,2,3。

2401_83621384的博客 1092

2024年Lingo软件入门【数学建模】

总得来说,@sum函数有两个传参,参数1和参数2,它们的意义:参数1:设要参与累加的那个集合变量所在的集合的集合名称为A,参数1:A(i,j) (或一维集合:A(i)),这里注意,第一个参数是集合名称,不是集合变量名称!参数2:设要参与累加的那个集合的一系列集合变量的名称为B, 参数2:B(i,j). 当然了如果是单纯的加法,那么参数2只有一个集合变量B,那么参数2就是简简单单的B(i,j)而已,但如果出现积的和,需要添加一步乘法的运算。(也可能是一维的集合,那么就是B(i))

2401_84562251的博客 994

Lingo初识

明天要进行数模比赛,今天晚上看了一些lingo的教程,整理成博客,有新的内容以后会添加。Lingo作用lingo对于一些线性或者非线性的规划,优化问题非常有效,在此不做展开。Lingo基本用法实际上lingo的操作需要建立在公式上,如果事先整理好公示以及约束条件,那么只需要转化成代码即可公式非常重要!接下来放些例题例题一:max=98*x1+277*x2-x1^2-0.3*x1*x2-2*x2^2...

weixin_40362870的博客 1445

Lingo

使用Lingo初学Lingo入门Lingo使用Lingo符号Lingo变量Lingo含义Lingo问题Lingo解决 Lingo入门 Lingo使用 Lingo的基本常识 Lingo 基本界面 1.打开lingo后会弹出一个对话框,点击 Cancel 左边 的 Never Register 即可,其余内容用不到。 2.界面自动弹出名为“Lingo Model – Lingo 1”的窗口,用于书写代码。 3.以解方程的题目: x + 1 = 2 x+1=2 x+1=2为例,写完代码后,点击“红色的靶心”运

weixin_55500638的博客 1470

lingo使用笔记(仅入门)

lingo使用教程,入门级

2303_79383388的博客 2542

数学建模——LINGO入门学习笔记(2)(3)

参考资料为中国大学MOOC 西北工业大学 数学建模; 本文章为相关学习笔记; 希望对大家有所帮助;

m0_52609088的博客 655

数学建模 | 运筹学的 LINGO 软件(附 LINGO代码)

LINDO 是一种专门用于**求解数学规划问题的优化计算软件包**,版权现在由美国LINDO 系统公司(Lindo System Inc.)所拥有。LINDO 软件包的特点是**程序执行速度快,易于方便地输入、修改、求解和分析一个数学规划**(优化问题),因此 LINDO 在教学,科研和工业界得到广泛应用。有关该软件的发行版本,发行价格和其它最新信息都可以从 LINDO 系统公司的 INTERNET 网络站点 [http://www.lindo.com](http://www.lindo.com) 获取,该

尘世冰封的专栏 781

lingo快速入门

入门资料  知乎快速入门  优快云入门 自我经验  lingo中只要没有确定的值就算变量。即除了赋了确定的值以外的值都会被当作变量看待,会变化而意图找到目标最优解。lingo中可以有多个变量,如x(1) x(2)… lingo中也可以有多组变量,如x(1) x(2)… m(1) m(2)… ,本质没有区别,直接运行即可求解。 ...

少年的博客 530

别光看教程了!手把手带你用STM32F103C8T6最小系统板点亮第一个LED(附完整电路图)

本文详细介绍了如何使用STM32F103C8T6最小系统板点亮第一个LED,从硬件连接到软件开发环境搭建,再到编写和下载程序,手把手教你完成STM32入门的第一步。适合初学者快速上手STM32开发,附完整电路图和代码示例。

weixin_28678831的博客 194

Lingo简单入门

Lingo中用!表示注释,注释结束用;表示,lingo不区分大小写,运行时会自动统一装换成大写 编程步骤: 1.推算出正确的模型 2.确定描述集,定义集合 3.确定变量 4.正确写出每个式子 常用函数(lingo每个函数都必须用@强调): !max, min用于用于定义目标函数@bin(x)表示x为0或1@gin(x)表示x是整数@free(x)表示x为任意实数,因为变量默认为...

weixin_34199335的博客 2467

社工库2.0

#大题目 社工库2.0 ###环境 whoosh2.7 jieba 12306 python3.7 网上嫖来的网页模板(感谢站长之家 ###实现效果 建立的索引文件 好看的页面 更快的查找速度 ###实现过程 具体的实现过程比较简易,毕竟whoosh已经封装的很好了 第一步 建立索引并存储 schema = Schema(zhanghao=TEXT(stored=True), code=STORED, name=TEXT(stored=True, analyzer=

sdyinruichao的博客 2万+

解决mamba_ssm库安装难题:两种高效方法详解

本文详细解析了mamba_ssm库安装失败的常见原因,并提供了两种高效的解决方案。针对其依赖C++/CUDA扩展编译的特性,文章手把手指导用户通过GitHub克隆源码编译安装,或寻找匹配的预编译Wheel文件直接安装,帮助开发者彻底解决环境配置难题,顺利部署Mamba模型。

weixin_29056865的博客 553
上一篇: LaTeX大括号公式
下一篇: 用matlab和LINGO求解整数规划问题
木禾DING
博客等级 码龄8年 191粉丝 121原创
评论 3
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值