0

在模拟中,我得到一些看起来像 arctan 或 tanh 函数的数据。

我想实现一个适合Java的函数来获取该函数的参数以进行优化。对于其他函数,我使用了例如多项式和高斯函数的函数拟合的 Apache 代码,但找不到切线的解决方案。

老实说,我不知道如何编写这样的函数 fit 所以也许有人可以帮助我解决这个问题,或者确实知道是否已经存在适合此类函数的函数。

4

2 回答 2

0

简短的回答

AnyLogic 没有任何内置的数据拟合功能,除了离散数据的简单插值(请参阅帮助中的表函数)。所以

(a) 如果您需要在模型中执行此操作(例如,由某些模型状态驱动),您需要找到一个合适的 Java 库来完成您已经尝试过的内容(Apache Commons)中缺少的内容,并且从 AnyLogic 模型中调用它;

(b) 如果您可以在模型之外执行此操作,请使用 Stat::Fit 之类的数据拟合工具(它作为 Simul8 等一些 sim 工具的插件存在,但不适用于 AnyLogic)。

更长的答案

根据您的其他解释性评论,听起来这是一个正确解释您的上下文至关重要的问题,也许您根本不需要使用数据拟合(并且可能有更“以任何逻辑为中心”的方式在这种情况下接近它)。特别是围绕模拟和(数学)Gurobi 优化之间的预期交互;请注意,AnyLogic 通过 OptQuest 内置了启发式优化,因此任何关于 AnyLogic 的“优化”的正常讨论都指的是.

一方面,您似乎建议您希望将函数拟合到模拟中的某些输入数据。(您谈到拥有 Excel 输入并希望为其拟合曲线。)

另一方面,您似乎建议您需要一种基于运行时模型状态在中间时间间隔进行优化的方法。但是优化器决定的是什么,它的结果如何影响模拟的持续执行?你说“所以这不是整个模型的优化,而是中间结果的优化。因为我没有找到解决方案”。您在寻找什么“解决方案”?这听起来像是一种方法,您在模拟中对时间段 N 的决策进行建模,其中这些决策基于使用时间段 N-1 的结果作为其输入的优化(因此优化有效地基于简化仿真使用函数的模拟,因为模拟已经被认为是真实世界系统的最准确的计算表示)。

所以也许(?)你说你正在模拟/近似模拟作为其输入数据的函数(你碰巧认为切线函数适合)。在这种情况下,最初的建议 (a) 可能是唯一有意义的事情。尽管如此,当您在第一个时间段之后优化任何内容时,“输入”不再是原始模型输入;它们是模拟当前状态/结果的某种表示(所以不清楚这是否与 Excel 输入数据直接相关,所以也许我在找错树)。

于 2021-01-28T12:10:59.773 回答
0

有一个名为“基于代理的 SIR 模型的校准”的示例模型可以满足您的需求:校准模型参数,使输出与给定函数匹配(在此示例中不相切,但易于调整)

于 2021-01-26T19:22:01.783 回答