2.2.4是目前最新的版本,其中有许多有趣的改进,我们不做一一详解,本文主要将焦点集中在新的实验类型:优化实验和优化使用重复实验。我们将逐步分解如何将模型上传到AnyLogic Cloud并运行这些新实验。
主要内容:
优化实验
从AnyLogic Cloud产品推出之初,我们就迫切希望能够支持优化实验。2017年,AnyLogic Cloud首次发布时,用户可以在新建实验菜单中选择“优化实验”,然后出现“即将推出”的消息。当时,我们认为推出它并不会花很长时间。
但这种实验类型可能是最复杂的,因为模型运行结果传递给优化器后,优化器需要根据已经执行的运行结果生成下一组模型输入值。由于AnyLogic Cloud的分布式特性,其中每个模型运行都在单独的安全空间中进行,因此事情变得特别复杂。通过这种方式,优化器不能嵌入到模型本身(如AnyLogic桌面版);它也应该是一个单独的服务。
为了尝试实施这个实验,我们对市场上许多不同的解决方案进行了大量的研究和开发。不幸的是,由于黑盒优化结果不佳、性能不足和其他问题,许多方案被否决。在某种程度上,我们结束了我们的研发,并从“新建实验”菜单中删除了“优化实验”。
想法变成了现实
时间快进到2023年,我们在全新的AnyLogic 8和AnyLogic Cloud团队的支持下再次出发。AnyLogic 8和Cloud使用相同的优化模块,这应该是可互操作的,但其中仍然存在许多令人兴奋的挑战。
我们是否拥有足够的现有机制(如输入部件和输出图表)去执行优化实验?我们是否应该调整负载平衡以获得更好的性能?应该使用什么接口与优化算法交互?在特性的初始版本中应该提供哪些功能?
“优化”的挑战引起了大量的讨论,关于“用户想要什么”的激烈争论,等等。最后,我们决定遵循帕累托法则,专注于提供80%特征功能的20%的开发工作。通过这种方式,我们将该功能交付给客户,收集反馈,并根据反馈安排进一步改进。
优化实验最小可行特征
“80%的特征功能”是什么?在Anylogic中有一个关于优化实验的操作视频,其中包括所有主要的优化特征:目标、决策变量、要求和实验结果。在AnyLogic Cloud实验框架术语中,它们是:模型输出、模型输入和实验仪表板。
- 目标=模型输出
- 决策变量=模型输入
- 要求=模型输出
- 实验结果=最佳模型输入值加上在实验仪表板上显示的各自模型输出
这里的棘手之处在于,最佳输入值是实验输出的一部分。尽管如此,这是可行的优化实验所需的最小特征集。当然,还有很多其他的功能,比如优化实验API、约束、优化实验进度的实时指示等等。但这些都不是核心功能,我们可以将它们与核心功能分开发布。
如何在AnyLogic Cloud中进行优化实验
AnyLogic Cloud是一个模型执行平台,因此首先,您需要将配置好的模型上传到Cloud。如果您在AnyLogic 9中工作,您可以简单地按下“优化实验”按钮,而无需任何特殊准备。
然而,在AnyLogic 8的情况下,您需要确保您的目标和要求表达式被封装在分析面板中可用的输出元素中。然后,您需要在运行配置对象中定义各自的模型输入和输出。让我们使用一个示例模型来详细了解这一点。
准备AnyLogic 8模型
这个基于作业成本分析的示例模型是一个简单的用于学习的制造模型。在这里,我们想要优化每个产品的成本,这取决于资源单位的数量,输送机速度和平均过程延迟时间。
下面是AnyLogic 8中优化实验的设计过程:
有一个表达式root.totalCostPerProduct(),它定义了目标和各自的四个参数(也就是决策变量)。
此外,在要求部分中还有一个需求表达式root.seizeA.queue.capacity - root.seizeA.queue.size()。
如果启用了上述要求,那么在仿真运行结束时,Seize模块队列应该是满的。
您可能知道,当将模型导出到AnyLogic Cloud时,并不会导出AnyLogic 8的实验及其代码。AnyLogic Cloud使用自己的实验框架,该框架在模型导出的输入和输出的基础上工作。而输入和输出在每个模型的运行配置对象中定义。这就是该对象在基于作业成本分析示例模型中的显示方式。
让我们看看需要在运行配置编辑器中放入什么,可以方便在云中创建一个优化实验。首先,有目标表达式,它应该封装在输出元素中。
模型参数会出现在“运行配置”中,因此我们不需要在这里创建新元素。
最后一件事是队列大小需求,因此我们需要将输出元素(请参阅分析面板)拖放到Main画布上,并在那里指定相应的表达式。
因此,一旦在运行配置中指定了所有元素,就可以将它们拖到相关的输入和输出部分中。
此时,可以将模型导出到AnyLogic Cloud。您可以在运行配置属性中使用相应的超链接导出模型。导出模型后,AnyLogic会自动在AnyLogic Cloud中打开该模型的页面。点击实验侧栏中的“仿真”实验后,您将看到下图。如您所见,输入部分包含所有四个决策变量。
让我们检查输出部分是否包含目标和需求。单击齿轮图标并检查单值小部件中的输出列表。它应该是这样的。
![AnyLogic Cloud中可用的单值输出 通过gif图说明如何选择单个值输出](/upload/medialibrary/fb7/ge2wy6ws4dq68y80d0dcv6538ujbiifp.png)
由于所有需要的输入和输出都是可用的,下面,我们准备在AnyLogic Cloud中设计优化实验。
在AnyLogic Cloud上设计一个优化实验
与其他实验一样,可以使用实验侧边栏中的“新建实验”按钮创建优化实验。在对话框中,我们将实验名称指定为“Optimize total cost”,实验类型指定为优化。
创建实验后,单击实验名称附近的齿轮图标,并为输入、需求和输出配置仪表板小部件。
输入部分设置
- 生产参数:
- Resource A capacity—离散范围
- Resource B capacity—离散范围
- Mean processing time—连续范围
- Conveyor speed—连续范围
- 要求:
- Queue size requirement —点击眼睛图标使其可见
输出部分设置
这里有两个具有目标和要求输出的单值小部件。除了这些小部件之外,让我们创建一个条形图来可视化最佳输入值。为此,单击“添加输出”按钮,然后在出现的小部件中指定条形图类型。
点击“选择输出”下拉列表,依次选择: Resource A capacity, Resource B capacity inputs, Mean processing time 和 Conveyor speed。最后,将小部件名称指定为“Optimal inputs”并调整小部件大小,如下图所示。
一旦配置了实验仪表板的输入和输出,让我们保存实验并进入实验配置的最后阶段——定义决策变量和其他输入值。
对于Resource Capacity输入,让我们指定一个从1到20的范围,step = 1。平均加工时间从1到12不等,输送速度从5到15不等。其他实验设置如下:
- 实验设置:
- 目标:使每件产品的产出总成本最小化
- 迭代次数:500次
- 要求:
- 队列大小要求小于或等于0
最终,它就是这个样子。
现在我们准备进行实验。
在AnyLogic Cloud上进行优化实验
要运行实验,只需按下Cloud工具栏中的运行按钮,等待实验完成。在底层,云以以下方式与优化器交互。
- 优化器告诉Cloud要执行的一组输入值。
- Cloud检查运行是否已经执行,以及相应的结果是否在数据库中与所有运行结果一起可用。如果是,结果将被发送到优化器,而无需重新运行模型;否则,云执行一组各自的模型运行。
- 优化器处理输出并向Cloud提供另一组输入值
- 该过程将重复进行,直到达到迭代次数阈值,或者优化器没有新的输入值集要执行为止。
实验完成后,您将看到输出部分填满了实验结果。
与其他实验一样,Cloud存储优化实验结果。这意味着如果模型的另一个用户创建(或配置)相同的优化实验仪表板,那么实验结果将立即显示在仪表板中。
然而,重要的是要记住,由于云计算的分布式特性,优化器不能保证可重复的运行结果。通过这种方式,即使对于相同的输入值集,也可能得到不同的结果,特别是在迭代次数相对较少的情况下。
在AnyLogic Cloud中处理优化实验结果
实验完成后,您将能够:
- 使用最佳输入值播放动画。
- 将优化实验结果下载到Excel文件中。
- 将实验结果与其他实验结果进行比较。
让我们详细了解一下这些特性。
当您播放模型动画时,您可以暂停模型执行,也可以动态更改模型内部的某些内容。如果您想深入研究优化器提出的解决方案并弄清楚解决方案是否真正有效,或者您需要重新考虑优化任务,那么这一点至关重要。下面展示了模型动画是如何在基于活动的成本分析示例模型中找到最佳解决方案的。
![最优解是用动画播放的 这个gif展示了如何改变滑块来调整模型参数](/upload/medialibrary/2d0/43hxg6sjvhxrui83wxngldvwpemu2fvo.png)
如果你想从云端导出结果并使用Excel工具进行后期处理,那么带有结果的Excel文件是非常好的。Excel文件包含根据实验仪表板配置的所有模型输入和输出信息。
输出表和相应的输出表中都有最佳输入值。这是我们执行的优化实验结果的Excel文件。
实验结果比较功能允许您在同一页面上可视化不同实验的结果。大多数情况下,它用于估计不同的解决方案和场景。在优化实验中,比较特性有助于:
- 分析不同的优化方案,例如,比较不同需求组收到的解决方案。
- 分析其他不同的场景,例如简单的仿真实验结果与优化实验结果。
为此,让我们创建一个优化实验的副本。为此,单击实验仪表板中的“重复”图标。在创建的实验中,将队列大小要求指定为“不限制”,并运行实验。一旦结果可用,按下工具栏上的“比较”按钮,并在侧边栏中选择两个优化实验。
优化随机模型
随机模型是指每次使用相同的输入集但不同的随机种子值运行时会产生不同结果的模型。在这种情况下,您需要多次使用相同的输入集执行运行,以找出输出的变化。
为此,您可以使用优化使用重复实验。这里的“重复”是指运行同一组输入的次数。在这种情况下,优化器考虑所有复制中输出的平均值。因此,最佳解是具有最佳均值的重复(迭代)集合。
该实验的配置方式与常规优化实验类似。您需要指定每次迭代的复制数量。由于实验的结果是一组运行,因此实验中可用的输出部件集与常规优化实验不同。
要使结果可视化,您可以使用散点图、箱形图、密度图、均值误差条形图、直方图或2D直方图。处理实验结果最方便的方法是使用带有客观值的散点图或箱形图来表示结果。散点图显示了最佳迭代的所有重复的所有目标值。如果将鼠标悬停在数据点上,您将看到最佳输入值。
箱形图汇总了目标值,并显示了最小、最大、平均值、中位数和Q1/Q3四分位数。由于优化器根据平均值选择最佳解,因此用箱形图检查平均值是有帮助的。
这些是优化与优化使用重复实验的显著区别。当然,前一节提到的所有功能都可以用于后一种实验类型。您可以使用动画播放最佳解决方案(本例中使用初始随机种子值),下载带有实验结果的Excel文件,并将实验结果与其他实验进行比较。
前行
虽然优化实验一直是我们在这篇博客中关注的重点,但在这个最新版本中,您可以在发布说明中找到其他一些改进。所以,去看看我们还添加了什么吧。另外,我们将很高兴收到您关于优化实验和任何其他新功能的反馈,以及任何想法,你可能帮助到我们改进产品!
我们相信随着不断的发展和保持领先,并伴随我们持续为AnyLogic Cloud添加新的创新功能,在不断回顾中一定能够发现最新的令人兴奋的更新。不要忘记订阅我们的月度资讯,了解最新的新版本、博客、活动等等。