最小化beale功能

问题描述 投票:2回答:1

我正在尝试使用scipy optimize来最小化Beale函数,它是一个带有两个变量的函数,使用以下代码:

import math
import numpy as np
from scipy.optimize import minimize
#define function f(x)
def beale(position):
    return (1.5-position[0]+position[0]*position[1])**2+(2.25-position[0]+position[0]*position[1]**2)**3+(2.2625-position[0]+position[0]*position[1])**3

res =minimize(beale, [-4.5,4.5], method="Nelder-Mead")
print (res)

但是我收到以下错误:

 RuntimeWarning: overflow encountered in double_scalars
  res =optimize.minimize(f, [2, -1], method="Nelder-Mead")

这个错误意味着什么,我该如何解决?

python optimization scipy minimize
1个回答
1
投票

“这个错误意味着什么,我该如何修复它?”

这意味着求解器不是收敛到最小值,而是采取将其移动到更大坐标值的步骤,其中多项式表达式非常大,以至于溢出了64位浮点数的限制。

如果我将公式更正为实际的Beale函数,并且如果我使用更接近预期结果的起点,则该函数有效。这个脚本

from scipy.optimize import minimize


def beale(position):
    x, y = position
    return (1.5 - x + x*y)**2 + (2.25 - x + x*y**2)**2 + (2.625 - x + x*y**3)**2


x0 = [1.0, 1.0]
res = minimize(beale, x0, method="Nelder-Mead")
print(res)

产生输出

 final_simplex: (array([[3.00002489, 0.50000749],
       [2.99993609, 0.49998427],
       [3.00005157, 0.50000776]]), array([1.39263183e-10, 6.54120047e-10, 1.00978644e-09]))
           fun: 1.392631830241483e-10
       message: 'Optimization terminated successfully.'
          nfev: 107
           nit: 56
        status: 0
       success: True
             x: array([3.00002489, 0.50000749])

已知的精确解是(3,0.5)。

© www.soinside.com 2019 - 2024. All rights reserved.