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.

Rendimiento extremadamente bajo al utilizar un alto número de variables enteras y binarias en Pulp.

Cuando modelizo un problema de producción de lp, uso un alto número de enteros.

En primer lugar, el problema se resolvía en un tiempo razonable, pero cuando añadí un gran número de valores binarios (y) debido al método de Big M, tarda horas y horas y el programa no parece estar funcionando en absoluto. Esto se debe a que Pulp es bastante lento con las variables binarias.

La razón por la que usé el método de Big M es porque quería separar los límites de las variables, para obtener:

x(i,t) = 0 o x(i,t) >= 10 (lo que significa producir nada o al menos 10 piezas del producto i en cada período de tiempo t):

x(i,t) – 1 <= e + M * y(i,t)

x(i,t) – 9 >= -e – (1 – y(i,t)) * M

(e es un número muy pequeño constante y M un número muy grande constante)

¿Hay alguna otra forma de utilizar en lugar del método mostrado anteriormente? Podría definir los límites de x(i,t) como [10, inf], pero aún necesito el valor 0, ya que producir nada también es una solución importante y válida.

¡Gracias de antemano!

Tags:  ,

Answer

  1. Avatar for davy.ai

    Sí, hay otras formas de manejar variables binarias en la modelización de Programación Lineal (LP) que son más rápidas que usar el método de M grande. Un método de estos es utilizar las restricciones del indicador, también conocidas como restricciones lógicas, las cuales son restricciones que solo se activan cuando se cumplen ciertas condiciones. En este caso, podemos utilizar una restricción del indicador para imponer la condición de que x(i,t) sea 0 cuando y(i,t) sea 0, y x(i,t) sea mayor o igual a 10 cuando y(i,t) sea 1. La restricción del indicador puede escribirse de la siguiente manera:

    x(i,t) >= 10y(i,t)
    x(i,t) <= (10 – 0.0001) + (1 – y(i,t))
    M

    Esta restricción garantiza que cuando y(i,t) sea 0, x(i,t) debe ser 0, y cuando y(i,t) sea 1, x(i,t) debe ser al menos 10. La pequeña constante 0.0001 se agrega al límite superior para garantizar que sea menor que 10, ya que el solucionador puede no producir una solución precisa debido a errores numéricos. Esta formulación tiene la ventaja de evitar el uso de un valor M grande, lo que puede provocar problemas de estabilidad numérica y ralentizar el solucionador.

Comments are closed.