MT503 – Programação Linear

Propaganda
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
Molas
Lâminas
Produção
(toneladas/hora)
200
140
Os produtos têm diferentes preços de vendas:
Produtos
Molas
Lâminas
Preço
R$25,00
R$30,00
E, devido a problemas técnicos, a produção semanal está restrita às seguintes produções máximas:
Produtos
Molas
Lâminas
Produção
Máxima
6000
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
x molas
= toneladas de molas de aço produzidas em uma semana.
x Lâminas = toneladas de Lâminas de aço produzidas em uma semana.
Então, nós queremos
Maximizar
25 x molas + 30 x Lâminas
sujeito a
1
1
x molas +
x Lâminas ≤ 40
200
140
0 ≤ x molas
≤ 6000
0 ≤ x Lâminas ≤ 4000
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 :
P = um conjunto de produtos a serem produzidos
a j = toneladas / hora do produto j , para cada j ∈ P
b = horas disponíveis na laminação.
c j = Lucro por tonelada do produto j , para cada j ∈ P.
u j = número máximo de toneladas a serem produzidas do produto j , para cada j ∈ P.
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:
Maximize
∑c jx j
j∈P
sujeito a
1
xj ≤b
a
j
j∈P
∑
0≤ xj ≤uj
para cada j ∈ P.
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
param disponibilidade >= 0;
param Lucro {Produtos} ;
param Limites {Produtos};
# Toneladas produzidas por hora.
# Horas disponíveis por semana.
# Lucro unitário por tonelada.
# 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
Molas
200
Lâminas 140
Lucro Limites :=
25
6000
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
Download