Conforme mostrado na resposta anterior, esse problema pode ser modelado como um problema de agendamento com datas de lançamento e vencimento. No entanto, a heurística de Schrage funciona apenas para o casopj= 1 (todos os tempos de processamento são 1 1) ou quando as datas de lançamento e vencimento concordarem (ou seja, há um pedido que r1 1≤ ⋯ ≤rn e d1 1≤ ⋯ ≤dn)
Para o caso pj= palgoritmos polinomiais foram encontrados por Simons (1978) , Carlier (1981) e Garey et al. (1981) , correndo no tempoO (n2registron ), O (n2registron )e O ( n logn ), respectivamente.
O algoritmo de Garey et al. agenda tarefas de unidade de tempo, mas permite liberação arbitrária e datas de vencimento. O problema acima pode ser reduzido a essa configuração dividindo todas as datas e tempos de processamento porp. A idéia principal do algoritmo é encontrar um conjunto de regiões proibidas em que nenhuma tarefa tem permissão para iniciar. Eles mostram que a heurística de Schrage, ao respeitar as regiões proibidas, encontra um cronograma possível de produção mínima. Ao construir as regiões proibidas, seu algoritmo também pode detectar inviabilidade.
Para ver como o algoritmo funciona, primeiro observe um problema mais simples: agende n tarefas em tempo de unidade entre uma data de lançamento r e um prazo d respeitando regiões proibidas F=⋃Eu(umaEu,bEu), onde cada região (umaEu,bEu)é um intervalo aberto. (Observe que não estamos preocupados com a liberação e as datas de vencimento de tarefas individuais.)
Esse problema pode ser resolvido por Backscheduling : defina um horário de início da sentinelasn + 1= d, e para i = n , n - 1 , … , 1 definir hora de início sEu até a última hora, o mais tardar si + 1- 1 isso não é proibido.
Escreva B ( r , d, n , F) para uma aplicação de Backscheduling para as entradas acima e defina o valor de retorno como s1 1, a data de início mais recente possível para agendar o ntarefas. Agora seB ( r , d, n , F) < r não há cronograma viável para o ntarefas. Além disso, ser ≤ B ( r , d, n , F) < r + 1 nenhuma outra tarefa pode começar em ( B ( r , d, n , F) - 1 , r ) pois, caso contrário, não há novamente um cronograma viável para o n tarefas e, portanto, ( B ( r , d, n , F) - 1 , r ) pode ser declarada uma região proibida.
Acontece que essa lógica é suficiente para encontrar todas as regiões proibidas necessárias para fazer o trabalho heurístico de Schrage. Suponha que as tarefas sejam ordenadas de forma quer1 1≤r2≤ ⋯ ≤rn e escreva n ( r , d) para o número de tarefas liberadas e vencidas no intervalo fechado [ r , d].
- conjunto F= ∅
- para tarefas i = n , n - 1 , … , 1:
- c = min { B (rEu,dj, n (rEu,dj) , F) | ∀ j :dj≥dEu}
- E se c <rEu: retornar "sem agenda viável"
- senão se rEu≤ c <rEu+ 1: definir F= F∪ { ( c - 1 ,rEu) }
Uma implementação direta, como acima, levaria tempo O (n4). Garey et al. mostre (além da exatidão) que, atualizando os tempos obtidos pelo Backscheduling, juntando regiões proibidas sobrepostas e fazendo consultas "proibidas"O ( 1 ) tempo pode ser reduzido a O (n2)e usando estruturas de dados ainda melhores para O ( n logn ).