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:
- 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.
- 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.
- 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_duties
y limit
y pulse Intro.
- 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.
- 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:
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.
- 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.
- 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)
- 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.