我有一个由一组不等式和等式描述的多面体,这些不等式和等式以numpy数组的形式给出。这些数组通常会很大,因为它们描述了MIPLIB问题的LP松弛。我想计算这个多面体的解析中心。如果可能的话,我想直接在Python代码中完成。但是,我也对这样的解决方案持开放态度,即(例如)将多面体描述写入MPS文件,并使用另一种工具来计算分析中心。
到目前为止,我已经尝试实现了原始-对偶牛顿算法,如“内点算法:Yinyu Ye的《理论与分析》中的方法。但是这种方法太慢了。我尝试过的另一种方法是使用目标为零的路径跟踪内点方法。为此,我使用了scipy的linprog。但是,对简单示例的评估表明,method="interior-point"
给出了一个与分析中心不同的内点。即使我设置了options={"resolve": False, "rr": False, "autoscale": False}
来防止修改多面体描述。使用method="highs-ipm"
将给予顶点解。
我很乐意听听你的想法。
1条答案
按热度按时间x8goxv8g1#
如果将多胞形描述为{ x| a_i^T_x〈= B_i },则求解析中心等于极小化函数f(x)= - sum_ilog(b_i-a_i^T_x)。
函数f是凸的和自协调的。我建议应用阻尼牛顿步骤,它应该在几次迭代中收敛。主要的计算工作将是求解牛顿线性系统。
有关阻尼步长牛顿法的说明,请参见https://web.stanford.edu/~boyd/cvxbook/(* 凸优化 *,Boyd和Vandenberghe)或https://francisbach.com/self-concordant-analysis-newton/中的第9.5.2节或