过程工业中调度和混合操作的优化
学习如何进行库存混合优化,以实现利润最大化,并始终如一地满足产品规格的需求。通过优化工具箱™,您可以制定您的混合优化问题,通过减少非规格混合和质量赠品,最大限度地提高炼油厂的利润,同时满足任何产品需求和原料可用性限制。
观看如何在MATLAB中使用优化工具箱和实时编辑器创建库存混合模型®.重点是汽油的优化生产,但该策略也适用于其他多产品工艺具有典型的混合工艺标准。您还将学习如何使用MATLAB app Designer创建交互式专业应用程序,而不必成为专业的软件开发人员。通过这种方式,您可以与非matlab用户共享您的工作。
你好,每个人。期待与您的交谈。正如[听不清]所提到的,我在MathWorks只有一年半的时间。我确实管理着一个非常有才华的咨询工程师团队,他们专门从事MATLAB咨询工作,主要在数据分析、机器学习api和应用程序开发领域。
我今天的一个主题是关于混合的问题。混合问题是一类你需要,比如说,为你的产品制定生产计划的问题。2022世界杯八强谁会赢?你将岩石成分混合在一起以满足特定的规格。
假设你要计划你的时间表。你想通过降低成本或最大化利润来优化某些东西。所以我们今天要讨论的是如何使你想要生产的产品的利润最大化。我们受到各种各样的限制。
你每个月只能做这么多材料。而且你只能储存。这么多。如果我讲一个具体的例子,我们会讲到。我们将讨论汽油混合。所以我们有一个问题,我们有三个等级的汽油普通,中级,高级。
就我们使用的东西而言,他们有一些我们需要满足的规范。在这个例子中是辛烷值和蒸气压。然后,我们将通过混合岩石成分来评定这些等级。在这个例子中我们有三个组成部分。
我们要做的是计算每个月的产量以及24个月内每一种汽油的库存水平,以达到最大利润。我们将同时受到生产能力和库存的限制。
在这种情况下,我们实际上知道原材料的成本是多少。假设我们在这种情况下我们有固定成本。你实际上了解市场需求。市场需求和成本都是固定的,举个例子。
复习一下从数学角度来看这是什么类型的问题?所以你所讨论的这些东西,基本上是,一个线性方程组,它基本上是,对所有分量进行混合。这属于线性规划。
MATLAB有一个工具箱。优化工具箱,它为实际解决线性规划问题提供了工作流程。现在,不要担心所有的数学运算,因为你很快就能算出来。
我们只是给了你们线性规划问题的背景知识。你有一个目标函数你想要最小化或最大化。在我们的例子中,我们要写一个等式来定义我们将为这个项目创造的利润。我们想要最大化它。
它是受约束的。在我们的问题中,我们有产品质量方面的限制。辛烷值的等级,有一些等级是蒸气压。我们也有限制,因为我们只有能力和库存来限制我们在那里能做的事情。
这就是我们要用优化工具箱里的工作流来解决这个问题的地方。优化工具箱有两个工作流,您可以使用它们来解决这类问题。一种是基于软件的方法。
这样的话,你要做的就是花大量的时间把你的问题用矩阵和向量的形式表达出来这样它就可以输入到你将要用到的求解器中。它包含在优化工具箱中。这就是基于问题解决器的工作问题工作流框架。
另一个是基于问题的工作流。在基于问题的工作流中,我们实际上要象征性地定义优化变量,以及约束条件和目标的表达式。然后我们就可以解这个了。我们有一个Simulink的表示。
然后我们用这个符号表示然后就能解决问题了。这使得在编写问题时更容易理解。它更容易预先和更容易调试。在这方面,权衡是,它确实需要更多的代码,更多的代码行。要做到这一点,使用基于求解器的方法就不是那么有效了。
但是对于我们这里的问题,它不是计算密集型的,基于问题的工作流是真正的方法。我要做的是进入MATLAB。向你们展示我们是如何通过实时脚本来解决这个问题的。你们可以对如何在MATLAB中开发问题有一个概念。
那么好吧。我们会快速看一下。我要切换到MATLAB。如果你看一下,我就在这里。这是MATLAB。对于不熟悉MATLAB的人来说,它基本上是一个集成开发环境在那里你可以用简单的方式解决非常复杂的计算问题。
我们有一个行项目,一个命令窗口,你可以在这里输入命令。我在这里展示的是一个实时脚本,可以在MATLAB中输入命令,把它们写成脚本,然后你就可以使用它们了。你的调试。保存(听不清)
然后是一个实时脚本,你也可以添加注释注释,图表,人口统计表示,来说明我们在做什么问题。这对于分享非常有用。有MATLAB许可证的同学可以把这个打印出来作为文档。
在这种情况下,我们要做的是找出这个问题的工作流程是什么。在这种情况下,我们要做的第一件事是我们需要把市场需求,产品价格,原材料价格的数据,输入到工作区中。这样我们就能解决优化问题了。
对于这个例子,我们从Excel电子表格中获取输入数据。让我们快速看看它是什么样子的。这个Excel电子表格包含了很多表格,这些表格定义了,就像这个特殊的表格定义了产品组成要求,根据八度音阶和蒸汽压等级,原材料,成分和产品价格。
我们有三种等级的汽油。还有每个月的需求量。这是一系列独立的工作表,我将在其中添加表格。我们需要将它导入到工作区中。到他们的。所以对不起。你可以在这里看到,我所做的实际上是灰色的这部分实际上是MATLAB代码。
这将执行然后导入。我可以负责那个部分。它会导入那里的数据。现在我们有了数据。我要做些检查。在导入数据进行验证时,这样做总是很好,尤其是从Excel电子表格中。
假设你在修改这个问题你在编辑它,也许你把某个表格弄乱了。这是对尺寸的最小检验。这是一个量纲检验。它运行。这里没有任何错误。这很好。我放进去的东西都没问题。
现在我们拥有的是在工作空间中,我们有这些表格定义了我们想要做的所有数据。在我们把数据输入到工作区之后下一步就是开始构架优化问题。
在优化问题中,你可以看到我们将用决策变量来表示它。这些都是通过优化工具箱提供的。首先,我们有几个变量来定义我们的不同组分,我们所拥有的原料的数量,我们所寻找的组分的质量,汽油的混合物。
然后我们要做优化变量。所以这包括——本质上,如果你考虑到这个问题,我们所做的是我们每个月为每个计划做这么多混合。我们会卖很多混和酒。我们将使用原始的组件。
这就是这些变量的定义。在这里。我用优化工具箱中的这个函数来定义这里的变量。这样我们就不用把它们所表示的所有矩阵都写出来。
我们还需要一个库存因为我们需要在这里表示库存。这将受到一些限制。你可以在变量上加上约束条件。如果你看一下这些东西。从本质上讲,你—
每种混合产品的库存按月计算。你不能。你可以让库存小于零然后上限是我们的最高存储限制在那里。这些都是由我们这里的变量定义的。运行这个,退出这个。
接下来我们要做的是,用优化的方式定义问题然后研究目标函数,也就是利润,这是我们要做的。我们来看看这个,我们有一个库存问题。
我们会用这个来创建一个对象,它会存储所有我们需要解决问题的信息。这是由优化工具箱中的一个函数创建的。我们会有客观的感觉。我们想要最大化它。我们有一个最大化的问题我们这样定义它。
然后我们需要定义目标函数,也就是利润。首先要算出利润,我们需要算出,我们要赚多少收入?我们需要知道我们要用多少材料?费用和材料?或者储存费用。
然后是目标函数,它是这个对象的一部分,它有一个性质目标函数本质上等于,收入减去原料,减去储存成本。这都是建立在我们之前做的变量上的,灯回到这里。在使销售使用方面。我们在上面定义了这些变量。
现在我们有了一个目标函数。我很快地过一遍这个工作,只是让你们感受一下里面是什么样子的。但肯定的是,下一个产品中有一个关于肥料混合的例子,非常相似。你可以通过它来更好地理解它。
还有一些约束条件。我们开始处理约束条件,现在我们已经定义了目标函数。这包括——开始。我们可以给出目标函数的表达式。
你可以看到,这是一个很大的表达式,一个很大的矩阵,包括每个月使用的材料数量,制造的材料数量,或销售的材料数量,以及每个流血的材料数量。
一旦你定义了目标函数,你就需要处理约束条件。我们需要满足几个约束条件。我们有清单。我们必须有投入库存的东西。下个月的库存,必须等于之前的库存加上产量减去销售额。所以我们必须确保做到这一点。
我们有物质平衡,我们不得不说的限制。我们生产和销售的所有东西,最终都没有创造任何材料,所以这些必须要平衡。所以我们有一个质量平衡约束。我们还有一个,很长的。
我们还有其他的限制条件——我们有最终的库存,你必须指定。你有库存限制。我们每个月只能存这么多。有限制的过程。我们每个人能做的材料就这么多每个月我们能做这么多混合物。
然后我们需要跟踪我们使用了多少材料。我们使用的材料的数量等于我们制造的数量。然后我们有组分质量的混合物,这是完全不同的一个因为这是在一个范围内。所以我们有一个最小质量度量和一个最大质量度量来设定这些东西。
所以我们知道最后,我们会得到辛烷值和蒸气压的规格,它们有范围。这些是不等式,因为它们有约束条件。我们把所有这些约束条件都加到问题中。让我们快速运行一下。结束部分。
然后我们可以,在这个问题里面,我们可以写出这个问题。你们可以去复习一下上面所有的方程。它很长。它有一个函数,你可以把它写进一个文本文件,然后在MATLAB之外看一下。如果你喜欢的话。
然后我们就可以解决这个问题了。我已经定义了优化对象。它有目标函数。它有约束条件和要使用的变量。然后运行这个。如果我们幸运的话,它会说它能解决。它很快就解决了问题。
所以它找到了一个最优解,给了你一些信息详细说明这个解是如何工作的。然后我们可以显示输出。这样你们就可以看看实际的解了。这是实际的解。这里是以表格形式显示的。
我们制造的材料数量。我们卖的材料。我们储存的材料。然后我们有一个图表,这是优化问题的结果。我们每个月需要做多少料子?我们每个月销售的材料数量。根据输入的市场需求和原材料价格来最大化我们的利润。
这让你们对如何在MATLAB中处理和解决混合优化问题有了一个快速的了解。我用一个现场脚本演示了一下。这就是基本的框架关于如何在这里建立一个例子。
所以下一个阶段可能是当你有一个问题你解决了它之后你下一步要做什么现在你需要在你的团队成员中分享这个可能有或没有MATLAB的成员?你打算怎么做?
我还是回到演示上来吧。我要讲的下一个阶段是应用程序共享。你可能会说,等等,我有我的现场脚本。为什么我想要一个应用程序或图形用户群?对于你的工作流,你可能想要一个图形UI,有几种方法。它可能会帮助你在自己的工作流程中提高效率,而不是不得不这样做。
如果你有重复的东西,不断重复做同样的事情,但你使用不同的数据,你可能需要一个用户界面。这样做起来更容易。您不必从脚本复制和粘贴错误。另一件事是,如果你想发布你的,我们稍后会讲到,把你的应用发布给那些没有MATLAB许可证但需要你的应用功能的人。
我们还会讲到在那里发布应用的不同方式。首先,我想简要介绍一下如何构建图形UI。在MATLAB中有一个集成开发环境叫做Designer。部分是基于MATLAB的。这允许你建立一个图形用户界面。
这是一个更高级的版本。你们中的一些人可能在很久以前就熟悉MATLAB了。之前有个版本叫指南。这是一种替代指南的方法,是建立按钮的方法。
当你谈论UI开发时,人们会谈论组件。组件只是轴显示的小仪表。你能做的是用设计器把组件放进去。你有很多东西可以选。然后它就会——
应用设计器的伟大之处在于,你可以把所有这些东西放进去,然后在后台有设计器,会放入所有你需要的代码让那个东西工作。所以你不需要用编程的方式去编写程序。
这些都是基于对象的现代代码,这真的有助于使它成为一个高效且易于维护的应用程序。设计你的应用程序和美术设计器的另一个关键是你可以在网页浏览器中运行它。这将允许你在MATLAB Online中运行应用程序。
并允许你使用MATLAB编译器运行包应用程序。然后用MATLAB Web Server托管它们。这样你就有了内部托管的MATLAB Web Server。然后所有使用你的应用程序的用户,就可以从网站上访问它,而不需要下载任何软件或进行任何安装。
简单地说,在2020年,当我们开始发布一个应用程序设计器过渡工具的指南时,提到了这一点。如果你有旧的指南应用,你会说,我需要保持更新。现在是考虑查看该指南、Designer转换工具并更新应用程序的好时机。所以这一点。
我将弹出我创建的应用程序并解决了这个问题。好的。我在MATLAB中。美术设计师实际上是一个设置实际发布的应用程序。你可以在app中选择app Designer,在这里。应用程序,我错过了。但实际上,我已经准备好了。
就在左边,你可以看到一个设计应用,甚至更左边。或者一直往左。
(插入式的声音)
菜单。再往左,再往左。
哦,在那儿。
是的。在这里。是的。有点难。明白了。
是的。我从来没有,不得不说这是一件自由的事情,因为我从来没有在这里调用它。我在app Designer中输入。我是命令行类型的人,所以我尝试在命令行中输入所有东西。总之,这是app Designer。
你可以在这里看到,我建立了一个图形界面来解决问题,前端来解决我们在优化工具箱中解决的问题。我想让你们了解一下
首先,我将从头构建一个新的应用程序,为您提供一个简单的示例。只是向你们展示实际的工作流是怎样的。
这里有一个很棒的教程。你可以看到这里有一些教程。这实际上是一种很好的方式,它会教你如何创建一个应用,但我首先要做的是,从一个空白的应用开始,我们工作流程的第一部分,正如我所描述的,是为什么我需要,我需要在电子表格中加载数据。
我会试着给出一个简单的例子来说明如何在这样的应用中做到这一点。所以我们讨论——实际上我选错了按钮。好了。取消了。我再来构建这个新应用程序。
我想做的是,设置一个按钮来降低电子表格。基于一个按钮。然后假设我想在表格中显示它。粘贴一个表格。app Designer的厉害之处在于,你把这些放在那里,它实际上有一个浏览器组件定义这里的这些对象。
它跟踪所有的属性和回调,诸如此类的东西。这是第一个按钮,把名字改成load。所以我们知道它在做什么。我们想做的是当我们按下按钮时,我们想让它打开一个文件对话框。然后我们可以点击我们的电子表格并加载到工作区中。
无论何时你有一个你想在那里做的动作,那叫做回叫。看看回调,这里是button foot, button pressed功能用于这个mode button。到这里,我们会添加回叫。这样做的好处是,它能让你进入代码视图。
然后说,哦,这是函数。这就是你按下按钮后执行的结果。然后我们要做的是让这个按钮被按下,我们要得到一个文件对话框。然后显示在表格中。
我们看一下,比如说,我需要一个函数来调用一个对话框。所以我要做的,就是手动进去帮忙。然后说,我需要文件对话。这有点难,因为我以前肯定做过。你可以说,我们有
你会注意到,在app Designer上点击的好处是,你真的想要使用从UI开始的东西。如果你看到UI东西,那是你想在Designer app中构建的东西以确保它是兼容的。
你可以看到有几个不同的文件。这是UI打开,打开文件对话框,加载文件,工作区。我们不需要学习工作空间,我们需要得到这个例子的文件名。我将使用uitgetfile,它将获取文件名。
我真的很想读。我是从Excel电子表格中读取的,而不是在MATLAB中。不是保存在MATLAB中的变量数学文件。我把这个复制到这个函数中。然后,该代码将进行更新。它会在那个文件的路径中抓取一个文件名。然后我要做的是加载一个电子表格。
我要回到我写的现场剧本。向上滚动到顶部。然后我们简单复制一下,这个乘积成分表。这里有一个表格函数,它读取电子表格。现在粘贴回我的app Designer中。
我需要确保现在这个变量在这里没有任何意义。复制粘贴到这里。你会在app Designer中得到各种有用的提示,关于你对文件做了什么。所以这实际上会
所以打开这个文件,然后读取它,把它放到这个变量积组成中。下一件事是,我想让它进入UI中的另一个组件。这个UI表。让我来拿吧。回到设计视图。这里有一个表,UI表。我想把数据加载到这里。
这是在组件浏览器中定义的。可以看到。uittable。所以我回到这里。放一个app这是一个对象它包含所有与我们工作的窗口相关的东西。然后我就能看到它了。它会弹出。它给了我帮助。它说,好吧。这里,我有一张桌子。
好的。我的桌子在里面。然后我想把数据加载到表中。我知道表的属性,我可以设置。我用的是这个符号。我可以把数据放进去。这就是我要重新定义这个乘积的时候。
就会说,好吧。然后把它放进去。如果你做对了,我就保存。这实际上应该将数据加载到表中。我来运行一下。我得到了我们的应用程序,它正在mat-lab中运行。最小化窗口,这样我们就能看到发生了什么。
我来点按钮。我拿我的文件。它实际上是默认的。并且只看MATLAB文件。所以我得去把所有东西都注射进去。你可以在这里设置属性。父亲也在装汽油。把它打开。然后我们可以看到我们的数据。
这只是让你们了解如何开始构建组件然后在应用程序中使用它们。在这个更大的应用中对于混合问题,我们有一个非常复杂的UI。
所有这些都被记录在这个组件中。基本上,我设计的UI有两个功能。一个是加载数据。它验证了它。它填满了这个。我们可以检查我们在做什么。然后我们可以运行数据并求解。所以请简单介绍一下这是如何运作的。
如果你看一下这个东西。我可以负担。我在另一个文件中因为我稍微改变了电子表格的格式化属性让它更兼容snap loading。总之,我喜欢这个文件。它有所有的数据。它喜欢数据格式。它做了一些基本的检查。太棒了。
我看到红灯变绿了。我可以浏览和检查那里的各种物业。然后我就可以运行模拟并解决问题。这将弹出。它告诉我们利润。就像之前一样,它把我们的图画出来了。我可以点击保存按钮,然后将它保存为结果。
这是应用的整体功能,让你们稍微了解一下这是如何构建在那里的,这些东西都是,我说过,它们都是从这里选择的对象,排列在UI配置的不同面板中。它们都在那里。
然后这里有回调,然后有一个函数。如果我在一个load东西上,有一个我能回调的按钮函数。我可以点击这个,然后移动到app Designer中的那个函数。你注意到的,不是我之前提到的,而是很多代码。
这是所有的代码,面向对象的代码,app Designer会跟踪它。你不必担心。然后你就可以知道,当我按下那个按钮时,代码执行的情况。这就是它的定义方式。
有一件事是可以的,那么这到底是做什么的呢?当我点那个按钮时,我需要执行之前所有的代码和一个实时脚本。后端做了一些工作将它变成MATLAB中的一个实际的类对象对于这个特殊的例子。
你不需要使用类对象。你可以用函数形式。但是在应用程序开发方面,使用类有一些优点,因为您可以实际定义对象。并将与该问题相关的所有数据和所有方法存储在一个对象中。
它很容易在组件之间共享。只是为了解释它是如何工作的。我快速看了一下这个类函数。这实际上是最后一个函数,它包含了脚本中根据它编写的所有代码。
它还能创建一个默认对象,将所有与客观问题相关的信息存储在数据变量和所有东西中。然后有几个方法用在他们。我只想导入问题,验证数据,然后运行数据。这就是所有的代码,它在应用程序内部执行。
就app Designer而言,一件真正的事情是拥有良好的app Designer能力将前端代码从后端代码分离出来。我们来看看。我想点击回到我们回到app Designer的那个东西。
你可以看到我在调用这些函数。这些都在那个类里面。这些是类中的方法。导入数据。验证数据。这是发生了什么。这就是所有与app Designer内部实际问题相关的代码。这些都是在应用设计师之外完成的。
你可能会问,我怎么共享这个东西上标记的数据?我做了这个叫PP的东西。它允许你在所有不同的组件之间,实际上,共享数据。它在启动函数处定义。
所以你在开始的时候有问答功能。尝试通过调用构造函数启动,来构造那个对象。这个app。pp对象可以用来,然后做所有的后退,后退和工作的问题。这只是给你们一个快速的概述
这实际上允许你,在实际的应用程序中没有那么多代码。这只是让你们快速了解一下在mat-lab和app Designer中进行应用开发。现在你有了你的应用,你会想要和那些没有许可证的人分享这个。
下一步该怎么做呢?我们来看一下,回到我的幻灯片。你可以做的是,你可以分享你的圈,我会用MATLAB Web Server展示你的工作。你可以让你的应用作为交互式web应用运行。对实际使用它的用户没有授权。不安装的权利。
所以你买了那个网络应用服务器。你把你的申请贴上去。然后你内部的用户,他们可以访问那个服务器,然后在浏览器中使用那个应用程序。我会向你们展示如何进入那个工作流程。
首先,你开发你的应用,我们已经讨论过了,app Designer。然后你可以用MATLAB编译器打包你的应用程序。你有几个选择。最常见的是——如果你想做一个真正独立的应用程序,你可以做app使用应用程序编译器数据独立可执行。
但是没有MATLAB的用户也可以执行这个功能。你还可以做一个web应用编译器。这是MATLAB中的另一个应用。然后得到一个CTF文件,它实际上是由web应用服务器获取的。然后在浏览器中运行它。
所以你通过。然后你可以一个人站在那里。在上面安装一个网络应用程序。让我快速看一下。我可以给你展示一个演示,或者我们的特定应用,这里是实际的应用,它正在设计。这是在网页浏览器里面。
它实际上是在Chrome上运行的。它由矩阵中的某个东西承载。所以我有内部通道。这是一些。它具有原始问题的所有功能。我可以加载selected file。
在这种情况下,我可以加载。我还有另外一个关于制造肥料的例子。我加载这个,你可以看到这里有一些不同的绘图。我把它放进去。它就在那里。我可以解这个问题。然后我们就得到了解即利润是多少生产计划是多少。而且还能把那些拿出来。然后下载这些结果。
这样我就有了桌面应用的功能并在浏览器中运行。所以在你的组织内部分享这些信息是很容易的。需要这样做的用户。的市场情况。这就是如何构建网页应用的总体总结。
我想利用这个时间,在演讲结束的时候我想说我有一个顾问团队,他们要开发专业的应用程序。我们做各种各样的行业和应用。所以我们期待你有任何
我们可以在那里做非常复杂的应用。如果你需要帮助以专业的方式构建复杂的应用程序,我的团队随时待命。如果你有关于分析和数据分析的问题,我也可以解决。
谢谢你的时间。这里有一些额外的信息,你们可以看看。谢谢你!
相关产品2022世界杯八强谁会赢?
了解更多
您也可以从以下列表中选择网站:
如何获得最佳的网站性能
选择中国网站(中文或英文)以获得最佳的网站表现。其他MathWorks国家网站没有针对从您的位置访问进行优化。