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

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

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

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

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