scipy.optimize.minimize 多变量
scipy.optimize.minimize multivariate
我正在尝试最小化以下函数:
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])
请帮助我。
这在数值优化方面看起来非常不稳定。当给出一些界限来保存它时,它可能会起作用。但像 2^n
这样快速增长的东西正在招来麻烦。
现在如果我正确解释你的函数,你可以将它除以 1000;哪个影响较小的值,优化器喜欢。它基本上是 objective.
的缩放
比较你的乐趣:
# ((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])
如果需要原图objective,做个后处理乘法!
我正在尝试最小化以下函数:
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])
请帮助我。
这在数值优化方面看起来非常不稳定。当给出一些界限来保存它时,它可能会起作用。但像 2^n
这样快速增长的东西正在招来麻烦。
现在如果我正确解释你的函数,你可以将它除以 1000;哪个影响较小的值,优化器喜欢。它基本上是 objective.
的缩放比较你的乐趣:
# ((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])
如果需要原图objective,做个后处理乘法!