By Salerno | May 7, 2022
Introdução
Se olharmos para os mais variados recursos disponíveis em nossa sociedade, logo perceberemos que vivemos em um mundo com limitação de recursos.
Sabemos que não se pode extrair a quantidade que desejar a qualquer hora nas plataformas de petróleo. A água do nosso planeta…….nosso salário….nosso precioso tempo também é muito escasso!
Bem, acho que já consegui te convencer! Mas se olharmos para disciplinas como a economia, veremos que um dos seus fortes pilares é a gestão da escassez.
Logo, não importa se estamos falando de ambientes individuais ou profissionais, esse tema é de muitas relevância, e garante para aqueles que o estudam o grande diferencial competitivo, afinal de contas, qual a empresa que não gostaria de ter em seu quadro de funcionários um profissional focado em uma alocação ótima de recursos, muitas vezes buscando maximizar receita e/ou redução de custos?
A programção linear
é a base utilizada por esses profissionais na busca das melhores alocações possíveis, e isso pode ser usado nos mais variados casos:
- Determinação do mix de produtos
- Manufatura
- Determinação de rotas e logística eficaz
- Planejamento financeiro e muito mais
Características comuns problemas de otimização
Nessa breve introdução, podemos perceber que essa alocação de recursos, buscando a sua eficácia (“fazer mais com menos em menor tempo”) passa por decisões
, restrições
e objetivos
.
Decisões
Usando uma abordagem um pouco técnica e matemática, associada com a linguagem de negócios, podemos dizer que em um modelo função de x
, as variáveis decisórias são aquelas em que você pode altera-las, e seu resultado será visto em uma variável resposta (y).
Um exemplo prático seria um geestor de uma fábrica determinando as quantidades de seu mix de produtos para a sua efetiva produção.
Restrições
Sobre essas variáveis descritas acima, ou seja, quantidade de matéria prima para a produção dos produtos, horas disponíveis para a produção, máquinas e etc, são as restrições nos modelos de progreamação linear.
Vocês verão que os símbolos matemáticos comuns a esse bloco conceitual serão: =
, <
, >
ou !=
.
Objetivos
Creio que você entenderá a frase abaixo:
“Dada a quantidade de matéria-prima disponível (x1), horas disponíveis (x2) e máquinas (x3), quero MAX
a minha receita (y)”.
A frase acima explica bem os objetivos, muitas vezes expressos na condição de maximizar os resultados de uma função, ou minimizar.
Case
Os exemplos nos ajudam muito a entender os conceitos. Uma vez compreendido a base conceitual fundamental de qualquer tema, é extremamente importante que você passe a aplicar em um case real.
Empresa: Blue Ridge Hot Tubs
Produtos: Aqua-Spa (x1) e Hydro-Lux (x2). Aqui estamos representando
x
como as quantidades de cada modelo a produzir dado oobjetivo
e asrestrições
.Objetivo: Quantas banherias preciso produzir de cada modelo de tal forma a maximizar a minha margem?
Restrições:
(1) ambos modelos necessitam de somente 1 bomba em cada banheira totalizando 200 bombas disponíveis (2) 9 horas de produção (x1) e 6 horas para (x2) com 1.566 horas disponíveis (3) 12 unidades de comprimento (x1) e 16 unidades (x2) com 2.880 unidades de comprimento disponíveis
# Import lpSolve package
library(lpSolve)
# Set coefficients of the objective function
f.obj <- c(350, 300)
# Set matrix corresponding to coefficients of constraints by rows
# Do not consider the non-negative constraint; it is automatically assumed
f.con <- matrix(c(1, 1,
9, 6,
12, 16), nrow = 3, byrow = TRUE)
# Set unequality signs
f.dir <- c("<=",
"<=",
"<=")
# Set right hand side coefficients
f.rhs <- c(200,
1566,
2880)
# Final value (z)
lp("max", f.obj, f.con, f.dir, f.rhs)
## Success: the objective function is 66100
# Variables final values
lp("max", f.obj, f.con, f.dir, f.rhs)$solution
## [1] 122 78
# Sensitivities
lp("max", f.obj, f.con, f.dir, f.rhs, compute.sens=TRUE)$sens.coef.from
## [1] 300.0000 233.3333
lp("max", f.obj, f.con, f.dir, f.rhs, compute.sens=TRUE)$sens.coef.to
## [1] 450 350
# Dual Values (first dual of the constraints and then dual of the variables)
# Duals of the constraints and variables are mixed
lp("max", f.obj, f.con, f.dir, f.rhs, compute.sens=TRUE)$duals
## [1] 200.00000 16.66667 0.00000 0.00000 0.00000
# Duals lower and upper limits
lp("max", f.obj, f.con, f.dir, f.rhs, compute.sens=TRUE)$duals.from
## [1] 1.74e+02 1.44e+03 -1.00e+30 -1.00e+30 -1.00e+30
lp("max", f.obj, f.con, f.dir, f.rhs, compute.sens=TRUE)$duals.to
## [1] 2.07e+02 1.80e+03 1.00e+30 1.00e+30 1.00e+30
Solução
As quantidades que se maximiza o valor de margem ($66.100) são respectivamente 122 (x1) e 78 (x2).
Próximos passos
Buscar soluções gráficas usando o conceito chamado Curva de Nível.