Cet exemple Decision Optimization Modeling Assistant vous montre comment créer des contraintes personnalisées avancées qui utilisent Python.
Avant de commencer
- Conditions requises
- Pour éditer et exécuter des modèles Decision Optimization , vous devez disposer des prérequis suivants:
- Rôles Admin ou Editeur
- Vous devez disposer des rôles Admin ou Editeur dans le projet. Les afficheurs de projets partagés ne peuvent voir que les expérimentations, mais ne peuvent pas les modifier ou les exécuter
- service d'exécutionwatsonx.ai
- Vous devez avoir un service d'exécutionwatsonx.ai associé à votre projet. Vous pouvez en ajouter un lorsque vous créez un Decision Optimization expérimentation.
- Espace de déploiement
- Vous devez disposer d'un espace de déploiement associé à votre Decision Optimization expérimentation. Vous pouvez choisir un espace de déploiement lorsque vous créez un Decision Optimization expérimentation.
Ouvrez un modèle Decision Optimization dans Decision Optimization Modeling Assistant. Cet exemple utilise l'exemple Shift
Assignment
, disponible dans DO-samples, et utilise le scénario AssignmentWithOnCallDuties
. Le scénario AssignmentWithCustomRule
de ce même exemple montre le modèle terminé avec cette contrainte personnalisée déjà ajoutée.
A propos de cette tâche
Modeling Assistant fournit de nombreuses suggestions de contraintes pour votre domaine de problème qui peuvent être personnalisées. Toutefois, vous pouvez souhaiter exprimer des contraintes au-delà de celles qui sont prédéfinies pour les domaines donnés. Pour ce faire, vous pouvez utiliser des contraintes personnalisées plus avancées qui utilisent Python DOcplex. Cet exemple montre comment vous pouvez les créer.
Cette vidéo fournit une méthode visuelle pour apprendre les concepts et les tâches de cette documentation. Après avoir chargé l'exemple dans votre Decision Optimization expérimentation , vous pouvez suivre la vidéo.
Clause de protection vidéo: Certaines étapes mineures et graphiques de cette vidéo peuvent différer de votre plateforme. L'interface utilisateur est également fréquemment améliorée.
Pour en savoir plus, consultez le blogueDecision Optimization sur les contraintes personnalisées avec Python qui se trouve sur la page de la communauté IBM Data Science.
Procédure
Pour créer une nouvelle contrainte personnalisée avancée:
- Dans le Créer un modèle afficher de votre modèle Modeling Assistant ouvert, examinez la sous-fenêtre Suggestions . Cliquez sur l'icône Afficher tous les éléments en regard de la zone de recherche. Toutes les suggestions sont ensuite répertoriées par catégorie. Développez la section Autres pour localiser Nouvelle contrainte personnaliséeet cliquez dessus pour l'ajouter à votre modèle. Sinon, sans afficher toutes les suggestions et catégories, vous pouvez entrer, par exemple, custom dans la zone de recherche pour trouver la même suggestion et cliquer dessus pour l'ajouter à votre modèle.
Une nouvelle contrainte personnalisée est ajoutée à votre modèle.
- Cliquez sur Entrez votre contrainte. Utiliser [crochets] pour les données, les concepts, les variables ou les paramètres et entrez la contrainte à indiquer. Par exemple, entrez No [employees] has [onCallDuties] for more than [2] consecutive days et appuyez sur Entrée.
La spécification s'affiche avec les paramètres par défaut (
parameter1, parameter2, parameter3
) que vous pouvez personnaliser. Ces paramètres seront transmis à la fonction Python qui implémente cette règle personnalisée.
- Éditez les paramètres par défaut dans la spécification pour leur donner des noms plus significatifs. Par exemple, remplacez les paramètres par
employees, on_call_duties
et limit
, puis cliquez sur Entrée.
- Cliquez sur le nom de la fonction et entrez un nom pour la fonction. Par exemple, entrez limitConsecutiveAssignments et cliquez sur Entrée.
Votre nom de fonction est ajouté et un bouton
Éditer Python apparaît.
- Cliquez sur le bouton Editer Python .
Une nouvelle fenêtre s'ouvre et vous montre le code Python que vous pouvez éditer pour implémenter votre règle personnalisée. Vous pouvez voir vos paramètres personnalisés dans le code comme suit :
Notez que le code est documenté avec les structures de données et les noms de colonne de table correspondants, comme vous l'avez défini dans la règle personnalisée. La limite n'est pas documentée car il s'agit d'une valeur numérique.
- Facultatif: vous pouvez éditer le code Python directement dans cette fenêtre, mais il peut s'avérer utile d'éditer et de déboguer votre code dans un bloc-notes avant de l'utiliser ici. Dans ce cas, fermez cette fenêtre pour l'instant et dans la sous-fenêtre Scénario , développez les trois points verticaux et sélectionnez Générer un bloc-notes pour ce scénario qui contient la règle personnalisée. Entrez un nom pour ce bloc-notes.
Le bloc-notes est créé dans vos actifs de projet prêt à être édité et débogué selon vos soins. Une fois que vous avez édité, exécuté et débogué, vous pouvez copier le code de votre fonction personnalisée dans cette fenêtre Éditer Python dans l'assistant de modélisation.
- Editez le code Python dans la fenêtre Modeling Assistant custom rule Edit Python .
Par exemple, vous pouvez définir la règle pour les jours consécutifs dans Python comme suit :
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)
- Cliquez sur le bouton Exécuter pour exécuter votre modèle avec votre contrainte personnalisée.
Une fois l'exécution terminée, vous pouvez voir les résultats dans le Explorer la solution afficher.