有没有一种方法可以优化n个变量中的m个?

时间:2019-06-21 17:16:53

标签: python scipy

我有一个(Portfolio Optimization)python程序,该程序使用scipy通过约束来优化n个变量。但是,我想知道是否有可能告诉程序从这n个变量中选择m个,这将是最大化目标的最佳选择?

这是我当前的代码:

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 :(得分:0)

一种选择是迭代解决此问题(多次运行scipy求解器):

第一次迭代:运行scipy求解器,求解,并丢弃所有n变量,这些变量的系数都低于某个(最初很小)的阈值t

下一次迭代:再次运行scipy求解器,现在不再在以前丢弃的变量的空间中搜索。随着t的(slighlty)增加值,现在丢弃其他变量。

重复此操作,直到只剩下m个变量。

还有一些更复杂的方法,例如基因编程技术来识别相关参数甚至功能形式(在后一种情况下称为稀疏符号回归,请参见此处的python实现:https://github.com/snagcliffs/PDE-FIND