约束非线性优化 - 多项式方程的超定系统

时间:2017-08-20 15:57:38

标签: python constraints least-squares polynomials nonlinear-optimization

我有一个由21个多项式方程组成的系统,共有12个未知数a, ..., l。每个等式都具有一般形式V1*abc + V2*abd + ... + V64*jkl = x,其中V1, ..., V64各自为0或1,每个等式在左侧包含三个不同产品的总和未知数。

有一组约束:a + b + c + d = 1e + f + g + h = 1i + j + k + l = 1。所有x s(右侧)的总和等于1.

我输入x s的向量作为输入。是否有一个求解器可以为a, ..., l提供x'的值,它在遵守约束的同时产生尽可能接近原始x的{​​{1}} s的向量?我正在寻找一个python实现。

我查看scipy.optimize,但我无法确定哪种方法更适合我的问题。

1 个答案:

答案 0 :(得分:0)

您可能想尝试this python binding for IPOPTIPOPT是一个优化库,它使用内点求解器来查找具有广义约束(等式和不等式约束)的函数的最优(局部)最优。正如您所描述的那样,您不会关心不等式约束。

优化目标的候选函数将是21个多项式方程的平方差的总和。假设你从你的初始x开始,这是一个21元素的向量,然后你的目标是:

  

(V1_0 * abc + V2_0 * abd + ... + V64_0 * jkl - x_0)^ 2 +(V1_1 * abc + V2_1 * abd + ... + V64_1 * jkl - x_1)^ 2 + ... (V1_ {21} * abc + V2_ {21} * abd + ... + V64_ {21} * jkl - x_ {21})^ 2

要使用IPOPT,您需要计算约束和目标的偏导数以及所有变量a-l。

如果IPOPT不适合您,您甚至可以将scipy.optimize与此目标函数一起使用。从文档来看,它看起来像scipy.optimize将根据你如何定义它来尝试选择适合你的问题的方法;如果你正确定义你的约束和目标,scipy.optimize应该选择正确的方法。