0 / 0
Torna alla versione inglese della documentazione
Creazione di vincoli personalizzati avanzati con Python in un modello Decision Optimization Modeling Assistant
Ultimo aggiornamento: 21 nov 2024
Creazione di vincoli personalizzati avanzati con Python in Decision Optimization Modeling Assistant

Questo esempio di Decision Optimization Modeling Assistant mostra come creare vincoli personalizzati avanzati che utilizzano Python.

Prima di iniziare

Requisiti
Per modificare ed eseguire i modelli Decision Optimization , è necessario disporre dei seguenti prerequisiti:
Ruoli Admin o Editor
È necessario disporre di ruoli Admin o Editor nel progetto. I visualizzatori di progetti condivisi possono solo visualizzare gli esperimenti, ma non possono modificarli o eseguirli
servizio di runtimewatsonx.ai
È necessario disporre di un servizio watsonx.ai Runtime associato al progetto. È possibile aggiungerne uno quando si crea un esperimento Decision Optimization .
Spazio di distribuzione
Devi avere uno spazio di distribuzione associato al tuo esperimento Decision Optimization . È possibile scegliere uno spazio di distribuzione quando si crea un esperimento Decision Optimization .

Aprire qualsiasi modello Decision Optimization in Decision Optimization Modeling Assistant. Questo esempio utilizza l'esempio Shift Assignment , disponibile in DO - samplese utilizza lo scenario AssignmentWithOnCallDuties . Lo scenario AssignmentWithCustomRule in questo stesso esempio mostra il modello completato con questo vincolo personalizzato già aggiunto.

Informazioni su questa attività

Modeling Assistant fornisce molti suggerimenti sui vincoli per il dominio dei problemi che possono essere personalizzati. Si potrebbe, tuttavia, voler esprimere vincoli oltre quelli predefiniti per i domini indicati. Puoi farlo utilizzando vincoli personalizzati più avanzati che utilizzano Python DOcplex. Questo esempio illustra come si possono creare questi.

Questo video fornisce un metodo visivo per apprendere i concetti e le attività in questa documentazione. Dopo aver caricato l'esempio nel tuo esperimento Decision Optimization puoi seguire il video.

Disclaimer video: alcuni passi minori e passaggi grafici in questo video potrebbero differire dalla tua piattaforma. Anche l'interfaccia utente viene spesso migliorata.

Scopri di più in questo blogDecision Optimization sui vincoli personalizzati con Python disponibile nella pagina della community di IBM Data Science.

Procedura

Per creare un nuovo vincolo personalizzato avanzato:

  1. Nel Crea modello vista del tuo modello Modeling Assistant aperto, guarda il riquadro Suggerimenti . Fare clic sull'icona Visualizza tutto accanto al campo di ricerca. Tutti i suggerimenti vengono quindi visualizzati per categoria. Espandere la sezione Altri per individuare Nuovo vincolo personalizzatoe fare clic su di esso per aggiungerlo al modello. In alternativa, senza visualizzare tutti i suggerimenti e le categorie, è possibile immettere, ad esempio, custom nel campo di ricerca per individuare lo stesso suggerimento e fare clic su di esso per aggiungerlo al modello.
    Un nuovo vincolo personalizzato viene aggiunto al tuo modello.

    Nuovo vincolo personalizzato in modello, con elementi evidenziati per essere completati dall'utente.

  2. Clicca Inserire il tuo vincolo. Utilizzare [ staffe] per dati, concetti, variabili o parametri ed inserire il vincolo che si desidera specificare. Ad esempio, immettere No [employees] has [onCallDuties] for more than [2] consecutive days e premere Invio.
    La specifica viene visualizzata con i parametri predefiniti (parameter1, parameter2, parameter3) per personalizzare. Questi parametri verranno passati alla funzione Python che implementa questa regola personalizzata.

    Vincolo personalizzato espanso per mostrare parametri predefiniti e nome funzione.

  3. Modifica i parametri predefiniti nella specifica per dare loro nomi più significativi. Ad esempio, modificare i parametri in employees, on_call_dutiese limit e fare clic su enter.
  4. Fare clic sul nome funzione e inserire un nome per la funzione. Ad esempio, immettere limitConsecutiveAssignments e fare clic su Invio.
    Viene aggiunto il nome funzione e compare un pulsante Modifica Python .

    Regola personalizzata che mostra i parametri personalizzati e il pulsante Modifica Python .

  5. Fare clic sul pulsante Modifica Python .
    Si apre una nuova finestra che mostra il codice Python che è possibile modificare per implementare la tua regola personalizzata. È possibile visualizzare i parametri personalizzati nel codice come segue:

    Python codice che mostra il blocco da personalizzare

    Si noti che il codice è documentato con corrispondenti frame di dati e nomi di colonne di tabella come si è definito nella regola personalizzata. Il limite non è documentato in quanto si tratta di un valore numerico.
  6. Optional: è possibile modificare il codice Python direttamente in questa finestra, ma potrebbe essere utile modificare e sottoporre a debug il proprio codice in un notebook prima di utilizzarlo qui. In questo caso, chiudere questa finestra per ora e nel riquadro Scenario , espandere i tre puntini verticali e selezionare Generare un notebook per questo scenario che contiene la regola personalizzata. Inserire un nome per questo notebook.
    Il notebook viene creato nei tuoi asset di progetto pronti per la modifica e il debug. Una volta modificato, eseguito e sottoposto a debug, è possibile copiare nuovamente il codice per la funzione personalizzata in questa finestra Modifica Python in Modeling Assistant.
  7. Modificare il codice Python nella finestra Modifica Python di Modeling Assistant regola personalizzata.
    Ad esempio, è possibile definire la regola per i giorni consecutivi in Python come segue:
        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. Fare clic sul pulsante Esegui per eseguire il tuo modello con il tuo vincolo personalizzato.
    Quando l'esecuzione viene completata è possibile vedere i risultati in Esplorare la soluzione vista.
Ricerca e risposta AI generativa
Queste risposte sono generate da un modello di lingua di grandi dimensioni in watsonx.ai basato sul contenuto della documentazione del prodotto. Ulteriori informazioni