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