用半定规划松弛法求解交换变量或非交换算子的全局多项式优化问题
ncpol2sdpa的Python项目详细描述
ncpol2sdpa
ncpol2sdpa通过半定规划(sdp)松弛求解交换变量或非交换算子的全局多项式优化问题。优化问题可以是无约束的,也可以是等式和不等式约束的,也可以是矩约束的。目标是能够解决大规模优化问题。示例应用程序包括:
- 在交换变量上定义多项式优化问题时,生成的sdp层次与Lasserre’s相同。在本例中,该功能类似于Matlab工具箱Gloptipoly,并且具有chordal扩展名SparsePOP。
- ^关于parametric和bilevel多项式优化问题的{a4}。
- 当多项式在非对易算子上时,生成的sdp是navascués-pironio-acín(npa)层次结构中的一个步骤。最显著的例子是计算Bell inequalities的maximum quantum violation,也在multipartite scenarios中。
- Nieto-Silleras层次结构用于quantifying randomness和calculating maximum guessing probability。
- Moroder层次结构以启用ppt样式和其他附加约束。
- 基于对偶解的平方和分解。
- Ground-state energy problems:玻色子和fermionic systems,泡利自旋算符。该方法与约化密度矩阵(rdm)方法非常相似。
- Hierarchy for quantum steering。
该实现具有输入问题的直观语法,并使用sdp问题的稀疏表示来扩展大量的非对易变量。有关详细信息,请参见以下文章:
- 彼得·维泰克。算法950:非协调变量多项式优化问题的ncpol2sdpa稀疏半定规划松弛。acm数学软件上的事务,41(3),212015。内政部:10.1145/2699464。arxiv:1308.6029。
依赖关系
实现需要SymPy和Numpy。代码与python 2和3都兼容。虽然默认的cpython解释器足以解决中小型问题,但对于较大的问题,执行时间会变得过长。代码与pypy兼容。使用它可以获得10-20倍的加速。如果使用pypy,则需要Pypy fork of Numpy。
默认情况下,ncpol2sdpa不需要解算器,但它也无法解算生成的松弛。安装任何支持的解算器,它将被自动检测。
可选依赖项包括:
用法
文档可在Read the Docs上找到。下面的代码复制了Pironio,S.;Navascués,M.&;Acín,A.多项式优化问题的收敛松弛与非相容变量暹罗优化杂志,暹罗,2010,20,2157-2180。
fromncpol2sdpaimportgenerate_operators,SdpRelaxation# Number of operatorsn_vars=2# Level of relaxationlevel=2# Get Hermitian operatorsX=generate_operators('X',n_vars,hermitian=True)# Define the objective functionobj=X[0]*X[1]+X[1]*X[0]# Inequality constraintsinequalities=[-X[1]**2+X[1]+0.5>=0]# Simple monomial substitutionssubstitutions={X[0]**2:X[0]}# Obtain SDP relaxationsdpRelaxation=SdpRelaxation(X)sdpRelaxation.get_relaxation(level,objective=obj,inequalities=inequalities,substitutions=substitutions)sdpRelaxation.solve()print(sdpRelaxation.primal,sdpRelaxation.dual,sdpRelaxation.status)
进一步的例子可以在文档中找到。
安装
该代码在pypi上可用,因此可以通过
$ sudo pip install ncpol2sdpa
如果您想要最新的git版本,请按照克隆存储库后安装python模块的标准过程:
$ sudo python setup.py install
确认
这项工作得到了欧盟委员会第七个框架计划(授予协议编号:FP7-601138PERICLES)、FI-2013-1-0008和FI-2013-3-0004以及SNIC 2014/2-7和Swedish National Infrastructure for Computing项目的支持。SNIC 2015/1-162。