Home   |   Structure   |   Research   |   Resources   |   Members   |   Training   |   Activities   |   Contact

EN | PT

BrBRCEEn0101-74382000000100005

BrBRCEEn0101-74382000000100005

National varietyBr
Year2000
SourceScielo

Javascript seems to be turned off, or there was a communication error. Turn on Javascript for more display options.

Uma heurística de trocas para o problema de sequenciamento de tarefas em processadores uniformes

1 INTRODUÇÃO Neste artigo propõe-se um novo procedimento heurístico para o problema de sequenciamento de n tarefas independentes J1, J2, ... , Jn em mprocessadores uniformes M1, M2, ... , Mm, sem preempção. Cada tarefa Jj tem um tempo de processamento positivo pj e cada processador tem uma velocidade positiva si que são normalizadas de modo que s1 = 1£s2£s3£ ...£sm.

Sendo Ci o tempo de finalização do processador Mi, significando o somatório dos tempos de processamento de todas as tarefas alocadas ao processador Mi dividido pela velocidade deste processador, denominada de si. Então, o problema é determinar a alocação das tarefas que minimize o tempo máximo de finalização do processador mais carregado (makespan), definido como, Cmax = { Ci }. Usando a classificação de três campos introduzida por Graham et al. (1979), o problema é definido como sendo o Q½½Cmax.

Considerando o caso em que as velocidades s1 = s2 = ... = sm = 1, tem-se o problema de sequenciamento em processadores paralelos idênticos.

Vários exemplos podem ser encontrados no mundo real, tais como: indústrias com um parque de máquinas de diversas gerações e, no ambiente computacional, o problema pode ser considerado quando se trata de sistemas de processamento distribuído e em redes heterogêneas. Muitos outros exemplos de problemas reais podem ser encontrados, modelados e resolvidos como um Q½½Cmax .

O propósito do presente artigo é o de apresentar a heurística KPROC, um procedimento composto por três fases: uma fase construtiva e duas fases de melhoramento. Este algoritmo é descrito na seção 2. Os resultados computacionais são apresentados na seção 3. Os resultados computacionais indicam que o algoritmo proposto apresenta resultados muito próximos a um limitante inferior, encontrando a solução ótima em um grande número de casos, superando os resultados obtidos por outras heurísticas.

A maioria dos algoritmos desenvolvidos para o problema Q½½Cmax são adaptações de heurísticas inicialmente desenvolvidas para solucionar o problema P½½Cmax.

Estas heurísticas podem, de maneira genérica, ser classificadas em heurísticas construtivas e heurísticas de melhoramento. Grande parte destes algoritmos são do tipo construtivo, conforme pode ser observado nos estudos sobre heurísticas exatas e aproximadas apresentados por Horowitz & Sahni (1976) e Lawler et al. (1989).

Uma das heurísticas construtivas mais conhecida para o P½½Cmax é a desenvolvida por Graham (1969), denominada LPT (Longest Processing Time first). LPT propõe um sequenciamento através da alocação das tarefas aos processadores obedecendo uma ordem não crescente dos seus tempos de processamento. Considera-se inicialmente a alocação da tarefa de maior tempo de processamento e então aloca-se cada uma das tarefas restantes da seqüência ao processador que primeiro ficar ocioso até que todas elas estejam alocadas.

Duas adaptações da heurística LPT foram propostas para o problema Q½½Cmax, baseadas nos estudos iniciados por Liu & Liu (1974). Na primeira variante, apresentada por Gonzalez et al. (1977) e Dobson (1984) em trabalhos independentes, ordenam-se as tarefas em ordem não crescente do seu tempo de processamento. Considera-se inicialmente a alocação da tarefa de maior tempo de processamento e então, seguindo a lista ordenada, a próxima tarefa considerada para a alocação é designada ao processador que primeiro ficar ocioso. Em igualdade de condições a tarefa é alocada ao processador de maior velocidade de processamento.

A segunda variante do algoritmo LPT, apresentada por Morrison (1988), mantém a ordenação das tarefas, mas as tarefas são alocadas ao processador que primeiro ficar ocioso, uma vez processada a tarefa a ser alocada. Em igualdade de condições em dois ou mais processadores, a tarefa é alocada ao processador de maior velocidade.

Outro algoritmo originalmente proposto para o problema P½½Cmax e também adaptado para o problema Q½½Cmax é o MULTIFIT, Coffman et al. (1978). A adaptação é proposta por Friesen & Langston (1983) e Kunde (1983), também em trabalhos independentes, esta implementação transforma o problema de sequenciamento de tarefas em um problema de empacotamento (bin packing problem). Para transformar o problema de sequenciamento em um problema de empacotamento, considera-se que cada processador corresponde a uma caixa, no caso de processadores idênticos, a caixa mais carregada corresponde ao processador mais carregado. As tarefas a serem processadas correspondem aos itens a serem armazenados. Estendendo esta analogia ao caso de processadores uniformes, define-se o tamanho das caixas como variável, sendo função da velocidade do processador. O tamanho da caixa i é definida como sendo o valor determinado para a capacidade de cada caixa multiplicado por si , que corresponde a velocidade do processador i.

O algoritmo de empacotamento FFD (First Fit Decreasing) faz uma pré-ordenação dos itens a serem alocados em ordem não crescente de seu tamanho. No momento da alocação, o item é designado à primeira caixa, na qual este é passível de alocação (não excede a capacidade da mesma) ou, então, uma nova caixa é criada.

Na implementação do algoritmo MULTIFIT necessita-se de um limitante superior e um limitante inferior para o tamanho das caixas utilizadas no algoritmo FFD.

Então faz-se um processo iterativo atualizando os limitantes inferiores e superiores da solução, considerando as seguintes situações: no caso de falta de espaço para a alocação das tarefas, necessita-se aumentar o tamanho das caixas e caso haja sobra de espaço, diminui-se o tamanho das caixas.

2 A HEURÍSTICA KPROC O algoritmo heurístico proposto KPROC, pode ser resumido como: na fase 1, as tarefas são classificadas de acordo com seu tempo de processamento e designadas aos processadores de forma a obter uma distribuição razoavelmente balanceada.

Na fase 2, um balanceamento de carga é efetuado pela movimentação de uma tarefa do processador mais carregado para o processador menos carregado. Finalmente na fase 3, um balanço ainda melhor é efetuado através da troca de tarefas a serem efetuadas, entre o processador mais carregado e um dos outros processadores.

Uma descrição mais detalhada das fases do algoritmo KPROC é realizada a seguir.

Fase 1: Alocação inicial. Diferente de diversos algoritmos construtivos conhecidos, não é necessário uma ordenação das tarefas em função do seu tempo de processamento. A vantagem de não se fazer a ordenação inicial das tarefas é que se elimina a maior parcela da complexidade computacional deste tipo de algoritmo, podendo utilizar o tempo economizado para realizar outras tarefas.

Além disso a divisão das tarefas em intervalos facilita bastante a busca das tarefas a serem movidas ou trocadas, eliminando muitas pesquisas desnecessárias.

Para realizar a divisão das tarefas em subintervalos, deve-se conhecer apenas os limitantes inferior e superior dos valores dos tempos de processamento, ou seja, os valores de = min {pj} e [/img/ fbpe/pope/v20n1/a05img03.gif] = max {pj}. Então, [[/img/fbpe/pope/v20n1/ a05img02.gif], <formula/>] é dividido em k intervalos iguais I1, I2, ... , Ik, onde k é um parâmetro de entrada do algoritmo. A tarefa Jj é chamada de uma l-tarefa se pjÎIl.

Inicialmente inicializa-se nir = 0, i = 1, 2, ... , m e r = 1, 2, ..., k, onde nir é o número de tarefas do intervalo r designadas ao processador i. Então aloca-se cada l-tarefa ao processador com a menor razão de nil/si. Em caso de igualdade, a tarefa é alocada ao processador que tiver maior velocidade. Esta política busca um balanceamento de carga por intervalo, ou seja, o número de tarefas alocadas a cada intervalo é proporcional a velocidade do mesmo.

Fase 2: Fase de Balanceamento. Seja

o tempo médio de finalização, independente em relação a uma distribuição particular das tarefas aos processadores. Esta fase consiste na repetição do movimento de transferência de tarefas do processador mais carregado (com o maior Ci ), para o processador menos carregado, tendo como alvo [/img/fbpe/ pope/v20n1/a05img05.gif], buscando reduzir o tempo de finalização do processador mais carregado (makespan). O procedimento é descrito a seguir.

Passo   Identifique os processadores mais e menos carregados e chame-os de M1 e Mm, 1 - respectivamente.

Passo Calcule D1 = C1 - <formula/>, Dm = [/img/fbpe/pope/v20n1/ 2 - a05img05.gif]- Cm , D= min{D1,Dm} e D'=C1-Cm.O cálculo de D é utilizado para que se possa identificar quais tarefas poderão trazer melhorias.

Se sm D < <formula/>, Termina a FASE 2.Isto significa que não existem tarefas que, se executadas no processador m, produziriam um novo Cm menor ou igual a D . Observe que a velocidade do processador m, sm , é utilizada para que possamos ter a noção exata do impacto que o tempo de processamento de uma tarefa teria no tempo de finalização deste processador (por exemplo, se a tarefa Jj com tempo de processamento pj fosse processada em Mm, produziria um acréscimo de pj / sm no tempo de finalização).

Se sm D > <formula/> faça l := k ( o maior intervalo ).

Isto significa que qualquer uma das tarefas, se executada no processador m, produz um novo Cm menor ou igual a D .

Caso contrário sm D pertence a algum intervalo I1. Ou seja, identifico o intervalo a partir do qual devo buscar tarefas que são possíveis de produzir um novo Cm menor ou igual a D.

Passo Se nenhuma tarefa Jj com pjÎIl e pj£smD está alocada em Ml, para o passo 4.

3 - Caso contrário realoque a tarefa com pjÎIl de M1 em Mm e para o passo 1. Neste passo busca-se uma tarefa no intervalo de maior índice para ser trocada, neste intervalo tem-se as tarefas que produzem novos Cm mais próximos de D.

Passo Se nenhuma tarefa Jj com pjÎ<formula/> = I1 È I2 È ... È 4 - Il-1 está alocada em M1, para o passo 5. Caso contrário, realoque a tarefa com pjÎ <formula/>de Ml em Mm e para o passo 1.

Aqui busca-se uma tarefa nos intervalos de índice menor que l, pois é o local onde ainda posso obter uma tarefa que produza um novo Cm menor ou igual a D quando alocadas a Mm.

Passo Se l = k para a FASE 3. Não tarefas possíveis de ser alocadas em Mm 5 - produzindo um novo Cm menor ou igual a D .

Se nenhuma tarefa Jj com pj Î Il+ = { È Ii, i = l + 1, ... / pi< sm D' ou i = k} e pj< sm D', para a FASE 3, caso contrário, realoque uma tarefa de Il+ de Ml para Mm e para o passo 1. Aqui busca-se nos intervalos de índice maior que luma tarefa que produza um novo Cmmenor que D', ou seja, não atinge o alvo, mas ainda assim diminui o makespan.

Observa-se que as tarefas são agrupadas em conjuntos de acordo com o seu tempo de processamento, de tal forma a tornar mais eficiente a busca das tarefas candidatas a transferência entre os processadores Fase 3: Fase de duplas trocas. Novamente M1 e Mm referem-se aos dois processadores, mais e menos carregados respectivamente. (Os demais processadores são aleatoriamente relacionados). Nesta fase procura-se uma tarefa para troca do processador mais carregado M1 ( a tarefa chamada Jj ) com uma tarefa de um outro processador Mh (chamada de tarefa Jj'), começando pelo processador h = m, m-1, ..., até que uma tarefa seja encontrada.

A idéia é delimitar o intervalo de tarefas nos processadores alvo que possibilitem uma redução no valor de solução para cada tarefa do processador mais carregado, para isto busca-se um valor que minimize a diferença de tempos de processamento entre M1 e Mh.

O valor de q representa a diferença em tempo entre as de tarefas Jj e Jj' que possibilitam aos processadores envolvidos atingirem o equilíbrio de suas cargas <formula/>(que é o alvo da busca nesta fase do algoritmo), ou seja, q = pj'<formula/>. Ele é determinado, conforme equilíbrio de carga no final da transferência que ocorre entre os processadores envolvidos durante a fase 3.

Sendo C1' e Ch' o valor dos tempos de finalização de M1 e Mh , respectivamente, após a troca ser realizada, formulados como: C1' = C1' (pj'<formula/>)/s1e Ch' = Ch(pj'[/img/fbpe/ pope/v20n1/a05img07.gif])/sh.

Portanto no ponto de equilíbrio a igualdade C1' = Ch' é válida, desenvolvendo- se esta equação e isolando o valor de q , obtém-se q = [/img/fbpe/pope/v20n1/ a05img08.gif]. Observa-se que o ponto de equilíbrio é função das velocidades e dos tempos de finalização de M1 e Mh.

Portanto as tarefas disponíveis para transferência, são as que se encontram dentro dos limites obtidos pela seguinte fórmula: (pj- pj' )sh < C1 - Ch, que, rearranjada, pode ser expressa como, pj' > pj - [/ img/fbpe/pope/v20n1/a05img09.gif].

Então procura-se um par de tarefas Jj e Jj' com pj' < pj, onde | pj - pj' | é o mais próximo ao valor de q de tal forma a melhorar a qualidade da solução.

Procurando manter uma boa relação entre o esforço computacional e a qualidade da solução o procedimento é baseado na quantidade de tarefas do problema, como descrito a seguir.

Passo Se n < 100 para o Passo 2.

1 -  Caso contrário Identificar o primeiro par Jj' da tarefa Jj , considerando h = m, m - 1, ... , e de tal forma que pj'< pj e que pj' > pj - [/img/fbpe/pope/v20n1/ a05img09.gif]. Caso um par de tarefas que satisfaça estas condições for encontrado, volte a Fase 2. Caso contrário o algoritmo TERMINA.

Passo Para cada processador h = m, m-1, ... , calcular q = [/img/fbpe/pope/v20n1/ 2 - a05img08.gif] e identifique o par de tarefas Jj e Jj' onde | pj - pj'| é mais próximo ao valor de q ( pois, quanto mais próximo do valor de q for esta diferença, melhor será a qualidade da solução ) de tal forma que pj' < pj e que pj' > pj - <formula/>. Caso um par de tarefas que satisfaça a condição for encontrado, volte a Fase 2. Caso contrário o algoritmo TERMINA.

Considerando o fato que a heurística pode interagir uma quantidade indeterminada de vezes entre as fases 2 e 3, não é possível obter facilmente a avaliação da complexidade de pior caso do algoritmo. Pode-se empiricamente observar a boa performance do algoritmo KPROC em relação aos demais algoritmos.

Os resultados obtidos são apresentados na seção 3 a seguir.

3 RESULTADOS COMPUTACIONAIS A heurística KPROC foi comparada com três outras heurísticas conhecidas: (1) LPTU1, uma variante do LPT proposta por Gonzalez et al. (1977) e Dobson (1984).

(2) LPTU2, uma variante do LPT proposta por Morrison (1988).

(3) MFIT, uma variante do MULTIFIT proposto por Friesen & Langston (1983) e Kunde (1983).

Usou-se o termo variante porque todas as três implementações de heurísticas são adaptações originalmente propostas para o solução do problema P½½Cmax como afirmado anteriormente.

As quatro heurísticas são comparadas umas com as outras, e estas são comparadas com um limitante inferior definido como <formula/> (limitante inferior do valor ótimo). Também forma feitas algumas comparações com a solução ótima, porém com um conjunto diferente de problemas teste, pois o procedimento ótimo aceita valores inteiros.

Testes foram executados para o problema com m = 2, 3, 7, 10, 15, 20 e n= 10, 50, 100, 500, 1000 e tempos de processamento nos intervalos [1,100], [1,1000] e [1,10000], com distribuição uniforme, considerando valores inteiros e valores reais. A escolha destes problemas se deve ao fato de se buscar um algoritmo que seja bastante robusto e não tenha restrição quanto aos valores dos tempos de processamento. Os valores do tipo real são uma constante neste tipo de problema, uma vez que divisões entre o tempo de processamento e a velocidade do processador no qual ele vai ser processados são uma necessidade para se determinar a solução do problema. Os resultados aqui apresentados referem-se a distribuição uniforme e valores inteiros nos intervalos [1,100] e [1,10000] (tabelas_2 e 3), pois estes representam bem o desempenho do algoritmo.

Primeiro foi analisado o efeito do parâmetro k, o número de intervalos dos tempos de processamento, no desempenho do algoritmo. Foram testados diversos valores para k, dentro do intervalo [1,28]. Dentre estes, observando-se as melhores relações entre qualidade da solução e esforço computacional para obtê- la, definiu-se o kem função do valor da relação (m/n). Os valores recomendados de k* são apresentados na Tabela_1, considerando o valor de solução e o tempo computacional necessário para a obtenção da melhor solução segundo apresentado abaixo.

Em todos os problemas apresentados foi usado k = k* e todos os casos foram testados para um conjunto de 10 instâncias teste.

As variáveis utilizadas nas Tabelas_2, 3 e 4 são definidas abaixo:

LB : média dos valores de

considerando dez instâncias teste.

KPROC, LPTU1, LPTU2 e MFIT : média dos valores de solução encontrados por KPROC, LPTU1, LPTU2 e MFIT, respectivamente, considerando dez instâncias teste.

SO : média dos valores de solução ótima, considerando dez instâncias teste.

TKPROC, TLPTU1, TLPTU2 e TMFIT : média dos tempos de CPU, em segundos, gastos por KPROC, LPTU1, LPTU2 e MFIT, respectivamente, considerando dez instâncias teste.

As quatro heurísticas foram implementadas em linguagem C, testadas e executadas em uma estação de trabalho IBM RISC/6000 Modelo 25T.

Os resultados indicam que a heurística KPROC produz valores de solução, geralmente inferiores a 1% do valor do limitante inferior, que significa que a solução é muito próxima aos valores ótimos da solução. O algoritmo KPROC, comparado com as três outras heurísticas, apresenta na absoluta maioria das instâncias apresentadas o melhor resultado.

A heurística KPROC é também mais rápida que a MFIT, sendo que apresenta, na relação de tempo de CPU, a mesma magnitude apresentada pelas heurísticas LPTU1 e LPTU2, conhecidas por seu bom desempenho computacional. Em resumo, a heurística proposta produz soluções ótimas ou quase ótimas, com tempo computacional relativamente baixo e apresenta a melhor solução entre as heurísticas comparativas apresentadas. Para confirmar ainda mais esta afirmação, desenvolveu-se um esquema ótimo para solução deste problema baseado na analogia com o problema de alocação generalizada (PAG).

O PAG pode ser descrito, usando-se a terminologia do problema da mochila, ou seja, dados nitens e mmochilas, com pijsendo o lucro do item jse alocado a mochila i; wijsendo o peso do item jse alocado a mochila i; e cisendo a capacidade da mochila i; aloque cada item a exatamente uma mochila de modo a maximizar o lucro total, respeitando as restrições de capacidade de cada mochila.

Este problema apresenta uma relação com os problemas de sequenciamento, pois muitas vezes aparece utilizado para alocação ótima de n tarefas a mprocessadores, considerando pijo lucro; wija quantidade de recurso correspondente a alocação da tarefa jao processador i; e cia quantidade de recurso disponível em cada processador i.

No caso aqui apresentado, processadores uniformes, a analogia foi feita do seguinte modo: - considerou-se todos os lucros pij= 1; - os pesos wijforam considerados iguais a pi/ sj (onde pi é o tempo de processamento da tarefa ie sj é a velocidade do processador j); - a capacidade da mochila ci é inicializada com o valor da solução encontrada pela heurística KPROC, para todo i = 1 , ... , m, ou seja, um limitante superior para a solução ótima.

Para se encontrar a solução ótima do problema, utilizou-se um código para resolução do PAG denominado MTG, desenvolvido por Martello & Toth (1990).

Considerou-se a analogia apresentada anteriormente e seguiu-se o seguinte procedimento iterativo para obter a solução ótima.

Passo Faça a Solução Ótima receber, inicialmente, a Solução encontrada pela heurística 1 - KPROC.

Faça o valor de ci ser igual ao valor da solução encontrada pela heurística KPROC subtraída de uma unidade, para todo i = 1 , ... , m.

Passo Resolva o PAG correspondente.

2 - Passo Se a solução do PAG for factível, então 3 -      - Faça a Solução Ótima ser igual a Solução encontrada pelo PAG;      - Faça o valor de ci ser igual ao valor da solução encontrada pelo PAG subtraída de uma unidade, para todo i = 1 , ... , m; e volte para o passo 2.

Se a solução do PAG for infactível, então, apresente a solução ótima e PARE.

Uma vez que o código MTG trabalha com valores inteiros, foram gerados alguns novos conjuntos de dados para realizar os testes comparativos da heurística KPROC com a solução ótima. Para cada combinação de m= 2 , 3 e n =10 , 20 , 50 , 100, dez instâncias são geradas, considerando si = i,para i = 1 , ... , m e pj, para j = 1 , ... , n, gerado aleatoriamente no intervalo [1,100] considerando uma distribuição uniforme. Os tempos de processamento gerados devem obedecer a restrição de serem divisíveis por si = i,para i = 1 , ... , m, para que toda alocação, independente da velocidade do processador, gere tempos de finalização inteiros.

Uma síntese destes resultados é apresentada na tabela_4, onde os resultados apresentados são a média de dez instâncias teste. Desta tabela, pode-se notar que a maioria das soluções encontradas por KPROC é ótima. De fato, nas 80 instâncias testadas, foi observado somente um caso (m = 2 e n= 10) em que o resultado encontrado por KPROC foi uma unidade superior ao valor da solução ótima.

4 CONCLUSÃO A heurística KPROC demonstrou ser um algoritmo robusto em comparação com os outros métodos testados e com o limitante inferior. Também demonstrou um bom desempenho obtendo soluções bastante próximas da ótima e, em muitos casos a própria solução ótima, as custas de um esforço computacional razoável.


Download text