可变数量的集合之间的模糊选择

| 我想知道在以下情况下哪种方法最简单,最可配置: 我有一个计数器,我们叫它“ 0”,它将用来提取其中一组 我有数量可变的集合
S1, S2, ..
,可以认为它们之间的总数是有序的 我想以模糊的方式混合这些集合,以便对于
X = 0
会给我
S1
,例如,
X = 20
它将给我
S1
的机会是70%,而
S2
则是30%的机会 增大
X
会使
S1
的概率降低到0%,同时将
S2
增大到100%,然后可能会有一个区域始终会给我
S2
直到a6ѭ开始降低的新阈值和and12ѭ开始获得机会的新阈值,依此类推 我知道如何通过对所有内容进行硬编码来做到这一点,但是由于需要进行一些调整,因此我想应用一个解决方案,该解决方案可以轻松地配置我拥有的集合数和单个阈值(概率的开始/结束和开始/结束的开始/结束)降低概率)。当然,我不需要两个以上的集合之间的任何交集,并且线性增加/减少概率是可以的..有什么好的线索吗? 提前致谢!     
已邀请:
        要分配概率分布,可以使用伯恩斯坦多项式: http://en.wikipedia.org/wiki/Bernstein_polynomial 可以使用de Casteljau's算法有效地计算这些值(基本上,它以明显的方式对递归执行DP): http://en.wikipedia.org/wiki/De_Casteljau\'s_algorithm http://www.cs.mtu.edu/~shene/COURSES/cs3621/NOTES/spline/Bezier/de-casteljau.html 结果,您将获得一组分布的权重。要选择一组集合,您只需在[0,1]中生成一个统一的随机变量,然后根据这些权重选择它要放入的集合。 这是python中执行此操作的一些代码:
import random

#Selects one of the n sets with a weight based on x
def pick_a_set(n, x):

    #Compute bernstein polynomials
    weights = [ [ float(i == j)  for j in range(n) ] for i in range(n) ]
    for k in range(n):
        for j in range(n-k-1):
            for i in range(n):
                weights[j][i] = weights[j][i] * (1.0 - x) + weights[j+1][i] * x

    #Select using weights
    u = random.random()
    for k in range(n):
        if u < weights[0][k]:
            return k
        u -= weights[0][k]
    return 0
    

要回复问题请先登录注册