Python 2.7 线性不等式组的系数估计

Python 2.7 线性不等式组的系数估计,python-2.7,optimization,linear-programming,Python 2.7,Optimization,Linear Programming,我有一个n个线性不等式组。我正在寻找python中的一些算法或模块,这些算法或模块将找出满足最多不等式的未知参数的值 例如,不等式如下所示: 0.5*x1 + 0.8*x2 + 0.4*x3 + x4 + x5 + 0.2*x6 > 0.5 0.2*x1 + 0.5*x2 + x3 + 0.8*x4 + 0.4*x5 + 0.2*x6 > 0.5 0.7*x1 + 0.8*x2 + 0.9*x3 + x4 + x5 + 0.2*x6 < 0.5 0.12*x1 + 0.8*x2

我有一个n个线性不等式组。我正在寻找python中的一些算法或模块,这些算法或模块将找出满足最多不等式的未知参数的值

例如,不等式如下所示:

0.5*x1 + 0.8*x2 + 0.4*x3 + x4 + x5 + 0.2*x6 > 0.5
0.2*x1 + 0.5*x2 + x3 + 0.8*x4 + 0.4*x5 + 0.2*x6 > 0.5
0.7*x1 + 0.8*x2 + 0.9*x3 + x4 + x5 + 0.2*x6 < 0.5
0.12*x1 + 0.8*x2 + 0.4*x3 + 0.45*x4 + x5 + 0.2*x6 < 0.5
.
.
.
and
x1+x2+x3+x4+x5+x6 = 1

在这里,我想找出满足尽可能多的不等式的x1、x2、x3、x4、x5和x6的值。

使用Numpy软件包来解决这个问题。他们的榜样

Solve the system of equations 3 * x0 + x1 = 9 and x0 + 2 * x1 = 8:

>>> import numpy as np
>>> a = np.array([[3,1], [1,2]])
>>> b = np.array([9,8])
>>> x = np.linalg.solve(a, b)
>>> x
array([ 2.,  3.]) 

这是一个语言不可知的解决方案;您可以使用python中的任何混合整数线性编程库实现这一点,例如CPLEX、SCIP、glpk等

其思想是,通过使用大M技术添加一些辅助二进制变量y,您的问题可以表示为一个混合整数线性规划

有一组k不等式,其形式如下:

E[i]: sum[j=0..n] a[i][j]*x[j] <= b[i]
你可以看到,只要M[i]足够大:

如果y[i]=0,则总是验证EM[i]; 如果y[i]=1且EM[i]被验证,则E[i]也被验证。 因此,您所要做的就是解决混合整数问题:

Minimize: sum[i=0..k] y[i]
Subject to: EM[i] for all i=0..k
            sum[j=0..n] x[j] = 1
其中x是连续变量数组,y是二进制变量数组


解决此问题后,解决方案的组件x就是您要查找的值。此外,你可以通过计算y的最优值中值为1的分量的数量来得到满足的不等式的数量。

Navin,我不想求解线性方程组,而是我知道线性不等式组不会同时满足x1,x2,…,x6的任何值。所以我对满足大多数不等式的xs值感兴趣。例如,如果x1=0.1,x2=0.3,….满足15个不等式中的10个,x1=0.2,x2=0.4,….满足15个不等式中的12个,那么我的解决方案应该是第二组x值。你能公布你到目前为止所做的事情,以及你被卡住的地方吗?然后我会看看代码
Minimize: sum[i=0..k] y[i]
Subject to: EM[i] for all i=0..k
            sum[j=0..n] x[j] = 1