从 Python 中的单纯形中随机均匀采样

Posted

技术标签:

【中文标题】从 Python 中的单纯形中随机均匀采样【英文标题】:Sample uniformly at random from a simplex in Python 【发布时间】:2021-03-17 03:49:40 【问题描述】:

我想从 python 中的单纯形中统一采样。我在 R 中找到了以下内容,但在 python 中目前还没有找到

 runif_in_simplex(n, simplex)

编辑:以下解决方案是否正确?

    生成 N 个随机数(N = 单纯形的顶点数) 将这 N 个数归一化(除以总和) 形成 N 个数和 Vertice 坐标的线性组合。

【问题讨论】:

这能回答你的问题吗? Generating N uniform random numbers that sum to M Is the following solution correct? 假设您的随机数在 [0...1) 范围内浮动,则您的解决方案不正确 【参考方案1】:

单位指数变量是你需要的(相关post)。

def runif_in_simplex(n):
  ''' Return uniformly random vector in the n-simplex '''

  k = np.random.exponential(scale=1.0, size=n)
  return k / sum(k)

您提出的过程在单纯形中不是均匀分布的。

参考

Onn, S. 和 Weissman, I.(2011 年)。在单纯形上生成均匀的随机向量,对某个多面体的体积和多元极值有影响。运筹学年鉴,189(1),331-342。

【讨论】:

以上是关于从 Python 中的单纯形中随机均匀采样的主要内容,如果未能解决你的问题,请参考以下文章

SciPy Delaunay三角剖分改变了单纯形的多个点,以实现参数的微小变化

等待时间优化的线性规划

线性规划中的单纯形法与内点法(原理步骤以及matlab实现)

单纯形法剖析,一句话描述单纯形法

javascript单纯形法中的高斯乔丹枢轴

简单单纯形法