0 / 0
Retourner à la version anglaise de la documentation
Création de contraintes personnalisées avancées avec Python dans un Decision Optimization Modeling Assistant modèle
Dernière mise à jour : 21 nov. 2024
Création de contraintes personnalisées avancées avec Python dans Decision Optimization Modeling Assistant

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:

  1. 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.

    Nouvelle contrainte personnalisée dans le modèle, avec des éléments mis en évidence devant être remplis par l'utilisateur.

  2. 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.

    Contrainte personnalisée développée pour afficher les paramètres par défaut et le nom de la fonction.

  3. É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_dutieset limit , puis cliquez sur Entrée.
  4. 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.

    Règle personnalisée affichant les paramètres personnalisés et le bouton Python .

  5. 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 :

    Code Python montrant le bloc à personnaliser

    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.
  6. 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.
  7. 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)
  8. 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.
Recherche et réponse à l'IA générative
Ces réponses sont générées par un modèle de langue de grande taille dans watsonx.ai en fonction du contenu de la documentation du produit. En savoir plus