多变量优化(使用scipy.optimize.minimize)

2024-09-27 07:24:22 发布

您现在位置:Python中文网/ 问答频道 /正文

我想在一个方程上实现Nelder-Mead优化。但它不仅包含一个变量,还包含多个变量(其中一个是未知变量,另一个是已知变量)

例如,在本例中: http://docs.scipy.org/doc/scipy/reference/tutorial/optimize.html

如果我的罗森(x)是

def rosen(x,y):
...     """The Rosenbrock function"""
...     return sum(100.0*(x[1:]-x[:-1]**2.0)**y + (1-x[:-1])**2.0)

与示例中提到的不同,我如何优化它? 如果我打电话

res = minimize(rosen, x0, method='nelder-mead',
...                options={'xtol': 1e-8, 'disp': True})

它说那需要两个理由 如果我打电话

res = minimize(rosen(y), x0, method='nelder-mead',
...                options={'xtol': 1e-8, 'disp': True})

在代码前面已经定义了y的情况下,我得到了同样的错误。如果我叫它

res = minimize(rosen(x,y), x0, method='nelder-mead',
...                options={'xtol': 1e-8, 'disp': True})

我得到一个错误x没有定义。


Tags: true定义错误resscipymethodoptions方程
1条回答
网友
1楼 · 发布于 2024-09-27 07:24:22

向对象传递参数是通过参数args完成的。优化rosen(x,2)

import numpy as np
from scipy.optimize import minimize

def rosen(x, y):
    """The Rosenbrock function"""
    return sum(100.0*(x[1:]-x[:-1]**2.0)**y + (1-x[:-1])**2.0)

x0 = np.array([1.3, 0.7, 0.8, 1.9, 1.2])

res = minimize(rosen, x0, args=(2,), method='nelder-mead',
               options={'xtol': 1e-8, 'disp': True})

注意,变量x是一个5维向量,如起点x0的定义所示,因此rosen(x,2)有5个变量。如果要最小化rosen(x,y),请定义一个目标函数

def rosen2(zz):
    return rosen(zz[:5], zz[5])

相关问题 更多 >

    热门问题