• Nenhum resultado encontrado

Programação Linear Inteira GNU Linear Programming Kit

N/A
N/A
Protected

Academic year: 2021

Share "Programação Linear Inteira GNU Linear Programming Kit"

Copied!
34
0
0

Texto

(1)

Programação Linear Inteira

GNU Linear Programming Kit

Eduardo Camargo de Siqueira Pesquisa Operacional

(2)

CONTEÚDO

1 Introdução

2 Formato LP

(3)

GLPK

GNU Linear Programming Kit.

Resolvedor de problemas lineares, incluindo problemas de pro-gramação inteira.

Código aberto, disponível gratuitamente. Farta documentação.

(4)

INSTALAÇÃO DO GLPK

Windows:

- http://gusek.sourceforge.net/gusek.html. Linux (debian/ubuntu e derivadas):

(5)

AJUDA DO GLPK

Pacote disponível em: http://www.gnu.org/software/glpk/.

Manuais em PDF (diretório doc). Exemplos (diretório examples).

(6)

FORMATOS CONHECIDOS

Formatos conhecidos para entrada de programas lineares: MPS - Mathematical Programming System:

Padrão da indústria.

Pouco intuitivo, confuso e com limitações.

LP - CPLEX LP le format:

Padrão criado para uso com o resolvedor CPLEX. Mais fácil e prático do que o formato MPS. Aceito nos principais resolvedores modernos. Arquivos podem ser convertidos para MPS.

(7)

FORMATO LP

COMPONENTES Função-objetivo. Restrições. Informações de variáveis. Limites.

Variáveis inteiras genéricas. Variáveis binárias.

(8)

PROBLEMA DA DIETA

Suponha que uma certa dieta esteja restrita a leite desnatado, carne magra de boi, carne de peixe e uma salada. Sabendo-se que os requi-sitos nutricionais são expressos em termos de vitaminas e controlados por suas quantidades mínimas. O objetivo é determinar a quantidade de cada alimento que deverão ser ingeridos diariamente, de modo que os requisitos nutricionais sejam satisfeitos a custo mínimo.

Vitamina Leite (litro) Carne (kg) Peixe (kg) Salada (100g) Requisito mínimo

A 2 mg 2 mg 10 mg 20 mg 11 mg

C 50 mg 20 mg 10 mg 30 mg 70 mg

D 80 mg 70 mg 10 mg 80 mg 250 mg

(9)

PROBLEMA DA DIETA

Variáveis de decisão:

xi = quantidade do alimento do tipo i, sendo i = 1 (leite), i = 2 (carne), i = 3 (peixe) e i = 3 (salada).

Função objetivo:

(10)

PROBLEMA DA DIETA

Restrições: Demanda de vitamina A: 2x1+2x2+10x3+20x4≥11 Demanda de vitamina C: 50x1+20x2+10x3+30x4≥70 Demanda de vitamina D: 80x1+70x2+10x3+80x4≥250 Restrições de Não-negatividade: x1;x2;x3≥0

(11)

PROBLEMA DA DIETA - FORMATO LP

dieta.lp M i n i m i z e Obj : 2 x1 + 4 x2 + 1 . 5 x3 + x4 S u b j e c t t o VitaminaA : 2 x1 + 2 x2 + 10 x3 + 20 x4 >= 1 VitaminaC : 50 x1 + 20 x2 + 10 x3 + 30 x4 >= 70 VitaminaD : 80 x1 + 70 x2 + 10 x3 + 80 x4 >= 250 End RESOLVENDO

(12)

MODELOS DE PROGRAMAÇÃO LINEAR INTEIRA

CAPITÃO CAVERNA S.A.

A Capitão Caverna S.A., localizada em Pedra Lascada, aluga 3 tipos de barcos para passeios marítimos: jangadas, supercanoas e arcas com cabine. A companhia fornece juntamente com o barco um ca-pitão para navegá-lo e uma tripulação que varia de acordo com a embarcação: uma para jangadas, duas para supercanoas e três para arcas. A companhia tem 4 jangadas, 8 supercanoas e 3 arcas e em seu corpo de funcionários: 10 capitães e 18 tripulantes. O aluguel é por diárias e a Capitão Caverna lucra $50 por jangada, $70 por supercanoa e $100 por arca. Faça um modelo de programação ma-temática que determine o esquema de aluguel que maximiza o lucro.

(13)

CAPITÃO CAVERNA S.A.

Variáveis de decisão:

xi = número de embarcações do tipo i a serem alugadas, sendo i = 1 (jangada), i = 2 (supercanoa) e i = 3 (arca com cabine). Função objetivo:

(14)

CAPITÃO CAVERNA S.A.

Restrições: Número de capitães: x1+x2+x3≤10 (Há somente 10 capitães) Número de tripulantes: x1+2x2+3x3≤18 (Há somente 18 tripulantes) Quantidade de jangadas:

x1≤4 (O número de jangadas está limitado a 4)

Quantidade de supercanoas: x2≤8 (Há apenas 8 supercanoas)

Quantidade de arcas com cabine:

x3≤3 (Há apenas 3 arcas com cabine disponíveis)

Integralidade e não-negatividade: x1;x2;x3∈ Z+

(15)

CAPITÃO CAVERNA S.A.

Max f (x) = 50x1+70x2+100x3 sujeito a x1 + x2 + x3 ≤10 x1 + 2x2 + 3x3 ≤18 x1 ≤4 x2 ≤8 x3 ≤3 x1 ; x2 ; x3 ∈ Z+

(16)

CAPITÃO CAVERNA S.A. - FORMATO LP

caverna.lp Maximize Obj : 50 x1 + 70 x2 + 100 x3 S u b j e c t t o C a p i t a e s : x1 + x2 + x3 <= 10 T r i p u l a n t e s : x1 + 2 x2 + 3 x3 <= 18 Jangada : x1 <= 4 Supercanoa : x2 <= 8 A r c a s : x3 <= 3 G e n e r a l x1 x2 x3 End RESOLVENDO

(17)

CAPITÃO CAVERNA S.A. - SOLUÇÃO

sol.txt Problem : Rows : 5 Columns : 3 (3 i n t e g e r , 0 b i n a r y ) Non−z e r o s : 9 S t a t u s : INTEGER OPTIMAL O b j e c t i v e : Obj = 680 (MAXimum)

No . Row name A c t i v i t y Lower bound Upper bound −−−−−− −−−−−−−−−−−− −−−−−−−−−−−−− −−−−−−−−−−−−− −−−−−−−−−−−−− 1 C a p i t a e s 10 10 2 T r i p u l a n t e s 18 18 3 Jangada 4 4 4 Supercanoa 4 8 5 A r c a s 2 3

No . Column name A c t i v i t y Lower bound Upper bound −−−−−− −−−−−−−−−−−− −−−−−−−−−−−−− −−−−−−−−−−−−− −−−−−−−−−−−−−

1 x1 ∗ 4 0

(18)

CAPITÃO CAVERNA S.A. - FORMATO LP

caverna.lp Maximize Obj : 50 x1 + 70 x2 + 100 x3 S u b j e c t t o C a p i t a e s : x1 + x2 + x3 <= 10 T r i p u l a n t e s : x1 + 2 x2 + 3 x3 <= 18 Bounds 0 <= x1 <= 4 0 <= x2 <= 8 0 <= x3 <= 3 G e n e r a l x1 x2 x3 End

(19)

CAPITÃO CAVERNA S.A. - SOLUÇÃO

sol.txt Problem : Rows : 2 Columns : 3 (3 i n t e g e r , 0 b i n a r y ) Non−z e r o s : 6 S t a t u s : INTEGER OPTIMAL O b j e c t i v e : Obj = 680 (MAXimum)

No . Row name A c t i v i t y Lower bound Upper bound −−−−−− −−−−−−−−−−−− −−−−−−−−−−−−− −−−−−−−−−−−−− −−−−−−−−−−−−−

1 C a p i t a e s 10 10

2 T r i p u l a n t e s 18 18

No . Column name A c t i v i t y Lower bound Upper bound −−−−−− −−−−−−−−−−−− −−−−−−−−−−−−− −−−−−−−−−−−−− −−−−−−−−−−−−−

1 x1 ∗ 4 0 4

2 x2 ∗ 4 0 8

(20)

CAPITÃO CAVERNA S.A. - ALTERAÇÕES

Agora a companhia passa a ter 5 jangadas, 6 supercanoas e 5 arcas e em seu corpo de funcionários: 5 capitães e 10 tripulantes. Ainda mais, se o lucro do aluguel fosse $45 por jangada, $80 por supercanoa e $90 por arca.

O que mudaria no modelo?

(21)

CAPITÃO CAVERNA S.A. - ALTERAÇÕES

Max f (x) = 45x1+80x2+90x3 sujeito a x1 + x2 + x3 ≤5 x1 + 2x2 + 3x3 ≤10 x1 ≤5 x2 ≤6 x3 ≤5 x1 ; x2 ; x3 ∈ Z+

(22)

CAPITÃO CAVERNA S.A. - MODELO GENÉRICO

Para fazer um modelo genérico desse PPLI, façamos as seguintes convenções:

emb : Conjunto dos diferentes tipos de embarcação = {Jan-gada, Supercanoa, Arca}.

li : Lucro proporcionado pelo aluguel da embarcação do tipo i. capi : Número de capitães necessários para comandar a embar-cação do tipo i.

tripi : Número de tripulantes necessários para trabalhar na em-barcação do tipo i.

dispi : Número disponível de embarcações do tipo i. ntrips : Número de tripulantes disponíveis.

(23)

CAPITÃO CAVERNA S.A. - MODELO GENÉRICO

O modelo genérico relativo ao problema em questão pode ser assim formulado: Max f (x) = X i∈emb lixi sujeito a X i∈emb

capixi ≤ncapitaes (Número de capitães) X

i∈emb

(24)

FORMATO MathProg

Formato de mais alto nível, incluindo abstrações:

Comandos Conjuntos Parâmetros

Facilita a geração de problemas grandes e complexos. Permite a separação entre o modelo e os dados.

(25)

CAPITÃO CAVERNA S.A. - MODELO GENÉRICO

O modelo genérico relativo ao problema em questão pode ser assim formulado: Max f (x) = X i∈emb lixi sujeito a X i∈emb

capixi ≤ncapitaes (Número de capitães) X

i∈emb

(26)

CAPITÃO CAVERNA S.A. - FORMATO MathProg

caverna.mod

s e t E ; /∗ Conjunto de Embarcações ∗/

param l {E } ; /∗ Lucro po r Embarcação ∗/

param cap {E } ; /∗ C a p i t ã e s p or Embarcação ∗/

param t r i p {E } ; /∗ T r i p u l a n t e s p or Embarcação ∗/ param d i s p {E } ; /∗ D i s p o n i b i l i d a d e p o r Embarcação ∗/ param n t r i p s ; /∗ T o t a l de t r i p u l a n t e s ∗/ param n c a p s ; /∗ T o t a l de c a p i t ã e s ∗/ v a r x { e i n E} >= 0 i n t e g e r; /∗ I n t e g r a l i d a d e e não−n e g a t i v i d a d e ∗/ s.t. c a p i t a e s : sum{ e i n E} cap [ e ] ∗ x [ e ] <= n c ap s ; /∗ R e s t r i ç ã o de C a p i t ã e s ∗/ s.t. t r i p u l a n t e s : sum{ e i n E} t r i p [ e ] ∗ x [ e ] <= n t r i p s ; /∗ R e s t r i ç ã o de T r i p u l a n t e s ∗/ s.t. emba rca co e s { e i n E } : x [ e ] <= d i s p [ e ] ; /∗ R e s t r i ç ã o de Embarcações ∗/

maximize l u c r o : sum{ e i n E} l [ e ] ∗ x [ e ] ; /∗ Lucro do a l u g u e l ∗/

(27)

CAPITÃO CAVERNA S.A. - FORMATO MathProg

caverna.dat (1/2) d a t a; /∗ Lucro po r Embarcação ∗/ param : E : l := Jangadas 50 S u p e r c a n o a s 70 A r c a s 100 ; /∗ C a p i t ã e s p o r Embarcação ∗/ param : cap := Jangadas 1 S u p e r c a n o a s 1 A r c a s 1 ; /∗ T r i p u l a n t e s p or Embarcação ∗/ param : t r i p := Jangadas 1 S u p e r c a n o a s 2

(28)

CAPITÃO CAVERNA S.A. - FORMATO MathProg

caverna.dat (2/2) /∗ D i s p o n i b i l i d a d e p o r Embarcação ∗/ param : d i s p := Jangadas 4 S u p e r c a n o a s 8 A r c a s 3 ; param n t r i p s := 1 8 ; /∗ T o t a l de t r i p u l a n t e s ∗/ param n c a p s := 1 0 ; /∗ T o t a l de c a p i t ã e s ∗/ end; RESOLVENDO

(29)

CAPITÃO CAVERNA S.A. - SOLUÇÃO

cavernaSol.txt Problem : c a v e r n a Rows : 6 Columns : 3 (3 i n t e g e r , 0 b i n a r y ) Non−z e r o s : 12 S t a t u s : INTEGER OPTIMAL O b j e c t i v e : l u c r o = 680 (MAXimum)

No . Row name A c t i v i t y Lower bound Upper bound −−−−−− −−−−−−−−−−−− −−−−−−−−−−−−− −−−−−−−−−−−−− −−−−−−−−−−−−−

1 c a p i t a e s 10 10

2 t r i p u l a n t e s 18 18

3 emba rcac oe s [ Jangadas ]

4 4 4 emba r cac oe s [ S u p e r c a n o a s ] 4 8 5 emba r cac oe s [ A r c a s ] 2 3 6 l u c r o 680

(30)

Comando set

s e t I ; /∗ d e c l a r a c o n j u n t o que s e r á informado d e p o i s ∗/ s e t I := 1 . . 1 0 ; /∗ d e c l a r a um c o n j u n t o preenchendo com num . de 1 a 10 ∗/ s e t A := T r ig o Q u e i j o Figado Salmao E s p i n a f r e ; /∗ d e c l a r a e i n f o r m a e l e m e n t o s de um c o n j u n t o ∗/ s e t Cid ade s ; s e t C a p i t a i s w i t h i n i d a d e s ; /∗ c o n j u n t o c a p i t a i s f i c a r e s t r i t o a s e r um s u b c o n j u n t o de c i d a d e s ∗/

(31)

Comando param

param n ;

/∗ parâmetro que s e r á informado d e p o i s ∗/

param c , > 0 ;

/∗ parâmetro que s e r á informado d e p o i s e deve s e r p o s i t i v o ∗/

param n , i n t e g e r, > 0 ;

/∗ parâmetro que s e r á informado d e p o i s e deve s e r p o s i t i v o e i n t e i r o ∗/

param c {A} ;

/∗ parâmetro que deve s e r informado para cada elemento do c o n j u n t o A ∗/

param : c :=

(32)

Comando var

v a r x >= 0 ; /∗ uma v a r i á v e l p o s i t i v a ∗/

v a r x{ I , J} , i n t e g e r , >= 0 ;

/∗ c r i a uma v a r i á v e l x para cada par ( i , j ) de I e J , v a r i á v e l i d e n t i f i c a d a por x [ i , j ] ∗/

v a r z { i i n I , j i n J} >= i+j ;

/∗ c r i a uma v a r i á v e l z para cada par ( i , j ) de I e J , v a r i a v e l i d e n t i f i c a d a por z [ i , j ] ,

(33)

Comando Adição de Restrições

s.t. r : x + y + z , >= 0 , <= 1 ; /∗ r e s t r i ç ã o com nome r , r e s t r i n g i n d o o s o m a t ó r i o de x + y + z para o i n t e r v a l o [ 0 , 1 ] ∗/ s.t. c a p a c i d a d e : sum{ i i n I } p [ i ] ∗ x [ i ] <= c ; /∗ uma r e s t r i ç ã o gerada s o b r e o s o m a t ó r i o da v a r i á v e l x [ i ] m u l t i p l i c a n d o uma c o n s t a n t e p [ i ] ∗/ s.t. e s t o q u e F i n a l {p i n P} : e s t o q u e [ 1 2 , p ] + compras [ 1 2 , p ] ∗ vendas [ 1 2 , p ] >= 5 0 0 ;

(34)

FIM

Dúvidas?

Referências

Documentos relacionados