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

按员工数权重将指定数量资源随机分配为整数到列表的实现方法

资源加权整数分配方案

原有方案的问题

  • 你之前用numpy.random.choice的错误是采样次数等于企业数量,自然无法匹配固定的总分配量
  • 直接按比例乘完取整的问题是所有主体的小数部分都被丢弃,总分配量会比目标值少很多

下面提供两种可直接落地的实现方案:

方案1:最大余数法(确定性分配,总和严格等于目标值)

这是公共资源分配领域的标准算法,分配结果完全按权重比例确定,无随机波动,总和100%等于bev_calc:

import numpy as np

# 输入参数
employees_summed = # 你的企业员工数量列表
bev_calc = 2000
total_employee = sum(employees_summed)

# 计算基础分配整数部分和余数
base_allocation = np.floor([e * bev_calc / total_employee for e in employees_summed]).astype(int)
remainder_list = [e * bev_calc / total_employee - base for e, base in zip(employees_summed, base_allocation)]

# 剩余未分配的额度,按余数从大到小依次分配1个,直到额度用完
remaining_quota = bev_calc - base_allocation.sum()
top_remainder_index = np.argsort(remainder_list)[::-1][:remaining_quota]
base_allocation[top_remainder_index] += 1

bev_company = base_allocation.tolist()

方案2:加权随机分配法(带随机性,总和严格等于目标值)

如果你需要分配结果有随机波动,同时保证总和完全匹配目标值,可以采用加权采样计数的思路:把bev_calc个资源逐个分配,每次分配时选中企业的概率和它的员工数权重成正比,统计每个企业的被选中次数就是最终分配量:

import numpy as np

# 输入参数
employees_summed = # 你的企业员工数量列表
bev_calc = 2000
total_employee = sum(employees_summed)
weight_list = [e / total_employee for e in employees_summed]

# 采样bev_calc次,统计每个企业的命中次数
sample_result = np.random.choice(len(employees_summed), size=bev_calc, p=weight_list)
bev_company = np.bincount(sample_result, minlength=len(employees_summed)).tolist()

该方案每次运行结果都会有差异,但概率分布完全符合员工数权重,员工数多的企业分配到更多资源的概率更高,员工数少的企业也有概率分到资源,不会出现大量0的情况。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.26 19:54:05