满足一定条件的随机向量生成

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

假设 G 是 (100 , 20 ) 的矩阵,h 是 ( 100) 的向量。

如何随机生成一个大小为 100 且满足条件 G x 的向量 x <= h ?

显然,我可以做如下的事情。但是,如果我想生成数千个这样的点,那么效率很低。谢谢。

import numpy as np

# Define G and h
G = np.random.rand(100, 20)
h = np.random.rand(100)

def is_feasible(x):
  return np.all(np.dot(G, x) <= h)

while True:
  # Generate random vector x
  x = np.random.rand(20)

  # Check if x is feasible
  if is_feasible(x):
    break
python numpy random probability-density
1个回答
0
投票

我相信你可以尝试关注。你有不平等

G×<= h

xi< 1 for any i

xi >= 0 对于任何 i

你会发现满足上述所有条件的交凸多边形。 从每个维度的多边形中你得到

max xi 和 min xi,显然这些值小于 1 且大于或等于 0。

然后对由最小值/最大值定义的超立方体中的点进行采样,然后应用矩阵检查

伪代码

而真实:

对于范围 (0,100) 内的 i:

xi = 最小 xi + (最大 xi - 最小 xi) U01

如果 G x <= h: break

© www.soinside.com 2019 - 2024. All rights reserved.