Есть ли способ оптимизировать для m из n переменных? - PullRequest
0 голосов
/ 21 июня 2019

У меня есть программа на 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)

1 Ответ

0 голосов
/ 21 июня 2019

Один из вариантов - решить эту проблему итеративно (многократно запускать решатель scipy):

1-я итерация: запустите решатель scipy, возьмите решение и отбросьте все переменные n, коэффициенты которых ниже определенного (изначально довольно небольшого) порога t.

Следующая итерация: снова запустите решатель scipy, теперь больше не ищите в пространстве ранее отброшенных переменных. При увеличении (незначительного) значения t теперь отбрасывайте другие переменные.

Повторяйте это до тех пор, пока не останется только m переменных.

Существуют также более сложные подходы, включающие, например, методы генетического программирования для определения соответствующих параметров или даже функциональных форм (так называемая редкая символическая регрессия в последнем случае, см., например, реализацию python здесь: https://github.com/snagcliffs/PDE-FIND.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...