我正在尝试使用 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)。但是,我想确保对抽样有一些限制,例如;
我想办法;生成 size=1000 个样本并仅选择适合约束的样本。然而,当有很多约束时,它开始就像随机抽样一样。样本中元素的顺序感觉也是随机的,这也让人很难选择合适的样本量。
最好的是如下所示,考虑以下一维 4 个元素的示例:
size4 => ______x_____________x___________x_________x____
当我将大小增加到 8 时,如果可以生成以下内容,那么我可以选择适合约束的元素:
size4 => ______x_____________x___________x_________x____
size8 => ______xy____________xy_________yx_________xy___
对于上面的例子,如果
y
不适合约束,我可以选择x
而不是x
,并且采样也仍然有点LHS。可能吗?