Erstellung von erweiterten benutzerdefinierten Einschränkungen mit Python in einem Decision Optimization Modeling Assistant Modell
Letzte Aktualisierung: 21. Nov. 2024
Erweiterte angepasste Integritätsbedingungen mit Python in Decision Optimization Modeling Assistant erstellen
In diesem Beispiel Decision OptimizationModeling Assistant wird gezeigt, wie erweiterte angepasste Integritätsbedingungen erstellt werden, die Pythonverwenden.
Vorbereitende Schritte
Copy link to section
Anforderungen
Zum Bearbeiten und Ausführen von Decision Optimization -Modellen müssen die folgenden Voraussetzungen erfüllt sein:
Administrator -oder Editor -Rollen
Sie müssen über die Rolle Admin oder Editor im Projekt verfügen. Viewer von gemeinsam genutzten Projekten können nur Experimente anzeigen, aber nicht ändern oder ausführen.
watsonx.ai Laufzeitdienst
Sie müssen einen watsonx.ai Runtime-Dienst haben, der mit Ihrem Projekt verbunden ist. Sie können eine hinzufügen, wenn Sie ein Decision OptimizationExperimenterstellen.
Bereitstellungsbereich
Sie benötigen einen Bereitstellungsbereich, der Ihrem Decision OptimizationExperimentzugeordnet ist. Sie können einen Bereitstellungsbereich auswählen, wenn Sie ein Decision OptimizationExperimenterstellen.
Öffnen Sie ein beliebiges Decision Optimization -Modell in Decision OptimizationModeling Assistant. In diesem Beispiel wird das Beispiel Shift
Assignment verwendet, das in DO-samplesverfügbar ist, und das Szenario AssignmentWithOnCallDuties . Das Szenario AssignmentWithCustomRule in diesem Beispiel zeigt Ihnen das abgeschlossene Modell mit dieser angepassten Einschränkung, das bereits hinzugefügt wurde.
Informationen zu dieser Task
Copy link to section
Modeling Assistant bietet Ihnen viele Vorschläge für Einschränkungen für Ihre Problemdomäne, die angepasst werden können. Möglicherweise möchten Sie jedoch für die Domänen andere als die vordefinierten Integritätsbedingungen angeben. Sie können dies erreichen, indem Sie erweiterte benutzerdefinierte Einschränkungen verwenden, die Python DOcplexverwenden. Dieses Beispiel veranschaulicht, wie Sie diese erstellen können.
Dieses Video enthält eine visuelle Methode zum Erlernen der Konzepte und Tasks in dieser Dokumentation. Nachdem Sie das Beispiel in Ihrem Decision OptimizationExperiment geladen haben, können Sie dem Video folgen.
Video-Haftungsausschluss: Einige kleinere Schritte und grafische Schritte in diesem Video können von Ihrer Plattform abweichen. Auch die Benutzerschnittstelle wird häufig verbessert.
Weitere Informationen finden Sie in diesem Decision Optimization -Blog zu angepassten Einschränkungen mit Python auf der Seite der IBM Data Science-Community.
Vorgehensweise
Copy link to section
So erstellen Sie eine neue erweiterte angepasste Integritätsbedingung:
Sehen Sie sich in der Modell erstellenAnsicht Ihres geöffneten Modeling Assistant -Modells das Teilfenster Vorschläge an. Klicken Sie auf das Symbol Alle anzeigen neben dem Suchfeld. Alle Vorschläge werden dann nach Kategorie angezeigt. Erweitern Sie den Abschnitt Andere , um Neue benutzerdefinierte Integritätsbedingungzu suchen, und klicken Sie darauf, um sie Ihrem Modell hinzuzufügen. Alternativ dazu können Sie, ohne dass alle Vorschläge und Kategorien angezeigt werden, beispielsweise custom in das Suchfeld eingeben, um denselben Vorschlag zu finden, und darauf klicken, um ihn Ihrem Modell hinzuzufügen.
Ihrem Modell wird eine neue angepasste Integritätsbedingung hinzugefügt.
Klicken Geben Sie Ihre Bedingung ein. [eckige Klammern] für Daten, Konzepte, Variablen oder Parameter verwenden und geben Sie die Integritätsbedingung ein, die Sie angeben wollen. Geben Sie beispielsweise No [employees] has [onCallDuties] for more than [2] consecutive days ein und drücken Sie die Eingabetaste.
Die Spezifikation wird mit Standardparametern (parameter1, parameter2, parameter3) angezeigt, die Sie anpassen können. Diese Parameter werden an die Funktion Python übergeben, die diese angepasste Regel implementiert.
Bearbeiten Sie die Standardparameter in der Spezifikation, um ihnen aussagekräftigere Namen zu geben. Ändern Sie beispielsweise die Parameter in employees, on_call_dutiesund limit und drücken Sie die Eingabetaste.
Klicken Sie auf Funktionsname und geben Sie einen Namen für die Funktion ein. Geben Sie beispielsweise limitConsecutiveAssignments ein und drücken Sie die Eingabetaste.
Ihr Funktionsname wird hinzugefügt und eine Schaltfläche Python bearbeiten wird angezeigt.
Klicken Sie auf die Schaltfläche Python .
Es wird ein neues Fenster mit Python-Code geöffnet, den Sie bearbeiten können, um Ihre angepasste Regel zu implementieren. Ihre angepassten Parameter werden im Code wie folgt angezeigt:
Beachten Sie, dass der Code mit den entsprechenden Datenrahmen und Tabellenspaltennamen dokumentiert wird, wie Sie in der angepassten Regel definiert haben. Der Grenzwert ist nicht dokumentiert, weil dies ein numerischer Wert ist.
Optional: Sie können den Python -Code direkt in diesem Fenster bearbeiten. Es kann jedoch hilfreich sein, Ihren Code in einem Notebook zu bearbeiten und zu debuggen, bevor Sie ihn hier verwenden. In diesem Fall schließen Sie dieses Fenster jetzt und erweitern im Teilfenster Szenario die drei vertikalen Punkte und wählen Notebook generieren für dieses Szenario aus, das die angepasste Regel enthält. Geben Sie einen Namen für dieses Notebook ein.
Das Notebook wird in Ihren Projektassets erstellt, die Sie bearbeiten und debuggen können. Nachdem Sie ihn bearbeitet, ausgeführt und getestet haben, können Sie den Code für Ihre angepasste Funktion zurück in dieses Python bearbeiten-Fenster in Modeling Assistant kopieren.
Bearbeiten Sie den Python -Code im Fenster ' Modeling Assistant Angepasste Regel Bearbeiten Python '.
Sie können die Regel beispielsweise für aufeinanderfolgende Tage in Python wie folgt definieren:
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)
Copy to clipboardIn die Zwischenablage kopiert
Klicken Sie auf die Schaltfläche Ausführen (Run) , um Ihr Modell mit Ihrer angepassten Einschränkung auszuführen.
Wenn die Ausführung abgeschlossen ist, können Sie die Ergebnisse in der Ansicht Lösung durchsuchenanzeigen.
Über den Einsatz von Cookies auf dieser WebsiteUnsere Websites benötigen einige Cookies, um ordnungsgemäß zu funktionieren (erforderlich). Darüber hinaus können mit Ihrer Zustimmung weitere Cookies verwendet werden, um die Nutzung der Website zu analysieren, die Benutzerfreundlichkeit zu verbessern und Werbung zu schalten.Weitere Informationen finden Sie in Ihren Cookie-Benutzervorgaben. Durch den Besuch unserer Website erklären Sie sich mit der Verarbeitung von Informationen einverstanden, wie in der IBMDatenschutzbestimmung beschrieben.Um eine reibungslose Navigation zu ermöglichen, werden Ihre Cookie-Präferenzen über die hier aufgeführten IBM Web-Domains hinweg gemeinsam genutzt.