¿Existe una forma de comprobar la viabilidad para valores dados de las variables de decisión en CPLEX?
Actualmente estoy tratando de implementar un algoritmo de optimización de enjambre de partículas en CPLEX para resolver un Problema de Enrutamiento de Vehículos con un gran número de clientes.
En primer lugar, escribí un modelo de optimización en OPL que ahora es capaz de obtener soluciones para instancias más pequeñas. Con el fin de ahora también ser capaz de resolver problemas con un número mayor de clientes, quiero hacerlo utilizando una heurística que tengo de un artículo (Optimización de Enjambre de Partículas).
Para esto, estoy implementando cada paso del algoritmo en un bloque principal (flujo de control) en ILOG Script. En cada iteración, el algoritmo propone una solución (valores para las variables de decisión) que ahora debe ser revisada para comprobar si es factible y cuál es el valor de la solución. En la siguiente iteración, se intenta mejorar la solución. Esto se repite hasta que se alcanza un cierto número de iteraciones.
Ya logré hacer que el algoritmo funcione. Pero ahora no sé cómo puedo hacer la comprobación de factibilidad.
Básicamente, ahora tengo valores para las variables de decisión que necesito ejecutar en el modelo para comprobar si se cumplen todas las restricciones para esta solución. ¿Cómo funciona esto en CPLEX utilizando el flujo de control?
Obviamente, sé cómo activar OPL para generar el modelo y ejecutar el solucionador CPLEX para obtener una solución para él, pero ¿cómo funciona cuando quieres darle a CPLEX los valores para las variables de decisión y simplemente quieres que pruebe la factibilidad y no haga ninguna optimización?
davy.ai
Para verificar si una solución es posible en CPLEX usando el control de flujo, puede usar el método
feasibility
de la claseCplex
. Aquí hay un fragmento de código de ejemplo:En este ejemplo,
model_file
es el nombre de su archivo de modelo de OPL. Primero, se crea un objetoCplex
a partir del archivo del modelo. Luego, se establecen los valores de las variables de decisión que desea probar para la viabilidad (x_values
en este ejemplo) usando el métodoset_values
del atributovariables
del objetoCplex
. Finalmente, se llama al métodofeasibility
, que devuelveTrue
si la solución es viable yFalse
si es inviable.¡Espero que esto ayude! Hágame saber si tiene más preguntas.