Python 假设我们知道多面体的顶点,并希望得到它的半空间表示a*x<;=B
我想获得半空间表示法Python 假设我们知道多面体的顶点,并希望得到它的半空间表示a*x<;=B,python,algorithm,matlab,computational-geometry,polyhedra,Python,Algorithm,Matlab,Computational Geometry,Polyhedra,我想获得半空间表示法A*x使用Python包,可以从多面体的顶点计算凸多面体的半空间表示法,如下所示: 从顶点表示到半空间表示 如何计算凸多面体的半空间表示。 多面体以顶点表示形式给出, 这个脚本展示了如何转换顶点表示 到半空间表示。 """ 将numpy作为np导入 进口多面体 顶点=np.数组([[2,-2],[2,2],-10,2],-10,-2]) 多边形=多边形.qhull(顶点)#凸壳 #'poly'是'polytope.polytope.polytope'类的实例, #用于表示凸多
A*x使用Python包,可以从多面体的顶点计算凸多面体的半空间表示法,如下所示:
从顶点表示到半空间表示
如何计算凸多面体的半空间表示。
多面体以顶点表示形式给出,
这个脚本展示了如何转换顶点表示
到半空间表示。
"""
将numpy作为np导入
进口多面体
顶点=np.数组([[2,-2],[2,2],-10,2],-10,-2])
多边形=多边形.qhull(顶点)#凸壳
#'poly'是'polytope.polytope.polytope'类的实例,
#用于表示凸多面体。
#非凸多面体也可以表示,
#使用类“polytope.polytope.Region”。
print('凸多面体的半空间表示:')
打印('矩阵'A`:')
印刷品(poly.A)
打印('向量'b`:')
印刷品(poly.b)
#打印(多边形)#另一种打印方式
#多面体的半空间表示
问题中给出的半空间表示表示相同的多面体
这个问题使用了两个不同的软件包
每一个都提供了不同的半空间表示。
如下面代码所示,这两个半空间
表示表示相同的多面体。代码
还表明,它们与上面使用
Python包polytope
显示问题的半空间表示为同一多面体的“”。
任何多面体都有无穷多个最小半空间表示。
下面的表示恰好是最小的,等于缩放和缩放
A的行和b的元素的排列。
"""
将numpy作为np导入
进口多面体
#使用“多边形”计算的半空间表示法`
#根据问题中给出的顶点表示
顶点=np.数组([[2,-2],[2,2],-10,2],-10,-2])
多边形=多边形.qhull(顶点)
#问题中给出的第一个半空间表示
A=np.array([
[-0.00000000e+00,-1.00000000e+00],
[-1.00000000e+00,-0.00000000e+00],
[4.93432455e-17,1.00000000 E+00],
[1.00000000e+00,-0.00000000e+00]]
b=np.数组([2,10,2,2.]))
问题1=多面体。多面体(A,b)
#问题中给出的第二个半空间表示法
A=np.array([
[0.0, -0.4472],
[0.4472, -0.0000],
[0.0, 0.4472],
[-0.0995, -0.0000]])
b=np.数组([0.8944,0.8944,0.8944,0.9950])
问题2=多面体。多面体(A,b)
#检查以上所有半空间表达是否正确
#表示相同的多面体
断言多边形==问题\u多边形\u 1,(多边形,问题\u多边形\u 1)
断言多边形==问题\u多边形\u 2,(多边形,问题\u多边形\u 2)
上面的Python代码可用于polytope
可以使用软件包安装程序从安装软件包polytope
:
pip安装polytope
这个主题超出了我的专业知识范围,但是您的python代码顶点=映射(数组,[[2,-2],[2,2],-10,2],-10,-2]])
似乎有些奇怪。您是否正在尝试制作多维numpy数组?因为结果变量顶点
是一个贴图对象
,而不是np.array
。对于函数compute\u polytope\u halfspace()
,这实际上与np.array([[2,-2],[2,2],[10,2],-10,-2]])
相同吗?@mimocha,看看这里的例子:我没有仔细看,但似乎两个输出都与比例因子相同。@YvesDaoust我不确定,符号不匹配,是吗?@GPrathap:是的,它们似乎是(当有标志时)。
from numpy import array
from pypoman import compute_polytope_halfspaces
vertices = map(array, [[2,-2],[2, 2], [-10, 2], [-10, -2]])
A, b = compute_polytope_halfspaces(vertices)
print(A)
print(b)
A = [[ -0.00000000e+00 -1.00000000e+00]
[ -1.00000000e+00 -0.00000000e+00]
[ 4.93432455e-17 1.00000000e+00]
[ 1.00000000e+00 -0.00000000e+00]]
b = [ 2. 10. 2. 2.]
vertices = [2 -2; 2 2; -10 2; -10 -2];
Xc = Polyhedron(vertices);
>> Xc.A
ans =
0 -0.4472
0.4472 -0.0000
0 0.4472
-0.0995 -0.0000
>> Xc.b
ans =
0.8944
0.8944
0.8944
0.9950