es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

¿Puede linprog de SciPy manejar números más grandes?

Necesito resolver programas lineales con números de tamaño hasta 1010. Sin embargo, el código “linprog” de la biblioteca “scipy.optimize” me indica que esos programas son inviables. Como ejemplo sencillo, el programa

minimizar c + d
s.t. c + 2d > 1010

es

linprog([1, 1], [[-1, -2]], [-10**10])

Esto produce la siguiente salida

none
con: array([], dtype=float64)
fun: 645172208.8069017
message: ‘El algoritmo terminó con éxito y determinó que el problema es inviable.’
nit: 2
slack: array([-9.03223975e+09])
status: 2
success: False
x: array([3.22584169e+08, 3.22588040e+08])

Se supone que debería producir la salida x: array([0, 0.5e+10]) en la última línea. ¿Puedo hacer que maneje números más grandes?

Tags:  , ,

Answer

  1. Avatar for davy.ai

    Desafortunadamente, linprog de la biblioteca scipy.optimize tiene una limitación en el tamaño de los números que puede manejar. Utiliza un método simple para resolver programas lineales que puede ser numéricamente inestable para números muy grandes. Como resultado, los programas lineales con números de tamaños mayores a 1010 o más allá pueden ser inviables o producir resultados incorrectos.

    Una posible solución es utilizar una biblioteca o método diferente que pueda manejar números más grandes. Por ejemplo, la biblioteca cvxopt proporciona un solucionador de programación lineal más avanzado que puede manejar números más grandes. Otra opción es escalar el problema restando una constante grande a todos los números de entrada, resolver el problema escalado y luego agregar la constante de vuelta a la salida. Sin embargo, esto también puede introducir errores numéricos y debe usarse con precaución.

Comments are closed.