【问题标题】:Selecting item from set given distribution从集合给定分布中选择项目
【发布时间】:2010-05-16 04:50:32
【问题描述】:

我有一组 X 项目,例如 {鼓风机、割草机、炉子},每个项目都有一定比例的应从整体集合中选择的次数 {鼓风机=25%,割草机=25%,炉子=75 %} 以及这些项目应遵循的一定分布(选择开始时应多选择鼓风机,最后选择多炉灶)。我们得到了一些要整体选择的对象(即 100 个)和执行此操作的总体时间(例如 100 秒)。

我正在考虑使用轮盘赌算法,其中轮盘上的权重受当前分布的影响,作为经过时间(和允许的持续时间)的函数,因此可以使用简单的函数来确定权重。是否有任何人都知道的解决此类问题的常用方法?

目前,我在 java 中使用诸如 x^2 之类的函数(对权重进行了正确的归一化)编写了与此类似的程序,以确保发生良好的分布。欢迎其他建议或常见做法:-)

【问题讨论】:

  • 首先,你的概率加起来是 125%。其次,项目在选择过程中的分布是如何指定的?

标签: java algorithm dataset


【解决方案1】:

您的问题描述对我来说并不完全清楚,但我会尽力回答我所理解的。首先,您可以通过执行以下操作从加权分布中选择一个随机项目:

  1. 求所有潜在对象的权重总和,我们将其称为 wsum。
  2. 选择一个随机数,a。
  3. 初始化一个累积变量,总计为0.0。
  4. 从第一个可能的对象(权重 > 0.0)开始,将权重添加到总数中。
  5. 如果是
  6. 如果我们选择了足够多的对象,请继续,否则转到第 2 步。

将对象按权重降序排序有助于提高运算速度。

这只是为了找到我们从当前分布中选择的对象。听起来您的分布随时间而变化,因此您只需要随时间更改要选择的可能对​​象列表。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2010-10-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多