【问题标题】:Minimizing a function with scipy.minimize使用 scipy.minimize 最小化函数
【发布时间】:2020-10-06 19:20:59
【问题描述】:

我对 scipy 完全陌生。

在 pandas 数据框中测试两个变量(x1 和 x2)并生成结果 p。

我正在寻找使 p 最小化的 x1 和 x2。

x1 和 x2 的边界相同 (-4,4)

这是我当前的代码

def objective(x):

    x1 = x[0]
    x2 = x[1]
    df.loc[(df['H3'] <= x1) & (df['A3'] >= x2), 'BH'] = 'Y'
    df.loc[(df['H3'] > x1) | (df['A3'] < x2), 'BH'] = 'N'
    df.loc[(df['BH'] == 'Y') & (df['SPR'] == 'A'), 'PH'] = -1
    df.loc[(df['BH'] == 'Y') & (df['SPR'] == 'H'), 'PH'] = df['SPC'] - 1
    df.loc[df['BH'] == 'N','PH'] = 0
    df.loc[df['SPR'] == 'D','PH'] = 0

    p = df['PH'].sum()

    return p

x0 = [0,0]

b1 = (-4,4)
b2 = (-4,4)
bnds= (b1,b2)

sol = minimize (objective,x0,method='SLSQP',bounds=bnds)

但是,这似乎只返回 x1 = 0 和 x2 = 0 的答案,并且不会尝试边界内的任何其他值...

我在这里错过了什么?

谢谢

【问题讨论】:

    标签: python scipy


    【解决方案1】:

    如果我正确解释了您的目标函数,它似乎是在字符数组中寻找特定字符。这使您的功能不可微。因此,使用像 SLSQP 这样的基于梯度的求解器是行不通的,因为梯度在任何地方都将为零。 尝试使用差异进化或 nelder mead 代替。这些是 scipy optimize 中的无梯度算法。 此外,如果 x 是离散值,并且只能在 -4,4 范围内,则只有 81 个可能的值,这也可以使用蛮力轻松解决。

    【讨论】:

      猜你喜欢
      • 2020-10-13
      • 1970-01-01
      • 1970-01-01
      • 2022-01-15
      • 2017-02-26
      • 2021-10-25
      • 2018-01-30
      • 2015-02-18
      相关资源
      最近更新 更多