pl - moretti - aula02.pdf
DESCRIPTION
Programação LinearTRANSCRIPT
MT503-Programação Linear – 2º Semestre de 1999
Programação Linear Prof. Moretti Aula 2 : Exemplos da linguagem AMPL Problema : Uma laminação usa como matéria-prima placas de aço para produzir dois produtos: molas e lâminas de aço. A velocidade da linha de produção dos produtos é dada abaixo:
Produto Produção (toneladas/hora)
Molas 200 Lâminas 140
Os produtos têm diferentes preços de vendas:
Produtos Preço Molas R$25,00 Lâminas R$30,00
E, devido a problemas técnicos, a produção semanal está restrita às seguintes produções máximas:
Produtos Produção Máxima
Molas 6000 Lâminas 4000
Se temos 40 horas de produção em cada semana, quantas toneladas de molas e Lâminas devemos produzir de tal maneira a maximizar o lucro semanal Modelo Matemático : Sejam
semana. uma em produzidas aço de Lâminas de toneladas semana. uma em produzidas aço de molas de toneladas
Lâminas
molas==
xx
Então, nós queremos
40000 6000 0
40140
12001
a sujeito3025 Maximizar
Lâminas
molas
Lâminasmolas
Lâminasmolas
≤≤≤≤
≤+
+
xx
xx
xx
Prof. Antonio Carlos Moretti
Graficamente:
O modelo em AMPL para resolver este problema é: >ampl ampl : var xmolas; ampl : var xLâminas; ampl : maximize lucro : 25*xmolas+30*xLâminas; ampl : subject to Tempo: (1/200)*xmolas+(1/140)*xLâminas<=40; ampl : subject to Limite1: 0<=xmolas<=6000; ampl : subject to Limite2: 0<=xLâminas<=4000; ampl : solve Minos 5.4: optimal solution found. 2 iterations, objective 192000 ampl : display xmolas, xLâminas; xmolas = 6000 xLâminas =1400 ampl : quit > Usando AMPL em um modelo de Programação Linear Mais Geral Dados :
. j cada para , produto do produzidas serem a toneladasde máximo número
. j cada para , produto do dapor tonela Lucro laminação. na sdisponívei horas
cada para , produto do hora / toneladas produzidos serema produtos de conjunto um
Pju
Pjcb
PjjaP
j
j
j
∈=
∈==
∈==
3
Vamos definir : xj como a produção ( em toneladas) do produto j, para cada j em P.Agora, considere o seguinte modelo de PL:
. cada para 0
a1
a sujeito
Maximize
j
Pjux
bx
xc
jj
jPj
Pjjj
∈≤≤
≤∑
∑
∈
∈
Neste caso o programa em AMPL seria: Arquivo aco.mod set P; param a {j in P}; param b; param c {j in P}; param u {j in P}; var X {j in P}; maximize Lucro: sum {j in P} c[j]*X[j]; subject to Tempo: sum {j in P} (1/a[j])*X[j] <= b; subject to Limite {j in P} : o <= X[j] <= u[j]; Arquivo aco.dat set P := molas Lâminas; param: a c u := molas 200 25 6000 Lâminas 140 30 4000; Param b := 40; Portanto, uma vez criado os arquivos aco.mod (que contém o modelo) e o arquivo aco.dat (que contém os dados do problema a ser resolvido) entramos no ambiente ampl : > ampl: modelo aco.mod ampl: data aco.dat ampl: solve Minos 5.4: optimal solution found. 2 iterations, objective 192000 ampl: display Make
4
Prof. Antonio Carlos Moretti
Um modelo mais incrementado
Arquivo aco1.mod
set Produtos; param velocidade {Produtos} > 0 # Toneladas produzidas por hora. param disponibilidade >= 0; # Horas disponíveis por semana. param Lucro {Produtos} ; # Lucro unitário por tonelada. param Limites {Produtos}; # Limites de produção nos produtos. # Definindo as variáveis e aproveitamos para restringir as suas produções var quantidade {p in Produtos} >= 0, <= Limites[p]; # quantidades (em tonelada) produzida.
# Definindo a função objetivo : Maximização do lucro total de todos os produtos. maximize Lucro_total: sum {p in produtos} Lucro[p]* quantidades[p]; # Definindo as restrições de disponibilidades. subject to Tempo: sum {p in Produtos} (1/velocidade[p]) * quantidade[p] <= disponibilidade; Arquivo aco1.dat set produtos := molas Lâminas; param: velocidade Lucro Limites := Molas 200 25 6000 Lâminas 140 30 4000; param disponibilidade := 40; No ambiente AMPL, bata: > ampl: model aco1.mod; ampl: data aco1.dat; ampl: solve; MINOS 5.4: optimal solution found. 2 iterations, objective 192000 ampl: display quantidades; quantidades[*] := Molas 6000 Lâminas 1400 ;
5