如何生成满足基数与最大权重约束的投资组合优化初始种群?
带基数与最大权重约束的投资组合初始种群生成(遗传算法)
我正在研究包含基数约束和最大权重约束的投资组合优化问题,需要基于遗传算法生成满足以下条件的初始种群数组:
- 基数约束:数组中恰好有5个非零元素
- 最大权重约束:这5个非零元素均小于0.25,且总和为1
初始尝试的问题
最初编写的代码可以满足基数约束,但无法保证最大权重限制——直接生成随机数后归一化会导致部分元素超过0.25:
population_size = 100 cardinality_constraint = 5 # 50是可分配资产向量的长度 initial_pop = np.zeros((population_size, 50)) for i in range(population_size): initial_pop[i,:cardinality_constraint] = np.random.rand(cardinality_constraint) initial_pop[i] = initial_pop[i] / np.sum(initial_pop[i]) np.random.shuffle(initial_pop[i])
可行解决方案
通过使用NumPy的dirichlet函数生成符合Dirichlet分布的权重,再筛选出满足每个元素小于0.25的样本,最终得到符合所有约束的初始种群:
initial_population_list = [] while len(initial_population_list) < 100: x = np.random.dirichlet(np.ones(5), size = 1) if len(x[x > 0.25]) < 1: initial_population_list.append(x)
经验证,该方案能同时满足基数约束、最大权重约束以及总和为1的要求。
内容的提问来源于stack exchange,提问作者MrAce
相关产品推荐
相关产品推荐

