scipy оптимизирует решение, наиболее близкое к первоначальному предположению - PullRequest
0 голосов
/ 11 сентября 2018

Я пытаюсь использовать scipy.optimize.minimize, чтобы получить решение для следующей проблемы:

Скажем, нам дано f (x, y) = x + 2 * y, и у нас есть начальныйугадать (1,1).Мы хотим решить f (x, y) = 0, но для моих целей любое решение, которое дает мне | f (x, y) |<терпимость достаточно хороша.Очевидно, что существует бесконечно много решений, поэтому мой вопрос был таков: существует ли алгоритм в optimize.minimize, чтобы он отдавал приоритет ближайшему (евклидову расстоянию) решению?То есть я представляю начало с первоначального предположения и ищу по кругу вокруг первоначального предположения: если решения нет, радиус увеличивается, но как только он достигает точки, которая находится в пределах допуска, он возвращает эту точку.</p>

Любые указатели будут с благодарностью.

Спасибо,

1 Ответ

0 голосов
/ 11 сентября 2018

Предполагая, что есть хотя бы одно решение для уравнения f (x, y) = 0. Тогда вы можете сформулировать его как ограниченную задачу оптимизации, чтобы получить решение, наиболее близкое к данному начальному предположению:

from scipy.optimize import minimize
import numpy as np

# We want to minimize ||f(x)-xinit|| subject to f(x) = 0

f = lambda x: x[0] + 2*x[1]
# the euclidean norm of f-xinit
objfun = lambda x, xinit: np.sqrt(np.sum((f(x)-xinit)**2))

# initial guess
xinit = [1, 1]
# constraint f(x) = 0:
constr = {"type": "eq", "fun": f}
minimize(fun=objfun, args=(xinit,), x0=xinit, constraints=constr)

В случае отсутствия решения для уравнения f (x, y) = 0, вы можете попытаться минимизировать | f (x, y) |без ограничений.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...