Академический Документы
Профессиональный Документы
Культура Документы
Mquina de Vetor
de Suporte
Algoritmo
Gentico
Algoritmos genticos
Programao linear
Programao linear
Business management must always, in every decision and action, put
economic performance first
Peter Drucker
Minimizar f x1 , x2 ,..., xn d c1 x1 c2 x2 cn xn
x1, x2 ,..., xn
s.a. a11 x1 a12 x2 a1n xn b1
m restries de
a21 x1 a22 x2 a2 n xn b2 igualdade ou
Definir os valores das desigualdade
...
variveis de deciso (lineares)
x1,...,xn que minimizam am1 x1 am 2 x2 amn xn bm
o custo total
x1 0 , x2 0 ,, xn 0 n variveis no negativas
Pressupostos do modelo:
OBJETIVO
O fabricante deve decidir quanto produzir de cada tipo de piscina no prximo
ciclo de produo.
DADOS
S h 200 bombas no estoque
Cada Aqua-Spa requer 9 horas de trabalho e 12 ft de tubulao de fibra de vidro
Cada Hydro-Lux requer 6 horas de trabalho e 16 ft de fibra de vidro
O gerente tem 1.566 horas de trabalho e 2.880 ft de fibra de vidro disponveis
Cada Aqua-Spa vendida gera um lucro de $ 350,00
Cada Hydro-Lux rende $ 300,00 de lucro
O fabricante otimista e acredita que vender todas as piscinas produzidas
PROBLEMA
Quanto produzir de cada tipo de piscina de forma
a maximizar a receita das vendas ?
Exemplo 1: Soluo Grfica Max 350x1 300 x2
x1 , x2
x1 x2 200
Problema de Programao Linear - PPL s.a.
9 x1 6 x2 1566
12 x1 16 x2 2880
x1 0
Restrio da jornada de trabalho x2 0
Restrio da disponibilidade
da fibra de vidro
CONJUNTO DE
POSSIBILIDADES DE
PRODUO OU
CONJUNTO VIVEL
Exemplo 1: Soluo grfica
Solues viveis em
pontos extremos
60.900
Exemplo 1: Soluo grfica
Dada uma soluo vivel em um vrtice, a busca pela soluo tima deve
responder duas perguntas:
Essa soluo tima ?
Caso, no seja tima, como determinar uma outra soluo vivel melhor ?
122 Aqua-Spa
78 Hydro.Lux
lucro = $ 66.100
Soluo tima
0
60.900
Algoritmo Simplex
https://link.springer.com/chapter/10.1007%2F978-3-642-68874-4_4#page-2
Exemplo 1: Resoluo pelo algoritmo Simplex
s.a.
x1 x2 200
s.a. x1 x2 s1 200
9 x1 6 x2 1566 9 x1 6 x2 s2 1566
12 x1 16 x2 2880 12 x1 16 x2 s3 2880
x1 0 x1 , x2 0
x2 0 s1 , s2 , s3 0 Variveis de folga
s.a. x1 x2 s1 200
9 x1 6 x2 s2 1566
12 x1 16 x2 s3 2880
x1 , x2 0
s1 , s2 , s3 0
ESTRATGIA DE SOLUO
Fixar duas variveis em zero e resolver o sistema para encontrar os valores
das trs variveis restantes.
s.a. x1 x2 s1 200
9 x1 6 x2 s2 1566
12 x1 16 x2 s3 2880
x1 , x2 0
s1 , s2 , s3 0
TABLEAU SIMPLEX
x1 x2 s1 s2 s3
s1 1 1 1 0 0 200
s2 9 6 0 1 0 1566
s3 12 16 0 0 1 2880
s1 1 1 1 0 0 200
s2 9 6 0 1 0 1566
s3 12 16 0 0 1 2880
TABLEAU SIMPLEX
x1 x2 s1 s2 s3
s1 1 1 1 0 0 200
s2 9 6 0 1 0 1566
s3 12 16 0 0 1 2880
Receita = 350 x1 + 300 x2 , quanto maior x1 maior a receita (x1 entre na base).
Alguma varivel deve sair da base.
Exemplo 1: Resoluo pelo algoritmo Simplex
TABLEAU SIMPLEX
x1 x2 s1 s2 s3
s1 1 1 1 0 0 200
s2 9 6 0 1 0 1566
s3 12 16 0 0 1 2880
TABLEAU SIMPLEX
x1 x2 s1 s2 s3
s1 1 1 1 0 0 200
9 s2 9 6 0 1 0 1566
s3 12 16 0 0 1 2880
TABLEAU SIMPLEX
x1 x2 s1 s2 s3
s1 1 1 1 0 0 200
s3 12 16 0 0 1 2880
Operaes elementares
Multiplica a segunda restrio por 350 e soma com a primeira linha
Multiplica a segunda restrio por -1 e soma com a segunda linha
Multiplica a segunda restrio por -12 e soma com a ltima linha
Exemplo 1: Resoluo pelo algoritmo Simplex
TABLEAU SIMPLEX
x1 x2 s1 s2 s3
s1 0 3/9 1 -1/9 0 26
TABLEAU SIMPLEX
x1 x2 s1 s2 s3
s1 0 3/9 1 -1/9 0 26
Receita = 600/9 x2 - 350/9 s2 + 60900, quanto maior x2 maior a receita (x2 entra na base)
Exemplo 1: Resoluo pelo algoritmo Simplex
TABLEAU SIMPLEX
x1 x2 s1 s2 s3
s1 0 3/9 1 -1/9 0 26
TABLEAU SIMPLEX
x1 x2 s1 s2 s3
TABLEAU SIMPLEX
x1 x2 s1 s2 s3
x2 0 1 3 -1/3 0 78
TABLEAU SIMPLEX
x1 x2 s1 s2 s3
x2 0 1 3 -1/3 0 78
x1 1 0 -2 1/3 0 122
x1 x2 s1 s2 s3
x2 0 1 3 -1/3 0 78
x1 1 0 -2 1/3 0 122
2 pacotes:
lpSolve
Rsymphony
Exemplo 1: Soluo com o R
Lucros resultantes da
venda de uma piscina
PPL Programa R
Max 350x1 300 x2 obj=c(350,300)
x1 , x2
matrest=rbind(c(1,1),c(9,6),c(12,16))
x1 x2 200 dir=c("<=","<=","<=")
s.a.
9 x1 6 x2 1566 RHS=c(200,1566,2880)
12 x1 16 x2 2880 library(lpSolve)
resposta=lp("max",obj,matrest,dir,RHS)
x1 0
x2 0
122 Aqua-Spa
Recursos 78 Hydro.Lux
utilizados
Disponibilidade de recursos Mximo lucro total
200 bombas
1.566 horas de trabalho
2.880 ft de fibra de vidro
Teoria da Dualidade
Teorema da dualidade
Valor timo da funo objetivo
no primal igual ao valor timo
da funo objetivo no dual
Programa R
obj=c(350,300) Calcula variveis duais
matrest=rbind(c(1,1),c(9,6),c(12,16))
dir=c("<=","<=","<=")
RHS=c(200,1566,2880)
library(lpSolve)
resposta=lp("max",obj,matrest,dir,RHS,compute.sens=1)
Variveis de Deciso
P1 Parcela do total aplicado no ttulo do tipo 1
P2 Parcela do total aplicado no ttulo do tipo 2
P3 Parcela do total aplicado no ttulo do tipo 3
P4 Parcela do total aplicado no ttulo do tipo 4
P5 Parcela do total aplicado no ttulo do tipo 5
P6 Parcela do total aplicado no ttulo do tipo 6
Funo-objetivo
Exemplo 2: Restries
Restrio de Oramento
s.a.
Restrio de oramento
Problema de
programao linear
Funo objetivo
s.a.
Restries
Exemplo 2: Soluo com o R
Programa em R
library(lpSolve)
cfobj=c(0.087,0.095,0.12,0.09,0.13,0.2) Restries
rest1=rep(1,6)
rest2=c(1,1,0,0,1,0)
rest3=c(0,0,1,0,1,1)
rest4=diag(6)
mat_rest=rbind(rest1,rest2,rest3,rest4)
rhs=c(1,0.5,0.5,rep(0.25,6))
dir=c("=",">=","<=",rep("<=",6))
resposta=lp("max",cfobj,mat_rest,dir,rhs,scale=0)
Exemplo 2: Soluo com o R
Programa em R
# soluo
resposta$solution
Dieta tima
menor custo
$ 39,93
https://en.wikipedia.org/wiki/Stigler_diet
Exemplo 3: Problema da dieta (Stigler, 1945)
A formulao do problema de programao linear para resolver o
problema da dieta com os 77 alimentos pode ser encontrada no Google
Research Blog que ilustra o Glop (Google Linear Optimization Package)
https://research.googleblog.com/2014/09/sudoku-linear-optimization-and-ten-cent.html
O custo anual 365 vezes o custo mnimo dirio obtido pelo problema de
programao linear.
Exemplo 3: Problema da dieta (Stigler, 1945)
https://docs.google.com/spreadsheets/d/1XWJLkAwch5GXAt_7zOFDcg8Wm8Xv29_8PWuuW15qmAE/edit#gid=0
Variveis de
deciso, despesas
em dlar em cada
alimento
# monta PPL
matriz=xl[d5:cb13]
RHS=xl[b5:b13]
dir=rep(">=",length(RHS))
obj=rep(1,dim(matriz)[2])
# resolve o PPL
resposta=lp("min",obj,matriz,dir,RHS)
resposta$objval
names(resposta$solution)=xl[d1:cb1] # alimentos
resposta$solution[which(resposta$solution>0)]
nutrientes=data.frame(as.matrix(matriz)%*%as.matrix(resposta$solution))
rownames(nutrientes)=xl[a5:a13]
colnames(nutrientes)="nutrientes"
print(nutrientes)
Exemplo 4: Problema de transporte
http://onlinelibrary.wiley.com/doi/10.1002/sapm1941201224/abstract
Exemplo 4: Problema de transporte
Rede logstica: m centros de produo suprem n centros de consumo
Dados:
Custos de transporte entre os centros de produo e os centros de consumo (c)
Demanda em cada centro de consumo (d)
Capacidade mxima de produo em cada centro de suprimento (a)
Capacidade de produo a1
c11 Demanda d1
c1n c12
c21 c22
Capacidade de produo a2 Demanda d2
c2n
cm1 cm2
Capacidade de produo am Demanda dn
c
Exemplo 4: Problema de transporte (ARENALES et al, 2007)
Uma companhia de bebidas tem 2 centros de produo (Araraquara e
So Jos dos Campos) e 3 mercados consumidores principais (So
Paulo , Belo Horizonte e Rio de Janeiro).
s.a.
x11 0
x12 0
x13 0 Resolva o problema de
x21 0 transporte com o R
x22 0
x23 0
Exemplo 4: Problema do transporte
capacidade_oferta=c(800,1000)
oferta demanda
demanda=c(500,400,900)
nos_oferta=length(capacidade_oferta) 500 1
nos_demanda=length(demanda) 1 800
400 2
# custos das rotas:
custos=rbind(c(4,2,5),c(11,7,4)) 2 1000
900 3
# X(n oferta , n demanda)
nomes_variaveis=c()
obj=c() # coeficientes da funo objetivo
no_from=c() # n oferta
no _to=c() # n demanda
for (i in 1:nos_oferta) {
obj=c(obj,custos[i,])
no_from=c(no_from,rep(i,nos_demanda))
for (j in 1:nos_demanda) {
no_to=c(no_to,j)
nomes_variaveis=c(nomes_variaveis,paste("X",i,j,sep=""))
}
}
Exemplo 4: Problema de transporte
# restries de oferta
rest_oferta=matrix(0,nos_oferta,length(obj))
for (i in 1:nos_oferta) {
rest_oferta[i,which(no_from==i)]=1
}
# restries de damanda
rest_demanda=matrix(0,nos_demanda,length(obj))
for (i in 1:nos_demanda) {
for (j in 1:nos_oferta) {
rest_demanda[i,which(no_to==i)]=1
}
}
# matriz de restries
matriz=rbind(rest_oferta,rest_demanda)
Exemplo 4: Problema de transporte
# RHS
RHS=c(capacidade_oferta,demanda)
# tipos de restries
dir=c(rep("<=",nos_oferta),rep("=",nos_demanda))
# resolve PL
library(lpSolve)
resposta=lp("min",obj,matriz,dir,RHS,scale=0,compute.sens=T)
names(resposta)
Xij
Custo mnimo
Exemplo 4: Problema de transporte
Soluo tima
oferta demanda
500
500 1
1 800 300
100 400 2
2 1000
900 900 3
Exemplo 5: Otimizao de fluxo de caixa
Meses de Retorno ao
Ms Disponvel
Investimento Durao Final do
para aplicao Investimento
Da aplicao
Tipo D 1 6 11,0%
12 Variveis de Deciso
Ai Valor aplicado no ms i na aplicao A (i=1,2,3,4,5,6)
Bi Valor aplicado no ms i na aplicao B (i=1,3,5)
Ci Valor aplicado no ms i na aplicao C (i=1,4)
Di Valor aplicado no ms i na aplicao D (i=1)
Exemplo 5: Otimizao de fluxo de caixa
A empresa deseja minimizar a quantia inicial de dinheiro aplicada no
fundo de construo e que junto com os rendimentos dos investimentos
cubra os pagamentos exigidos sem a injeo adicional de dinheiro.
Funo Objetivo
C1 B3 C4 B5
B1
1 2 3 4 5 6 7
A1 A2 A3 A4 A5 A6
$ 250 $ 250 $ 300
Meses de Retorno ao
Ms Disponvel
Investimento Durao Final do
para aplicao Investimento
Da aplicao
Tipo A 1,2,3,4,5,6 1 1,8%
Tipo B 1,3,5 2 3,5%
Tipo C 1,4 3 5,8%
Tipo D 1 6 11,0%
Exemplo 5: Otimizao de fluxo de caixa
Fluxo de caixa Para cada n (ms) deve ser
D1 includa uma restrio do tipo:
Entradas Sadas = 0
1 2 3 4 5 6 7
A1 A2 A3 A4 A5 A6
Ms 1
Ms 7
Exemplo 5: Otimizao de fluxo de caixa
# restries equaes de balano nos meses 2 at 7
restricoes=eqbalancos[-1,]
# RHS
RHS=rep(0,dim(eqbalancos)[1])
RHS[meses_pagamentos]=desembolsos
RHS=RHS[-1]
# resolve o PL
library(lpSolve)
resposta=lp("min",obj,restricoes,dir,RHS,scale=0,compute.sens=T)
# soluo
resposta$objval Capital inicial necessrio
x=resposta$solution
names(x)=nomes_titulos
cbind(x) Programao da aplicao
do capital inicial
Exemplo 5: Otimizao de fluxo de caixa
500 284
1 2 3 4 5 6 7
241 246 246
$ 250 $ 250 $ 300
No ms 1:
aplique $241 em A
aplique $500 em C
Programao tima da No ms 2:
aplicao do capital inicial aplique $246 em A
mnimo de $741
No ms 4
aplique $246 em A
aplique $284 em C
Programao linear inteira
https://www.jstor.org/stable/1910129?seq=1#page_scan_tab_contents
http://www.math.uiuc.edu/documenta/vol-
ismp/38_cook-bill.pdf
X2
Solues inteiras viveis
3
0
0 1 2 3 4 X1
Exemplo 6: Escala de servio (LACHTERMACHER, 2006)
Variveis de deciso
N1 n de funcionrios que iniciam atividades no domingo
N2 n de funcionrios que iniciam atividades na 2 feira
N3 n de funcionrios que iniciam atividades na 3 feira
N4 n de funcionrios que iniciam atividades na 4 feira
N5 n de funcionrios que iniciam atividades na 5 feira
N6 n de funcionrios que iniciam atividades na 6 feira
N7 n de funcionrios que iniciam atividades no sbado
Funo objetivo
Min N1 N 2 N3 N 4 N5 N6 N7
Exemplo 6: Cada funcionrio trabalha 5 dias da semana
Min N1 N 2 N3 N 4 N5 N6 N7
s.a. N N N N N 11 domingo
1 4 5 6 7
N1 N 2 N 5 N 6 N 7 18 2 feira
N1 N 2 N 3 N 6 N 7 12 3 feira
N1 N 2 N 3 N 4 N 7 15 4 feira
N1 N 2 N 3 N 4 N 5 19 5 feira
N N N N N 14 6 feira
2 3 4 5 6
N 3 N 4 N 5 N 6 N 7 16 sbado
Ni 0 para i=1,7 so variveis inteiras
Exemplo 6: Soluo com o R
matrest=c(1,0,0,1,1,1,1)
matrest=rbind(matrest,c(1,1,0,0,1,1,1))
matrest=rbind(matrest,c(1,1,1,0,0,1,1))
matrest=rbind(matrest,c(1,1,1,1,0,0,1)) restries
matrest=rbind(matrest,c(1,1,1,1,1,0,0))
matrest=rbind(matrest,c(0,1,1,1,1,1,0))
matrest=rbind(matrest,c(0,0,1,1,1,1,1)) Todas as variveis
RHS=c(11,18,12,15,19,14,16) so inteiras
dir=rep(">=",length(RHS))
obj=rep(1,dim(matrest)[2]) 23 funcionrios devem
resposta=lp("min",obj,matrest,dir,RHS,all.int=T) ser contratados
# escala de servio
dias=weekdays(as.Date("2017/06/25")+seq(0,6,1))
funcionarios=resposta$solution
names(funcionarios)=dias Escala de servio
cbind(funcionarios)
Exemplo 7: Problema de Programao Linear Inteira Mista
Uma empresa planeja expandir suas atividades abrindo dois novos
armazns, sendo que h trs locais sob estudo para a instalao destes
armazns. Quatro clientes devem ter atendidas suas demandas: 50, 100,
150 e 200.
A1=350 C2 = 100
C12=9
C11=13 C22=7
C21=10
C14=12 A2 =300
C1 = 50 C32=2
C23=11
C3=150
C24=4
C33=13
C4=200
A3=200
C34=7
12 variveis de deciso
Funo objetivo: minimizar o custo total
Exemplo 7: Restries
Y1 + Y2 + Y3 = 2 Instalar 2 Armazns
X11 + X21 = 50
X12 + X22 + X32 = 100 Restries de atendimento a
X23 + X33 = 150 demanda
# variveis de deciso
nomesvar=c(paste("Y",seq(1,narmazens,1),sep=""))
no.from=c()
no.to=c()
vetor.custos.rotas=c()
for (i in 1:narmazens) {
nomesvar=c(nomesvar,paste("X",i,seq(1,nclientes,1),sep=""))
no.from=c(no.from,rep(i,nclientes))
no.to=c(no.to,seq(1,nclientes,1))
vetor.custos.rotas=c(vetor.custos.rotas,custos.rotas[i,])
}
Exemplo 7: Soluo com R
# coeficientes da funo objetivo
fobj=c(investimento)
for (i in 1:narmazens) {
for (j in 1:nclientes) {
custo=0
if (custos.rotas[i,j]>0) custo=custos.opera[i]+custos.rotas[i,j]
fobj=c(fobj,custo)
}
}
names(fobj)=nomesvar
# restries de investimento
nvar=length(fobj)
rest1=rep(0,nvar)
rest1[1:narmazens]=1
RHS1=2
dir1="="
Y1 + Y2 + Y3 = 2 Instalar 2 Armazns
Exemplo 7: Soluo com R
# restries de capacidade de armazenamento
rest2=matrix(0,narmazens,nvar)
for (i in 1:narmazens) {
rest2[i,i]=-capacidade[i]
}
for (i in 1:narmazens) {
for (j in 1:nclientes) {
if (custos.rotas[i,j]>0) rest2[i,(narmazens+(i-1)*nclientes+j)]=1
}
}
RHS2=rep(0,narmazens)
dir2=rep("<=",narmazens)
X11 + X21 = 50
X12 + X22 + X32 = 100
X23 + X33 = 150
X14 + X24 + X34 = 200
Exemplo 7: Soluo com R
# concatena restricoes, RHS e dir
restricoes=rbind(rest1,rest2,rest3)
colnames(restricoes)=nomesvar
RHS=c(RHS1,RHS2,RHS3)
dir=c(dir1,dir2,dir3)
# Resolve PL
resposta=lp("min",fobj,restricoes,dir,RHS,scale=0,compute.sens=F,binary.vec=seq(1,3,1))
resposta$solution
resposta$objval
Armazns 2 e 3 devem ser construdos
C2 = 100
50 A2 =300
C1 = 50 100
50
C3=150
200
100
C4=200
A3=200
Anlise Envoltria de Dados
Data Envelopment Analysis - DEA
(fronteira de eficincia)
Y0
X0
Quantidade de insumo (X)
A funo fronteira indica a maior quantidade de produto que pode ser obtida a
partir de determinada quantidade de insumo, ou a menor quantidade de
insumo necessria para produzir uma determinada quantidade de produto.
Orientao ao Produto x Orientao ao Insumo
ORIENTAO INPUT
Eficincia = = X1 / X0
Mxima contrao
Min { | ( X , Y) T ( X,Y ) } 0 1 do insumo
produto
DMU 4
DMU 5
DMU N DMU 2
DMU 1
DMU 6 DMU 3
insumo
Estimao da fronteira de produo
Na prtica as informaes disponveis sobre o conjunto de possibilidades de
produo so limitadas s observaes acerca dos vetores de insumos X e
produtos Y de algumas DMUs
produto
A proposta da DEA
DMU 4
DMU 5 identificar a fronteira e
derivar as medidas de
DMU N DMU 2 eficincia a partir das
DMU 1 quantidades observadas
de insumos e produtos do
DMU 6 DMU 3
conjunto de DMUs.
insumo
Anlise Envoltria de Dados
http://www.sciencedirect.com/science/article/pii/S0038012117300174
Modelo envelope orientado ao insumo CRS/E/I
Input Outputs
DMU Custos Capacidade de Comprimento Qtide. de Qtde. de
operacionais (R$) Transformao (MVA) de Rede (km) Trafos Mdulos
CEEE 146.580.493 7.043 6.204 169 906
CEMIG 149.067.203 14.644 5.946 124 516
CHESF 381.365.832 28.999 20.972 382 1.647
COPEL 110.822.217 17.943 7.618 286 1.064
CTEEP 602.352.315 45.292 18.301 565 1.936
ELENOR 313.485.008 14.539 7.795 161 574
ELESUL 204.500.605 17.868 11.007 127 488
FURNAS 563.816.133 53.944 19.119 332 720
Min
,
Input Outputs
DMU Custos Capacidade de Comprimento Qtide. de Qtde. de
operacionais (R$) Transformao (MVA) de Rede (km) Trafos Mdulos
CEEE 146.580.493 7.043 6.204 169 906
CEMIG 149.067.203 14.644 5.946 124 516
CHESF 381.365.832 28.999 20.972 382 1.647
COPEL 110.822.217 17.943 7.618 286 1.064
CTEEP 602.352.315 45.292 18.301 565 1.936
ELENOR 313.485.008 14.539 7.795 161 574
ELESUL 204.500.605 17.868 11.007 127 488
FURNAS 563.816.133 53.944 19.119 332 720
Min
,
Folgas
Eficincia peer set
MVA km OPEX
CEEE 0,6160 7568,27 0 0 Copel 0,814
Cemig 0,6070 0 271,93 0 Copel 0,816
Chesf 0,8000 20395,47 0 0 Copel 2,753
Copel 1,0000 0 0 0 Copel 1
Cteep 0,4640 0 929,41 0 Copel 2,524
Elenor 0,3620 3819,20 0 0 Copel 1,023
Elesul 0,7830 8057,59 0 0 Copel 1,445
Furnas 0,5910 0 3784,97 0 Copel 3,006
Dualidade entre as formulaes dos multiplicadores e envelope
Teorema da dualidade
A eficincia de uma DMU pode ser avaliada pela razo entre o produto
virtual e o insumo virtual
produto virtual v1 y1 vM yM
eficincia
insumo virtual u1x1 u S xS
1
ui* 0, i 1, M DMU
eficiente
v *j 0, j 1, S
Exemplo 8: Eficincia das transmissoras de energia
Modelo CRS/M/I
Input Outputs
DMU Custos Capacidade de Comprimento Qtide. de Qtde. de
operacionais (R$) Transformao (MVA) de Rede (km) Trafos Mdulos
CEEE 146,580,493 7,043 6,204 169 906
CEMIG 149,067,203 14,644 5,946 124 516
CHESF 381,365,832 28,999 20,972 382 1,647
COPEL 110,822,217 17,943 7,618 286 1,064
CTEEP 602,352,315 45,292 18,301 565 1,936
ELENOR 313,485,008 14,539 7,795 161 574
ELESUL 204,500,605 17,868 11,007 127 488
FURNAS 563,816,133 53,944 19,119 332 720
Fonte: ANEXO III Nota tcnica n 125/2007-SRE/ANEEL
vi1MVAi vi 2 kmi
eficinciai
ui OPEXi
Exemplo 8: Eficincia das transmissoras de energia
Outputs de Furnas
PPL para avaliar a
eficincia de Furnas
Max v153.944 v219.119
u,v
s.a.
Outputs Inputs
Outputs da Chesf
PPL para avaliar a
eficincia da Chesf
Max v1 28.999 v2 20.972
u,v
s.a.
Outputs Inputs
Eficincia
CEEE 0,6160
Cemig 0,6070
Chesf 0,8000
Copel 1,0000
Cteep 0,4640
Elenor 0,3620
Elesul 0,7830
Furnas 0,5910
Pacotes para DEA no R
Benchmarking
rDEA
nonparaeff
Exemplo 8: Resolvido com R
vi1MVAi vi 2 kmi
eficinciai
ui OPEXi
empresas=c("CEEE","Cemig","Chesf","Copel","Cteep","Elenor","Elesul","Furnas")
opex=c(146580493,149067203,381365832,110822217,602352315,313485008,204500605,563816133)
MVA=c(7043,14644,28999,17943,45292,14539,17868,53944)
km=c(6204,5946,20972,7618,18301,7795,11007,19119)
matrizdados=cbind(opex,MVA,km)
rownames(matrizdados)=empresas
colnames(matrizdados)=c("opex","MVA","km")
library(Benchmarking)
X=matrizdados[,1] #input
Y=matrizdados[,2:3] #output
peer=resposta$lambda
eficincias
peer set
Exemplo 8: Resolvido com R
v MVAi vi 2 kmi
eficinciai i1
ui OPEXi
VRS FDH
Fonte: www.reckon.co.uk/open/dea
Fronteiras de eificncia segundo diferentes hipteses para os rendimentos de
escala (RTS return to scale)
Eficincia Eficincia
tcnica = tcnica X Eficincia
global pura de escala
CRS VRS
Formulao Envelope (VRS/E/I)
eficincia DMU0 Min
,
s.a.
N
x1,0 k x1k
k 1
N
xS ,0 k xSk
k 1 restries do
N CPP
y1,0 k y1k
k 1
N
y M ,0 k yMk combinao linear
k 1
convexa
k 0, k 1, N (apenas no modelo com
rendimento varivel de
1 N 1
escala)
Formulao multiplicador (VRS/M/I)
v MVAi vi 2 kmi v0
eficinciai i1
ui OPEX i
empresas=c("CEEE","Cemig","Chesf","Copel","Cteep","Elenor","Elesul","Furnas")
opex=c(146580493,149067203,381365832,110822217,602352315,313485008,204500605,563816133)
MVA=c(7043,14644,28999,17943,45292,14539,17868,53944)
km=c(6204,5946,20972,7618,18301,7795,11007,19119)
matrizdados=cbind(opex,MVA,km)
rownames(matrizdados)=empresas
colnames(matrizdados)=c("opex","MVA","km")
library(Benchmarking)
X=matrizdados[,1] #input
Y=matrizdados[,2:3] #output
Vladmir Vapnik
http://www.mit.edu/~6.454/www_spring_2001/emin/slt.pdf
Classificador
f(x,w,b) = sign(w x + b)
w x + b>0
x2
y = +1
y = -1
w x + b<0
x1
Classificador
f(x,w,b) = sign(w x + b)
x2
y = +1
y = -1
x1
Classificador
f(x,w,b) = sign(w x + b)
x2
y = +1
y = -1
x1
Erro de classificao
Classificador linear de margem mxima
f(x,w,b) = sign(w x + b)
x2
y = +1
y = -1
Vetores suporte
x1
SVM linear: caso separvel
x+ M=Largura da margem
X-
Sabemos que:
w . x+ + b = +1
(x x ) w 2
w . x- + b = -1 M
w . (x+ - x-) = 2 w w
Problema de programao quadrtica
Classificao dos dados de treinamento, pares {(xi ,yi) i=1,n}
wxi b 1 se yi= +1
yi ( wx i b) 1 i = 1,n
wxi b 1 se yi = -1
2
Largura da margem M
w
n o multiplicador de Lagrange
i 1
Cada i diferente de zero indica
i 0 i 1, n que o correspondente xi um
Soluo vetor suporte
n
w* i* yi xi b* yk w *T xk para todo xk em que k 0
i 1
Regra de classificao
n *
f z sign i yi xi z b *
i 1
Parmetro C
controla o overfitting
R
1 T
Min w w C k
w, 2 k 1
s.a. yi ( wxi b) 1 i
i 0 i 1, n
SVM linear: caso no separvel
R
1 T
Min w w C k Problema Primal
w, 2 k 1
s.a. yi ( wxi b) 1 i
i 0 i 1, n
K(xi,xj)
n n n
Max i i j yi y j xi x j
1
i 1 2 i 1 j 1
s.a. Problema Dual
n
i yi 0
i 1
0 i C i 1, n
SVM no linear: Feature space
Idia geral: o espao de entrada original pode sempre ser
mapeado em um espao de dimenso maior (feature
space) em que os padres de treinamento so
linearmente separveis.
: x (x)
Kernel Trick
O SVM linear baseia-se nos produtos internos entre vetores
K(xi,xj) = xiTxj
K(xi,xj)=(1 + xiTxj)2,
xi x j
2
Mais comuns
Gaussiana: K ( x i , x j ) exp( )
2 2
No h necessidade de representar o
espao explicitamente, simplesmente
escolha uma funo Kernel
Problema dual do SVM no linear
n
n n
Max i i j yi y j K xi , x j
1
i 1 2 i 1 j 1
s.a.
n
i yi 0
i 1
i 0 i 1, n
Regra de classificao
n
f z i yi K xi , z b *
*
i 1
Considere que o perito esteja diante dessa situao e tenha que avaliar a
capacidade da empresa P&R de passar pela concordata e sair com todos
os seus compromissos honrados e em condies de continuar operando
normalmente como outras empresas. Uma abordagem para solucionar o
problema consiste em utilizar a anlise discriminante.
Corrar L.J. et al, Anlise Multivariada para os cursos de admniistrao, cincias contbeis e economia, Editora Atlas, 2007
Exemplo (Corrar et al, 2007)
Varivel dependente (Y): varivel categrica com duas categorias
Empresas insolventes concordatrias (codificada com 1)
Empresas solventes (codificada com 2)
attach(dados)
dim(dados)
# 91 empresas
# 9 variveis
length(which(dados[,1]==1)) # CLASS_Y=1
# 49 empresas insolventes concordatrias
length(which(dados[,1]==2)) # CLASS_Y=2
# 42 empresas solventes
length(which(dados[,9]==0))
# 64 empresas na amostra insample, varivel ALEAT = 0
length(which(dados[,9]==1))
# 27 empresas na amostra outsample, varivel ALEAT = 1.
Anlise exploratria
par(mfrow=c(2,4))
for (i in 2:8){
boxplot(dados[,i] ~CLASS_Y,main=names(dados)[i])
}
library(e1071)
saida=svm(y~AVEST+AVPC,data=x,kernel="sigmoid",type="C-classification")
plot(saida,x)
table(y,saida$fitted)
Funo svm do pacote e1071
plot(saida,x)
Funo svm do pacote e1071
# outsample
outsample=which(ALEAT==1) # indice das observaes na amostra insample
y=as.factor(CLASS_Y[outsample])
x=data.frame(AVEST[outsample],AVPC[outsample])
colnames(x)=c("AVEST","AVPC")
resposta=predict(saida,x)
table(y,resposta)
Classifica amostra
outsample
Algoritmos genticos
Genetic Algorithms - GA
Algoritmos genticos
Algoritmos de otimizao inspirados nos processos subjacentes
evoluo biolgica (seleo, cruzamento e mutao).
Charles Darwin
1809-1882
Caractersticas gerais
http://www.geos.ed.ac.uk/~mscgis/12-13/s1100074/Holland.pdf
2.288.967
x 1 (2 1) 0,637197
22
2 1
Funo de aptido
Baseia-se na funo objetivo que se deseja otimizar.
Seleo Natural
Scrucca, 2013
https://www.jstatsoft.org/article/view/v
053i04/v53i04.pdf
Parmetros para execuo do algoritmo gentico
0011
0110 0100
O Ponto de
corte
escolhido
O crossover aplicado 11001 aleatriamente
Pais
com uma dada 01111
probabilidade
denominada taxa de 11011
cruzamento (60% a 90%) Filhos
01101
0 0 0 0 Pais 1 1 1 1
0 0 1 1 Filhos 1 1 0 0
Cruzamento Multi-Ponto
Operao realizada sobre os cromossomos dos pais para a
criao de descendentes
0 0 0 0 Pais 1 1 1 1
0 1 1 0 Filhos 1 0 0 1
Operador de Mutao
Entra em ao nos cromossomos dos filhos.
Operador randmico
Introduz e mantm a variedade gentica da populao
Garante a possibilidade de se alcanar qualquer ponto do
espao de busca
Contorna timos locais
0 1 1 0 0 0 1
0 1 0 0 0 0 1
Operador de Mutao
Nmero de geraes.
Perda de diversidade.
f ( xi )
Probabilidade de seleo pi
N
proporcional a aptido k 1
f ( xk )
Exemplo Seleo dos pais (roleta)
Pais selecionados
8,7%
A1 = 1 1 0 0 1
A4
17,1% A2 = 0 1 1 1 1
54,5% A3
A1 A2 = 0 1 1 1 1
19,6%
A2 A1 = 1 1 0 0 1
Exemplo Crossover e Mutao
Pais Filhos
crossover mutao
A1 = 1 1 0 0 1 11011 11011
A2 = 0 1 1 1 1 01101 110 01
Nova
crossover populao
mutao
A2 = 0 1 1 1 1 01111 10111
A1 = 1 1 0 0 1 11001 11001
Exemplo Segunda gerao
cromossomos prob. de
x f (x )
seleo
1 1 10 1 1 27 729 29,1%
2 1 10 0 1 25 625 24,9%
3 1 10 0 1 25 625 24,9%
4 1 01 1 1 23 529 21,1%
f ( xi )
Probabilidade de seleo pi
N
proporcional a aptido k 1
f ( xk )
Exemplo Terceira , Quarta e Quinta geraes
x f (x )
1 1 1 01 1 27 729
Terceira 2 1 0 11 1 23 529
Gerao
3 0 1 11 1 15 225
4 0 0 11 1 7 49
x f (x )
1 11111 31 961
Quarta 2 11011 27 729
Gerao
3 10111 23 529
4 10111 23 529
x f (x )
1 11111 31 961
Quinta
Gerao 2 11111 31 961
3 11111 31 961
4 10111 23 529
Algoritmo gentico no R
Pacotes
GA
genealg
Funo GA do Pacote GA
Regio de
busca
Tamanho da populao
Taxa de crossover
Taxa de mutao
elitismo
Nmero mximo de iteraes
library(GA)
numbits=22 # nmero de genes do cromossomo
# funo de ativao
fa <- function(x) {
assign("minimo",min, envir = .GlobalEnv)
assign("maximo",max, envir = .GlobalEnv)
assign("nbits",numbits, envir = .GlobalEnv)
real = minimo+binary2decimal(x)*(maximo-minimo)/(2^nbits-1)
saida=real*sin(10*pi*real)+1
return(saida)
}
# soluo tima
xotimo=minimo+binary2decimal(GA@solution)*(maximo-minimo)/(2^numbits-1)
yotimo=f(xotimo) xotimo a soluo tima decodificada
Exemplo Resultado
summary(GA)
print(xotimo) 1.850587
print(yotimo) 2.850272
Exemplo Resultado
plot(GA)
Exemplo Primeira gerao
GA <- ga(type = "binary", fitness = fa, nBits=numbits,popSize=100,maxiter=1)
pop= GA@population
realpop=apply(pop,1,binary2decimal)
xpop=minimo+realpop*(maximo-minimo)/(2^numbits-1)
ypop=apply(pop,1,fa)
curve(f, min, max)
points(xpop,ypop,pch=20,col="black",cex=2)
Exemplo Dcima gerao
GA <- ga(type = "binary", fitness = fa, nBits=numbits,popSize=100,maxiter=10)
pop= GA@population
realpop=apply(pop,1,binary2decimal)
xpop=minimo+realpop*(maximo-minimo)/(2^numbits-1)
ypop=apply(pop,1,fa)
curve(f, min, max)
points(xpop,ypop,pch=20,col="black",cex=2)
Exemplo 25 gerao
GA <- ga(type = "binary", fitness = fa, nBits=numbits,popSize=100,maxiter=25)
pop= GA@population
realpop=apply(pop,1,binary2decimal)
xpop=minimo+realpop*(maximo-minimo)/(2^numbits-1)
ypop=apply(pop,1,fa)
curve(f, min, max)
points(xpop,ypop,pch=20,col="black",cex=2)
Problema da Mochila (knapsack problem)
Objetivo: preencher uma mochila com objetos de diferentes pesos e valores.
O objetivo que se preencha a mochila com o maior valor possvel, no
ultrapassando o peso mximo.
unbounded
knapsack
problem (UKP)
p = c(6, 5, 8, 9, 6, 7, 3) # valores
w = c(2, 3, 6, 7, 5, 9, 4) # pesos
W = 9 # capacidade da mochila
summary(GA)
sum(p * GA@solution) # valor da mochila
sum(w * GA@solution) # peso da mochila
Exemplo 0-1 knapsack problem
summary(GA)
Itens 5 e 7 selecionados
p = c(6, 5, 8, 9, 6, 7, 3) # valores
w = c(2, 3, 6, 7, 5, 9, 4) # pesos
sum(p * GA@solution) # valor da mochila
sum(w * GA@solution) # peso da mochila
Outras representaes (Linden, 2008)
Representao binria (algoritmo gentico clssico)
Soluo representada por um cromosso com genes binrios (vetor com
elementos binrios, conforme slides anteriores)
Exemplo: problema da mochila
Repressentao real
Soluo representada por um cromossomo cujos genes so codificados
como nmeros reais (vetor de nmeros reais)
Exemplo: otimizao da carteira de investimentos
Cromossomos pais
pai
me
Gere string de seleo com bits {0,1} aleatrios
1,4,7,3 7,4,1,3
Preencha o cromossomo do filho 1
Cruzamento na representao baseada em ordem (Linden, 2008)
Cromossomos pais
pai
me
Gere string de seleo com bits {0,1} aleatrios
7,2,1,3 1,7,3,2
Preencha o cromossomo do filho 1
Cruzamento na representao real (Linden, 2008)
Cromossomos pais
pai
me
Cruzamento: selecione um ponto aleatrio e troque os bits
entre os cromossomos pais
Filhos
Cruzamento na representao real (Linden, 2008)
Mtodo alternativo
Cromossomos pais para o cruzamento
na repsentao real
pai
me
Em cada gene sorteie nmero aleatrios no intervalo entre o
mnimo e o mximo definidos nos cromossomos pais
Filhos
Mutao na representao baseada em ordem (Linden, 2008)
Cromossomo original
Mutao
Mutao
Mutao na representao real (Linden, 2008)
Cromossomo original
Mutao
Problema do caixeiro viajante (travelling salesman problem)
Objetivo: para um dado conjunto de cidades de rotas entre elas, encontre um
circuito que possua a menor distncia, comeando numa cidade qualquer,
visitando cada cidade precisamente uma vez e regressando cidade inicial
https://en.wikipedia.org/wiki/Travelling_salesman_problem
Problema do caixeiro viajante (travelling salesman problem)
Formulao combinatria.
https://pt.wikipedia.org/wiki/Problema_do_caixeiro-viajante
World tour
1.904.711cidades
http://www.math.uwaterloo.ca/tsp/world/images/worldmoll.html
7,515,772,212 meter tour length (May 24, 2013)
7,515,778,188 (October 25, 2011)
7,515,786,987 (April 4, 2011)
Lower bound
7,515,790,345 (October 10, 2010) 7.512.218.268
7,515,877,991 (May 12, 2009) meters
7,515,947,511 (November 27, 2008)
7,517,285,610 (September 16, 2003)
World tour
1.904.711cidades.
100,000-city Mona Lisa TSP
Leonardo da
Vincis Mona Lisa
as a TSP. Tour found
by Yuichi Nagata.
March 17, 2009: TOUR =
5757191, GAP = 256. Yuichi
Nagata has improved the best
known tour result by 8 units!
His solution was found via
series of computations with a
genetic algorithm that he has
designed.
http://www.math.uwaterloo.ca/tsp/data/ml/monalisa.html
http://www.math.uwaterloo.ca/tsp/data/art/index.html
Exemplo do Problema do Caixeiro Viajante (Scrucca, 2013)
data("eurodist", package = "datasets)
D = as.matrix(eurodist) # matriz de distncias entre 21 cidades da Europa
Comprimento do menor
roteiro 12842 Km
2 roteiros
Exemplo do Problema do Caixeiro Viajante
# Mapa do roteiro timo determinado pelo algoritmo gentico
mds = cmdscale(eurodist) # faz escalonamento multidimensional (MDS)
x = mds[, 1] # abscissas das cidades no mapa gerado pelo mds
y = -mds[, 2] # oordenada das cidades no mapa gerado pelo mds
plot(x, y, type = "n", asp = 1, xlab = "", ylab = "")
abline(h = pretty(range(x), 10), v = pretty(range(y), 10),col = "light gray")
21 cidades
12842 km
Referncias bibliogrficas
ARENALES, M.; ARMENTANO, V.; MORABITO, R.; YANASSE, H. Pesquisa Operacional, Rio de Janeiro:
Campus, 2007.
CORRAR, L.J.M PAULO, E.; DIAS FILHO, J.M. Anlise multivariada para os cursos de administrao,
cincias contbeis e economia, So Paulo: Editora Atlas, 2007.
LACERDA, E.G.M.; CARVALHO, A.C.P.L.F.; LUDERMIR, T.B, Um tutorial sobre algoritmos genticos, RITA,
Volume IV, Nmero 2, Julho, 1999
PESSANHA, J.F.M.; FIGUEIRA DE MELO, M.A.R.; BARROS, M.; SOUZA, R.C. Avaliao dos custos
operacionais eficientes das empresas de transmisso do setor eltrico Brasileiro: uma proposta de
adaptao do modelo dea adotado pela ANEEL, Pesquisa Operacional, V. 30, n. 3, Sept/Dec. 2010
RAGSDALE, C.T. Spreadsheet Modeling & Decision Analysis: a practical introduction to management
science, Fourth Edition, Thomson South-Western, 2004.
SCRUCCA, L. GA: A package for Genetic Algorithm in R, Journal of Statistical Software, April, 2013, V. 53,
n. 4, 2013.
Uma boa cabea e um bom corao formam sempre
uma combinao formidvel.
Nelson Mandela