估计线性不等式系统的系数

时间:2015-02-18 06:58:32

标签: 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 + 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的值。

2 个答案:

答案 0 :(得分:0)

使用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.]) 

答案 1 :(得分:0)

这是一种与语言无关的解决方案;您可以使用python中的任何混合整数线性编程库来实现它,例如CPLEX,SCIP,glpk等

这个想法是你的问题可以通过添加一些辅助二进制变量y来表示为混合整数线性程序,使用&#34;大M&#34;技术

您有一组k形式的不等式:

E[i]: sum[j=0..n] a[i][j]*x[j] <= b[i]

对于这些约束中的每一个,选择一个足够大的常数M[j]&#34;,它总是大于左侧减去不等式的右侧。设y[i]为与约束关联的二元变量,并考虑修改后的不等式:

EM[i]: sum[j=0..n] a[i][j]*x[j] <= b[i] + M[i]*(1-y[i])

你可以看到(提供M[i]足够大):

  • 如果y[i]=0,则始终会验证EM[i];
  • 如果y[i]=1EM[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就是您要查找的值。此外,您可以通过计算1的最佳值中值为y的分量数来获得满意的不等式数。

相关问题