如何制作一个总和为 1 且每个元素都有最小和最大限制的随机列表?

How to make a random list with a sum of 1 with minimum and maximum limits for each element?

我目前正在与 python 进行多空投资组合优化项目。

问题是我必须生成一个总和为 1 的列表,并且列表中的每个元素应该大于或等于 -1 和小于并等于 5。

列表的长度必须是 5,元素应该是浮点数。

有什么方法可以制作这样的清单吗?

由于权重总和必须为 1 的限制,这里实际上只有 四个 个随机源。因此,为前四种资产生成潜在权重:

weights = [random.uniform(-1, 5) for i in range(4)]

然后推断最终权重final_weight = 1 - sum(weights)是否符合要求。所以像:

def generate_weights():
    while True:
        weights = [random.uniform(-1, 5) for i in range(4)]
        weights.append(1 - sum(weights))
        if -1 <= weights[-1] <= 5:
            return weights