Я натыкаюсь на следующую проблему, когда хочу оптимизировать функцию. Некоторые пакеты, например, пакет https://pythonhosted.org/pyswarm/, в конце используют оператор
from pyswarm import pso
...
def func(x):
x1 = x[0]
x2 = x[1]
return x1**4 - 2*x2*x1**2 + x2**2 + x1**2 - 2*x1 + 5
lb = [-3, -40]
ub = [4, 10]
xopt, fopt = pso(func, lb, ub,maxiter=500)
Здесь lb и ub являются l ower b фунт и u pper b фунт параметра.
В этом случае x - это список параметров, которые необходимо оптимизировать. и pso принимает входные данные функции func в качестве оптимизируемых параметров.
Иногда я хочу оптимизировать такую функцию, как
def func(x,a):
a1 = a[0]
a2 = a[1]
formula = a1*x + a2
return formula
, где x - это данные x, а a - параметры для оптимизации. Как мне создать функцию
func(x,a) -> func(a)
, где я «крадусь» x внутри?
Проблема в том, что функция func (x, a) идет как func в
xopt, fopt = pso(func, lb, ub,maxiter=500)
и, следовательно, не дает возможности указать, каким должен быть ввод. Как решить проблему другим способом?