带约束的 Scipy Latin Hypercupe 采样

问题描述 投票:0回答:0

我正在尝试使用 scipy 创建一个拉丁超立方体采样,使用以下代码片段:

from scipy.stats.qmc import LatinHypercube

engine = LatinHypercube(d=250, seed=42)
sample = engine.integers(l_bounds=0, u_bounds=2, n=50)

>>> sample[0]
array([1, 1, 1, 0, 1, 1, 0, 1, 0, 1, 1, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 1,
       0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 1, 0, 1, 0, 1, 0, 1, 1,
       0, 1, 1, 1, 0, 0, 1, 0, 1, 0, 1, 1, 1, 1, 1, 0, 0, 0, 1, 1, 0, 0,
       ...], dtype=int64)

以上代码生成一个 LHS(尺寸 50)。但是,我想确保对抽样有一些限制,例如;

  • 前两个值不能同时为 0 或 1

我想办法;生成 size=1000 个样本并仅选择适合约束的样本。然而,当有很多约束时,它开始就像随机抽样一样。样本中元素的顺序感觉也是随机的,这也让人很难选择合适的样本量。

最好的是如下所示,考虑以下一维 4 个元素的示例:

size4 => ______x_____________x___________x_________x____

当我将大小增加到 8 时,如果可以生成以下内容,那么我可以选择适合约束的元素:

size4 => ______x_____________x___________x_________x____
size8 => ______xy____________xy_________yx_________xy___

对于上面的例子,如果

y
不适合约束,我可以选择
x
而不是
x
,并且采样也仍然有点LHS。可能吗?

python random scipy sampling hypercube
© www.soinside.com 2019 - 2024. All rights reserved.