设G是(100,20)的矩阵,h是(100)的向量。
我如何随机生成一个大小为100的向量x,满足条件G 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
字符串
3条答案
按热度按时间nkcskrwz1#
我相信你可以试着跟着。你有不平等
G x <= h
Xi < 1,对任意i
对于任意i,Xi >= 0
您可以找到满足上述所有条件凸多边形交点,然后从该多边形中,您可以得到
Xi和MinXi,显然,这些值小于1并且大于或等于0。
然后,对由最小/最大值定义的超立方体中的点进行采样,然后才应用矩阵检查
伪代码
为真时:
对于在范围(0,100)中的i:
Xi =最小xi +(最大xi -最小xi)U 01
如果G x <= h:断开
mkh04yzy2#
这段代码生成一个向量,随机检查可行性。如果失败,从向量的每个值中减去随机的小数量,然后再试一次。这样我就能够在3秒内生成1000个非零向量:
字符串
打印(例如):
型
mwkjh3gx3#
另一种可能的方法是使用线性规划,正如@pjs在评论中建议的那样,线性规划的解是随机生成的样本。目标函数必须被扰动,以便在每次运行时得到不同的解。
字符串