【问题标题】:scipy.optimize.minimize multivariatescipy.optimize.minimize 多变量
【发布时间】:2018-05-10 17:39:51
【问题描述】:

我正在尝试最小化以下功能:

def func(x, *args):
  #""" Objective function """
       return ((2*math.pi*2000*((x[0]/2)**2))+(2**(x[0]/2)*(x[1])*1000))

具有以下约束、界限和初始值:

 guess=[4,5]
 d1=3
 d2=10 
 h1=3
 h2=10
 v=50
 cons = ({'type': 'ineq','fun' : lambda x: math.pi*x[1]*((x[0]/2)**2)-v})
 bnds = ((d1, d2), (h1, h2))

还有优化的乐趣:

scipy.optimize.minimize(func,guess, method='SLSQP',bounds=bnds, 
constraints=cons)

但我一直没有解决方案:

fun: 48281.04745868263
jac: array([ 25783.35449219,   2828.42675781])
message: 'Positive directional derivative for linesearch'
nfev: 12
nit: 7
njev: 3
status: 8
success: False
x: array([ 3.        ,  7.07344142])

请帮帮我。

【问题讨论】:

    标签: python-3.x optimization scipy minimize


    【解决方案1】:

    这在数值优化方面看起来非常不稳定。当给出一些界限来保存它时,它可能会起作用。但是像2^n 这样快速发展的东西正在招来麻烦。

    现在,如果我正确解释了您的函数,您可以将其除以 1000;优化器喜欢的较小值的影响。它基本上是目标的缩放。

    比较你的乐趣:

    # ((2*math.pi*2000*((x[0]/2)**2))+(2**(x[0]/2)*(x[1])*1000))
         fun: 48258.32083419573
         jac: array([ 25775.48237605,   2828.42712477])
     message: 'Positive directional derivative for linesearch'
        nfev: 44
         nit: 10
        njev: 6
      status: 8
     success: False
           x: array([ 3.        ,  7.06540634])
    

    与:

    # ((2*math.pi*2*((x[0]/2)**2))+(2**(x[0]/2)*(x[1])*1))
         fun: 48.2813631259886
         jac: array([ 25.78346395,   2.82842684])
     message: 'Optimization terminated successfully.'
        nfev: 12
         nit: 3
        njev: 3
      status: 0
     success: True
           x: array([ 3.        ,  7.07355302])
    

    如果您需要原始目标,请进行后处理乘法!

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-12-06
      • 2015-05-09
      • 2018-05-09
      • 2017-07-28
      • 1970-01-01
      • 2022-07-05
      • 1970-01-01
      • 2020-01-24
      相关资源
      最近更新 更多