• Nenhum resultado encontrado

4.2 O método simplex com geração de colunas para o PCE

4.2.2 O método simplex

O método simplex foi proposto por Dantzig [12] em 1947 e tem como objetivo encontrar uma solução ótima para um PPL.

O método, inicialmente, faz uma partição na matriz A = [B N ], sendo B ∈ Rm×m contendo m colunas linearmente independentes de A. Desse modo, as colunas de B formam uma base para o espaço Rm e, por isso, é chamada de matriz básica. A matriz N contém as demais m × (n − m) colunas de A e é chamada de matriz não básica.

Capítulo 4. Modelagem matemática e método de solução 40

Também é feita a correspondente partição no vetor solução x = [xB xN] e no

vetor de custos c = [cB cN]. O vetor xB é o vetor das variáveis básicas e vetor xN é o vetor

das variáveis não básicas. O vetor cB é o vetor de custos das variáveis básicas e cN é o

vetor das variáveis não básicas. Sendo que xB= B−1d ≥ 0.

Com a partição realizada podemos reescrever o PPL da seguinte maneira:

minimizar f (x) = ctBxB+ ctNxN (4.7)

sujeito a: BxB+ N xN = d (4.8)

xB ≥ 0, xN ≥ 0, xB ∈ Rme xN ∈ R(n−m). (4.9)

E, portanto, podemos obter uma solução que satisfaça as restrições (4.8) da seguinte forma:

BxB+ N xN = d ⇔ BxB = d − N xN ⇔ xB = B−1d − B−1N xN.

Isso significa que atribuições de valores às variáveis não básicas xN fazem com

que se obtenha uma solução para xB.

Em particular, para se obter uma solução básica, fixamos xN = 0 e resolvemos

xB = B−1d. Se xB ≥ 0, então x satisfaz a restrição (4.8) e dizemos que xB é uma solução

básica factível. Nesse caso, a partição básica realizada diz-se factível. Se além de ser solução

básica factível, ela minimizar o valor de f (x), então xB é solução básica factível ótima ou

simplesmente solução ótima.

Demonstra-se em [15] que dado um PPL na forma padrão:

1. Se existe uma solução factível com um valor de função-objetivo finito, então existe uma solução básica factível.

2. Se existe uma solução factível ótima com um valor de função-objetivo finito, então existe uma solução básica factível ótima.

Logo, se temos uma solução, podemos então encontrar o seu respectivo valor da função-objetivo, dada por:

f (x) = ctBxB+ ctNxN = ctB(B−1d − B−1N xN) + ctNxN = ctBB−1d − ctBB−1N xN + ctNxN = ctBB−1d + (ctN − ct BB −1 N )xN. (4.10)

Considere uma solução particular x0 para o problema (4.7) – (4.9) tal que

x0B = B−1b ≥ 0 e x0N = 0. O valor da função-objetivo será f (x0) = ctBB−1d, uma vez que xN = 0.

O vetor π ∈ Rm, dado por πt= ctBB−1, é chamado de vetor das variáveis duais ou vetor multiplicador simplex. Assim, a função-objetivo pode ser reescrita em termos das variáveis não básicas:

f (x) = f (x0) + n−m X j=1 (ctN j − π ta Nj)xNj.

Para cada variável xNj, correspondente à j–ésima coluna não básica de A, temos um valor cNj − π

ta

Nj associado a ela, o qual é chamado de custo reduzido ou custo

relativo.

Dessa forma, podemos dizer se a solução obtida é uma solução ótima, se

cNj− π

ta

Nj ≥ 0, ∀j = 1, ..., n − m, ou seja, nenhuma coluna consegue melhorar o valor da função-objetivo.

Mas se existir cNk− π

t

aNk < 0, para algum k, então é possível atribuir um valor para xNk tal que o valor da função-objetivo decresce e, desse modo, a solução atual não é ótima. Assim, podemos aplicar a estratégia simplex que é definida como uma alteração da solução básica através da perturbação de apenas uma componente de xN.

Faça xNk = ε ≥ 0 e xNj = 0, ∀j ∈ N − {k}, assim a nova solução será dada por:

xB = x0B− εy,

xNk = εek, em que y = B−1aNk e ek = (0, ..., 1, ..., 0)

t, isto é, e

k é o k–ésimo vetor canônico. O novo

valor da função-objetivo é dado por:

f (x) = f (x0) + (cNk− π

t

aNk)ε.

Para determinar o maior valor possível para ε, observe expressão a seguir:

xB = x0B− εy ≥ 0. (4.11)

Dessa forma,

x0B ≥ εy.

Capítulo 4. Modelagem matemática e método de solução 42 x0Bi ≥ εyi, e o valor de ε satisfaz: x0 Bi yi ≥ ε.

Para garantir que todas as componentes da solução continuem positivas, esco- lhemos o valor de ε tal que:

ε0 = x 0 Bq yq = min ( x0 Bi yi : yi > 0, i = 1, ..., m ) .

A expressão descrita acima é conhecida como teste do mínimo ou teste da razão e q é o índice no qual o mínimo é obtido.

Observe então que o valor dado a ε0 faz com que a componente q de xB seja

anulada e, portanto, isso induz a retirada da coluna q do conjunto das colunas básicas e a adicioná-la ao conjunto das colunas não básicas. Fazemos o inverso com a coluna k.

Observe na expressão (4.11) que se y < 0, então não há limitação para ε e, portanto, f (x) → −∞, nesse caso, o problema é ilimitado e o processo é interrompido.

Assim, se s = (−y, ek)t é a direção simplex, temos uma nova solução, dada por:

x1 = x0+ ε0s.

Portanto, basta repetirmos o processo até que a solução ótima seja encontrada, ou seja, repetimos o processo, até que cNj − π

ta

Nj ≥ 0, ∀j = 1, ..., n − m (ou até que seja identificado que o problema é ilimitado).

Se tivermos mais que um valor de custo reduzido negativo podemos aplicar a

regra de Dantzig, a qual consiste em escolher o menor deles, isto é: cNk− π

t

aNk = min{cNj − π

t

aNj, ∀j = 1, ..., n − m}. O Algoritmo 1 apresenta o método simplex.

4.2.3

O método simplex com geração de colunas para o PCE

O método de GC, proposto por Gilmore e Gomory [7,8, 9] inicia-se com uma base inicial B factível (uma matriz quadrada, m × m) e a cada iteração do método uma coluna da matriz B é substituída.

Algoritmo 1: Algoritmo do método simplex. Entrada: A, c e d

Inicialização:

Determine uma partição básica factível inicial tal que:

A = [B N ], x = [xB xN] e c = [cB cN]

Passos:

1. Determine uma solução básica primal-factível: xB = B−1d ≥ 0

2. Determine uma solução básica dual: πt= ctBB−1

3. Determine o menor custo relativo:

cNk − π t aNk = min{cNj− π t aNj, ∀j = 1, ..., n − m} 4. Teste de otimalidade: Se cNk − π ta

Nk ≥ 0 então a solução atual é ótima, PARE. 5. Senão: Determine a direção simplex: y = B−1aNk

6. Determine o passo: ε = xBq

yq

= min{xBi

yi

; yi > 0, i = 1, ..., m}

7. Se yi ≤ 0 para todo i = 1, .., m então PARE o problema é ilimitado.

8. Atualize a matriz básica: aBq ↔ aNk 9. Retorne ao passo 1

Saída: x= [xB xN] = [B−1d 0]

Usamos como base inicial uma matriz com padrões de corte homogêneos simples, isto é, uma matriz diagonal na qual cada coluna é dada por [0 ... aii ... 0]t, sendo que para

o PCE1D, aii= b L `i c (irrestrito) ou aii = min{b L `i

c, ri} (restrito), sendo ri um limitante

superior na quantidade de itens do tipo i que podem ser alocados no padrão de corte. Para o PCE2D, aii= b L `i c · bW wi c (irrestrito) ou aii= min{b L `i c · bW wi c, ri} (restrito).

Nesta dissertação, consideramos que o vetor de custos é dado por: ci = 1, i =

1, ..., m, e, desse modo, a função-objetivo minimiza o somatório das frequências dos padrões de corte. Demonstra-se em Poldi [23], que considerar ci = 1, i = 1, ..., m é equivalente a

minimizar o desperdício de matéria-prima se as restrições do problema forem todas de igualdade.

Para obter uma nova coluna, isto é, um novo padrão de corte que irá substituir uma das atuais colunas na base, vamos considerar a regra de Dantzig para o caso em que

ci = 1, i = 1, ..., m: cNk − π ta Nk = min{cNj− π ta Nj, ∀j = 1, ..., n − m} 1 − πtaNk = min{1 − π t aNj, j = 1, ..., n − m}.

Assim, a regra de Dantzig encontra qual coluna aNk minimiza o valor 1 − π

ta Nj,

Capítulo 4. Modelagem matemática e método de solução 44

ou então que maximiza o valor πtaNj. Dessa forma, podemos resolver um subproblema, um Problema de Programação linear Inteira (PPI), cuja função-objetivo é dada por πtaNj com

aNj ∈ Z

m

+.

Logo, os padrões de cortes usados nesse método são do tipo intermediários, uma vez que os padrões de cortes são obtidos no decorrer de cada iteração do método.

Inicialmente, explicamos o subproblema para caso unidimensional e depois apresentamos a extensão para o caso bidimensional 2-estágios.

Documentos relacionados