Lingo学习(二)——线性规划基础、矩阵工厂

一、线性规划基础

(一)方法

① 一个线性规划中只含一个目标函数。(两个以上是多目标线性规划,Lingo无法直接解)

② 求目标函数的最大值或最小值分别用max = …或min = …来表示。

③ 以!开头,以;结束的语句是注释语句;

④ 线性规划和非线性规划的本质区别是目标函数是否线性,其余一致,故不需要区分。

但值得注意的是,非线性规划的求解十分困难,基本得不到全局最优解。  

(二)例题

某工厂有两条生产线,分别用来生产M和P两种型号的产品,利润分别为200元/个和300元/个,生产线的最大生产能力分别为每日100和120,生产线每生产一个M产品需要1个劳动日(1个工人工作8小时称为1个劳动日)进行调试、检测等工作,而每个P产品需要2个劳动日,该厂工人每天共计能提供160劳动日,假如原材料等其他条件不受限制,问应如何安排生产计划,才能使获得的利润最大?

(三)解

设两种产品的生产量分别为x1x2,则该问题的数学模型为:

目标函数:max z=200x1+300x2 

约束条件为:

x1<=100

x2<=200

x1+2*x2<=160

xi>=0,  i=1,2 

(四)程序
max = 200*x1 + 300*x2;
x1 <= 100;  
x2 <= 120;
x1 + 2*x2 <= 160;

由Lingo信息可知,运行时间依旧0秒,目标值为29000,此时x1是100,x2是30。

二、矩阵工厂

(一)矩阵工厂:生产一维矩阵

先来看看例子,不必在意其中的空格(Lingo不读取空格):

sets:                  
factory /1..6/ : a,b;  
plant /1..3/ : x,y;    
endsets                

以上程序对应知识点:

① factory和plant都是制造矩阵的工厂,但它们是两家不同的工厂。

② factory工厂后面的 /1..6/ 说明它专门生产1*6的矩阵。

   factory工厂最后面出现的a和b,都是1*6的矩阵。

③ plant工厂后面的 /1..3/ 说明它专门生产1*3的矩阵。

    plant工厂最后面出现的x和y,都是1*3的矩阵。

④ 矩阵工厂的名字factory是随便起的,工厂所生产行矩阵的名字a和b也是随便起的。

⑤ 以上这四句话,本质是定义了四个行矩阵的大小,矩阵工厂只是中介。

⑥ 生产完矩阵后,工厂和矩阵之间将脱开联系。

⑦ Lingo不是一行一行读代码的,所以用sets:和endsets表示矩阵工厂生产流程的起止。

(二) 矩阵的赋值

矩阵工厂不能只生产矩阵,还要给矩阵赋初值才行,例子如下:

sets:                             
factory /1..6/ : a,b;             
plant /1..3/ : c,x;               
endsets                           
data:                             
a = 1, 2, 3, 4, 5, 6;             
b = 6.0, 5.0, 4.0, 3.0, 2.0, 1.0;
c = 10, 20, 30;                   
enddata                           

以上程序对应以下知识点:

① 不是每个矩阵都要赋值,有些矩阵正是我们要求解的变量。

② 需要赋值的矩阵必须赋满,不能给6个元素的矩阵只赋3个数值。

③ Lingo中可以给矩阵赋整数,也可以赋小数。

④ Lingo不是一行一行读代码的,所以用data:和enddata表示矩阵赋值的起止。

 (三) 循环与求和

【例】已知模型如下,请编程求解:

【for循环】

题中约束条件:i=1,2,…,5可以利用for循环一步到位。

   @for( gc(i) : a(i)*x(i) = S );

① for循环,括起整行语句,因为S=ai*xi,i=1,2,…,5,相当于5个约束条件;

② for循环内部,先写工厂,以告诉for循环几次,之后再上接约束条件。

③ 此处的i可带可不带,甚至可以换成j、k或m等等。

④ 二维矩阵工厂出现后,同时会出现i和j,那时必须带i和j。

【sum求和】

题中约束条件,可以利用sum求和一步到位。

 @sum( gc(i) : x(i) ) = 5000;

① sum求和,不可以括起完整的约束条件,因为一般的求和的结构是这样的: x1+x2+x3+x4+x5=5000

② sum求和内部,先写工厂,以告诉sum求和几次,之后再上接约束条件。

③ 此处的i可带可不带。

④ 二维矩阵工厂出现后,同时会出现i和j,那时必须带。

【for与sum出现的标志】

① 约束条件后面有i=1,2,…,5一定在最外层套上for。

② 约束条件前面是出现求和符号å,一定在中间加上sum。

  • 【例题】

【程序】
model:                         
sets:                          
gc /1..5/ : a,x;               
endsets                        
data:                          
a = 1,2,3,4,5;                 
enddata                        
max = S;                       
@for( gc(i) : a(i)*x(i) = S );
@sum( gc(i) : x(i) ) = 5000;   
end                            

PS:使用了矩阵工厂创建矩阵后,整个程序需用model:和end包起来。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/web/44148.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Android11 MTK 状态栏添加无Sim卡图标

1、近日&#xff0c;查看测试提出的bug时&#xff0c;发现了一个问题&#xff0c;设备在未安装sim卡时&#xff0c;状态栏中不显示无sim卡的图标。 2、解决 路径&#xff1a;****\frameworks\base\packages\SystemUI\src\com\android\systemui\statusbar\phone\StatusBarSign…

01、Kerberos安全认证之原理及搭建命令使用学习笔记

文章目录 前言一、Kerberos原理1.1、数据安全防护&#xff08;kerberos所属的层次&#xff09;1.2、Kerberos介绍1.3、Kerberos名词介绍1.4、Kerberos术语1.5、Kerberos认证流程1.5.1、Kerberos流程图1.5.2、第一次通信&#xff1a;客户端与AS1.5.3、第二次通信&#xff1a;客户…

cpp使用第三方库

使用第三方库在C中进行编程是一种常见的做法&#xff0c;因为它可以让利用现成的代码来实现更复杂的功能&#xff0c;而不必从头开始编写。下面是一个示例&#xff0c;演示如何在C项目中引入并使用一个第三方库。这个例子将使用Boost库&#xff0c;它是C中广泛使用的一个库&…

60、基于浅层神经网络的数据拟合(matlab)

1、基于浅层神经网络的数据拟合的简介、原理以及matlab实现 1&#xff09;内容说明 基于浅层神经网络的数据拟合是一种常见的机器学习方法&#xff0c;用于通过输入数据来拟合一个非线性函数。这种方法通常包括一个输入层、一个或多个隐藏层和一个输出层。神经网络通过学习权…

广电日志分析系统

需求 广电集团中有若干个系统都产生日志信息&#xff0c;目前大约分布与70到80台服务器中&#xff0c;分别是windows与Linux操作系统。需要将服务器上产生的日志文件利用我们的技术进行解析 设计 每个日志工作站负责30-50个服务器的日志解析工作。可以根据实际需求进行设置&…

ENSP实现防火墙区域策略与用户管理

目录 实验拓扑与要求​编辑 交换机与防火墙接口的配置 交换机&#xff1a; 创建vlan 接口配置 防火墙配置及接口配置 防火墙IP地址配置 云配置​编辑​编辑​编辑 在浏览器上使用https协议登陆防火墙&#xff0c;并操作 访问网址&#xff1a;https://192.168.100.1:844…

51单片机嵌入式开发:9、 STC89C52RC 操作LCD1602技巧

STC89C52RC 操作LCD1602技巧 1 代码工程2 LCD1602使用2.1 LCD1602字库2.2 巧妙使用sprintf2.3 光标显示2.4 写固定长度的字符2.5 所以引入固定长度写入方式&#xff1a; 3 LCD1602操作总结 1 代码工程 承接上文&#xff0c;在原有工程基础上&#xff0c;新建关于lcd1602的c和h…

linux中如何设置多个redis进程并且设置独立密码?

在Linux中设置多个Redis进程&#xff08;实例&#xff09;并为每个实例设置独立密码&#xff0c;你需要为每个Redis实例配置不同的配置文件&#xff0c;并在这些配置文件中指定不同的端口、数据目录、密码等。Redis本身并不直接支持在配置文件中设置“密码”来阻止未授权访问&a…

ArduPilot开源飞控之AP_Mount_Backend_Serial

ArduPilot开源飞控之AP_Mount_Backend_Serial 1. 源由2. 框架设计2.1 类定义2.2 构造函数2.3 init 方法2.4 受保护成员 3. 重要方法4. 总结5. 参考资料 1. 源由 AP_Mount_Backend_Serial是AP_Mount_Backend基于串口的通信的一个扩展模版。 2. 框架设计 继承自 AP_Mount_Back…

Sentieon应用教程:本地使用-Quick_start

1、准备工作&#xff1a; License下载链接&#xff1a;http://www.sentieon.com/eula/b703e839c8c7c5b8fa73238277fd5da23a0276be54712edb46ee8f4d4f3d873fbf 软件下载地址&#xff1a; https://insvast-download.oss-cn-shanghai.aliyuncs.com/Sentieon/release/sentieon-gen…

11-《风信子》

风信子 风信子&#xff08;学名&#xff1a;Hyacinthus orientalis L.&#xff09;&#xff1a;是多年草本球根类植物&#xff0c;鳞茎卵形&#xff0c;有膜质外皮&#xff0c;皮膜颜色与花色成正相关&#xff0c;未开花时形如大蒜&#xff0c;原产地中海沿岸及小亚细亚一带&am…

【Vue】vue-element-admin组件化功能

1. 组件的封装 在vue-element-admin中&#xff0c;每个功能区域或UI元素都被封装成一个或多个Vue组件。这些组件可以是简单的按钮、输入框&#xff0c;也可以是复杂的表格、表单或页面布局。每个组件都包含了其模板&#xff08;HTML结构&#xff09;、逻辑&#xff08;JavaScr…

【论文精读】Exploring the Causality of End-to-End Autonomous Driving

背景信息 团队&#xff1a;百度 代码&#xff1a;https://github.com/bdvisl/DriveInsight 论文思想简述&#xff1a;这篇论文并不是提出SOTA模型&#xff0c;而是提出了一些评估模型的方法。 目前已有的分析方法 大语言模型。VAQ来提供解释性&#xff0c;比如DriveVLM&…

C++基础(二)

目录 1.类和对象 1.1类的定义 1.2访问限定符 1.3类域 2.实例化 2.1实例化概念 2.2对象大小 3.this指针 4.类的默认成员函数 4.1构造函数 4.2析构函数 4.5运算符重载 1.类和对象 1.1类的定义 类的定义格式 class为定义类的关键字&#xff0c;Stack为类的名字&…

7月11日学习打卡,数据结构栈

大家好呀&#xff0c;本博客目的在于记录暑假学习打卡&#xff0c;后续会整理成一个专栏&#xff0c;主要打算在暑假学习完数据结构&#xff0c;因此会发一些相关的数据结构实现的博客和一些刷的题&#xff0c;个人学习使用&#xff0c;也希望大家多多支持&#xff0c;有不足之…

dataX入门

下载dataX https://datax-opensource.oss-cn-hangzhou.aliyuncs.com/202308/datax.tar.gz 然后 下载后解压至本地某个目录&#xff0c;进入bin目录&#xff0c;即可运行同步作业&#xff1a; $ cd {YOUR_DATAX_HOME}/bin $ python datax.py {YOUR_JOB.json} 要求你有python…

vue-grid-layout详解

vue-grid-layout 教程 vue-grid-layout 是一个用于 Vue.js 的响应式拖放网格布局组件&#xff0c;允许开发者创建可调整大小、可拖放的布局&#xff0c;广泛用于仪表板、管理面板等复杂布局需求。本教程将介绍如何安装、配置和使用 vue-grid-layout。 目录 安装基本使用 布局…

怎样在 C 语言中进行类型转换?

&#x1f345;关注博主&#x1f397;️ 带你畅游技术世界&#xff0c;不错过每一次成长机会&#xff01; &#x1f4d9;C 语言百万年薪修炼课程 通俗易懂&#xff0c;深入浅出&#xff0c;匠心打磨&#xff0c;死磕细节&#xff0c;6年迭代&#xff0c;看过的人都说好。 文章目…

暑假自律日记九

7.10 &#xff08;半小时日记打卡之——暑假第九天&#xff09; 前言&#xff1a;或许是累了&#xff0c;今天的效率和进度可以说是历史最低了&#xff0c;调休了一天&#xff0c;算是歇会 日程 八点二十起床&#xff0c;在床上赖了一会 九点二十抵达逸夫楼&#xff0c;开始补…

kafka发送消息流程

配置props.put(ProducerConfig.PARTITIONER_CLASS_CONFIG, RoundRobinPartitioner.class); public Map<String,Object> producerConfigs(){Map<String,Object> props new HashMap<>();props.put(ProducerConfig.BOOTSTRAP_SERVERS_CONFIG,bootstrapServers…