2012-03-01 40 views
12

Tengo k desigualdades lineales en n variables (0 < k < n). No me interesa en particular qué es la solución, solo quiero comprobar si está vacía o no, es decir, si cualquier asignación de a mis variables n satisface el sistema. Alguien sabe una manera de resolver esto?Algoritmo para resolver sistemas de desigualdades lineales

Gracias!

+0

Uso de Fourier-Motzkin eliminaion para resolver el sistema de desigualdades ... http://en.wikipedia.org/wiki/Fourier%E2%80%93Motzkin_elimination –

+0

Por el teorema dual, creo que su problema es * equivalente * en dificultad para encontrar la solución óptima en un problema de programación lineal. Entonces, buscaría soluciones de programación lineal para una solución. – nneonneo

Respuesta

5

Esto se puede hacer usando un linear programming con una función objetivo constante. Es decir, solo verificando factibilidad del programa.

1

Solo necesita intersecar los rangos. He aquí cómo hacerlo en pseudocódigo:

// An array that has the ranges (inequalities) to test: 
fromToArray = [[0, 10], [5, 20], [-5, Infinity]] 

currentRange = [-Infinity, Infinity]; 
for each pair myRange in fromToArray 
    if currentRange[0] < myRange[0] 
      then currentRange[0] = myRange[0] 
    if currentRange[1] > myRange[1] 
     then currentRange[1] = myRange[1] 
    if currentRange[0] >= currentRange[1] // from greater than to, so set is empty. 
     then return "NO SOLUTION" 
end for each 

return "Solution is: " + currentRange 
0

Calcule el determinante de la matriz relacionada; si no es cero, hay una solución única; si es cero, o bien hay un número infinito de soluciones o ninguno - http://en.wikipedia.org/wiki/System_of_linear_equations

Alternativamente, usa Gaussian eliminación - http://en.wikipedia.org/wiki/Gaussian_elimination

+1

Desafortunadamente, la matriz no es cuadrada, por lo que el enfoque determinante no funcionará. No estoy seguro de que la eliminación gaussiana funcione en el sentido tradicional de las desigualdades: la resta de filas y la multiplicación por escalas negativas se volverían ilegales, ya que cambiarían la desigualdad. – GMB

+0

El enfoque determinante _ funcionará_. Solo necesitas rellenar la matriz con ceros. –

2

Utilice un solucionador SMT para la teoría de la aritmética lineal (Yices, Z3, ...). Estos programas están diseñados para encontrar modelos para la entrada que especificó. Por supuesto, también puede beneficiarse de los algoritmos existentes de otras maneras.

+0

Hola, C-Otto, tu respuesta parece más interesante, ¿puedes dar un ejemplo para hacer esto (correo electrónico: [email protected])? – Frank

+0

No, pero comenzar con el término de búsqueda 'SMT' debería darle una buena orientación. –

Cuestiones relacionadas