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