Sei sulla pagina 1di 45

Universidade Federal do Oeste do Par

Instituto de Cincias da Sociedade

Introduo Programao Linear com


RStudio

Claudir Oliveira
coliverra@gmail.com

IV Encontro de Economia

22 de Outubro de 2016
Sumrio
1
Studio

Introduo
Problemas de Otimizao
Programao Linear
Exemplos

RStudio
Instalao de Pacotes
Lista de Comandos
Soluo de PL com R

Claudir Oliveira | Introduo Programao Linear com RStudio


Problemas de Otimizao
2
Studio

I So problemas em que se procura a melhor


soluo (a que d menor prejuzo, maior lu-
cro, a que mais eficiente, etc.)
I Alguns destes problemas resolvem-se procu-
rando mximos ou mnimos de uma funo,
outros resolvem-se por outros processos.

Claudir Oliveira | Introduo Programao Linear com RStudio


Programao Linear
3
Studio

I um ramo da Matemtica que estuda for-


mas de resolver problemas de otimizao cu-
jas condies podem ser expressas por in-
equaes lineares, isto inequaes do primeiro
grau.
I Um problema de programao linear que tenha
s duas variveis pode ser resolvido grafica-
mente, representando as solues de cada
uma das inequaes por um semiplano e em
seguida procurando o ponto do polgono obtido
que corresponde soluo tima.

Claudir Oliveira | Introduo Programao Linear com RStudio


Modelos de Programao Linear
4
Studio

(i) Problema da Anlise de Atividades


Consiste em encontrar xi que maximize a funo linear, isto, a fuo
objetivo:
fi (x1 , x2 , ..., xn ) = c1 x1 + c2 x2 + ... + cn xn ; (1)
sabendo que x1 , x2 , ..., xn deve satisfazer:


a11 x1 + a12 x2 + + a1n xn b1
a21 x1 + a22 x2 + + a2n xn

b2
.. . . ..


. + .. + + .. .
am1 x1 + am2 x2 + + amn xn bm

e que x1 , x2 , ..., xn 0.

Claudir Oliveira | Introduo Programao Linear com RStudio


Modelo de Programao Linear
5
Studio

Este modelo pode ser associado a uma empresa que tem m


recursos disponeis para a realizao de n atividades.
1 Suponha-se que as atividades representem a fabricao de
produtos.
I bi a quantidade de recurso i diponvel para as n atividades.
I xj o nvel de produo (incgnitas do problema).
I cj o lucro unitrio j.
I ai j quantidade de recurso i consumida na produo de uma
unidade do produto j.
1 A funo objetivo a ser maximizada representa o lucro da
empresa.

Claudir Oliveira | Introduo Programao Linear com RStudio


Modelo de Programao Linear
6
Studio

I Num problema de programao linear com duas variveis x1 e x2


o que se pretende maximizar (ou minimizar) uma forma linear

Z = c1 x1 + c2 x2 (2)

onde, c1 e c2 so constantes reais no nulas.

I As variveis x1 e x2 esto sujeitas a certas condies restritivas


expressas por inequaes lineares em x e y que traduzem as
restries do problema.

Claudir Oliveira | Introduo Programao Linear com RStudio


Exemplo - 1
7
Studio

1 Para fazer um terno e um vestido tem-se disponvel: 16m de


algodo, 11m de seda e 15m de l. Para o terno so necessrios
2m de algodo, 1m de seda e 1m de l. Para o vestido, 1m de
algodo, 2m de seda e 3m de l. Se um terno vendidp por R$
300,00 e um vestido por R$ 500,00. Quantas peas de cada tipo
deve ser fazer, de modo a maximizar o seu lucro?

1 Modelagem Matemtica.

I x1 Quantidades de ternos produzidos/vendidos.


I x2 Quantidades de vestidos produzidos/vendidos.
Funo Objetivo:

max(x1 , x2 ) : Z = 300x1 + 500x2 (3)

Claudir Oliveira | Introduo Programao Linear com RStudio


Exemplo - 1
8
Studio

I A restrio imposta pela limitao de recursos:

Produto algodo Seda L


Terno(x1 ) 2 1 4
Vestido(x1 ) 1 2 3
Disponvel 16 11 15

I Na forma de inequaes:


2x1 + x2 16
x1 + 2x2 11

x1 + 3x2 15

x1 , x2 0

Claudir Oliveira | Introduo Programao Linear com RStudio


Exemplo - 2
9
Studio

1 Uma industria produz 2 produtos, I e II, sendo que cada produto


consome um certo nmero de horas em 3 mquinas A, B e C
para ser produzido, de acordo com a tabela:
Tempo Tempo Mquina A Tempo Mquina B Tempo Mquina C
I 2 1 4
II 2 2 2

Claudir Oliveira | Introduo Programao Linear com RStudio


Exemplo - 2
9
Studio

1 Uma industria produz 2 produtos, I e II, sendo que cada produto


consome um certo nmero de horas em 3 mquinas A, B e C
para ser produzido, de acordo com a tabela:
Tempo Tempo Mquina A Tempo Mquina B Tempo Mquina C
I 2 1 4
II 2 2 2
I O tempo de funcionamento mximo disponvel das mquinas :
Mquina Mximo tempo disponvel
I 160
II 120

Claudir Oliveira | Introduo Programao Linear com RStudio


Exemplo - 2
9
Studio

1 Uma industria produz 2 produtos, I e II, sendo que cada produto


consome um certo nmero de horas em 3 mquinas A, B e C
para ser produzido, de acordo com a tabela:
Tempo Tempo Mquina A Tempo Mquina B Tempo Mquina C
I 2 1 4
II 2 2 2
I O tempo de funcionamento mximo disponvel das mquinas :
Mquina Mximo tempo disponvel
I 160
II 120

I O lucro obtido por cada produto I $1,00 e por cada produto II


$1,50.
I Quanto deve ser fabricado de cada produto de modo que seja
obedecida a capacidade operativa das mquinas com o maior
lucro possvel?
Claudir Oliveira | Introduo Programao Linear com RStudio
Exemplo - 2
10
Studio

1 Modelagem Matemtica.

I x1 a quantidade do produto I a ser fabricada;


I x2 a quantidade do produto II a ser fabricada;
Funo objetivo:

max(x1 , x2 ) : Z = x1 + 1, 5x2
Sujeita
s seguintes restries:

2x 1 + 2x2 160
x1 + 2x2 120


4x1 + 2x2 280
x1 , x2 0

Claudir Oliveira | Introduo Programao Linear com RStudio


Exemplo - 3
11
Studio

1 Uma determinada empresa est interessada em maximizar o


lucro mensal proveniente de quatro de seus produtos
designados por I, II, III e IV. Para fabricar esses quatro produtos,
ele utiliza dois tipos de mquinas, M1 e M2, e dois tipos de
mo-de-obra, MO1 e MO2, as quais tm as seguintes
disponibilidades:

Claudir Oliveira | Introduo Programao Linear com RStudio


Exemplo - 3
12
Studio

I Nmero de mquinas-hora para produzir uma unidade de cada


produto:

I Nmero de homem-hora para produzir uma mquina de cada pro-


duto:

Claudir Oliveira | Introduo Programao Linear com RStudio


Exemplo - 3
13
Studio

I O setor comercial da empresa fornece as seguintes informaes:

Claudir Oliveira | Introduo Programao Linear com RStudio


Exemplo - 3
13
Studio

I O setor comercial da empresa fornece as seguintes informaes:

Funo objetivo: max : Z = 10x1 + 8x2 + 9x3 + 7x4


Sujeita a:

5x1 + 4x2 + 8x3 + 9x4 80

2x1 + 6x2 + 8x4 20


2x1 + 4x2 + 2x3 + 8x4 120
7x1 + 3x2 + 7x4 160

para xi 0 e x1 70, x2 60, x3 40, x4 20.


Claudir Oliveira | Introduo Programao Linear com RStudio
Modelos de Programao Linear
14
Studio

(ii) Problema da Dieta


Consiste em encontrar que minimize a funo linear, isto, a fuo
objetivo:
fi (x1 , x2 , ..., xn ) = c1 x1 + c2 x2 + ... + cn xn ; (4)
sabendo que x1 , x2 , ..., xn deve satisfazer:

Claudir Oliveira | Introduo Programao Linear com RStudio


Modelos de Programao Linear
14
Studio

(ii) Problema da Dieta


Consiste em encontrar que minimize a funo linear, isto, a fuo
objetivo:
fi (x1 , x2 , ..., xn ) = c1 x1 + c2 x2 + ... + cn xn ; (4)
sabendo que x1 , x2 , ..., xn deve satisfazer:


a11 x1 + a12 x2 + + a1n xn b1
a21 x1 + a22 x2 + + a2n xn

b2
.. . . ..


. + .. + + .. .
am1 x1 + am2 x2 + + amn xn bm

e que x1 , x2 , ..., xn 0.

Claudir Oliveira | Introduo Programao Linear com RStudio


Modelos de Programao Linear
15
Studio

Este modelo pode ser associado a uma pessoa que deseja minimizar
o custo da sua dieta diria.
1 As atividades apresentam os consumos dos alimentos que
podero entrar na dieta e os recursos so as vitaminas que no
podem deixar de ser supridas pela dieta

Claudir Oliveira | Introduo Programao Linear com RStudio


Modelos de Programao Linear
15
Studio

Este modelo pode ser associado a uma pessoa que deseja minimizar
o custo da sua dieta diria.
1 As atividades apresentam os consumos dos alimentos que
podero entrar na dieta e os recursos so as vitaminas que no
podem deixar de ser supridas pela dieta

I bi a quantidade mnima de vitamina i que deve ser obtida nos n


alimentos;
I xj a quantidade de alimento j na dieta (incgnitas)
I cj o custo unitrio do alimento j;
I ai j a quantidade da vitamina i fornecida por uma unidade de
alimento;

1 A funo objetivo a ser minimizada representa o custo total.

Claudir Oliveira | Introduo Programao Linear com RStudio


Exemplo - 1
16
Studio

1 Uma determinada pessoa recomendada pelo seu mdico a fazer


uma dieta alimentar que fornea, diariamente, pelo menos as
seguintes quantidades de vitaminas A, B, C e D.
Alimentos
Vit.
Leite(L) Arroz(Kg) Feijo(Kg) Carne(Kg) Qmin /diria(mg)
A 10 5 9 10 80
B 8 7 6 6 70
C 15 3 4 7 100
D 20 2 3 9 60

Claudir Oliveira | Introduo Programao Linear com RStudio


Exemplo - 1
16
Studio

1 Uma determinada pessoa recomendada pelo seu mdico a fazer


uma dieta alimentar que fornea, diariamente, pelo menos as
seguintes quantidades de vitaminas A, B, C e D.
Alimentos
Vit.
Leite(L) Arroz(Kg) Feijo(Kg) Carne(Kg) Qmin /diria(mg)
A 10 5 9 10 80
B 8 7 6 6 70
C 15 3 4 7 100
D 20 2 3 9 60
Alimento Custo unitrio
Leite 2,00/L
I Os custos unitrios desses alimentos: Arroz 1,60/Kg
Feijo 3,00/Kg
Carne 10,00/Kg

Claudir Oliveira | Introduo Programao Linear com RStudio


Exemplo - 1
17
Studio

I Deseja-se saber o consumo dirio de cada um desses alimentos


de tal maneira que a dieta satisfaa as prescries mdicas e
seja a de menor custo possvel.

Funo objetivo:

min : Z = 2x1 + 1, 6x2 + 3x3 + 10x4


Sujeita a:


10x1 + 5x2 + 9x3 + 10x4 80
8x1 + 7x2 + 6x3 + 6x4 70


15x 1 + 3x2 + 4x3 + 7x4 100
20x1 + 2x2 + 3x3 + 9x4 60

Claudir Oliveira | Introduo Programao Linear com RStudio


Modelos de Programao Linear
18
Studio

(iii) Problema do Transporte


I Este problema envolve o transporte de alguma carga de diversas
fontes a diversos pontos de destino.
I O problema de transporte pode ser apresentado de forma genrica
da seguinte forma:

Minimizar:
m X
X n
Z = cij xij
i=1 j=1

Sujeito a
n
X
xij = Fi
j=1

m
X
xij = Dj
i=1

Claudir Oliveira | Introduo Programao Linear com RStudio


Modelos de Programao Linear
19
Studio

I cij = custo de distribuio entre fonte i e destino j;


I xij = total a ser distribudo da fonte at o destino;
I Fi = Total produzido pela fonte;
I Dj = Total a ser armazenado pelo destino;
Para que o problema tenha soluo:
m
X n
X
Fi = Di
i=1 j=1

Claudir Oliveira | Introduo Programao Linear com RStudio


Exemplo - 1
20
Studio

1Uma empresa tem 3 fbricas e 3 depsitos para distribuio de


seus produtos. Os custos de transporte e capacidades so
dados nas tabelas abaixo.
Depsito
Fbrica
1 2 3 Fbrica Produo CD Capacidade
1 8 15 3 1 120 1 150
2 5 10 3 2 80 2 70
3 6 12 10 3 80 3 60
I O objetivo minimizar o custo de transporte das unidades de
fabrio aos CD, conhecendo os custos de transporte.

Claudir Oliveira | Introduo Programao Linear com RStudio


Exemplo - 1
21
Studio

Claudir Oliveira | Introduo Programao Linear com RStudio


Exemplo - 1
22
Studio

1 Modelagem Matemtica.

Minimizar:

Z = 8x11 + 5x12 + 6x13 + 15x21 + 10x22 + 12x23 + 3x31 + 9x32 + 10x33

Sujeito a:
I Restrio de produo:

x11 + x12 + x13 = 120
x21 + x22 + x23 = 80
x31 + x32 + x32 = 80

I Restrio de capacidade:

x11 + x21 + x31 = 150
x12 + x22 + x32 = 70
x13 + x23 + x33 = 60

Claudir Oliveira | Introduo Programao Linear com RStudio


Exerccio - 1
23
Studio

1 4 produtores situados em 2 provncias (A e B) esto oferecendo


um produto para dois exportadores situados em outro lugar. A
matriz de custo para cada rota produtor-exportador dada por:
Produo:
ID Provncia Produo
1 A 300
2 A 800
3 B 800
4 B 1200
Exportadores:
ID Provncia Produo
5 A 400
5 B 600
6 2000

Claudir Oliveira | Introduo Programao Linear com RStudio


Exerccio - 1
24
Studio

Rotas:
ID Orig. ID Dest. Produo
1 5 5,1
1 6 3,2
2 5 6,7
2 6 7,2
3 5 2,8
3 6 4,1
4 5 6,9
4 6 5,3
Para a solucao: Podemos considerar o problema em termos de
bordas. Se 1, 2, 3, 4 so os produtores e 5, 6 os exportadores,
vamos dizer e15 o fluxo do produtor 1 exportando a 5, e25 do
produtor 2 exportando a 5 e assim por diante.

Claudir Oliveira | Introduo Programao Linear com RStudio


Instalao de pacotes
25
Studio

I Inslao de pacotes:
> install.packages("lpSolveAPI") #opo 1
> install.packages("lpSolve") #opo 2

I Chamando as libs:
> library("lpSolve")
> library("lpSolveAPI")

Claudir Oliveira | Introduo Programao Linear com RStudio


Comandos do pacote ldSolverAPI
26
Studio

Comandos para resolver um PL.


I make.lp(nrow, ncol)
I set.objfn(get_make, vetor)
I add.constraint(get_make, vetor, operadores, restr)
I set.bounds(get_make, LIMITES, <args>)
I solve(get_make)
I get.variables(get_make)
I get.objective(get_make)

I lpSolve assume no-negatividade em todas as variveis.


I lpSolveAPI::comando(<args>)

Claudir Oliveira | Introduo Programao Linear com RStudio


Cdigo R
27
Studio

I Transcrevendo para a linguagem R.

> lpexemplo <- make.lp(0, 4)


> set.objfn(lpexemplo, c(1, 3, 6.24, 0.1))
> add.constraint(lpexemplo, c(0, 78.26, 0, 2.9), ">=", 92.3)
> add.constraint(lpexemplo, c(0.24, 0, 11.31, 0), "<=", 14.8)
> add.constraint(lpexemplo, c(12.68, 0, 0.08, 0.9), ">=", 4)
> set.bounds(lpexemplo, lower = c(28.6, 18), columns = c(1, 4))
> set.bounds(lpexemplo, upper = 48.98, columns = 4)
> solve(lpexemplo)
> get.variables(lpexemplo)
> get.objective(lpexemplo)
> rm(lpexemplo)

Claudir Oliveira | Introduo Programao Linear com RStudio


Soluo do Exemplo 1
28
Studio

A soluo tima : 28.6(no bsica), 0(no bsica), 0(no bsica),


31.82(bsica)

Claudir Oliveira | Introduo Programao Linear com RStudio


Soluo do Exemplo 1
28
Studio

A soluo tima : 28.6(no bsica), 0(no bsica), 0(no bsica),


31.82(bsica)

get.basis(lpexemplo)
I As trs primeiras colunas so para variveis de folga.
I Assim, o retorno de get.basis(), que -7, -2, -3, so coluna 7,
2, 3, que representam varivel 4, varivel folga 2 e 3.

Claudir Oliveira | Introduo Programao Linear com RStudio


Soluo do Exemplo 1
28
Studio

A soluo tima : 28.6(no bsica), 0(no bsica), 0(no bsica),


31.82(bsica)

get.basis(lpexemplo)
I As trs primeiras colunas so para variveis de folga.
I Assim, o retorno de get.basis(), que -7, -2, -3, so coluna 7,
2, 3, que representam varivel 4, varivel folga 2 e 3.

get.basis (lpexemplo, nonbasic=TRUE)


I No que diz respeito a este tipo de LP com variveis limitadas,
uma varivel pode ser no-bsico em qualquer limite inferior ou
limite superior.
I O retorno de get.basis nesse caso -1, -4, -5, -6. O negativo
significa que essas variveis esto no seu limite inferior.
I Significa ento: varivel de folga 1 = 0, a varivel 4 = 28,6, var-
ivel 5 = 0, varivel 6 = 0.
Claudir Oliveira | Introduo Programao Linear com RStudio
Cdigo R
29
Studio

I Cdigo
library(lpSolveAPI)
lprec <- make.lp(5,6)
set.objfn(lprec, obj=c(1,1), indices=c(5,6))
set.row(lprec, 1, xt=c(1,1), indices=c(1,2))
set.row(lprec, 2, xt=c(1,1), indices=c(3,4))
set.row(lprec, 3, xt=c(1,1), indices=c(2,4))
set.row(lprec, 4, xt=c(1,1,-1), indices=c(1,2,5))
set.row(lprec, 5, xt=c(1,1,1,-1), indices=c(2,3,4,6))
set.type(lprec, 1, type="binary")
set.type(lprec, 2, type="binary")
set.type(lprec, 3, type="binary")
set.type(lprec, 4, type="binary")
set.type(lprec, 5, type="integer")
set.type(lprec, 6, type="integer")
set.constr.type(lprec, types=c(rep("<=",3), rep("=",2)))
set.rhs(lprec, b=c(2,5,3,0,0))
Claudir Oliveira | Introduo Programao Linear com RStudio
LINPROG Package
Exemplo
30
Studio

1 Problema de Mistura:

I Quanto comprar de insumo?


I Quando fabricar de cada produto?

Claudir Oliveira | Introduo Programao Linear com RStudio


LINPROG Package
Exemplo
30
Studio

1 Problema de Mistura:

I Quanto comprar de insumo?


I Quando fabricar de cada produto?

Gasolina Pura Octanas Adtivos Lucros


Gas. Verde 22% 50% 28% R$0,48/L
Gas. Azul 55% 32% 13% R$0,40/L
Gas. Amarela 72% 20% 8% R$0,29/L
Disponibilidade 3200,000 2400,000 1100,00

Claudir Oliveira | Introduo Programao Linear com RStudio


LINPROG Package
Exemplo
31
Studio

Instalao do pacote:
> install.packages("linprog")
> library("linprog")
> args(solveLP)

Soluo
> c<-c(0.48, 0.4, 0.29) # Funcao Objetivo
> names(c)<-c("Gas.Verde","Gas.Azul","Gas.Amarela")
> b<-c(3200000, 2400000, 1100000) # Vetor b
> names(b)<-c("Gas.Pura","Octanas","Aditivos")
> # Atribuindo as restricoes
> A<-rbind(c( 0.22, 0.55, 0.72), c(0.50, 0.32, 0.20),
c(0.28, 0.13, 0.08))
> solveLP(c, b, A, TRUE)

Claudir Oliveira | Introduo Programao Linear com RStudio


LINPROG Package
Exemplo
32
Studio

1 Um agricultor tem 75 hectares para plantar trigo e cevada. Para


produzir essas culturas, custa ao agricultor $120 por hectares para o
trigo e $210 para a cevada. O agricultor tem $15.000 disponveis para
as despesas. Mas, depois da colheita, o agricultor deve armazena-las
enquanto se aguarda as condies de mercado favorveis. O agricultor
tem espao de armazenamento para 4.000 alqueires. Cada hectares
produz uma mdia de 110 sacas de trigo ou 30 alqueires de cevada. Se
o lucro lquido por alqueire de trigo (aps todas as despesas
subtrados) de $1,30 e US $2,00 para a cevada, como o agricultor
deve a planta os 75 hectares de modo a maximizar o lucro?

Claudir Oliveira | Introduo Programao Linear com RStudio


LINPROG Package
Exemplo
32
Studio

1 Um agricultor tem 75 hectares para plantar trigo e cevada. Para


produzir essas culturas, custa ao agricultor $120 por hectares para o
trigo e $210 para a cevada. O agricultor tem $15.000 disponveis para
as despesas. Mas, depois da colheita, o agricultor deve armazena-las
enquanto se aguarda as condies de mercado favorveis. O agricultor
tem espao de armazenamento para 4.000 alqueires. Cada hectares
produz uma mdia de 110 sacas de trigo ou 30 alqueires de cevada. Se
o lucro lquido por alqueire de trigo (aps todas as despesas
subtrados) de $1,30 e US $2,00 para a cevada, como o agricultor
deve a planta os 75 hectares de modo a maximizar o lucro?

> c<-c(143, 60) # Funcao Objetivo


> names(c)<-c("Trigo(htc)","Cevada(htc)")
> b<-c(15000, 4000, 75)
> names(b)<-c("R$ Despesas","QAlqueres","Hectares")
> A<-rbind(c(120, 210), c(110, 30), c(1, 1))
> solveLP(c, b, A, TRUE)
Claudir Oliveira | Introduo Programao Linear com RStudio
BOOT Package
33
Studio

1 Uma industria produz 2 produtos, I e II, sendo que cada produto


consome um certo nmero de horas em 3 mquinas A, B e C
para ser produzido, de acordo coma tabela:

Claudir Oliveira | Introduo Programao Linear com RStudio


Referncias - Contedos extrados de textos da internet
Continua ...

Potrebbero piacerti anche