Algorithm 约束n维空间的有效随机抽样

Algorithm 约束n维空间的有效随机抽样,algorithm,language-agnostic,genetic-algorithm,Algorithm,Language Agnostic,Genetic Algorithm,我将优化一个由n(n>=1,通常为n=4)个非负变量定义的问题。这不是一个n维问题,因为所有变量的和必须是1 最直接的方法是每个x_i扫描整个范围0,如果处理的是实值变量,则不太可能得到两个相同的样本。但是,您确实有一个问题,即您的样品不一致。你更可能选择(0.5,0.5)而不是(1.0,0)。解决这个问题的一种方法是二次抽样。基本上你所做的是,当你沿着某一点缩小空间时,你缩小了选择它的概率 所以基本上你要做的就是把单位立方体里的所有点都映射到同一个方向上,映射到一个点上。这些点在同一方向上形成

我将优化一个由n(n>=1,通常为n=4)个非负变量定义的问题。这不是一个n维问题,因为所有变量的和必须是1


最直接的方法是每个x_i扫描整个范围0,如果处理的是实值变量,则不太可能得到两个相同的样本。但是,您确实有一个问题,即您的样品不一致。你更可能选择(0.5,0.5)而不是(1.0,0)。解决这个问题的一种方法是二次抽样。基本上你所做的是,当你沿着某一点缩小空间时,你缩小了选择它的概率

所以基本上你要做的就是把单位立方体里的所有点都映射到同一个方向上,映射到一个点上。这些点在同一方向上形成一条直线。直线越长,选择投影点的概率越大。因此,您希望通过该直线长度的倒数来偏移选择点的概率

下面是可以实现这一点的代码(假设您正在寻找x_的总和为1):

while(true){
最大值=0;
范数=0;
总和=0;
对于(i=0;i样本概率){
继续;
}否则{
对于(i=0;i
这里是与前面相同的函数,已翻译为python

import numpy as np

def f(N):
    while(True):
        count += 1
        x = np.random.rand(N)
        mxm = np.max(x)
        theSum = np.sum(x)
        nrm = np.sqrt(np.sum(x * x))
        length_of_line = nrm / mxm
        sample_probability = 1 / length_of_line
        if theSum == 0 or rand() > sample_probability:
            continue
        else:
            x = x / theSum
        return x

出于好奇:你说的是什么样的“冗余”?我对这个领域不太熟悉。你可能在一个专门的SE网站(有一个关于统计的独立网站,IIRC)上运气更好。很多有趣的词基本上是不必要的,但完全缺少的是算法的目标。标题“约束n维空间的有效随机抽样”表示一个n维问题,该问题在第一段中被驳斥。我不确定值的总和与问题空间的维数有何关系,也许你可以解释一下。@Lazarus:约束(总和==1)将空间缩减为(n-1)维度子空间。但我必须承认,我也没有看到“冗余”。@亨里克:我现在看到了,谢谢。
import numpy as np

def f(N):
    while(True):
        count += 1
        x = np.random.rand(N)
        mxm = np.max(x)
        theSum = np.sum(x)
        nrm = np.sqrt(np.sum(x * x))
        length_of_line = nrm / mxm
        sample_probability = 1 / length_of_line
        if theSum == 0 or rand() > sample_probability:
            continue
        else:
            x = x / theSum
        return x