Modelando um horário de trabalho complexo

9

Eu tenho um problema do mundo real que estou tentando representar e automatizar. Simplifiquei e abstraí para o seguinte:

  • Existem n locais de trabalho (P1, P2, ..., Pn).
  • Cada lugar, Pn tem uma chave, Kn.
  • Existem m Trabalhadores, (W1, W2, ..., Wm).
  • Para trabalhar em Pn, um trabalhador deve segurar Kn.
  • Cada chave pode ser mantida por um trabalhador ou deixada no Exchange, E.
  • Um trabalhador pode fazer uma viagem ao Exchange a qualquer momento para pegar algumas chaves não reclamadas ou deixar algumas para serem usadas por outras pessoas.

  • Agora, há um cronograma de trabalho exógeno que deve ser concluído em uma ordem estrita. Por exemplo:

    • 2016-04-21 W1 deve trabalhar no P6
    • 2016-04-21 W2 deve trabalhar na P3
    • ** troca de chaves necessária **
    • 22-04-2016 W3 deve funcionar na P3
    • 22-04-2016 O W2 deve funcionar no P6
  • Qualquer número de trabalhadores pode ter que trabalhar na Pn em algum momento da programação, embora nunca no mesmo dia

Nós sabemos:

  • A localização inicial de todas as chaves, com trabalhadores ou em E
  • As futuras ordens de serviço que cada trabalhador terá que cumprir

Então, estou lutando para modelar toda essa situação. Você pode sugerir estruturas e algoritmos de dados que eu deveria examinar, a fim de ter um controle sobre ele e começar a otimizar as viagens à troca para cada trabalhador?

O que eu quero minimizar é o número total de viagens para E. Um objetivo secundário seria garantir que nenhum trabalhador faça um número desproporcional de viagens.

Desde já, obrigado!!

Gareth Lloyd
fonte
2
Número médio de viagens a E por trabalhador = "número total de viagens" / m. Portanto, se m for constante, seus dois objetivos serão o mesmo. Mais interessante: acho que cada trabalhador pode carregar mais de uma chave ao mesmo tempo?
Doc Brown
Sim, os trabalhadores podem carregar qualquer número de chaves. Em relação à "média", acho que me expressei mal. Eu estava pensando mais em justiça, que nenhum trabalhador deveria ter que completar um número desproporcional de viagens, portanto, uma variação baixa. (editado questão para corresponder)
Gareth Lloyd
Como os trabalhadores obviamente confiam nas chaves e podem mantê-las durante a noite e pelo tempo que for necessário - desde que não seja necessária uma troca - por que não fazer um conjunto de chaves para cada trabalhador que eles mantêm permanentemente? Como alternativa, crie um conjunto de chaves para cada trabalhador em todos os lugares que eles frequentam por um determinado período, digamos, uma semana. As chaves são duplicadas conforme necessário para criar um conjunto de semanas para cada trabalhador. Todos os trabalhadores trocam chaves uma vez por semana.
Radarbob 21/04
Existe um custo (dinheiro ou tempo) para ir à troca?
21716 Dan Pichelman
Sim, mais viagens à bolsa são um resultado pior.
precisa saber é o seguinte

Respostas:

1

A questão é um pouco ambígua em um ponto-chave: quais elementos estamos tentando resolver. Estamos buscando otimizar a ordem em que os recursos são delegados? Minimizar viagens à bolsa? Maximizar o rendimento da ordem de serviço?

Com isso em mente, vou assumir que poderíamos estar fazendo qualquer mistura dessas coisas e manter a resposta em um nível bastante alto.

A primeira coisa que me vem à mente é que os problemas inter-relacionados que isso tenta resolver se concentram principalmente no gerenciamento de dependências. Trabalhadores, chaves e locais podem ser considerados dependências que devem ser resolvidas para concluir os trabalhos de trabalho.

Levando isso para o próximo nível, eu consideraria uma adaptação da classificação topológica ( https://en.wikipedia.org/wiki/Topological_sorting ). Modele o espaço do problema como um gráfico grande (os bancos de dados de gráficos modernos também podem ser um bom meio para algumas dessas análises) e use várias classificações topológicas para resolver aspectos diferentes do espaço do problema.

Em uma ligeira tangente, isso soa como um projeto muito divertido. Hoje invejo você, senhor.

Michael
fonte
Dê uma olhada nos gráficos no meu github github.com/MatheusArleson/Graphs
linuxunil
O algoritmo de coloração ajuda nessa situação? en.m.wikipedia.org/wiki/Graph_coloring
linuxunil