минимизация функции била - PullRequest
       43

минимизация функции била

0 голосов
/ 21 февраля 2019

Я пытаюсь минимизировать функцию Била с помощью scipy optimize, это функция с двумя переменными, использующая следующий код:

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")

Что означает эта ошибка и как ее исправить?

1 Ответ

0 голосов
/ 22 февраля 2019

«Что означает эта ошибка и как ее исправить?»

Это означает, что решатель вместо того, чтобы сходиться к минимуму, предпринял шаги, которые переместили его вбольшие значения координат, где ваше полиномиальное выражение настолько велико, что оно выходит за пределы 64-битных чисел с плавающей запятой.

Если я исправлю формулу, чтобы она была действительной функцией Била, и если я использую начальную точку ближе кожидаемый результат, функция работает.Этот скрипт

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).

...