2
respostas

[Dúvida] Otimização de pedidos baseado no estoque atual

Estou tentando implementar um modelo, que consiga minimizar os pedidos incompletos, baseado na quantidade em estoque dos produtos que estão nos pedidos. Porém mesmo vendo todo o conteúdo do curso, não consegui fazer uma associação do conteúdo para esse meu exemplo.

Exemplo:

pedidos = [{"id": "123123", "items": [{"sku": "AB0001M", "quantity": 1}, {"sku": "AB0021P", "quantity": 2}], {"id": "123345", "items": [{"sku": "CB0003G", "quantity": 3}, {"sku": "AB0021P", "quantity": 2}, {"sku": "DV0021G", "quantity": 1}]]

estoque = [{"sku": "AB0001M", "quantity": 10}, {"sku": "AB0021P", "quantity": 3}, {"sku": "CB0003G", "quantity": 3}, {"sku": "CB0003G", "quantity": 3}, {"sku": "DV0021G", "quantity": 1}]

Esse seria o primeiro cenário do modelo que estou tentando implementar, depois dessa parte (onde apenas o primeiro pedido está completo), a ideia seria adicionar mais informações e penalidades como exemplo, data do pedido para tentar "completar" os pedidos mais antigos.

2 respostas

Olá, Ricardo, tudo bem?

Considerando o seu estoque limitado para cada SKU,você poderá tratar cada SKU como um recurso e cada pedido como uma tarefa que demanda uma quantidade específica desses recursos. O objetivo é alocar os recursos (SKUs) para as tarefas (pedidos) de forma a minimizar o número de pedidos incompletos.

Você poderá seguir o caminho abaixo:

  1. Inicialmente, você poderia ordenar os pedidos com base em algum critério, como a data do pedido. Assim, os pedidos mais antigos seriam priorizados.

  2. Em seguida, seria feita uma análise de cada pedido na ordem estabelecida, verificando se há estoque suficiente para atender às suas demandas de SKU. Se houver estoque suficiente, os SKUs seriam alocados para o pedido e o estoque seria atualizado. Caso contrário, o próximo pedido seria considerado.

  3. Esse processo se repetiria até que todos os pedidos fossem atendidos ou o estoque se esgotasse.

Destaco que essa abordagem, embora simplificada, pode não ser a mais otimizada para minimizar o total de pedidos incompletos. No entanto, ela pode ser útil como ponto de partida na implementação do seu modelo

Espero ter ajudado.

Caso surja alguma dúvida, fico à disposição.

Abraços e bons estudos!

Caso este post tenha lhe ajudado, por favor, marcar como solucionado ✓. Bons Estudos!

Olá Monalisa, tudo certo e com você?

Esse meu "problema" é um problema real, hoje eu já resolvo ele dessa maneira que você comentou, com algumas particularidades, porém é feito da maneira tradicional, com loops dentro de loops. Porém dessa forma provavelmente não consigo chegar na maneira mais otimizada possível, por isso tentei resolver esse problema utilizando os ensinamentos do curso da IA aumentada.

No curso foi utilizado CP-Sat solver da ferramenta ORTools, que resolve problemas com números inteiros. Eu não tenho certeza que esse solver pode resolver o meu problema especificamente, conversando com o Chat-GPT pra tentar resolver esse problema, ele montou algoritmos com esse mesmo modelo do curso e com outros modelos também, porém de nenhuma forma consegui resolver o problema completamente.

Eu consegui resolver parcialmente montando o seguinte modelo:

  1. Criando variáveis com o nome "{id_pedido}{sku}" sendo o valor da variável a quantidade no pedido.
  2. Criei uma variável condicional que para quantidade em estoque >= quantidade no pedido (do sku especifico) true, e a condição contrária false utilizando OnlyEnforceIf para essas condições.
  3. Utilizo o modelo para maximizar o número de pedidos completos.

Problema do modelo atual, todos os pedidos cujo algum sku no pedido tem quantidade maior que o que tem em estoque o vão ser incompletos, em contra partida todos os pedidos com sku que tem quantidade menor ou igual estoque vão estar completos, mas não seria o caso, visto que o modelo deveria levar em consideração as quantidades do mesmo sku em outros pedidos. (Ainda não consigo pensar nesse problema da forma matemática de se pensar, como o Guilherme fala no curso. Só consigo pensar na forma programática e "loopeana" (loop inside loop) de se pensar).

Quando estava tentando resolver esse problema inicialmente, achei algo sobre um algoritmo para resolver esse tipo de problema chamado de Order Simplex. Já vi alguma coisa, conversei com o Chat GPT também, mas também não consegui aplicar meu exemplo nesse algoritmo.

Só trazendo mais informações que talvez podem ser uteis.

Obrigado desde já, abraços.