You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Python生成满足B、C权重≥80%的随机投资组合权重问题求助

解决带约束的投资组合权重生成问题

你的代码核心问题有两个:

  1. 仅在固定次数的循环中尝试生成权重,不符合条件就直接丢弃,大概率凑不够5个符合要求的组合;
  2. 无约束的随机抽样生成B+C合计≥80%权重的概率极低,效率很差。

下面提供两种可行的解决方案:

方案1:循环筛选直到凑够数量

修改循环逻辑,持续生成权重直到收集到足够的符合条件的组合:

import numpy as np

ar = np.array([0, 1, 1, 0])
number_of_portfolios = 5
tickers = ['A', 'B', 'C', 'D'] 
portfolio_weights = []

# 持续生成直到收集到指定数量的符合条件组合
while len(portfolio_weights) < number_of_portfolios:
    # 生成随机权重并归一化
    weights = np.random.random_sample(len(tickers))
    weights = weights / np.sum(weights)
    # 检查B、C合计占比是否≥0.8
    if np.sum(ar * weights) >= 0.8:
        # 保留三位小数后加入列表
        portfolio_weights.append(np.round(weights, 3))

# 打印结果
for idx, weights in enumerate(portfolio_weights, 1):
    portfolio_dict = dict(zip(tickers, weights))
    print(f"投资组合 {idx}: {portfolio_dict}")
    print(f"B+C 合计占比: {np.sum(weights[1:3]):.3f}\n")

方案2:直接生成满足约束的权重(效率更高)

跳过筛选步骤,直接按约束规则生成权重:先分配A、D的权重(合计≤20%),剩余部分全部分配给B、C,确保天然满足B+C≥80%的要求:

import numpy as np

number_of_portfolios = 5
tickers = ['A', 'B', 'C', 'D'] 
portfolio_weights = []

for _ in range(number_of_portfolios):
    # 1. 生成A的权重(0到0.2之间)
    weight_a = np.random.uniform(0, 0.2)
    # 2. 生成D的权重(0到剩余的可分配额度:0.2 - weight_a)
    weight_d = np.random.uniform(0, 0.2 - weight_a)
    # 3. 剩余权重全部分配给B和C
    remaining = 1 - weight_a - weight_d
    # 4. 在剩余额度内随机分配B的权重,C的权重自动确定
    weight_b = np.random.uniform(0, remaining)
    weight_c = remaining - weight_b
    
    # 整理为数组并保留三位小数(修正四舍五入导致的和微小偏差)
    weights = np.round([weight_a, weight_b, weight_c, weight_d], 3)
    weights = weights / np.sum(weights)
    weights = np.round(weights, 3)
    
    portfolio_weights.append(weights)

# 打印结果
for idx, weights in enumerate(portfolio_weights, 1):
    portfolio_dict = dict(zip(tickers, weights))
    print(f"投资组合 {idx}: {portfolio_dict}")
    print(f"B+C 合计占比: {np.sum(weights[1:3]):.3f}\n")

方案对比

  • 方案1实现简单,但依赖随机筛选,当约束严格时(比如要求B+C≥90%),效率会非常低;
  • 方案2直接按约束生成权重,效率极高,且能100%保证符合要求,推荐使用。

内容的提问来源于stack exchange,提问作者TravisDockston

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.29 14:37:47