【问题标题】:Fit a simulation python适合模拟python
【发布时间】:2023-04-01 09:47:01
【问题描述】:

鉴于模型蛮力的参数数量是不可能的,我正在尝试将模拟拟合到经验数据。有哪些可用于模拟的资源? 模拟是一个 python 函数(不要与数学函数混淆),它输出一个列表。我希望这个列表尽可能接近其他列表(经验数据)。

我认为 scipy.optimize 效果不佳,因为它不是数学函数,而是模拟(不可能给出它的函数)。蛮力将需要大约 5000 次模拟,这是不切实际的。

def sim(conta = 0.2, recov = 0.01, D = 600, sig = 3, risk_aversion = 0.05, over_conf = 0.05, power_narr = 5, length = 125, n_k = 0.997, shocks = [8]+[0]*5+[8]+[0]*5+[15]+[0]*5+[40]+[0]*5+[40]+[0]*5, no_len = 25, u = [0.35,0.35,0.15,0.15], w = [1,1,0.1,0.1], ø = 0.9 ):


"""those are the parameters of the simulation, some are floats, others lists"""
 
"""
simulation going on here
"""

return my_list

我想通过改变参数使这个列表适合另一个列表

我希望这个拟合的输出是模拟的最佳参数列表。

【问题讨论】:

  • 当您说您使用的是模拟而不是函数时,我假设您使用的是某种随机数生成器,因此相同的输入并不总是返回相同的输出?如果可以,您能否针对固定种子进行优化?

标签: python list optimization simulation


【解决方案1】:

当然,您可以使用 scipy 优化,实际上还有许多其他比其他答案中提到的更强大的库,例如 Mystic (https://github.com/uqfoundation/mystic) 或 lmfit (https://github.com/lmfit/lmfit-py),仅举几例。

您的目标函数是数学函数、模拟结果、外部程序输出还是炸薯条制作机的结果都无关紧要。您应该问自己的唯一问题是:

  1. 评估目标函数是否昂贵?如果需要半秒钟,那么即使是蛮力也可以。我已经针对外部程序(水库模拟器)运行了 scipy 和 Mystic,每个功能评估都可能需要数小时。
  2. 您的目标函数有很多局部最优值的可能性有多大?

这两个问题的答案可能会引导您使用一组特定的求解器:即局部优化(速度更快,但您会冒获得局部最小值的风险)或全局优化(需要更多函数评估来探索搜索空间,但可能会让你更适合)。

也就是说,您的目标函数可以很容易地重写,使其成为优化算法的目标:

def sim(x, my_target_array):

    # calculation stuff here
    return ((numpy.array(my_list) - my_target_array)**2).sum()

安德烈亚。

【讨论】:

    【解决方案2】:

    您可以使用随机方法:

    无论如何,您都需要一个参数模型。当你把它写进你的问题时,它会很有帮助。

    【讨论】:

      猜你喜欢
      • 2021-10-02
      • 1970-01-01
      • 2011-06-29
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-08-01
      • 1970-01-01
      • 2020-12-06
      相关资源
      最近更新 更多