LINGO学习笔记01

article/2025/9/9 8:06:45

极力推荐观看教程作者视频,不止包含知识点,同时包含随堂练习帮助你巩固知识。我自己记的笔记肯定没有视频教程讲的仔细。链接
LINGO可以建立 简单模型 和 基于集合的专业模型 两种模型。
对于LINGO,所有参数默认非负,不区分大小写。注释以 ! 开始, ; 结束。
简单模型只是由目标函数和约束条件组成。最大最小以MAX、MIN表示。
基于集合的专业模型(一般包含下面三部分)
MODEL:
SETS:
 !集合段(集合定义)
ENDSETS
DATA:
  !数据段(数据定义)
ENDDATA
  !约束段(目标函数与约束条件定义部)
END

线性规划模型的三种形式

一般形式
在这里插入图片描述
向量形式
在这里插入图片描述
矩阵形式
在这里插入图片描述
LINGO窗口。
在这里插入图片描述

查看运行结果时的几个标志

Global optimal soluion:全局最优解
Objectie alue:目标函数值
Infeasibilities:不可行性,不满足约束方程的个数,未满足的约束条件总数(最好情况为0)
Total soler iterations:迭代次数(越复杂,次数越多)
Variable:变量
Reduced Cost:各个变量的检验数
Slack or Surplus:松弛或剩余(对于约束条件中不等式的式子,小于号的表示宽松,大于的表示宽松)
Dual Price:对偶价格

线性规划解的类型:
 唯一最优解——Global Optimal Solution
 多重最优解,LINGO只会找到其中一个,且不会提示你这种情况。
 退化解,基变量取值为0的最优解(结果中包含很多0)
 无边界——Unbounded solution
 无可行解——No feasible solution

LINGO建模语言

标识符

给对象命名使用的字符串(对象包括集合、元素、常量、变量、约束(非必须))

命名规范

字母、下划线***开头,后续字符只能是***字母、数字或下划线。
最长32字符,不区分大小写。

算数运算符

符号含义
-取相反数
-减法
^乘方
*乘法
/除法
+加法

取反和减法都是用 - 号,对于弹幕运算符表示取反,双目运算符表示减法。
运算符优先级别:取反>乘方>乘法>除法>加法>减法
加()会改变次序。

逻辑运算符

运算对象是两个数含义运算规则
#EQ#相等两个运算对象相等时为真,否为假
#NE#不相等两个运算对象不相等时为真,否为假
#GT#大于左边大于右边为真,否为假
#GE#大于或等于左边大于或等于右边时为真,否为假
#LT#小于左边小于右边时Wie真,否则为假
#LE#小于或等于左边小于或等于右边时为真,否为假
运算对象必须是逻辑值或逻辑表达式含义运算规则
#NOT逻辑取反单目运算符,表示对运算对象取反,真——假,假——真
#AND逻辑与只有两个运算对象都是真,结果才真,否则为假
#OR逻辑或两个对象中有一个真就真,否则假
逻辑运算符优先级运算符
#NOT#
#EQ# #NE# #GT# #GE# #LT# #LE#
#AND# #OR#

关系运算符

运算符规则
=相等
<=小于等于
>=大于等于

LINGO中没有严格的小于、大于,在LINGO中小于被看作小于等于,大于被看作大于等于。如果非要表示小于,需要在一侧加上一个足够小的值。

常用函数

幂函数

函数名返回值数学公式
@SQR(X)返回X的平方。与X^2等价x2
@SQRT(X)返回X的正平方根。与X^0.5等价√X
@POW(X,Y)返回X的Y次方。与X^Y等价。XY

指数函数和对数函数

函数名返回值数学公式
@EXP(X)返回eX,其中e是自然常数,e=2.718281828……eX
@LOG(X)返回X的自然对数值lnX
@LOG10(X)返回X的常用对数值log10X=lgX
@LGM(X)返回X的Gamma函数的自然对数值。当X为整数时,LGM(X)=LOG(X-1)!,当X不是整数时,采用线性插值得到结果ln[(X-1)!]

如果想输入logab怎么办?logab=lnb/lna=lgb/lga

三角函数与反三角函数

函数名返回值数学公式
@SIN(X)返回X的正弦函数值,其中X的单位是弧度sinx
@COS(X)返回X的余弦函数值,其中X的单位是弧度cosx
@TAN(X)返回X的正切函数值,其中X的单位是弧度tanx
@ASIN(X)返回X的反正弦函数值,其中X的单位是弧度arcsinx
@ACOS(X)返回X的反余弦函数值,其中X的单位是弧度arccosx
@ATAN(X)返回X的反正切函数值,其中X的单位是弧度arctanx
@ATAN2(Y,X)返回Y/X的反正切函数值,其中返回值的单位是弧度arctan(y/x)

注意,如果你输入的是角度(15°),使用时需要转成弧度(15/180*3.14159265)

双曲函数与反双曲函数

函数名返回值数学公式
@SINH(X)返回X的双曲正弦函数值,其中X的单位是弧度sinhx=(eX-e-X)/0.5
@COSH(X)返回X的双曲余弦函数值,其中X的单位是弧度coshx=(eX+e-X)/0.5
@TANH(X)返回X的双曲正切函数值,其中X的单位是弧度tanhx=(eX-e-X)/(eX+e-X)
@ASIN(X)返回X的双曲反正弦函数值,其中X的单位是弧度arsinhx
@ACOSH(X)返回X的双曲反余弦函数值,其中X的单位是弧度arcoshx
@ATANH(X)返回X的双曲反正切函数值,其中X的单位是弧度artanhx

其他数学函数

函数名返回值
@ABS(X)返回X的绝对值
@SIGN(X)返回X的符号值(如果X<0,返回-1,否则,返回+1,0直接返回0)
@MOD(X,Y)返回X除以Y的余数
@FLOOR(X)返回X的整数部分(想最靠近0的方向取整)
@SMAX(X1,X2……XN)返回X1,X2……XN这若干参数的最大值
@SMIN(X1,X2……XN)返回X1,X2……XN这若干参数的最小值

变量定界函数

函数名返回值
@BIN(X)限制X为0-1变量,即X的值只能取0或1.用于0-1规划
@GIN(X)限制X只取整数。用于整数规划
@FREE(X)X为自由变量(X可取任意实数值)
@BND(L,X,U)限制X的上下界,L≤X≤U,L和U可以是负数

杂函数

@IF(logical_condition,true_result,false_result)——计算logical_condition的值,如果真返回true_result,否则返回false_result。

原始集合

例子:背包问题

给定n个物品,在每件物品重量、价值、背包最大载重已知的情况下,如何进行选择才能使装入背包的物品总价值最高。对于所有物品,在不能拆开的情况下,物品只有装与不装两个选择,就可以简化为0(不装),1(装)。这样的问题就是0-1问题。
如果只考虑重量这一约束条件就称为一维背包问题;考虑重量和容积两个约束条件就称为二维背包问题。
例:有10件货物要从甲地运送到乙地,每件货物的重量(单位:吨)和利润(单位:元)如下表所示:

物品12345678910
重量(t)6345123542
利润(元)54020018035060150280450320120

只有一辆最大载重量30t的货车来运货,所以,只能选择一部分货物运送。确定运送哪些货物,总利润最大。
分析:这是一个一维0-1背包问题。只考虑容量这一束缚条件。
引入0-1决策变量xi,1表示运,0表示不运。则10件货物有x1……x10
在这里插入图片描述
这里讲i=1 ~ 10写作集合的形式。
在这里插入图片描述
再转化为向量形式。
在这里插入图片描述
在这里插入图片描述
一般建立模型并求解的过程
 定义集合
 给常量赋值
 目标函数的表达式
 约束条件的表达
 模型求解

定义货物的集合:
集合元素可以是数字也可以是字符串。

ITEM/1 2 3 4 5 6 7 8 9 10/;!ITEM为集合名字,集合元素可以用空格、制表符或逗号隔开(显示罗列);
ITEM/1,2,3,4,5,6,7,8,9,10/;也可以这样写(显示罗列);
ITEM/1..10/;还可以这样写,表示110的整数(隐式罗列);

定义向量:
向量与集合一起定义,在LINGO中称为集合的属性(Attribute)。向量和前面集合的元素一一对应。
在这里插入图片描述
给常量赋值:
给常量赋值要在DATA段(数据段中赋值)。在数据段赋过值的就是常量,没有的就是变量。

DATA:          !数据段起始;WEGHT =6 3 4 5 1 2 3 5 4 2;
PROFIT =540 200 180 350 60 150 280 450 320 120;ENDDATA       !数据段结束;

目标函数的表达:

MAX=@SUM(ITEM(I):PROFIT(I)*X(I));

约束条件的表达:

@SUM(ITEM(I):WEIGHT(I)*X(I))<=30;

变量取值范围的约束:
xi只能是0-1变量。在这里插入图片描述
@FOR函数用于在集合的成员之间生成约束。

@FOR(ITEM(I):@BIN(X(I)));

整段程序

MODEL:
SETS:
ITEM/1 2 3 4 5 6 7 8 9 10/:WEIGHT,PROFIT,X;
ENDSETS
DATA:
WEIGHT=6 3 4 5 1 2 3 5 4 2;
PROFIT=540 200 180 350 60 150 280 450 320 120;
ENDDATA
MAX=@SUM(ITEM(I):PROFIT(I)*X(I));
@SUM(ITEM(I):WEIGHT(I)*X(I))<=30;
@FOR(ITEM(I):@BIN(X(I)));
END

最终结果
在这里插入图片描述
这是有10个x的情况下,当参数庞大的时候这样并不好查看。
工具栏点击solution按钮(前面讲过)
设置查看的参数
在这里插入图片描述
就可以单独查看某一参数。
在这里插入图片描述
还可以勾选非0,这样就只显示装的物品。
在这里插入图片描述

原始集合的语法规则

定义:通过举例全部元素所定义的集合(Primary Set)是原始集合,又称为基本集合。
通过原始集合派生的集合是派生集合。
原始集合和派生集合都在集合段中定义。
集合段以 SETS: 开始 ,以 ENDSETS 结束。
定义原始集合的方法集合名/集合的元素列表/:集合的属性列表;

集合命名

起始字符只能是字母或下划线,后续支付只能是字母、数字或下划线。
标识符最长32个字符。
标识符不区分大小写。

集合元素的命名

起始字符只能是字母或下划线,后续支付只能是字母、数字或下划线。
标识符最长32个字符。
标识符不区分大小写。
另外,集合元素可以是整数。
罗列方式:有显示罗列和隐式罗列。

显示罗列隐式罗列
将集合的没哟个元素都列出来集合元素有一定的递增规律,就可以写成起始元素…终止元素

隐式罗列的全部表示形式

格式实例集合元素
1…n1…61,2,3,4,5,6
alphM…alphNa…ha,b,b,d,e,f,g,h
stringM…stringNtruck6…truck12truck6,truck7,truck8…,truck12
dayM…dayNMON…FRIMON,TUE,WED,THU,FRI
monthM…monthNOCT…JANOCT,NOV,DEC,JAN
monthyearM…monthyearNOCT2001…JAN2002OCT2001,NOV2001,DEC2001,JAN2002

集合的属性列表

就是上面例子中后面那几个,属性之间只能用逗号分隔开。

给常量赋值的三种形式

在数据段总,有三种方法:
 每个向量单独赋初值(上面的例子)
 相同集合的属性(相同结构的向量)共同赋予初值。在这里插入图片描述

 集合与集合的属性共同赋予初值在这里插入图片描述

集合遍历函数

函数名返回值
@FOR(s:e)对集合s的每一个元素都生成一个约束条件表达式,具体约束有e描述
@SUM(s:e)对集合s中的每一个元素,计算表达式e的值,然后返回这些值的和
@MAX(s:e)对集合s中的每一个元素,计算表达式e的值,然后返回最大值
@MIN(s:e)对集合s中的每一个元素,计算表达式e的值,然后返回最小值
@PROD(s:e)对集合s中的每一个元素,计算表达式e的值,然后返回这些值的乘积

***如果集合遍历函数中只有一个集合,而且是对这个集合中所有袁术进行相同操作,可以省略其中的集合元素变量(或下标)。

@FOR(ITEM(I):@BIN(X(I)));
!可以写成;
@FOR(ITEM:@BIN(X));

派生集合

例子:运输问题

某糖果公司有三个加工厂A1、A2、A3,没听的糖果生产量分别是7吨,4吨和9吨,该公司要讲这些糖果分别运送到四个地区的门市部B1B2B3B4销售,每天的销售量分别是3吨,6吨,5吨,6吨,现在已知从每个加工厂Ai到各个销售门市部Bj之间每吨糖果的运价(单位:百元)如下表所示。该糖果厂应该如何调运糖果,在满足各门市部销售需要的情况下,使总的运费支出最少。

B1B2B3B4产量
A13113107
A219284
A3741059
销量3656

用ai(i=1,2,3)表示第i个加工厂的产量(单位:吨)
用bj(j=1,2,3,4)表示第j个门市部的销量(单位:吨)
用cij(i=1,2,3;j=1,2,3,4)表示单位运价,即从第i个加工厂向第j个门市部宋一吨糖果的价格(百元)
设决策变量xij(i=1,2,3;j=1,2,3,4)为从第i加工厂给第j门市部的糖果数量(吨)
一般形式数学模型
在这里插入图片描述
整段程序:
LINK(FACTORY,SHOP):C,X;就是派生集合。体现了两个集合之间的关系。

MODEL:
SETS:
FACTORY/1..3/:A;
SHOP/1..4/:B;
LINK(FACTORY,SHOP):C,X;
ENDSETS
DATA:
A=7 4 9;
B=3 6 5 6;
C=
3 11 3 10
1 9 2 8
7 4 10 5;
ENDDATA
MIN=@SUM(LINK(I,J):C(I,J)*X(I,J));
@FOR(FACTORY(I):@SUM(SHOP(J):X(I,J))=A(I));
@FOR(SHOP(J):@SUM(FACTORY(I):X(I,J))=B(J));
END

在这里插入图片描述

构造派生集合的方法

派生集合的名字(父集合1,父集合2,…,父集合N)[/元素列表/][:属性列表];


http://chatgpt.dhexx.cn/article/Br9KdA52.shtml

相关文章

LINGO使用教程(一)

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

搜索引擎的索引和搜索

对于网络蜘蛛技术和排序技术请参考作者其它文章[1][2]&#xff0c;这里以Google搜索引擎为例主要介绍搜索引擎的数据索引和搜索过程。 数据的索引分为三个步骤&#xff1a;网页内容的提取、词的识别、标引库的建立。 互联网上大部分信息都是以HTML格式存在&#xff0c;对于索引…

轻松打造自己的站内搜索引擎

很多个人网站的站长都希望为自己的网站建立一个站内搜索引擎&#xff0c;但一不熟悉ASP、PHP、JSP等动态开发技术&#xff0c;另外自己建立站内搜索也需要空间支持相应的动态技术&#xff0c;所以常不得已放弃。其实&#xff0c;何不借用Google打造站内搜索引擎&#xff0c;来方…

搜索引擎SEO

一、定义 提高网站浏览量而做的优化手段。 二、与SEM的对比 &#xff08;1&#xff09;SEM高投入、SEO低投入 &#xff08;2&#xff09;SEM短、效益快&#xff0c;SEO长期投入、增长慢 &#xff08;3&#xff09;新广告法颁布之后SEM广告位减少、竞争压力大 三、衡量流量…

[C++项目] Boost文档 站内搜索引擎(1): 项目背景介绍、相关技术栈、相关概念介绍...

项目背景 Boost库是C中一个非常重要的开源库. 它实现了许多C标准库中没有涉及的特性和功能, 一度成为了C标准库的拓展库. C新标准的内容, 很大一部分脱胎于Boost库中. Boost库的高质量代码 以及 提供了更多实用方便的C组件, 使得Boost库在C开发中会被高频使用 为方便开发者学…

巧用搜索引擎---如何在指定网站中搜索

子曰&#xff1a;“工欲善其事&#xff0c;必先利其器。”在平时工作和学习中&#xff0c;网络上查找各种资料是最浪费时间的。在查资料的时候搜索功能是经常要用到的&#xff0c;常规的做法是在搜索引擎中直接搜索关键词。 比如我想找一下以前写过的一篇关于通信协议的文章。…

Chrome浏览器添加自定义搜索引擎-快速进行站内搜索

在使用Chrome时&#xff0c;设置了默认搜索引擎后&#xff0c;如果要切换搜索引擎比较麻烦。下面介绍一种通过关键字快速切换Chrome搜索引擎的方法。 打开 “设置” --> “搜索引擎” --> “管理搜索引擎” 修改关键字 点击1&#xff0c;修改关键字就可以了。 设置后&a…

站内搜索SITE

有的网站是没有站内搜索框的&#xff0c;这是我们可以利用搜索引擎的站内搜索 例如&#xff0c;JAVA天堂是没有站内搜索的 Java天堂 - Java学习笔记 这是我们可以使用百度或者必应搜索引擎在浏览器地址栏 输入&#xff1a; Servlet实现文件上传&#xff0c;可多文件上传 sit…

创建自己的搜索引擎,利用google进行站内搜索

宽为限 紧用功 功夫到 滞塞通 什么是自定义搜索&#xff1f; Google自定义搜索可以为您的网站&#xff0c;博客或网站集合创建搜索引擎。您可以配置搜索引擎来搜索网页和图像。您可以调整排名&#xff0c;自定义搜索结果的外观&#xff0c;并邀请您的朋友或信任的用户来帮助您…

Google SEO 搜索中心

在公司发展还没有那么成熟的时候&#xff0c;也许你的测试网站是外网可以公开访问的&#xff0c;也许你网站中的机密图片在测试环境&#xff08;不小心上到正式环境&#xff09;却被搜索引擎无情抓取&#xff0c;以及有些内部用户才能使用的网址&#xff0c;你并不想被搜索引擎…

如何指定网站内搜索关键字(借用已有搜索引擎)

目标&#xff1a;某个网站内&#xff0c;输入关键字搜索出相关东西 处境&#xff1a;这个网站开发者自己不去写搜索算法 解决方法&#xff1a;让微软的必应搜索引擎来做这件事&#xff0c;怎么弄呢&#xff0c;就是在必应搜索引擎页面里输入&#xff1a; xx关键字 site:xx网站 …

搜索引擎搜索特定网站的方法 :site

前言 从13开始的贴吧时代&#xff0c;还记得当时在贴吧里要搜索某些特定的帖子或者关键字的时候&#xff0c;用的都是“吧内搜索”&#xff0c;但用过的人都知道&#xff0c;这个所谓的吧内搜索其实很难用&#xff0c;大家都是用关键字空格贴吧之类的办法去搜索相关的内容。我…

简易的站内搜索引擎 (万字长文!!绝对值得一看!!)

搜索引擎的实现 项目简介项目背景项目开始前开始前的准备 四个模块预处理模块索引模块搜索模块服务器模块 项目简介 这里所实现的并非如同百度、谷歌一样的全网搜索&#xff0c;我们的硬件条件达不到&#xff0c;并且技术实力也不够&#xff0c;但是我们可以按照搜索引擎的基本…

站内搜索引擎

1.什么是搜索引擎&#xff1f; 如图所示&#xff1a; 我用的是谷歌浏览器&#xff0c;但是我的搜索引擎可以跟换 。切换到bing主页 在搜索框中我们输入一段话&#xff0c;跳到一个带有搜索结果的页面如下&#xff1a; 搜索引擎的核心功能&#xff1a;查找用户输入的词/一句话 …

SecureCRT 软件完全汉化

在正常汉化包的基础上&#xff0c;删除一个菜单文件&#xff0c;然后再运行"SecureCRT_CHS.exe" 程序即可 注意&#xff1a;如果以前是英文版本&#xff0c;则需要删除菜单配置文件后才可以正常汉化。直接删除SecureCRT配置目录下的"...\Config\SCRTMenuToolbar…

secureCRT安装、破解

SecureCRT是最常用的终端仿真程序&#xff0c;简单的说就是Windows下登录UNIX或Liunx服务器主机的软件。本文讲解SecureCRT的安装、破解与使用。 下载&安装 1.从https://pan.baidu.com/s/1dGMKJF7下载 2.解压缩下载的文件&#xff0c;双击scrt736-x64.exe执行安装。 破解…

【工具】SecureCR-8.5下载、安装激活和使用教程(包含常用设置)

目录 一、安装包下载 二、安装教程 三、激活操作 四、使用教程 五、常用设置 一、安装包下载 SecureCRT8.5安装包&#xff1a; 链接&#xff1a;https://pan.baidu.com/s/1yy677I99ln_3evoHc5dMXg 提取码&#xff1a;9tyj 二、安装教程 1. 解压、双击进行安装 2. 安装进…

SecureCRT的下载、安装( 过程非常详细!!值得查看)

SecureCRT的下载、安装&#xff08; 过程非常详细&#xff01;&#xff01;值得查看&#xff09; 简单介绍下SecureCRT一、SecureCRT的下载二、SecureCRT的安装三、SecureCRT的使用 简单介绍下SecureCRT SecureCRT是一款支持SSH&#xff08;SSH1和SSH2&#xff09;的终端仿真程…

SecureCRT和SecureFX的下载和安装2022

小编在新电脑上安装SecureCRT和SecureFX&#xff0c;按照之前写的文章步骤SecureCRT和SecureFX的下载和安装2021在使用注册机SecureFX.-kg.exe安装SecureFX的时候报错了&#xff0c;提示mfc100u.dll和msvcp100.dll两个文件找不到。&#xff08;注册机keygen.exe安装SecureCRT可…

SecureCRT 64位 破解版v8.1.4及安装

securecrt 破解版是一款支持SSH1和SSH2的终端仿真程序&#xff0c;这个程序能够在windows系统中登陆UNIX或Linux的服务器主机并且还能进行管理设置&#xff0c;是一款非常强大的ssh传输软件&#xff0c;是用于连接运行包括Windows、UNIX和VMS的理想工具。并且它还有打印功能、可…