как получить ограничение по значению, минимизирующее scipy?

#python #scipy #scipy-optimize-minimize

Вопрос:

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

Я использую следующую функцию:

 def f(r,d):
   constraint1 = {
        'type': 'ineq',
        'args': (r,),
        'fun': lambda e, r: r- calculate_risk(e) }
   constraint2 = {
        'type': 'ineq',
        'args': (d,),
        'fun': lambda e, d: 1 - np.inner(e,d) }
   optimizeResult = minimize(
                calculate_excess_profit,
                (1/portfolio_parameters.shape[0],)*portfolio_parameters.shape[0],
                method = "SLSQP",
                constraints = (
                        constraint1,
                        constraint2
                        ),
                bounds = get_bounds()
                    )
return optimizeResult
 

и я хотел бы получить значение ограничения 2.

Конечно, я мог бы добавить инструкцию print в лямбда-функцию, но это будет печататься для каждой итерации. Должен быть лучший способ.

Спасибо

Комментарии:

1. Просто оцените ограничение с помощью вашего решения (! после проверки того, что вы получили действительное решение!). Что-то вроде: constraint2['fun'](optimizeResult.x, constraint2['args'][0]]) .

2. О, да, конечно! Спасибо