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.

¿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?

Tags:  , , , ,

Answer

  1. Avatar for 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 clase Cplex. Aquí hay un fragmento de código de ejemplo:

    # crear un objeto Cplex
    c = cplex.Cplex(model_file)
    
    # establecer los valores de las variables de decisión para probar la viabilidad
    x_values = [1, 0, 1, 0, 1]
    
    # establecer los valores de las variables de decisión en CPLEX
    c.variables.set_values(list(range(c.variables.get_num())),
                            x_values)
    
    # verificar la viabilidad
    feasible = c.feasibility()
    
    # imprimir el resultado de viabilidad
    if feasible:
        print("La solución es viable.")
    else:
        print("La solución es inviable.")
    

    En este ejemplo, model_file es el nombre de su archivo de modelo de OPL. Primero, se crea un objeto Cplex 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étodo set_values del atributo variables del objeto Cplex. Finalmente, se llama al método feasibility, que devuelve True si la solución es viable y False si es inviable.

    ¡Espero que esto ayude! Hágame saber si tiene más preguntas.

Comments are closed.