【问题标题】:Guessing initial parameters for global optimization猜测全局优化的初始参数
【发布时间】:2021-10-08 14:39:59
【问题描述】:

我正在尝试使用双重退火算法执行全局优化拟合例程。在通过合成数据测试代码(它可以工作)之后,我现在正在尝试分析实验代码。不幸的是,拟合返回了相当线性的行为,无法捕捉数据的真实趋势。我假设这里的问题是我给参数的初始值。老实说,我不知道应该为他们分配哪个价值。有人可以给我一个小提示吗? 我可以做任何额外的评估来分配值或检查拟合的正确性吗? 代码下方。

def fit_msd3(params,t,data):
    A = params['A']
    B = params['B']
    a = params['a']
    C = params['C']
    b = params['b']
    

    model = A*t + B * (1 - np.exp(-a*t))+ C * (1 - np.exp(-b*t)) 
    return np.log(model) - np.log(data)
# create a set of Parameters
params = Parameters()

params.add('B',  value = 0, min=0, max = 1000000)
params.add('A',  min=0.0001, max = 1000000)
params.add('a', value=0.25, min=0.0001, max = 1000000)
params.add('C', min=0, max = 1000000)
params.add('b',  value = 0.16, min=0.0001, max = 1000000)
x =[ 4.,  6.,   8.,  10.,  14.,  18.,  22.,  28., 36.,  44.,  54.,  66.,  82., 102.,126., 154., 190., 234., 286., 350., 428., 524., 642., 786.]
y = [1.15665197,   2.54089084,  4.39305993,  6.65139545,  12.16321355, 18.71986828,  26.05988679, 38.11383458,  55.45630159,  73.4806873, 95.87748006, 122.00380449, 155.64913134, 195.18638036, 236.78299798, 275.1298213, 315.73083698, 363.20054857, 410.54976453, 449.63215925, 476.15782442, 513.45335548, 589.47002132, 609.59510735]

plt.plot(np.log(x),np.log(y))
opt_args = {'initial_temp': 1050000, 'accept': -2.}
minner = Minimizer(fit_msd3, params, fcn_args=(x, y), max_nfev = 20000000)
result = minner.minimize(method="dual_annealing", **opt_args)

# show results
report_fit(result)
fig, ax = plt.subplots(figsize = (15,15))
ax.grid()
ax.set_ylabel('$\Delta_{msd}$(t) [$\mu$m]', fontsize=18)
ax.set_xlabel('Time Lag $\Delta t$ [s]', fontsize=18)
ax.plot(np.log(x), np.log(y), 'ko', lw=2)
ax.plot(np.log(x), np.log(y)+result.residual, 'r-', lw=2)

plt.legend(['data', 'dual anneal'], loc='upper left')

【问题讨论】:

    标签: python optimization curve-fitting simulated-annealing


    【解决方案1】:

    在代码中,系数 B 和 C 都应该是正数,因为 Bmin=0 和 Cmin=0 被声明。这可能是导致优化不佳的原因。

    另一个软件给出的结果如下:

    【讨论】:

    • 嗨!感谢您的帮助。你用的是哪种软件?对我来说,为 B 和 C 设置负边界会产生适合的 Nan 值。你的情节看起来也很不一样。为什么会这样?
    • 这些图是相同拟合函数的绘图,但轴上的比例不同。第一个是线性刻度。第二个是对数刻度。
    • 我使用自制软件进行非线性回归。它不是公开的(交互式的,不可移植的,......)。曲线是用 MathCad 绘制的。
    • 仍然将 B 和 C 的边界设置为负范围会返回适合的 Nan 值。
    • 尝试使用 A、B、C、a、b 的初始值与我的答案中给出的值相差不大的软件。还要说明每个值的范围(最小值、最大值)在这些值附近不要太宽。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-12-16
    • 2015-06-09
    • 1970-01-01
    • 1970-01-01
    • 2010-11-28
    • 1970-01-01
    相关资源
    最近更新 更多