0 / 0
Go back to the English version of the documentation
Tworzenie zaawansowanych ograniczeń niestandardowych w języku Python
Last updated: 12 paź 2023
Tworzenie zaawansowanych ograniczeń niestandardowych w języku Python w programie Decision Optimization Modeling Assistant

W przykładzie Decision Optimization Modeling Assistant przedstawiono sposób tworzenia zaawansowanych ograniczeń niestandardowych, które korzystają z języka Python.

Zanim rozpoczniesz

Otwórz dowolny model Decision Optimization w programie Decision Optimization Modeling Assistant. W tym przykładzie użyto przykładu Shift Assignment , który jest dostępny w sekcji DO-samples, i użyto scenariusza AssignmentWithOnCallDuties . Scenariusz AssignmentWithCustomRule w tym samym przykładzie przedstawia kompletny model z już dodanym ograniczeniem niestandardowym.

O tym zadaniu

Modeling Assistant udostępnia wiele sugestii dotyczących ograniczeń dla danej domeny problemu, które można dostosować. Użytkownik może jednak chcieć wyrazić ograniczenia wykraczające poza te, które są predefiniowane dla danych domen. Można to osiągnąć, korzystając z bardziej zaawansowanych ograniczeń niestandardowych, które korzystają z języka Python DOcplex. W tym przykładzie pokazano, w jaki sposób można je utworzyć.

Zastrzeżenie dotyczące filmu wideo: Niektóre niewielkie kroki i kroki graficzne w tym filmie wideo mogą różnić się od platformy. Interfejs użytkownika jest również często ulepszany.

Więcej informacji na ten blogDecision Optimization o niestandardowych ograniczeniach w języku Python można znaleźć na stronie społeczności IBM Data Science.

Uwaga: Aby można było tworzyć i uruchamiać modele optymalizacji, do projektu musi być dodana zarówno usługa Machine Learning , jak i obszar wdrażania, który jest powiązany z eksperymentem:
  1. Dodaj plik Usługa systemu Machine Learning do projektu. Tę usługę można dodać na poziomie projektu (patrz sekcja Tworzenie instancji usługi Watson Machine Learning) lub podczas tworzenia nowego Decision Optimization eksperyment: należy kliknąć opcję Dodaj usługę systemu Machine Learning, wybrać lub utworzyć Nowa usługa, kliknąć opcję Powiąż, a następnie zamknąć okno.
  2. Powiąż obszar wdrażania z Decision Optimization eksperyment (patrz sekcja Obszary wdrażania). Obszar wdrażania można utworzyć lub wybrać podczas pierwszego tworzenia nowego Decision Optimization eksperymentu: kliknij opcję Utwórz obszar wdrażania, wprowadź nazwę obszaru wdrażania, a następnie kliknij opcję Utwórz. W przypadku istniejących modeli można również utworzyć lub wybrać obszar w panelu informacji Przegląd .

Procedura

Aby utworzyć nowe zaawansowane ograniczenie niestandardowe:

  1. W oknie Budowanie modelu Widok otwartego modelu Modeling Assistant sprawdź panel Sugestie . Jeśli wybrano opcję Wyświetl według kategorii , rozwiń sekcję Inne , aby znaleźć pozycję Nowe ograniczenie niestandardowe, a następnie kliknij ją, aby dodać ją do modelu. Alternatywnie, bez wyświetlania kategorii, można wprowadzić na przykład łańcuch custom w polu wyszukiwania, aby znaleźć tę samą sugestię, a następnie kliknąć ją, aby dodać ją do modelu.
    Do modelu zostanie dodane nowe ograniczenie niestandardowe.

    Nowe ograniczenie niestandardowe w modelu z elementami podświetlonymi do zakończenia przez użytkownika.

  2. Kliknij opcję Wprowadź ograniczenie. Użyj [ nawiasów] dla danych, pojęć, zmiennych lub parametrów i wprowadź ograniczenie, które chcesz określić. Na przykład wpisz No [employees] has [onCallDuties] for more than [2] consecutive days i naciśnij klawisz Enter.
    Specyfikacja jest wyświetlana z parametrami domyślnymi (parameter1, parameter2, parameter3), które można dostosować. Te parametry zostaną przekazane do funkcji Python , która implementuje tę regułę niestandardową.

    Ograniczenie niestandardowe rozwinięte w celu wyświetlenia domyślnych parametrów i nazwy funkcji.

  3. Zmodyfikuj parametry domyślne w specyfikacji, aby nadać im bardziej znaczące nazwy. Na przykład zmień parametry na employees, on_call_dutiesi limit , a następnie kliknij przycisk Enter.
  4. Kliknij nazwę funkcji i wprowadź jej nazwę. Na przykład wpisz limitConsecutiveAssignments i kliknij przycisk Enter.
    Nazwa funkcji zostanie dodana i zostanie wyświetlony przycisk Edytuj Python .

    Reguła niestandardowa przedstawiająca niestandardowe parametry i przycisk Edytuj Python .

  5. Kliknij przycisk Edytuj Python .
    Zostanie otwarte nowe okno zawierające kod Python , który można edytować w celu zaimplementowania reguły niestandardowej. Dostosowane parametry można wyświetlić w kodzie w następujący sposób:

    Kod Python pokazujący blok do dostosowania

    Należy zauważyć, że kod jest udokumentowany przy użyciu odpowiednich ramek danych i nazw kolumn tabeli zgodnie z definicją w regule niestandardowej. Limit nie jest udokumentowany, ponieważ jest to wartość liczbowa.
  6. Opcjonalnie: kod Python można edytować bezpośrednio w tym oknie, ale przed użyciem go w tym miejscu może okazać się przydatne edytowanie i debugowanie kodu w notatniku. W takim przypadku należy teraz zamknąć to okno i w panelu Scenariusz rozwinąć trzy pionowe kropki i wybrać opcję Wygeneruj notatnik dla tego scenariusza, który zawiera regułę niestandardową. Wprowadź nazwę tego notatnika.
    Notatnik jest tworzony w zasobach aplikacyjnych projektu, które są gotowe do edycji i debugowania. Po zakończeniu edycji, uruchomieniu i debugowaniu można skopiować kod funkcji niestandardowej z powrotem do tego okna Edycja Python w Modeling Assistant.
  7. Edytuj kod Python w oknie Modeling Assistant reguła niestandardowa Edytuj Python .
    Na przykład można zdefiniować regułę dla kolejnych dni w języku Python w następujący sposób:
        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. Kliknij przycisk Uruchom , aby uruchomić model z ograniczeniem niestandardowym.
    Po zakończeniu wykonywania można wyświetlić wyniki w oknie Poznaj rozwiązanie Widok.
Generative AI search and answer
These answers are generated by a large language model in watsonx.ai based on content from the product documentation. Learn more