python - 有没有办法优化 n 个变量中的 m 个?
问题描述
我有一个(投资组合优化)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)
在这个程序中,权重分配给所有资产。我想要一种可以选择的方式(比如 20 个中最好的 10 个)
解决方案
一种选择是迭代地解决这个问题(scipy
多次运行求解器):
第一次迭代:运行scipy
求解器,获取解决方案,并丢弃所有n
系数低于某个(最初相当小)阈值的变量t
。
下一次迭代:scipy
再次运行求解器,现在不再在先前丢弃的变量的空间内搜索。随着 的(轻微)增加值t
,现在丢弃更多变量。
重复此操作,直到只剩下m
变量。
还有更复杂的方法涉及例如遗传编程技术来识别相关参数甚至函数形式(在后一种情况下所谓的稀疏符号回归,请参见python
此处的实现:https ://github.com/snagcliffs/PDE-FIND .
推荐阅读
- firebase - Firebase Firestore,使用可调用云函数删除集合
- python - Python 的 Tkinter 条目未出现在窗口中
- spring - 带有 JpaRepository 的 Spring Boot Rest API 中的错误
- c++ - 如何正确打开 Visual Studio 项目?
- python - 在 Pytorch 中解释 CUDA 内存不足
- reactjs - 反应 - 全选删除时输入更改未触发
- java - Android开发,如何在按下控制器按钮时更改自定义类的成员的值
- java - 首先从输入中获取整数列表的程序
- python - 如何通过单击 Python 中的 Tkinter 按钮来接受图像作为用户输入?
- ios - 任何人都可以帮我解决这个问题吗?