提问者:小点点

我可以使用优化实验在AnyLogic中实现多目标最佳化问题吗?


我正在尝试使用Any逻辑中基于AnylogAgent的建模和自定义实验功能来实现多目标优化实验,每次都使用修改后的参数在循环中运行模型。在每次模拟运行结束时,我检查3个目标函数的值,使用遗传算法修改参数并再次运行。据说优化和参数变化实验可以利用Any逻辑中的多核处理。我正在尝试找到一种方法来利用此选项并使我的实验运行得更快。任何线索都可以提供帮助!谢谢


共1个答案

匿名用户

所以看起来你的问题实际上是关于如何将运行并行化(就像其他AnyLogic实验类型可以做的那样)添加到你创建的自定义实验中,以使用遗传算法(GA)进行你自己独特的多目标优化。(我建议你编辑你的问题标题,因为正如本在评论中建议的那样,它非常具有误导性。)但是我也会稍微覆盖更广泛的角度。

我试图实现一个多目标优化实验使用[…]自定义实验功能在Any逻辑运行模型在循环中修改参数每次.在每次模拟运行结束时,我检查3个目标函数的值,修改参数使用遗传算法和再次运行。

是的,如果你想要一个特定的遗传算法驱动的多目标“优化”(这不是使用OptQuest启发式优化的AnyLogic意义上的优化,因此引号),你将需要使用一个自定义实验,在这个实验中,你可以设置/与遗传算法接口,并根据需要明确控制运行的设置/创建。

据说优化和Paramter Variation实验可以利用Any逻辑中的多核处理。我正在尝试找到一种方法来利用这个选项并使我的实验运行得更快。

这些实验中的并行化只是意味着运行在单独的Java线程中执行,以便在您拥有的CPU内核中自然并行。您可以通过工具中的“并行执行的处理器数量”设置来限制并行性-

因此,在自定义实验中,您需要使用Java并发(创建自己的一组Thread对象,通过模板自定义实验代码中已经包含的步骤进行模型设置和执行)来明确地处理这个问题。如果您还不知道这些技术,您需要学习并对它们充满信心。(Java8添加了许多改进的并发处理技术。)没有更高级别的AnyLogicAPI来处理它。

NB:你还必须处理控制运行选择的东西(在你的例子中是遗传算法)如何处理并行性。比方说,如果你开始了4个并行运行的批次,它会等待所有4个运行完成(因此它拥有所有客观结果的完整信息),然后再决定下一组模型参数,还是在每个完成时做出决定?(AnyLogic的OptQuest优化器在打开并行执行的优化实验中也必须担心这一点。)