Acessibilidade / Reportar erro

Beam search filtrado com inserção de ociosidade na programação de uma máquina em ambiente do tipo jit

Filtered beam search with ociosity insertion for single machine scheduling in a jit environment

Resumos

Este trabalho avalia a utilização do beam search filtrado (BSF) combinado com um algoritmo de inserção de ociosidade (AIO). O caso estudado é baseado em uma única máquina, com datas de entrega múltiplas e com penalidades distintas de adiantamento e de atraso para cada ordem. O objetivo a ser alcançado é a minimização do custo total. Para isso, o BSF é utilizado para gerar as seqüências, e o AIO, para definir os programas. Assume-se que a dificuldade de solução do problema é dependente de dois parâmetros: fator de atraso médio e amplitude relativa das datas de entrega. Testes empíricos comparativos são realizados por meio de simulação computacional, no qual se mede o tempo de solução e o valor alcançado pela função-objetivo. Os resultados indicam que de uma forma geral, o procedimento proposto propicia uma diminuição no custo total e, além disso, que para a escolha de um procedimento apropriado, o ideal é se conhecer o valor dos parâmetros.

programação de uma máquina; inserção de ociosidade; beam search filtrado; just-in-time


This work evaluates the use of a filtered beam search (FBS) combined with an ociosity insertion algorithm (OIA). The case studied is based on a single machine, with multiple due dates, and distinct earliness and tardiness penalties for each job. The objective function is to minimize total cost. For this, the FBS is used to construct sequences, and the OIA is used to obtain schedules. It is assumed that the degree of difficulty of solving the problem is dependent on two parameters: average tardiness factor and relative range of due dates. Comparative empirical tests were conducted with computational simulation, where computational solution time and the objective function value were evaluated. The results indicate that in general, the proposed procedure favours a decrease in total cost and, in addition, that before choosing an appropriate procedure, the ideal situation is to know the value of the parameters.

single machine scheduling; ociosity insertion; filtered beam search; just-in-time


Beam search filtrado com inserção de ociosidade na programação de uma máquina em ambiente do tipo jit

Filtered beam search with ociosity insertion for single machine scheduling in a jit environment

Emerson Carlos Colin

Departamento de Engenharia de Produção. Escola Politécnica da USP. Rua Catolândia, 765, CEP 02839-000, São Paulo – SP. Email: emerson@usp.br

RESUMO

Este trabalho avalia a utilização do beam search filtrado (BSF) combinado com um algoritmo de inserção de ociosidade (AIO). O caso estudado é baseado em uma única máquina, com datas de entrega múltiplas e com penalidades distintas de adiantamento e de atraso para cada ordem. O objetivo a ser alcançado é a minimização do custo total. Para isso, o BSF é utilizado para gerar as seqüências, e o AIO, para definir os programas. Assume-se que a dificuldade de solução do problema é dependente de dois parâmetros: fator de atraso médio e amplitude relativa das datas de entrega. Testes empíricos comparativos são realizados por meio de simulação computacional, no qual se mede o tempo de solução e o valor alcançado pela função-objetivo. Os resultados indicam que de uma forma geral, o procedimento proposto propicia uma diminuição no custo total e, além disso, que para a escolha de um procedimento apropriado, o ideal é se conhecer o valor dos parâmetros.

Palavras-chave: programação de uma máquina, inserção de ociosidade, beam search filtrado, just-in-time.

ABSTRACT

This work evaluates the use of a filtered beam search (FBS) combined with an ociosity insertion algorithm (OIA). The case studied is based on a single machine, with multiple due dates, and distinct earliness and tardiness penalties for each job. The objective function is to minimize total cost. For this, the FBS is used to construct sequences, and the OIA is used to obtain schedules. It is assumed that the degree of difficulty of solving the problem is dependent on two parameters: average tardiness factor and relative range of due dates. Comparative empirical tests were conducted with computational simulation, where computational solution time and the objective function value were evaluated. The results indicate that in general, the proposed procedure favours a decrease in total cost and, in addition, that before choosing an appropriate procedure, the ideal situation is to know the value of the parameters.

Key words: single machine scheduling, ociosity insertion, filtered beam search, just-in-time.

1. Introdução

Desde o final dos anos 80, vários trabalhos têm apontado para uma linha de pesquisa que utiliza um dos principais pontos da filosofia JIT - evitar que produtos e componentes sejam produzidos ou entregues antes da data correta - como parte da função-objetivo de um sistema que empurra a produção. Em outras palavras, seria a utilização de uma parte da filosofia JIT em um sistema que empurra a produção.

A adaptação dessa filosofia se resume basicamente na utilização da inserção de ociosidade. A inserção de ociosidade é relevante para ambientes onde exista um custo adicional caso o produto seja finalizado em horário anterior à sua data de entrega. Podem-se citar exemplos da utilização dessa filosofia na produção de produtos perecíveis ou na compra de componentes com custos muito altos. Como esse custo é absolutamente eliminado com a inserção de ociosidade não há razão para aceitá-lo. O inconveniente dessa inserção é a possibilidade de "arrependimento" futuro no caso de se precisar do tempo que foi gasto como ociosidade.

Este trabalho avalia a utilização do beam search filtrado (BSF) juntamente com um algoritmo de inserção de ociosidade (AIO). Como será visto adiante, o BSF gera seqüências de ordens e o AIO define os programas ótimos para as seqüências definidas pelo BSF. Os resultados computacionais indicam que, para uma média dos valores alcançados nas replicações de tipos de instâncias, o procedimento proposto suplantou o BSF em todos os casos analisados, indicando que realmente propicia um custo total de programação menor. Há casos em que a inserção de ociosidade chega a diminuir o valor da função-objetivo em mais de 40%. Por outro lado, a inserção de ociosidade fez com que o tempo de solução computacional piorasse, embora ainda dentro de valores aceitáveis.

2. Definição e Revisão Bibliográfica do Problema

Definições e terminologias utilizadas neste trabalho acerca da programação e seqüenciação são baseadas principalmente no livro de MORTON & PENTICO (1993). Abaixo será feita uma breve revisão dos principais tópicos a serem utilizados.

Neste trabalho haverá uma diferença entre a programação e a seqüenciação. A seqüenciação será definida como uma ordenação dos pedidos - ordens - de produção. Para um conjunto de ordens J={J1,...,Jn} e para σ(j) a j-ésima ordem na seqüência σ, deve-se encontrar a seqüência σ=<σ(1),σ(2),...,σ(n)> com σ(j)∈{1,2,...,n} e σ(j)≠σ(i) sempre que ji. Uma seqüência representada por <...> não deve ser confundida com um conjunto representado por {...}, pois o mesmo não possui seus elementos ordenados. Cada ordem Jj (j=1,...,n), possui quatro valores associados {pj,dj,wj,hj}, onde pj,dj,wj,hj são o tempo de processamento, a data de entrega, a penalidade de atraso e a penalidade de adiantamento respectivamente.

A programação será definida como a determinação dos horários de início e de término das ordens de uma dada seqüência. Para uma dada ordem Jj (j=1,...,n), existe um intervalo de processamento [ej,ej+pj] onde ej significa o horário efetivo de início do processamento da ordem Jj. No caso do problema de uma máquina, para duas ordens consecutivas Jσ(j) e Jσ(j+1), com intervalos de processamento definidos por [eσ(j),eσ(j)+pσ(j)] e [eσ(j+1),eσ(j+1)+pσ(j+1)], poderá haver intersecção entre os dois intervalos apenas nos pontos extremos dos intervalos. Seja Ws(j) o período de ociosidade antes da realização da ordem Jσ(j). Supondo que as ordens estejam disponíveis no instante 0, o programa π(σ) de um conjunto de ordens J, é a determinação do horário de início e de término de cada ordem, ou seja, π(σ)= <Wσ(1),pσ(1),Wσ(2),pσ(2),...,Wσ(n),pσ(n)>. Semanticamente pode-se dizer que para uma dada seqüência, um programa define o período de ociosidade antes do início de cada ordem Ws(j) e o período de processamento da mesma ps(j), para j=1,2,...,n.

Para casos em que não haja a possibilidade da inserção de ociosidade, isto é, Ws(j)=0, ∀j∈{1,2,...,n}, a programação e a seqüenciação são equivalentes pois cada ordem possui apenas um tempo de processamento a ela atribuído.

2.1 Definição do Problema

Para um programa π, pode-se denominar o horário de término da ordem Jσ(j) a função:

A maioria das outras funções de programação dependem desta função. A função diferença representa a quantidade de tempo em que o término de uma ordem difere de sua data de entrega. Por uma questão de simplicidade notacional, quando não causar erro conceitual, será dada preferência para a notação que omite a seqüência σ. Exemplos desse caso são apresentados abaixo, onde os valores das funções para Jσ(j) são equivalentes a valores para Jj. Define-se a função diferença como Lj=Cj-dj. Costuma-se separar a função diferença quando ela é positiva e quando ela é negativa. Quando é negativa, é denominada de adiantamento e definida por Ej=max{0,-Lj}; quando é positiva, é denominada de atraso e pode ser definida por Tj=max{0,Lj}.

Será considerado o caso de uma única máquina que deverá processar uma ordem de cada vez de um conjunto de ordens J={J1,J2,...,Jn}. A ordem Jσ(j) deve ser finalizada antes que a ordem Jσ(j+1) seja iniciada para σ(j)=1,2,...,n-1. As chegadas das ordens serão estáticas, ou seja, todas estarão disponíveis no instante inicial. O programa deverá ser realizado de maneira que cumpra as datas de entrega dj, sabendo-se que cada ordem demanda um determinado tempo pj para o seu processamento. Há possibilidade de inserção de tempo ocioso Wj antes da elaboração de uma determinada ordem Jj. A função-objetivo a ser analisada será do tipo min , sendo as penalidades hj>0 e wj>0.

2.2 Principais Resultados Conhecidos

A primeira publicação que se tem notícia acerca do problema especificado acima é devida à FRY et al. (1987). Embora os autores façam todo o desenvolvimento teórico com penalidades para cada ordem, hj e wj, os testes computacionais são apresentados com um único valor para todas as ordens, h e w. Não há comentários sobre a razão dessa simplificação. Com o procedimento proposto encontrou-se ótimos globais em diversas instâncias testadas e o comportamento médio em todo estudo foi menor do que 2% acima do ótimo global. A proposta de FRY et al. é uma heurística do tipo troca de pares adjacentes, com a possibilidade da inserção de ociosidade pela utilização da programação linear. Pelas características do problema, o procedimento de programação linear pôde ser resolvido em tempo polinomial, por um procedimento de um passo.

ABDUL-RAZAQ & POTTS (1988) analisaram o problema sem a possibilidade da inserção de ociosidade, utilizando a programação dinâmica e o branch-and-bound. Inicialmente os autores apresentaram 3 maneiras de se definir limitantes inferiores pela utilização de uma relaxação de estado-espaço na programação dinâmica. Em seguida, formularam um procedimento ótimo utilizando o branch-and-bound com seqüenciação para frente, com um limitante superior sendo definido por uma heurística de um passo e com os limitantes inferiores conforme uma das 3 propostas. Não houve nenhuma indicação forte de que um dos métodos fosse superior aos outros em todos os sentidos. Os autores concluem que a programação dinâmica deve ser utilizada na resolução de problemas até 10 ordens, enquanto que para problemas de até 25 ordens, deve-se utilizar o branch-and-bound com os limitantes inferiores sendo definidos pela programação dinâmica.

Os trabalhos de OW & MORTON (1988 e 1989) apresentam comparações entre 4 procedimentos heurísticos que combinam regras de despacho e funções de prioridade com beam search (BS). O problema analisado foi equivalente ao tratado aqui, só que sem a possibilidade de inserção de ociosidade. O melhor dos quatro procedimentos foi o BSF que será explicado detalhadamente adiante. O desempenho de todos esses procedimentos foi medido pelo custo obtido da heurística em teste e pela melhor solução conhecida - para instâncias pequenas branch-and-bound e para instâncias maiores limitante inferior, utilizando uma relaxação envolvendo a divisão da ordem em subordens e estas sendo resolvidas como um problema de programação linear. Para as instâncias de 15 e de 25 ordens, os procedimentos ficaram entre 1 e 7% acima do limitante inferior.

Posteriormente, YANO & KIM (1991) forneceram um outro procedimento de inserção de ociosidade. Nesse procedimento, os autores utilizaram uma formulação com equações recursivas, assumindo que wj>hj>0. Os autores utilizaram o branch-and-bound, já considerando a inserção de ociosidade no limitante inferior para verificar o desempenho de quatro regras de despacho e uma heurística de troca de pares adjacentes. Esse último procedimento é parecido com o utilizado por FRY et al. e utiliza como seqüência inicial àquela definida pela regra de despacho com melhor desempenho dentre as quatro testadas. Nos cinco casos, após a definição da seqüência final, utiliza-se o procedimento para a inserção de ociosidade e elaboração do programa. Os resultados indicaram que em média a heurística ficou apenas a 0,1% do ótimo. Os autores finalizam o trabalho apontando que haveria uma necessidade de se criar limitantes inferiores melhores do que os que foram utilizados no estudo.

3. Beam Search (BS)

De uma maneira direta e simplificada, pode-se dizer que o BS é uma técnica de busca que utiliza um certo número de soluções em paralelo em uma árvore de busca. O número de soluções em paralelo é chamado de largura da busca.

Para o desenvolvimento do trabalho serão utilizadas três operações com seqüências, definidas como segue:

Definição 1: se σ=<σ(1),...,σ(n)> é uma seqüência com n elementos, define-se a operação de transformação da seqüência σ, no conjunto J, denotada por conj(σ)=J, como aquela que forma um conjunto - sem ordenação - com todos os elementos pertencentes à seqüência, ou seja, J={σ(1),...,σ(n)} e |J |=n.

Exemplo: para σ=<A,B,C>, conj(σ)= {A,B,C}={B,A,C}=¼={C,B,A}.

Definição 2: se s1=<s1(1),...,s1(j)> e s2=<s2(1),...,s2(i)> são duas seqüências parciais (isto é, não são formadas necessariamente por todos os elementos disponíveis), define-se a concatenação de s1 e s2 como a seqüência <s1(1),...,s1(j),s2(1),...,s2(i)>. Uma operação de concatenação será denotada por s1+s2.

Exemplo: para s1=<A,B,C> e s2=<D,E,F>, s1+s2=<A,B,C,D,E,F>.

Definição 3: se σ=<σ(1),...,σ(n)> é uma seqüência completa e s1=<s1(1),...,s1(j)> é uma seqüência parcial - onde todo elemento de conj(s1) está em conj(σ) -, define-se a diferença entre σ e σ1 como a seqüência que contém os elementos ordenados com as mesmas relações de precedência que em σ, mas não contém os elementos de s1. Nesse caso a operação diferença será denotada por σ-s1=s2= <s2(1),...,s2(n-j)>.

Exemplo: para σ=<A,B,C,D,E,F> e s1=<B,D,E>, σ-s1=<A,C,F>.

As seqüências utilizadas adiante serão formadas pelos índices dos elementos de J. Seja n (nN: 0<n<n) o nível da árvore de busca; b a largura da busca, isto é, o número de seqüências completas retidas para arborescência no nível subseqüente; r (rN:1<r<b(n-n+1)) um nó em um determinado nível n. Seja uma seqüência completa formada no nó r do nível n e σ0 uma seqüência inicial completa. Cada seqüência será formada por uma seqüência parcial fixa (onde |conj()|=n) e uma seqüência parcial complementar .

Para o nó r do nível n, uma seqüência completa será formada da seguinte forma:

Deseja-se encontrar uma seqüência completa

onde representa uma seqüência parcial fixa contendo todos os elementos de J.

Seja R0=conj(σ0)={1,...,n} o conjunto de índices das ordens disponíveis pertencentes à seqüência inicial. Seja q (qN:1<q<b) um dos nós retidos para arborescência no nível posterior; o conjunto de índices de ordens disponíveis para serem processadas nos nós descendentes de q do nível n-1; (rN:1<r<b(n-ν+1)) o conjunto de todas as seqüências completas criadas no nível ν; (qN:1<q<b) a seqüência de seqüências - retidas - que contém os b menores valores da função ; a seqüência de q-ésimo menor custo. Para (uN:1<u<b), pode-se dizer que

ou, de uma forma mais compacta,

O procedimento tem início com a definição de um limitante superior, cuja seqüência é representada por σ0 =<σ0(1), σ0(2),...,σ0(n) >, onde σ0(j) significa o índice da ordem de jésima posição na seqüência σ0.

Posteriormente gera-se o primeiro nível da árvore de busca com n seqüências completas

O conjunto de todas essas seqüências formará o conjunto (j=1,2,...,n), onde para cada uma das seqüências, deve-se analisar o valor de sua função objetivo . Os b menores valores formarão a seqüência (qN:1<q<b).

No segundo nível, para cada seqüência parcial fixa retida no nó anterior , deve-se formar outras (n-1) seqüências parciais fixas. Para cada um dos b nós do primeiro nível, as seqüências parciais fixas serão definidas pelo primeiro termo do primeiro nível, uma enumeração completa das possíveis ordens no segundo nível e o restante da seqüência derivado de σ0. Portanto, cada índice de ordem j(onde ) pertencente ao segundo nível, formará seqüências completas do tipo

O conjunto de todas essas seqüências formará o conjunto ; 1<q<b;1<r<b(n-1)), onde para cada uma das seqüências, deve-se analisar o valor de sua função objetivo g(). Os b menores valores formarão a seqüência (qN:1<q<b).

Neste ponto a busca inicia-se no terceiro nível, e o mesmo procedimento é utilizado até o último nível da busca, no qual a seqüência escolhida como sendo a melhor, será definida como .

Como exemplo, pode-se citar o caso em que haja 5 ordens para serem seqüenciadas Jj (j=D,B,A,C,E). A largura de busca desejada é b=2. Um esquema gráfico do desenvolvimento da solução é mostrado na Figura 1. Inicia-se o procedimento encontrando-se uma seqüência inicial de acordo com algum procedimento como uma regra de despacho por exemplo.


Utilizando a regra de despacho, a seqüência inicial é definida por σ0= <A,B,C,D,E>. A seqüência inicial será considerada o limitante superior. Gera-se o primeiro nível da árvore com uma enumeração completa das ordens que possam estar na primeira posição da seqüência, mantendo os outros elementos de σ0 e retirando-se o elemento que foi colocado na primeira posição da seqüência de σ0, ou seja, = <A>+<σ0-A> = <A,B,C,D,E>, = <B,A,C,D,E> ,..., = <E,A,B,C,D>. Comparam-se os valores das funções-objetivo das seqüências obtidas g(), e escolhe-se as b=2 melhores. Como resultado , pois e pois .

Os nós criados no segundo nível serão apenas os "filhos" dos nós mantidos no primeiro nível. Para n um certo nível da árvore de busca - diferente dos níveis 0 e l -, o número de nós criados é equivalente a b(n-n+1). Portanto, no caso em análise, cada nó mantido no primeiro nível irá gerar outros quatro nós no segundo nível, totalizando 8 nós. Cada um dos nós será representado pelo primeiro termo do primeiro nível (B ou E), uma enumeração completa das possíveis ordens no segundo nível e o restante da seqüência derivado de σ0. Para o nó B, = <B,A>+<σ0-B,A> = <B,A,C,D,E>, = <B,C,A,D,E>, = <B,D,A,C,E>, = <B,E,A,C,D>. O mesmo procedimento é feito para o nó E, com o primeiro termo sendo = <E,A>+<σ0-E,A> =<E,A,B,C,D>. O restante do procedimento é apresentado na Figura 1. No segundo nível as melhores seqüências parciais são e , no terceiro nível e e no quarto nível e . No quinto e último nível, escolhe-se a seqüência de menor custo entre e .

4. Beam Search Filtrado (BSF)

O filtro aplicado no BS teve sua origem nos trabalhos apresentados por OW & MORTON (1988 e 1989). O filtro pode ser definido como uma função de avaliação prévia para o BS, transformando o BS em um método de busca de dois estágios. Conforme os estudos de OW & MORTON, pode-se inferir que o BS consegue melhores resultados com a utilização de um filtro adequado.

Na programação e seqüenciação, o filtro pode ser representado por uma função de prioridade da ordem Jj no horário t, jj(t). Dependendo da função-objetivo que se esteja trabalhando, essa função de prioridade também pode ser uma regra de despacho. Neste trabalho, será utilizada a função de prioridade denominada EXP-ET (Exponential - Earliness Tardiness) presente nos estudos de OW & MORTON e explicada detalhadamente no item 5.

Pode-se dizer que o procedimento é semelhante ao BS, diferindo apenas na forma de escolha das seqüências , a serem analisadas. Essa alteração de uma avaliação global de cada seqüência para uma avaliação local faz com que o método fique mais eficiente se o número de ordens é grande.

Deve-se formar um conjunto F={F11,F21,..., Ff1,F12,...,Ff2,...,F1b,...,Ffb} onde

com (d,qN:1<d<f;1<q<b), F0q=∅ e lembrando que nesse caso o argumento é um j e não t. Para cada ordem FdqF, deve-se elaborar e avaliar todas as seqüências completas , mantendo-se as

para (uN:1<u<b), com =∅.

As seqüências que não foram escolhidas para serem mantidas são eliminadas definitivamente. Portanto . O restante do procedimento é equivalente ao BS.

Para uma maior clareza de apresentação, o procedimento BSF está disponível no apêndice apêndice como um pseudocódigo.

5. Função de Prioridade EXP-ET

Uma função de prioridade é um procedimento que utiliza informações das ordens para definir qual deve ser processada subseqüentemente e se a mesma deve ter ociosidade inserida, antes de iniciar o seu processamento. Especificamente, a função de prioridade EXP-ET (jj(t)) pode ser definida como sendo:

onde k é um parâmetro de ajuste que determina o horário em que a função de prioridade começa crescer e pmed é o tempo de processamento médio das ordens que ainda não foram seqüenciadas, , sendo D o conjunto de ordens ainda não seqüenciadas.

A utilização da função pode ser no modo despacho, de maneira que, a ordem que apresentar o maior valor numérico dentre todas as disponíveis deve ser seqüenciada subseqüentemente. Neste trabalho a função será utilizada no modo despacho.

A Figura 2 mostra, para 2 ordens, a função de prioridade variando no decorrer do tempo. Perceba que uma ordem Jj que no horário t era menos prioritária que Ji, pode se tornar mais prioritária do que Ji no horário tt, onde Dt é um intervalo de tempo.


6. Inserção de Ociosidade

Problemas que levam em consideração o adiantamento, devem necessariamente utilizar a inserção de ociosidade. Caso não seja assim, uma das principais características desses problemas é deixada de fora. Mesmo assim, vários autores não trabalharam com a inserção de ociosidade (OW & MORTON, 1988 e 1989, ABDUL-RAZAQ & POTTS, 1988), provavelmente pelo fato de não conhecerem um algoritmo para tal. Permitindo a inserção de ociosidade como uma variável contínua, um conjunto com n ordens possui infinitos programas viáveis.

O primeiro trabalho a apresentar um AIO pertence a FRY et al. (1987). De uma maneira bastante clara nesse trabalho, os autores formularam o problema de inserção de ociosidade no problema de atraso e adiantamento com penalidades individuais, como um problema de programação linear. Pela característica do problema, o mesmo pôde ser resolvido em tempo O(n2).

De uma maneira provavelmente independente, GAREY et al. (1988) também propuseram um AIO no problema de atraso e adiantamento sem penalidades, com tempo O(n log n). Ambos os trabalhos supõem que os algoritmos sejam utilizados em uma seqüência definida preliminarmente.

Algum tempo depois, YANO & KIM (1991) propuseram um outro AIO baseado na programação dinâmica. A inserção de ociosidade também é feita após a seqüenciação e o tempo de solução no pior caso é O(n2 log n) demonstrando que a implementação desse algoritmo proporciona uma inserção de ociosidade com tempo menos eficiente do que os dois casos comentados anteriormente.

Neste trabalho será utilizada uma versão adaptada do AIO de GAREY et al. (1988), disponível em COLIN (1997) e COLIN & SHIMIZU (1998), para a utilização em funções-objetivo do tipo minΣ(hjEj+wjTj). De uma forma concisa, pode-se dizer que após uma seqüência completa ser gerada, o AIO insere a quantidade ótima de ociosidade na seqüência definida preliminarmente.

7. Estudo Computacional

O principal objetivo do estudo computacional é analisar o desempenho do BSF quando o mesmo é utilizado juntamente com o AIO. Comparações tentarão identificar casos em que a inserção de ociosidade poderia ser vantajosa levando em consideração características intrínsecas dos dados que estão sendo utilizados. Com a finalidade de se ampliar os estudos originais de OW & MORTON (1988 e 1989), as instâncias testadas serão de grandes dimensões. Devido a esse fator, torna-se inviável a utilização de um método ótimo para comparação.

Mesmo assim, uma hipótese a ser considerada é que a diferença entre a solução ótima e a solução gerada pelo BSF não se altera conforme o aumento do tamanho da instância. Assumindo que essa hipótese seja verdadeira - embora não haja uma garantia efetiva de que isso ocorra -, pode-se considerar as diferenças obtidas nos estudos de OW & MORTON equivalentes às diferenças obtidas neste estudo.

7.1 Variáveis Controladas

Desde o começo da década de 70, foram identificadas duas variáveis que parecem ter uma maior influência nos estudos que levam em consideração o atraso - considerando que o adiantamento é um atraso negativo. A primeira delas é o fator de atraso médio, t (SRINIVASAN, 1971), que pode ser definida semanticamente como a proporção de ordens que atrasariam caso a seqüência fosse obtida aleatoriamente. Matematicamente é definida como

A segunda é a amplitude relativa das datas, R (WILKERSON & IRWIN, 1971, BAKER & MARTIN, 1974). Essa variável indica o quanto as datas de entrega estão distribuídas no intervalo total de processamento das ordens. Matematicamente

Para uma maior clareza desses conceitos, a Figura 3 apresenta o significado gráfico dos mesmos. Note pela figura que as variáveis alteram a média das datas de entrega e o quanto essas datas estão distribuídas com relação ao tempo total de processamento.


7.2 Experimento Realizado

O BSF e o AIO foram programados em PASCAL 6.0 e implementados em um microcomputador com processador PENTIUM-133Mhz e 8MB de memória RAM.

As instâncias foram geradas com as seguintes características:

  • Número de ordens:

    n=100;

  • Fator de atraso médio:

    t∈{0,1;0,2;0,4;0,6; 0,8;0,9};

  • Amplitude relativa das datas de entrega:

    R∈{0,1;0,2;0,4;0,6;0,8;0,9};

  • Tempo de processamento:

    pj~

    U[1,100], onde ~

    U[×] representa uma distribuição uniforme discreta;

  • Data de entrega:

    , onde

    P =

    nE(

    p) = (

    n

    2+

    n)/2 define a soma da esperança dos tempos de processamento, de acordo com a média da distribuição;

  • Penalidade de adiantamento:

    hj~

    U[1,100];

  • Penalidade de atraso:

    wj~

    U[1,100].

Combinando as instâncias com relação a t e a R, obtém-se 36 tipos de instâncias. Para cada um desses 36 tipos foram geradas 20 instâncias.

Pelo fato de existirem problemas na geração de números aleatórios, uma instância só foi aceita de acordo com alguns critérios de aprovação. O critério é a proporção da diferença entre as variáveis reais e nominais, ou seja:

As definições de τreal e Rreal para uma determinada instância inst (onde |inst| representa o número de ordens da instância), são as seguintes:

Com a utilização do critério de aceitação não houve necessidade de se gerar as datas de entrega dependentes dos tempos de processamento, conforme normalmente ocorre na literatura. Note que os casos tratados na literatura podem ter problemas na geração dos tempos de processamento. Não há verificação se os mesmos foram gerados conforme o esperado. No caso proposto aqui, ambos, as datas de entrega e os tempos de processamento, têm seus valores avaliados após a geração.

Para uma dada proporção de desvio dos valores nominais, o programa aceita ou rejeita a instância em questão. Neste trabalho, foi utilizada uma proporção de 15%, tanto em t como em R, para a aceitação das instâncias.

Para os pares (τ,R)∈{(0,8;0,8),(0,8;0,9), (0,9;0,4),(0,9;0,6),(0,9;0,8),(0,9;0,9)}, foi permitida a geração de datas de entrega negativas. Os demais pares foram gerados de acordo com datas positivas. A razão para esse fato fica clara pela observação da Figura 3. Se o τ e o R são grandes, a parte esquerda de R - de dmin até dmed - possui uma região que fica antes de 0.

As soluções das instâncias foram separadas em 2 grandes grupos. O primeiro, denominado grupo 1, é o das soluções no modo despacho, isto é, sem inserção de ociosidade. O grupo 2 é no modo programação, isto é, com a utilização do AIO e com a seqüência inicial sendo definida por EXP-ET no modo despacho.

No modo despacho, programa-se as ordens de acordo com a seqüência, sem a inserção de ociosidade. Esse modo, de fácil implementação, é amplamente utilizado em indústrias. No modo programação, define-se uma seqüência preliminarmente e insere-se a ociosidade. Em seguida, elabora-se o programa com os respectivos horários de início e de término de cada ordem.

7.3 Interpretação dos Resultados

Apresentam-se abaixo as comparações entre os diversos casos com relação aos tempos de processamento computacional bem como aos valores das funções-objetivo.

Comparação com relação aos tempos de processamento computacional:Os resultados apresentados aqui serão os tempos de processamento computacional médios das 20 instâncias resolvidas com relação a um determinado par (t,R).

A Figura 4 apresenta os tempos de processamento computacional em centésimos de segundo (cs) nos experimentos do grupo 1. Nesse caso não houve variação dos tempos com relação aos parâmetros (τ,R).


No caso dos procedimentos com inserção de ociosidade, o BSF depende dos parâmetros (τ,R). A Figura 5 apresenta os tempos de processamento computacional para as larguras de busca 1 e 3, ao passo que a Figura 6 apresenta para as larguras 5 e 8.



Pelos gráficos, observa-se que enquanto o produto bf é pequeno com relação à escala de tempos, o tempo de solução é relativamente invariante com (τ,R). De uma maneira geral, o tempo diminui com o aumento de τ e de R. Portanto, os menores tempos são obtidos com os maiores valores do par (τ,R). Isso acontece pois nesse caso, a inserção de ociosidade é muito pequena - quando existe - e portanto o AIO é pouco utilizado.

Comparação com relação aos valores das funções-objetivo:A Tabela 1 apresenta uma análise das funções-objetivo. Como mencionado anteriormente, toda a massa de dados analisada foi com relação à média das 20 instâncias para um determinado par (τ,R). A coluna "g1*" representa o melhor valor alcançado (isto é, melhor média de 20 instâncias), considerando-se todas as combinações de b e f. A coluna "(b;f) de g1*" mostra qual combinação de (b;f) propiciou o melhor valor alcançado. A coluna "DP" representa o desvio-padrão das médias dos valores de (b;f) para um determinado par (τ,R). A coluna "diminuição do custo" mostra o quanto o valor mínimo do grupo 2 é menor do que o menor valor do grupo 1. É relevante observar que um desvio-padrão grande representa que a mudança nos valores de b e f alteram bastante os valores da função-objetivo.

Largura da busca e do filtro: Um fato curioso alcançado nos experimentos para o grupo 1 é que o f "ideal" para 25 ordens alcançada por OW & MORTON (1988 e 1989) se não é equivalente, é muito próxima da alcançada aqui para o caso de 100 ordens. Outro ponto que pode ser citado é com relação aos parâmetros testados. Nos estudos de OW & MORTON o leitor fica inclinado a entender que a utilização do filtro é boa para qualquer combinação de (τ,R). Para o grupo 1, a utilização do filtro sempre foi vantajosa conforme pode ser observado na Tabela 1, apesar de que em alguns casos, a utilização do filtro melhorou a busca em apenas frações de um ponto percentual. No grupo 2, isso nem sempre foi verdade. Os casos onde f=1 representam que o BS sem o filtro é melhor do que o BSF.

Na média geral, o f ideal para o grupo 1 está entre 2 e 4. Para o caso de b, desconsiderando-se o tempo de processamento computacional, quanto maior seu valor melhor. O filtro no grupo 2, na média geral também ficou entre 2 e 4. Um aumento da largura da busca também tende a melhorar os resultados.

Como resultado final e sugestão pode-se dizer que o filtro utilizado com cautela em casos bem estudados, pode melhorar significativamente o BS com relação ao valor alcançado pela função-objetivo.

Inserção de ociosidade: Para casos específicos, a inserção de ociosidade torna-se absolutamente vital. Especialmente para τ pequeno e R grande, a inserção de ociosidade melhora bastante o valor da função-objetivo. A Tabela 1 mostra casos cuja melhoria proporcionada pelo procedimento de inserção de ociosidade levou a função-objetivo diminuir em mais de 40%. Se for levado em consideração que nos casos práticos, em que os valores de τ tendem a ser pequenos e de R ser grandes (poucas ordens atrasarão e as datas de entrega são relativamente bem distribuídas ao longo do horizonte de programação), o procedimento proposto é ainda mais interessante.

Esses resultados indicam que uma boa escolha do tipo de procedimento, e dos parâmetros utilizados no procedimento como por exemplo b e f têm importância significativa para o bom desempenho do procedimento utilizado. Os resultados detalhados para todos os pares (τ,R) testados se encontram em COLIN (1997).

8. Considerações Adicionais

Se forem levados em consideração casos reais, a importância da inserção de ociosidade provavelmente seria diminuída. Isso aconteceria devido às empresas sempre terem uma carteira de pedidos que se aproxima de sua capacidade produtiva. Mesmo assim, a inserção de ociosidade como no caso estudado aqui deve ser encarada como uma ferramenta adicional de programação. Seu principal intuito é diminuir os custos referentes ao adiantamento na utilização de recursos.

A inserção de ociosidade freqüente indica que alguma providência deve ser tomada nos outros níveis de decisão. Por exemplo a eliminação de turnos de trabalho, a melhor definição das datas de entrega, o remanejamento de pessoal ou a diminuição do número de horas-extras realizadas podem ser opções mais lucrativas sob o ponto de vista da empresa. A inserção de ociosidade na programação da produção é feita com o intuito de diminuir os custos, mas sem levar em consideração a hipótese de se tomar decisões pertencentes a outros níveis.

Pela complexidade do procedimento, da forma que foi apresentado, parece que o BS só se adequaria num ambiente real de programação de uma máquina apenas. Dessa forma, ele faria a programação da máquina gargalo e as outras máquinas deveriam ser programadas com procedimentos mais simples como regras de despacho. Casos desse tipo são bem discutidos em MORTON & PENTICO (1993).

Como sugestão de pesquisas futuras, parece ser viável o desenvolvimento de um procedimento "mais poderoso" com relação aos resultados alcançados pelo BSF com inserção de ociosidade. Em alguns casos isolados, como por exemplo para certos (t;R) e (b;f), a inserção de ociosidade fez os resultados da busca piorarem. Poderia-se tentar, de alguma forma, elaborar um limitante superior utilizando ambos os procedimentos, com e sem inserção de ociosidade, para que o melhor dos dois fosse alcançado. Por exemplo, YANO & KIM (1991) utilizam o procedimento de inserção de ociosidade após a seqüência final ser definida. Por conseqüência, não há como o valor da função-objetivo no caso com inserção de ociosidade ser pior do que no caso sem.

Agradecimentos

Gostaria de agradecer aos referees, cujas sugestões e comentários ajudaram a melhorar a apresentação e a clareza deste trabalho. Este trabalho teve apoio financeiro fornecido pela CAPES (Coordenação de Aperfeiçoamento de Pessoal de Nível Superior) por intermédio de uma bolsa de mestrado institucional.

Apêndice: Pseudocódigo do BSF

Para o entendimento do pseudocódigo, define-se adicionalmente: um ";" separam dois comandos; o horário de término de processamento da seqüência parcial si no nível ν-1.

  • ABDUL-RAZAQ, T.S. & POTTS, C.N.: "Dynamic programming state-space relaxation for single machine scheduling", Journal of Operational Research Society, vol. 39, pp. 141-152, 1988.
  • BAKER, K.R. & MARTIN, J.B.: "An experimental comparison of solution algorithms for the single-machine tardiness problem", Naval Research Logistics Quarterly, vol. 21, pp. 187-199, 1974.
  • COLIN, E.C.: "Beam search e inserçăo de ociosidade no problema de programaçăo de uma máquina em ambiente do tipo JIT", Săo Paulo, Escola Politécnica, Universidade de Săo Paulo, dissertaçăo de mestrado, 106p., 1997.
  • COLIN, E.C. & SHIMIZU, T.: "Algoritmo de programaçăo de máquinas individuais com penalidades distintas para adiantamento e para atraso", submetido ŕ publicaçăo, 1998.
  • FRY, T.D.; ARMSTRONG, R.D. & BLACKSTONE, J.H.: "Minimizing weighted absolute deviation in single machine scheduling", IIE Transactions, vol. 19, pp. 445-450, 1987.
  • GAREY, M.R.; TARJAN, R.E. & WILFONG, G.T.: "One-processor scheduling with symmetric earliness and tardiness penalties", Mathematics of Operations Research, vol. 13, pp. 330-348, 1988.
  • MORTON, T.E. & PENTICO, D.W.:Heuristic scheduling systems: with applications to production systems and project management, Wiley, New York, 1993.
  • OW, P.S. & MORTON, T.E.: "Filtered beam search in scheduling", International Journal of Production Research, vol. 26, pp. 35-62, 1988.
  • OW, P.S. & MORTON, T.E.: "The single machine early/tardy problem", Management Science, vol. 35, pp. 177-191, 1989.
  • SRINIVASAN, V.: "A hybrid algorithm for the one machine sequencing problem to minimize total tardiness", Naval Research Logistics Quarterly, vol. 18, pp. 317-327, 1971.
  • WILKERSON, LJ. & IRWIN, J.D.: "An improved method for scheduling independent tasks", AIIE Transactions, vol. 3, pp. 239-245, 1971.
  • YANO, C.A. & KIM, Y.D.: "Algorithms for a class of single-machine weighted tardiness and earliness problems", European Journal of Operational Research, vol. 52, pp. 167-178, 1991.

apêndice

Datas de Publicação

  • Publicação nesta coleção
    05 Abr 2010
  • Data do Fascículo
    Ago 1998
Universidade Federal de São Carlos Departamento de Engenharia de Produção , Caixa Postal 676 , 13.565-905 São Carlos SP Brazil, Tel.: +55 16 3351 8471 - São Carlos - SP - Brazil
E-mail: gp@dep.ufscar.br