0 / 0
Volver a la versión inglesa de la documentación
Creación de restricciones personalizadas avanzadas con Python en un Decision Optimization Modeling Assistant modelo
Última actualización: 21 nov 2024
Creación de restricciones personalizadas avanzadas con Python en Decision Optimization Modeling Assistant

Este ejemplo de Decision Optimization Modeling Assistant muestra cómo crear restricciones personalizadas avanzadas que utilizan Python.

Antes de empezar

Requisitos
Para editar y ejecutar modelos de Decision Optimization , debe tener los siguientes requisitos previos:
Roles Admin o Editor
Debe tener los roles Admin o Editor en el proyecto. Los visores de proyectos compartidos sólo pueden ver experimentos, pero no pueden modificarlos ni ejecutarlos
servicio watsonx.ai Tiempo de ejecución
Debe tener un servicio watsonx.ai Runtime asociado a su proyecto. Puede añadir uno al crear un Decision Optimization experimento.
Espacio de despliegue
Debe tener un espacio de despliegue que esté asociado con el experimentode Decision Optimization . Puede elegir un espacio de despliegue al crear un experimentode Decision Optimization .

Abra cualquier modelo de Decision Optimization en Decision Optimization Modeling Assistant. Este ejemplo utiliza el ejemplo Shift Assignment , que está disponible en DO-samples, y utiliza el escenario AssignmentWithOnCallDuties . El escenario AssignmentWithCustomRule de este mismo ejemplo muestra el modelo completado con esta restricción personalizada ya añadida.

Acerca de esta tarea

El Modeling Assistant le proporciona muchas sugerencias de restricciones para el dominio de problemas que se pueden personalizar. Sin embargo, es posible que desee expresar restricciones más allá de las que están predefinidas para los dominios dados. Puede conseguirlo utilizando restricciones personalizadas más avanzadas que utilizan Python DOcplex. Este ejemplo ilustra cómo puede crearlas.

Este vídeo proporciona un método visual para aprender los conceptos y tareas de esta documentación. Después de cargar el ejemplo en el experimento de Decision Optimization puede seguir el vídeo.

Declaración de limitación de responsabilidad de vídeo: algunos pasos menores y gráficos de este vídeo pueden diferir de su plataforma. La interfaz de usuario también se mejora con frecuencia.

Obtenga más información en este blog deDecision Optimization sobre restricciones personalizadas con Python que se encuentra en la página de la comunidad de IBM Data Science.

Procedimiento

Para crear una nueva restricción personalizada avanzada:

  1. En el Generar modelo vista del modelo Modeling Assistant abierto, consulte el panel Sugerencias . Pulse el icono Mostrar todos ellos situado junto al campo de búsqueda. A continuación, se muestran todas las sugerencias por categoría. Expanda la sección Otros para localizar Nueva restricción personalizaday pulse en ella para añadirla al modelo. De forma alternativa, sin que se visualicen todas las sugerencias y categorías, puede especificar, por ejemplo, custom en el campo de búsqueda para buscar la misma sugerencia y pulsarla para añadirla al modelo.
    Se añade una nueva restricción personalizada al modelo.

    Nueva restricción personalizada en el modelo, con elementos resaltados para que los complete el usuario.

  2. Pulse Especifique la restricción. Utilice [corchetes] para datos, conceptos, variables o parámetros y especifique la restricción que desea especificar. Por ejemplo, escriba No [employees] has [onCallDuties] for more than [2] consecutive days y pulse Intro.
    La especificación se visualiza con los parámetros predeterminados (parameter1, parameter2, parameter3) para que los personalice. Estos parámetros se pasarán a la función Python que implementa esta regla personalizada.

    Restricción personalizada expandida para mostrar los parámetros predeterminados y el nombre de función.

  3. Edite los parámetros predeterminados en la especificación para asignarles nombres más significativos. Por ejemplo, cambie los parámetros a employees, on_call_dutiesy limit y pulse Intro.
  4. Pulse el nombre de función y especifique un nombre para la función. Por ejemplo, escriba limitConsecutiveAssignments y pulse Intro.
    Se añade el nombre de función y aparece un botón Editar Python.

    Regla personalizada que muestra parámetros personalizados y el botón Editar Python .

  5. Pulse el botón Editar Python .
    Se abre una nueva ventana que muestra el código Python que puede editar para implementar la regla personalizada. Puede ver los parámetros personalizados en el código como se indica a continuación:

    Código Python que muestra el bloque que se va a personalizar

    Observe que el código está documentado con los marcos de datos y los nombres de columna de tabla correspondientes tal como se ha definido en la regla personalizada. El límite no está documentado ya que se trata de un valor numérico.
  6. Opcional: puede editar el código Python directamente en esta ventana, pero es posible que le resulte útil editar y depurar el código en un cuaderno antes de utilizarlo aquí. En este caso, cierre esta ventana por ahora y en el panel Escenario , expanda los tres puntos verticales y seleccione Generar un cuaderno para este escenario que contiene la regla personalizada. Especifique un nombre para este cuaderno.
    El cuaderno se crea en los activos del proyecto preparados para su edición y depuración. Una vez que haya editado, ejecutado y depurado, puede copiar el código para la función personalizada de nuevo en esta ventana de Editar Python en Modeling Assistant.
  7. Edite el código Python en la ventana Modeling Assistant regla personalizada Editar Python .
    Por ejemplo, puede definir la regla para días consecutivos en Python como se indica a continuación:
        def limitConsecutiveAssignments(self, mdl, employees, on_call_duties, limit):
            global helper_add_labeled_cplex_constraint, helper_get_index_names_for_type, helper_get_column_name_for_property
            print('Adding constraints for the custom rule')
            for employee, duties in employees.associated(on_call_duties):
                duties_day_idx = duties.join(Day)  # Retrieve Day index from Day label
                for d in Day['index']:
                    end = d + limit + 1  # One must enforce that there are no occurence of (limit + 1) working consecutive days
                    duties_in_win = duties_day_idx[((duties_day_idx['index'] >= d) & (duties_day_idx['index'] <= end)) | (duties_day_idx['index'] <= end - 7)]
                    mdl.add_constraint(mdl.sum(duties_in_win.onCallDutyVar) <= limit)
  8. Pulse el botón Ejecutar para ejecutar el modelo con la restricción personalizada.
    Cuando se haya completado la ejecución, podrá ver los resultados en la Explore la solución vista.
Búsqueda y respuesta de IA generativa
Estas respuestas las genera un modelo de lenguaje grande en watsonx.ai que se basa en el contenido de la documentación del producto. Más información