Первое условие - это ограничение (sum(w)=1
), а для второго вы можете использовать для него границы. Вот небольшой пример того, как использовать scipy.optimize.minimize
с вектором весов, имеющим 4 элемента:
import numpy as np
from scipy.optimize import minimize
# objective function
func = lambda w: np.sqrt(cov_table.dot(w).sum())
# constraint: sum(weights) = 1
fconst = lambda w: 1 - sum(w)
cons = ({'type':'eq','fun':fconst})
# initial weights
w0 = [0, 0, 0, 0]
# define bounds
b = (0.0, 1.0)
bnds = (b, b, b, b)
# minimize
sol = minimize(func,
w0,
bounds = bnds,
constraints = cons)
print(sol)
* Не забудьте присвоить значение cov_table
, чтобы код работал.