Как внести дополнительный вклад в целевую функцию scipy.optimize.minimize, кроме независимых переменных - PullRequest
1 голос
/ 17 июня 2019

Я использую библиотеку scipy для задачи оптимизации. У меня есть функция, которая должна быть сведена к минимуму. Мой код и функция выглядят как

import numpy as np
from scipy.optimize import minimize
from scipy.optimize import Bounds


bounds = Bounds([2,10],[5,20])

x0 = np.array([2.5,15])

def objective(x):
    x0 = x[0]
    x1 = x[1]
    return a*x0 + b*x0*x1 - c*x1*x1

res = minimize(objective, x0, method='trust-constr',options={'verbose': 1}, bounds=bounds)

Мои значения a, b и c меняются со временем и не являются постоянными. Функция не должна быть оптимизирована для значений a, b, c, но должна быть оптимизирована для заданных значений a, b, c, которые могут изменяться со временем. Как я могу дать эти значения в качестве входных данных для целевой функции?

1 Ответ

2 голосов
/ 17 июня 2019

В документации для scipy.optimize.minimize упоминается параметр args:

args: кортеж, необязательный

Дополнительные аргументы, переданные целевой функции иего производные (функции fun, jac и hess).

Вы можете использовать его следующим образом:

import numpy as np
from scipy.optimize import minimize
from scipy.optimize import Bounds

bounds = Bounds([2,10],[5,20])
x0 = np.array([2.5,15])

def objective(x, *args):
    a, b, c = args  # or just use args[0], args[1], args[2]
    x0 = x[0]
    x1 = x[1]
    return a*x0 + b*x0*x1 - c*x1*x1

# Pass in a tuple with the wanted arguments a, b, c
res = minimize(objective, x0, args=(1,-2,3), method='trust-constr',options={'verbose': 1}, bounds=bounds)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...