У меня есть программа на Python (Portfolio Optimization), которая использует scipy для оптимизации n переменных с использованием ограничений. Однако мне было интересно, можно ли сказать программе выбрать m из этих n переменных, которые будут наилучшими для максимизации цели?
Это мой текущий код:
def obj(x):
return (-np.sum(array_weights.t*x))
def con_vol(x):
return np.sqrt(np.dot(weights.T, np.dot(cov_matrix, weights))
где array_returns - это список возвратов для всех акций, импортированных из Bloomberg, а cov_matrix - ковариационная матрица, построенная с использованием данных о доходах.
cons = [{'type':'eq','fun':lambda x: np.sum(x)-1}, {'type':'ineq','fun':lambda x: con_vol}\
bnds = tuple(0.02, 0.1) for x in range(20)
opts = sco.minimize(obj, list_final_weights, bounds = bnds, method = 'SLQSP', constraints = cons)
В этой программе веса распределяются по всем активам. Я хочу, чтобы он мог выбрать (скажем, 10 лучших из 20)