Estoy tratando de averiguar la solución general de un problema min-max. La forma general del problema es la siguiente:
x1 + x2 + ... + xn = T
a1x2 + a2x2 + ... + anxn = At * T
x1 >= 0
x1 <= T1
x2 >= 0
x2 <= T2
...
xn >= 0
xn <= Tn
Donde T y At son valores objetivo suministrados por el usuario.
a1..an son multiplicadores conocidos para las variables x1..xn respectivamente.
T1..Tn son valores máximos conocidos para cada variable x1..xn respectivamente.
Se trata esencialmente de un problema de programación lineal multiobjetivo. Mi objetivo es obtener un valor lo más cercano posible a los valores objetivo T y At. El problema es que la mayoría de los problemas de programación lineal tratan de maximizar o minimizar el resultado (en este caso, sería T y At), sin embargo, mi objetivo es proporcionar valores para x1..xn que estén lo más cerca posible de los valores particulares.
Mi formación en matemáticas no es tan fuerte como probablemente debería ser, pero he estado investigando para resolver este problema.
¿Sería el mejor enfoque mover los valores T y At * T a la izquierda como constantes, y tratar de minimizar la función (es decir, lo más cercano a cero como sea posible)? Si ese es el caso, ¿cómo podría abordar esto para una solución? La mayoría de los ejemplos para este tipo de problema que he visto no tienen constantes dentro de la función objetivo. ¿Simplemente se ignoran en términos de la matriz de solución? Eso significa que no es tan útil. Tal vez, ignorar las constantes, y comparar las soluciones propuestas a esas constantes, y volver a calcular si están fuera de una tolerancia básica, mediante la adición de restricciones adicionales?
--- EDITAR --- Basado en las sugerencias de @calculus, he llegado a lo siguiente.
Estoy intentando utilizar un algoritmo simplex para resolver este problema. El algoritmo toma una matriz MxN de coeficientes de restricción ([A]), un vector de longitud M de límites superiores de restricción ([b]) y un vector de longitud N de coeficientes objetivo.
¿Puede alguien confirmar que los objetos que estoy utilizando son correctos?
c = [0, 0, ... 0, 1, 1, 1, 1]
donde la primera parte corresponde a los coeficientes de x1..xn, y los últimos 4 1's corresponden a los coeficientes de y3+, y3-, y4+ e y4-.
b = [T1, T2, ..., Tn, T, AtT]
donde estos son los límites superiores para cada individuo x1..xn, y las soluciones para las ecuaciones sum(xn), y sum(anxn) respectivamente.
A = 1, 0, ... 0, 0, 0, 0, 0
0, 1, ... 0, 0, 0, 0, 0
...
0, 0, ... 1, 0, 0, 0, 0
1, 1, ... 1, -1, 1, 0, 0
a1, a2,...an, 0, 0, -1, 1
donde el primer lote de filas corresponde a las filas xn <= Tn, luego la 2ª línea corresponde a x1 + .. xn - y3+, + y3- = T y la última línea corresponde a a1x1 + ... anxn - y4+ + y4- = AtT
¿Tiene esto sentido?
--- Editar 2 ---
Utilicé un problema conocido con una solución para probar esto.
T = 1000, At = 1,5, a1 = 5, a2 = 1, T1 = 500, T2 = 1000.
Esto se puede resolver aritméticamente:
x + y = 1000, (x1+..+xn = T)
5x + y = 1500 (a1x1+...+anxn = AtT)
resulta en x = 125, y = 875
así que he creado las matricias necesarias:
b = [500, 1000, 1000, 1500]
c = [0, 0, 1, 1, 1, 1]
A = |1, 0, 0, 0, 0, 0|
|0, 1, 0, 0, 0, 0|
|1, 1, -1, 1, 0, 0|
|5, 1, 0, 0, -1, 1|
pero el solucionador que estoy usando dice que el programa no tiene límites.