• Nenhum resultado encontrado

5. Métodos Heurísticos

5.2. Heurística de programação matemática (MIP-Heuristics)

5.2.1. Heurística de programação matemática proposta

Com o modelo matemático nas versões com único e múltiplos modos desenvolvido e com os objetivos de encontrar boas soluções em tempos computacionais pequenos, melhorar soluções conhecidas que possuem GAP de otimalidade (definido a seguir) e ser capaz de resolver problemas realistas de grande porte, foi desenvolvida uma heurística de programação matemática. Optou-se por também desenvolver métodos baseados em programação matemática por serem mais fáceis de implementar no modelo matemático já validado e é uma representação formal do problema real, além das vantagens conhecidas desses métodos como, por exemplo, a possibilidade de encontrar soluções factíveis rapidamente ou melhorar a qualidade de soluções conhecidas (Wolsey, 1998). Além dessas vantagens, é possível explorar a estrutura do problema devido à sua característica temporal e as montagens sequenciais das aeronaves. Considere que a melhor solução inteira é aquela solução factível que tem o menor valor de função objetivo, e o limitante inferior é o maior valor possível para a função objetivo até um ponto do processamento. Então, o GAP de otimalidade pode ser calculado utilizando a equação (54).

GAP=(Melhor solução inteiralimitanteinferior )

(Melhor solução inteira) (54)

Na implementação utilizada, optou-se por criar uma MIP-heurística com duas etapas principais. Na primeira etapa, é utilizada uma heurística construtiva do tipo Relax-and-Fix, visando construir uma solução factível. A função objetivo utilizada nessa etapa é diferente daquela que deve ser utilizada na solução final e é apresentada na equação (55). Essa função objetivo minimiza a soma dos tempos de término de cada atividade, combinada com o consumo de mão de obra com um peso menor (igual a 0,2) como critério de desempate. Desta forma, a etapa de construção tem como objetivo encontrar soluções que iniciem a programação das atividades no instante mais cedo possível. Optou-se por essa abordagem pois nos experimentos computacionais realizados durante o desenvolvimento da heurística, ela gerou soluções mais rapidamente e factíveis do que quando foi utilizada a função objetivo (44).

Minimizar

j=l J

t=1 T

i=1 I t⋅xj ,t ,i+

l=l L

s=1 S υl⋅als⋅0,2 (55)

Na segunda etapa, a solução factível gerada é então utilizada em duas heurísticas de melhoria do tipo Fix-and-Optimize utilizando a função objetivo (44), sendo, portanto, uma etapa de

melhoria da solução construída. As variáveis xjit, als são as mesmas definidas no modelo apresentado na seção 4.1. Considere as seguintes definições de parâmetros e variáveis:

j: atividade, tal que j ϵ J. k: gabarito, tal que k ϵ K.

i: modo de execução da atividade, tal que i ϵ I.

t: instante de tempo no horizonte de planejamento, tal que t ϵ T. r: índice do subproblema, com 1 ≤ r ≤ R.

av: índice que identifica a aeronave, com 1 ≤ av ≤ AV.

ActivityAV: conjunto que identifica as atividades j que pertencem a cada aeronave av. Qr: subproblema r, sendo parte do problema completo.

Pminr: limite inferior do instante de tempo do subproblema r.

Pmaxr: limite superior do instante de tempo do subproblema r.

MIPRAF: problema inteiro misto gerado pela heurística Relax-and-Fix.

MIPtempoFAO: problema inteiro misto gerado pela heurística Fix-and-Optimize, decomposto por tempo.

MIPavFAO: problema inteiro misto gerado pela heurística Fix-and-Optimize, decomposto por aeronave.

ZRAF

: valor da função objetivo da heurística Relax-and-Fix.

ZavFAO: valor da função objetivo da heurística Fix-and-Optimize, decomposto por aeronave.

ZtempoFAO: valor da função objetivo da heurística Fix-and-Optimize, decomposto por tempo.

Zbest: valor da função objetivo da solução incumbente.

alsbest: quantidade de mão de obra do tipo l no turno s na solução incumbente.

xbestjti :

{

1se a atividade j termina exatamente no tempo t no modo i na solução na solução incumbente;

0, caso contrário.

alsRAF: quantidade de mão de obra do tipo l no turno s na solução gerada pela heurística

xRAFjti :

{

1, se a atividade j termina no instante t no modo i na solução gerada pela heurística

Relax -and- Fix ;

0, caso contrário.

alsFAOav: quantidade de mão de obra do tipo l utilizada no turno s na solução gerada pela heurística

Fix-and-Optimize, no problema decomposto por aeronave.

xFAOavjti :

{

1, se a atividade j termina no instante t no modo i na solução gerada pela heurística

Fix -and- Optimize, no problema decomposto por aeronave;

0, caso contrário.

alsFAOtempo: quantidade de mão de obra do tipo l utilizada no turno s na solução gerada pela heurística

Fix-and-Optimize, no problema decomposto por tempo.

xFAOtempojti :

{

1, se a atividade j termina no instante t no modo i na solução gerada pela heurística Fix -and- Optimize , no problema decomposto por tempo;

0, caso contrário.

O pseudocódigo da heurística de programação matemática é apresentado na Figura 33. Na etapa de construção da solução definida entre as linhas 1 e 15 da Figura 33, a heurística

Relax-and-Fix decompõe o problema original em R subproblemas, formados por subperíodos de

igual duração. O algoritmo então percorre o tempo do plano de produção, começando do instante inicial até o final do horizonte de planejamento, ou seja, até percorrer todos os subperíodos, conforme o laço descrito entre as linhas 4 e 12 do pseudocódigo. Em cada iteração, as variáveis que pertencem ao subperíodo da iteração r (definido como todo t entre Pminr e Pmaxr) têm as suas integralidades exigidas (veja linha 5), enquanto as variáveis pertencentes aos subperíodos posteriores (definido como todo t maior Pmaxr) têm as suas integralidades relaxadas (veja linha 6). Então, o problema com parte das variáveis inteiras e parte das variáveis com a integralidade relaxada, chamado MIPRAF, é resolvido (veja linha 7). Após a resolução do problema, caso ele seja infactível, a execução do algoritmo é interrompida e concluída (veja linhas 8 a 10). Após resolver o problema relaxado, as variáveis que estão com a integralidade fixada têm os seus valores inteiros fixados (veja linha 11). Então, a heurística construtiva passa para o próximo subperíodo r e repete o processo, até que chegue ao último subperíodo ou uma solução infactível seja encontrada. Como todas as variáveis do problema estão no MIPRAF

que é resolvido em cada iteração, espera-se com essa heurística que, as informações das variáveis com a integralidade relaxada em cada iteração influenciem na otimização de cada subproblema, seja melhorando a qualidade da solução final ou diminuindo a possibilidade de infactibilidade. Um ponto a destacar é que não existe garantia que

esse algoritmo construirá uma solução factível. Caso o algoritmo encontre uma solução infactível, ele finalizará e é necessário iniciá-lo novamente utilizando uma subdivisão de tempo diferente. A etapa de melhoria só pode ser iniciada caso exista uma solução inicial factível. Na linha 14, a solução construída é salva como a solução incumbente.

Na etapa de melhoria, descrita entre as linhas 16 e 33, foram utilizados dois algoritmos do tipo Fix-and-Optimize. Nessa etapa, a função objetivo é trocada de (55) para a função (39). A ideia geral é que algumas variáveis tenham os seus valores fixados, enquanto outras têm seus valores liberados, porém com a restrição de integralidade. Assim, são criados subproblemas menores e que podem ser resolvidos rapidamente pelo CPLEX. Durante esse processo, qualquer solução encontrada melhor que a incumbente será gravada como a nova incumbente.

O primeiro algoritmo de melhoria (descrito entre as linhas 16 e 24), dividiu o problema em AV subproblemas agrupados pelas atividades das aeronaves. Todas as variáveis xjit, em que j são as atividades de uma aeronave em particular, têm a integralidade imposta e valores liberados (veja linha 18), enquanto as demais têm os seus valores inteiros mantidos fixos gerando o subproblema MIPavFAO. Então, caso o MIPavFAO seja resolvido (veja linha 19) e a solução encontrada for melhor do que a solução incumbente, esta é atualizada (veja linha 20 a 23). Esses passos são repetidos até que todas as atividades j definidas no conjunto AV, ou seja, que representam aeronaves em montagem, tenham passado pelo algoritmo de melhoria. O segundo algoritmo de melhoria (veja linhas 25 a 34) utiliza a mesma divisão temporal utilizada na etapa construtiva (em R subperíodos), com a diferença de que em vez de relaxar a integralidade das variáveis que estão fora do subperíodo da iteração, essas variáveis são mantidas com os valores inteiros fixos. Apenas as variáveis que pertencem a cada subperíodo têm os valores liberados para otimização, embora tenham a integralidade ainda exigida (veja linha 26). Então, é resolvido o MIPtempoFAO (veja linha 27) e, caso a solução encontrada seja melhor do que a incumbente, esta é atualizada e a nova solução fixada (veja linhas 28 a 33). O processo então é repetido, até terminar todos os subperíodos do horizonte de planejamento.

1: Etapa Construva 2: Zbest

= +∞;

3: Seja R o número de subperíodos R o horizonte de planejamento será dividido; 4: Para r = 1 até R, faça:

5: Fixe a integralidade de xj se Pminr

t ≤Pmaxr; 6: Relaxe a integralidade de xj se t > Pmaxr; 7: Resolva MIPRAF

; 8: Se MIPRAF

infac7vel, então: 9: Pare a execução;

10: Fim Se;

11: Fixe xj =xjRAF se Pminr

t ≤Pmaxr; 12: Fim Para; 13:Se ZRAF < Zbest , então: 14: Faça Zbest = ZRAF

, alsbest = alsRAF e xijtbest = xjRAF;

15:Fim Se;

16: Etapa de Melhoria 17:Para av = 1 até AV, faça:

18: Libere os valores e fixe a integralidade de xj se j ϵ AcvityAV; 19: Resolva MIPavFAO;

20: Se ZavFAO < Zbest

, então: 21: Faça Zbest

= ZavFAO, alsbest = alsFAOav , xjbest = xjFAOav; 22: Fixe xj = xjFAOav se j ϵ AcvityAV;

23: Fim Se; 24:Fim Para;

25:Para r = 1 até R, faça:

26: Libere os valores e imponha a integralidade de xj se Pminr

t ≤Pmaxr; 27: Resolva MIPtempoFAO;

28: Se ZtempoFAO < Zbest

, então: 29: Faça Zbest

= ZtempoFAO, alsbest = alsFAOtempo , xjbest = xjFAOtempo; 30: Fixe xj = xjFAOtempo, se Pminr

t ≤Pmaxr; 31: Caso contrário,

32: Fixe xj = xjbest, se Pminr

t ≤Pmaxr; 33:

Fim Se; 33:Fim Para;