Вопрос:

Может ли целевая функция иметь несколько входных переменных, кроме оптимизируемой переменной?

scipy scipy-optimize

10 просмотра

1 ответ

5 Репутация автора

При использовании scipy.optimize целевая функция, которую я успешно опробовал, может принимать только одну переменную, скаляр или вектор.

например, этот код работает:

from scipy import optimize

def f(x, a=2, b=-5, c=3):
    return a*x*x+b*x+c

res=optimize.minimize_scalar(f)

print(res.x)

однако, если я хочу отслеживать изменение res.x с помощью a, b, c? следующий код не работает, но как заставить его работать?

from scipy import optimize

def f(x, a, b, c):
    return a*x*x+b*x+c

def change(a, b, c):
    res=optimize.minimize_scalar(f(x, a, b, c))
    print(res.x)
    return res.x

change(3, 2, 1)
change(3, -9, 0)

я могу думать только так:

from scipy import optimize

def change(a, b, c):
    def f(x):
        return a*x*x+b*x+c
    res=optimize.minimize_scalar(f)
    print(res.x)
    return res.x

change(3, 2, 1)
change(3, -9, 0)

Функция внутри другой функции заставляет меня чувствовать себя плохо, есть ли другой способ? Благодарю.

Автор: WestExchange Источник Размещён: 08.08.2019 01:40

Ответы (1)


0 плюса

5 Репутация автора

Решение

Просто сделать это будет работать:

from scipy import optimize

def f(x, a, b, c):
    return a*x*x+b*x+c

def change(a, b, c):
    tup=(a, b, c)
    res=optimize.minimize_scalar(f, args=tup)
    print(res.x)
    return res.x

change(3, 2, 1)
change(3, -9, 0)
Автор: WestExchange Размещён: 11.08.2019 07:59
Вопросы из категории :
32x32