Excel Solver: defina la restricción para que sea cero O mayor que

Excel Solver: defina la restricción para que sea cero O mayor que

Estoy creando un modelo para optimizar las órdenes de compra.

El importe a pedir debe ser superior a 500 o igual a cero.

¿Cómo defino tal restricción en Solver?

Probé una restricción binaria y también probé varias fórmulas diferentes, pero nada parece funcionar.

Básicamente necesito poder expresar ORen Solver, ¿cómo hago eso?

EDITAR: en el siguiente enlace puede ver el archivo de Excel que estoy usando: haga clic aquí

Respuesta1

Entonces, ¿se permite 0, no se permite 1, no se permite 499 y se permite 501? Parece un área no contigua. Por tanto, no es un problema de optimización pura sino también una especie de problema combinatorio. Me temo que Solver no puede manejar esto.

Debes analizar dos casos de uso por separado:

  • El importe es cero (valor fijo, cálculo simple);
  • La cantidad es 500 o mayor (optimizar en Solver usando la restricción >=500);

y luego compare estos dos casos usando una fórmula SI.


EDITAR:

Intenté utilizar restricciones "binarias" y "enteras" como sugirió Karl, pero no funcionaron.

  • Cree una variable binaria 0-1 y una variable continua >=500, y luego use IF para copiar la variable continua o escribir 0 en el valor de las compras.
  • Cree una variable binaria 0-1 y una variable continua >=500, y luego calcule las compras como su producto
  • Cree una variable entera >=499 y luego use IF para reemplazar 499 por 0 para el valor de compras

En todos los casos, el resultado fue a menudo erróneo y dependió de las condiciones iniciales. Al parecer a Solver no le gustan esas cosas.

Luego pensé en aplicar mi propuesta anterior a los seis valores de compra y optimizarlos de forma independiente, por ejemplo, optimizando la suma de los costes de todos los meses. Pero resulta que no son independientes: el inventario inicial depende del mes anterior y la compra óptima para un mes depende de si se realizó una compra el mes anterior. Por lo tanto, no es posible agregar un IF simple a cada mes.

Lo mejor que puedo hacer es lo siguiente.

Agregué una variable binaria 0-1 y una variable continua >=500, y calculé las compras de cada mes usando IF. Pero optimicé solo las variables continuas usando Solver. Las variables binarias son un parámetro. Es decir, seleccionamos los meses en los que se realizará una compra, luego usamos el Solver para calcular los valores de estas compras y luego anotamos el costo total resultante.

Esto debe repetirse para todas las combinaciones de compras y no compras. El número de estas combinaciones es 2 6 =64. Pero en realidad, si no compra nada en enero, terminará con un inventario de cierre negativo, lo cual no está permitido. Entonces sólo hay 32 combinaciones válidas. Agregué fórmulas para calcular los valores binarios del índice de combinación, repetí el índice 32 veces, inicié Solver cada vez a mano y copié los resultados "solo como valores" para cada combinación.

El resultado es que el coste mínimo es 4.625,00 € y existen dos combinaciones para llegar a este valor.

Aquí está el archivo subido a Google Docs, con una captura de pantalla de Solver.

Iniciar Solver varias veces a mano es tedioso, creo que se puede automatizar mediante macros.

Respuesta2

Cree una variable binaria agregando una restricción que indique que el valor de la variable (en la función objetivo) es binario. El coeficiente de esta variable en la función objetivo debe ser 0. Luego agrega las siguientes restricciones como lo haría normalmente:

-500B+X>=0 (nunca baje de 500)

-MB+X<=0 (combinado con la restricción anterior fuerza 0 cuando B es 0)

B= variable binaria1

M=Número positivo muy grande (mayor de lo que X puede ser alguna vez)

X=variable continua

[Editar]

Entiendo que quieres hacer algo como esto (también hice algunos cambios en tu archivo de hojas, pero no puedo compartir el archivo de Excel en el que trabajé aquí):

ingrese la descripción de la imagen aquí

información relacionada