【问题标题】:Optimization (with scipy.optimize.minimize) with multiple variables使用多个变量进行优化(使用 scipy.optimize.minimize)
【发布时间】:2015-05-09 05:25:45
【问题描述】:

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

例如在这个例子中: http://docs.scipy.org/doc/scipy/reference/tutorial/optimize.html

如果我的 Rosen(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 未定义的错误。

【问题讨论】:

    标签: python optimization scipy minimization


    【解决方案1】:

    通过参数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)有五个变量。如果你想最小化rosen(x,y),定义一个目标函数

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2021-12-06
      • 2019-03-17
      • 1970-01-01
      • 2022-10-13
      • 2016-01-06
      • 1970-01-01
      • 2016-07-13
      相关资源
      最近更新 更多