当前位置: 首页 > 知识库问答 >
问题:

顺序无关加权随机选择

裴宜春
2023-03-14

假设我有一个随机选择的项目池。

我使用一个简单的加权选择算法来做到这一点:

  1. 计算项目权重总和
  2. 在0和权重和之间选择一个随机数
  3. 迭代项目,并按项目权重减少,选择项目时

同时,约束传播算法更新可用项目池。

  • 例如,假设我们有一个N乘N的网格,每个单元格可以选择一个数字
  • 使用上述算法,通过加权选择完成选择
  • 一旦一个单元选择了它的编号,它还会使用一些规则限制相邻单元的可用编号

我的问题是:

  • 假设牢房A和B是邻居。
  • 最初,他们都可以从数字池中进行选择。
  • 但是一旦确定了A或B,另一个单元格可供选择的数量就会减少。
  • 因此,即使对于相同的随机数输入,加权选择仍然可以产生不同的结果(因为权重和和项目概率已经改变)。
  • 所以选择过程不是与顺序无关的,即使随机数是与顺序无关的。

我们如何确保A和B的结果是随机和独立的,同时仍然能够传播约束?(就我而言,这可能吗?)

更新:

我的想法基于的算法是WaveFunctionCollapse,由于它的工作方式,我们不能保证观察的顺序,因为它总是选择熵最小的单元格。

我发现我的初始约束以不可预测的方式改变了结果,因为可用熵现在不同了,所以观察顺序发生了变化,同一单元格的观察结果也发生了变化。

共有1个答案

范侯林
2023-03-14

您可以尝试为每个单元格指定单独的权重表。在这种情况下,随机选择会逐次进行,在每次过程中,为每个单元格选择一个随机数,然后从每个单元格的考虑中删除所选的数字。(想想康威生命游戏中的细胞是如何更新的。)然而,这可能会占用大量内存,尤其是当有许多项目可供选择或网格的大小很大时。请尝试这个想法;如果速度不够快,请测量以找出瓶颈所在,并相应地编辑您的问题。

 类似资料:
  • 问题内容: 我想从集合中选择一个随机项目,但是选择任何项目的机会应与相关的权重成比例 输入示例: 因此,如果我有4种可能的物品,那么没有重量的任何一件物品的机会将是四分之一。 在这种情况下,用户遭受痛苦之剑的可能性应该是三刃剑的十倍。 如何在Java中进行加权随机选择? 问题答案: Apache Commons中现在有一个用于此的类: 这里是,像(假设Item接口阿恩的答案): 或在Java 8中

  • 假设我得到的是范围内的随机数,使用: 假设它给出的数字小于或等于25,你就赢了,如果它给出的数字大于25,我就赢了。然后我有75%的机会赢。 我该如何加权这个数字大于25的概率的某个百分比,比如说1%。 所以,基本上,我试图将我获胜的几率再提高1%,而不是仅仅说“你赢24分或更少” 如果不清楚,请告诉我。

  • 问题内容: 允许从向量中进行加权选择,即 选择概率为0.2的1,概率为0.5的2和概率为0.3的3。 如果我们想对每个行都是概率向量的2D数组(矩阵)以向量化的方式快速进行操作,该怎么办?也就是说,我们想要一个来自随机矩阵的选择向量吗?这是超级慢的方式: : 这篇文章表明,并且可能是一种潜在的方法,而且很快。但是虽然可以沿numpy数组的一个轴执行此操作,但是该函数一次只能在单个数组上运行。同样,

  • 问题内容: 我正在尝试设计一种(好的)方法,从可能的数字范围中选择一个随机数,其中该范围内的每个数字都具有权重。简单地说:给定数字范围(0,1,2),请选择一个数字,其中0的概率为80%,1的概率为10%,2的概率为10%。 自从我的大学统计课程上课以来已经有8年了,所以您可以想象一下,目前适合我的方法并不适合我。 这是我想出的“便宜又肮脏”的方法。此解决方案使用ColdFusion。您可以使用任

  • 问题内容: 在此问题中, 有一个功能要求,要求使用可选种子进行订购,以允许随机订购。 我需要能够对随机排序的结果进行分页。用Elasticsearch 0.19.1怎么做? 谢谢。 问题答案: 您可以使用唯一字段(例如id)和随机盐的哈希函数进行排序。根据结果​​的真实程度,您可以执行以下原始操作: 或像 第二个示例将产生更多随机结果,但速度会稍慢。 为了使这种方法起作用,必须存储字段。否则,查询

  • 问题内容: 在Java中,给定 n个 项目,每个项目的权重为 w ,一个人如何从集合中选择机会等于 w 的随机项目? 假设每个权重是0.0到1.0的两倍,并且集合中的权重之和为1。Item.getWeight()返回Item的权重。 问题答案: Item[] items = …;