Criação de restrições personalizadas avançadas com Python em um Decision Optimization Modeling Assistant modelo

Este exemplo de Decision Optimization Modeling Assistant mostra como criar restrições customizadas avançadas que usam Python..

Antes de iniciar

Requisitos
Para editar e executar modelos do Decision Optimization , deve-se ter os pré-requisitos a seguir:
Funções Admin ou Editor
Deve-se ter as funções Admin ou Editor no projeto Os visualizadores de projetos compartilhados podem apenas ver experimentos, mas não podem modificá-los ou executá-los
serviço de tempo de execuçãowatsonx.ai
Você deve ter um serviço de tempo de execuçãowatsonx.ai associado ao seu projeto. É possível incluir um ao criar um Decision Optimization Experimento
Espaço de implementação
Deve-se ter um espaço de implementação associado ao seu Decision Optimization experimento. É possível escolher um espaço de implementação ao criar um Decision Optimization experimento..

Abra qualquer modelo Decision Optimization no Decision Optimization Modeling Assistant. Este exemplo usa a amostra Shift Assignment , que está disponível no DO-samplese usa o cenário AssignmentWithOnCallDuties . O cenário AssignmentWithCustomRule nesta mesma amostra mostra o modelo concluído com esta restrição personalizada já adicionada.

Sobre essa tarefa

O Modeling Assistant fornece muitas sugestões de restrições para o seu domínio de problema que podem ser customizadas No entanto, você pode desejar expressar restrições além daquelas predefinidas para os domínios determinados. É possível conseguir isso usando restrições customizadas mais avançadas que usam o Python DOcplex Este exemplo ilustra como você pode criar estes.

Este vídeo fornece um método visual para aprender os conceitos e tarefas nesta documentação. Depois de carregar o exemplo em seu Decision Optimization experimento é possível seguir o vídeo.

Aviso de vídeo: Algumas etapas menores e etapas gráficas neste vídeo podem ser diferentes da sua plataforma. A interface com o usuário também é frequentemente melhorada.

Leia mais neste blog do Decision Optimization sobre restrições customizadas com Python localizado na página da comunidade IBM Data Science.

Procedimento

Para criar uma nova restrição personalizada avançada:

  1. Na Modelo de Construção visualização de seu modelo Modeling Assistant aberto, consulte a área de janela Sugestões . Clique no ícone Exibir todos próximo ao campo de procura. Todas as sugestões são então listadas por categoria. Expanda a seção Outros para localizar Nova restrição customizadae clique nela para incluí-la em seu modelo. Como alternativa, sem todas as sugestões e categorias exibidas, é possível inserir, por exemplo, custom no campo de procura para localizar a mesma sugestão e clicar nela para incluí-la em seu modelo.
    Uma nova restrição personalizada é adicionada ao seu modelo.

    Nova restrição personalizada no modelo, com elementos destacados para serem concluídos pelo usuário.

  2. Clique em Digite sua restrição. Use [suportes] para dados, conceitos, variáveis ou parâmetros e digite a restrição que deseja especificar. Por exemplo, digite No [employees] has [onCallDuties] for more than [2] consecutive days e pressione enter.
    A especificação é exibida com parâmetros padrão (parameter1, parameter2, parameter3) para você customizar. Esses parâmetros serão passados para a função Python que implementa essa regra customizada.

    Restrição personalizada expandida para mostrar parâmetros padrão e nome da função.

  3. Edite os parâmetros padrão na especificação para dar a eles nomes mais significativos. Por exemplo, altere os parâmetros para employees, on_call_duties, e limit e clique em enter.
  4. Clique em nome da função e digite um nome para a função. Por exemplo, digite limitConsecutiveAssignments e clique em enter.
    Seu nome de função é incluído e um botão Editar Python aparece.

    Regra customizada mostrando parâmetros personalizados e botão Editar Python .

  5. Clique no botão Editar Python .
    Uma nova janela abre mostrando a você Python código que você pode editar para implementar sua regra customizada. Você pode ver seus parâmetros personalizados no código da seguinte forma:

    Python código mostrando bloco a ser customizado

    Percebem que o código está documentado com quadros de dados correspondentes e nomes de colunas da tabela como você definiu na regra customizada. O limite não é documentado já que este é um valor numérico.
  6. Opcional: Você pode editar o código Python diretamente nesta janela, mas você pode achar útil editar e depurar seu código em um notebook antes de usá-lo aqui. Neste caso, feche esta janela por enquanto e na pane Cenário , expanda os três pontos verticais e selecione Gerar um notebook para este cenário que contém a regra customizada. Digite um nome para este notebook.
    O notebook é criado em seus ativos de projeto prontos para você editar e depurar. Depois de editado, executar e depurá-lo você pode copiar o código para sua função personalizada de volta para esta janela Editar Python no Assistente de Modelagem.
  7. Edite o código Python na janela Modeling Assistant regra customizada Editar Python .
    Por exemplo, é possível definir a regra para dias consecutivos em Python da seguinte forma:
        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. Clique no botão Executar para executar o seu modelo com a sua restrição personalizada.
    Quando a execução é concluída você pode ver os resultados no Solução de Explore visualizar.