Uma refinaria processa petróleo bruto, produzindo, em um esquema simplificado, dois subprodutos: gasolina bruta e gasóleo. Para obter gasolina bruta. O petróleo é submetido a 3 operações: destilação atmosférica, dessulfuração e reforma catalítica. Na obtenção do gasóleo, o petróleo é também submetido a 3 operações: destilação atmosférica, dessulfuração e craqueamento catalítico. Os reservatórios nos quais essas operações são processadas têm capacidades limitadas. Têm-se um reservatório especial para cada operação descrita anteriormente. As capacidades anuais dos quatro reservatórios são fornecidas na Tabela.
Reservatório Gasolina Bruta (ton/ano) Gasóleo (ton/ano)
destilação atmosférica 500000 600000
dessulfuração 700000 500000
reforma catalítica 400000 -
craqueamento catalítico - 450000
Supondo que o lucro na venda de uma tonelada de gasolina bruta seja \ 7,00 e o de uma tonelada de gasóleoó$5,00$; deseja-se calcular a produção anual em toneladas de gasolina bruta e de gasóleo que maximiza o lucro total.
A) Monte um problema de otimização.
B) Monte e simule em Scilab o problema de otimização.

Passo 1

O que o enunciado pede e quais dados temos (identificação clara do problema).
  • O objetivo é determinar as produções anuais que maximizam o lucro total da refinaria, produzindo duas saídas: gasolina bruta e gasóleo.
  • Devemos dar duas coisas: (A) um modelo de otimização (formular matematicamente o problema) e (B) simular/rodar esse modelo em Scilab para obter a solução numérica.
  • Dados fornecidos (capacidade anual dos reservatórios, retirados da tabela do enunciado):
    • Reservatório de destilação atmosférica: \,500000 (para gasolina) e \,600000 (para gasóleo).
    • Reservatório de dessulfuração: \,700000 (para gasolina) e \,500000 (para gasóleo).
    • Reservatório de reforma catalítica: \,400000 (aplica-se apenas à gasolina).
    • Reservatório de craqueamento catalítico: \,450000 (aplica-se apenas ao gasóleo).
  • Lucros por tonelada (dados do enunciado):
    • Lucro da gasolina bruta: \$\,7{,}00 por tonelada.
    • Lucro do gasóleo: \$\,5{,}00 por tonelada.
  • Observação importante (assunção clara que farei para modelar): a tabela dá capacidades máximas anuais por produto em cada operação, ou seja, cada produto tem limites próprios impostos pelas operações que ele precisa. Com isso, cada produto fica limitado pelas capacidades de suas próprias etapas. (Essa é a interpretação mais direta do enunciado; se as operações fossem recursos compartilhados entre os produtos, as desigualdades seriam combinadas — eu explicarei como mudar o modelo nesse caso, caso precise.)
  • Resumindo as informações relevantes que usarei:
    • Capacidades que limitam a produção de gasolina: \,500000,\;700000,\;400000 (ton/ano).
    • Capacidades que limitam a produção de gasóleo: \,600000,\;500000,\;450000 (ton/ano).
    • Preços (lucros) por tonelada: gasolina \$7, gasóleo \$5.
  • A resolução começa agora (passos seguintes mostram modelagem, raciocínio e a simulação em Scilab).

Passo 2

Definição das variáveis de decisão (o que vamos escolher).
  • Vamos definir duas variáveis que representam as quantidades anuais a produzir:
    • x_g := produção anual de gasolina bruta (em toneladas por ano).
    • x_d := produção anual de gasóleo (em toneladas por ano).
  • Explicação didática: em programação linear a gente escolhe variáveis que representam quantidades que podemos controlar. Aqui, a refinaria decide quantas toneladas de cada produto produzir por ano; essas são as variáveis. Sempre mantenha as unidades (ton/ano), porque depois as restrições e o objetivo precisam usar as mesmas unidades.

Passo 3

Construção da função objetivo (o que queremos maximizar) e explicação do porquê.
  • O lucro total anual é obtido somando o lucro de cada produto:
    • Lucro da gasolina = preço por ton \times toneladas produzidas = \$7 \cdot x_g.
    • Lucro do gasóleo = \$5 \cdot x_d.
  • Então a função objetivo é maximizar:
\max \; Z = 7\,x_g + 5\,x_d.
  • Explicação didática: a função objetivo é uma soma ponderada das variáveis, com coeficientes iguais ao lucro por unidade. Em PL (programação linear) isso é tipicamente uma função linear nas variáveis. Aqui queremos o maior Z possível respeitando as restrições.

Passo 4

Especificação das restrições a partir das capacidades (cada passo explicado).
  • Cada operação tem uma capacidade máxima anual que limita quanto do produto correspondente pode ser processado. Para cada produto, a produção não pode exceder a capacidade mínima entre as operações necessárias para esse produto.
  • Restrições para a gasolina: ela precisa passar por destilação, dessulfuração e reforma. Isso impõe:
x_g \le 500000,
x_g \le 700000,
x_g \le 400000.
  • Observação: destas três, a mais restritiva é \,400000. Então, combinando:
x_g \le 400000.
  • Restrições para o gasóleo: ele precisa passar por destilação, dessulfuração e craqueamento. Isso impõe:
x_d \le 600000,
x_d \le 500000,
x_d \le 450000.
  • Destas, a mais restritiva é \,450000. Então:
x_d \le 450000.
  • Não-negatividade (regra básica em produção):
x_g \ge 0,\qquad x_d \ge 0.
  • Explicação didática: cada restrição é uma desigualdade linear que diz “a produção não pode ultrapassar a capacidade daquela etapa”. Quando há várias etapas para o mesmo produto, o limite efetivo é o menor (o gargalo). Em PL chamamos isso de conjunto de restrições lineares que definem a região factível.

Passo 5

Resumo final do modelo matemático (problema de otimização montado).
  • Juntando objetivo e restrições, o problema fica:
\begin{aligned} \max\;& Z = 7\,x_g + 5\,x_d\\[4pt] \text{s.a.}\;& x_g \le 400000,\\[2pt] & x_d \le 450000,\\[2pt] & x_g \ge 0,\; x_d \ge 0. \end{aligned}
  • Observação didática: este é um problema linear simples com duas variáveis e restrições separadas (cada variável só aparece nas suas próprias desigualdades). Nessas situações, se os coeficientes na função objetivo são positivos, aumentar cada variável até seu limite aumenta o lucro; então a solução ótima costuma ser colocar cada variável em seu limite superior (se não houver conflito entre variáveis) — eu aplico isso no passo seguinte.]

Passo 6

Resolução analítica do modelo (por que a solução é direta) — passo a passo numérico.
  • Raciocínio: a função objetivo tem coeficientes positivos ( 7 e 5), e as restrições não misturam x_g com x_d (cada variável tem seu próprio limite). Portanto, para maximizar o lucro, devemos escolher x_g o mais alto possível e x_d o mais alto possível simultaneamente, isto é, colocar cada uma no seu gargalo.
  • Assim:
x_g^* = 400000\quad\text{(ton/ano)},
x_d^* = 450000\quad\text{(ton/ano)}.
  • Cálculo do lucro total ótimo:
Z^* = 7\cdot 400000 + 5\cdot 450000.
  • Faço as contas passo a passo (sem pular etapas):
    • 7\cdot 400000 = 2800000.
    • 5\cdot 450000 = 2250000.
    • Soma: 2800000 + 2250000 = 5050000.
  • Logo o lucro anual máximo é \$\,5050000 (cinco milhões e cinquenta mil dólares).
  • Explicação pedagógica: quando as variáveis não competem por um mesmo recurso, produzimos ao máximo cada produto que dá lucro positivo. Se uma operação fosse compartilhada entre produtos, teríamos que distribuir a capacidade entre x_g e x_d e aí apareceria troca (trade-off) — nesse caso a solução exigiria análise do preço relativo por unidade de recurso e possivelmente resolver o LP por Simplex ou por software.

Passo 7

Montagem para simular em Scilab e código comentado (vai rodar o mesmo modelo e mostrar que os números acima são obtidos por solver).
  • Estratégia prática: usar o solver GLPK disponível em Scilab para resolver um programa linear. O GLPK resolve problemas no formato de minimização; para maximizar, minimizamos o negativo da função objetivo.
  • Conversão do problema para a forma que o solver recebe:
    • Variáveis: vetor x = [x_g;\;x_d].
    • Coeficientes do objetivo para minimização: c = [-7;\; -5] (minimizar -7 x_g -5 x_d é o mesmo que maximizar 7 x_g + 5 x_d).
    • Matriz de restrições A e vetor b: as restrições são simplesmente duas desigualdades do tipo \le:
x_g \le 400000,\qquad x_d \le 450000.
  • A matriz A (cada linha uma restrição) fica:
A = \begin{pmatrix}1 & 0\\[4pt]0 & 1\end{pmatrix},\qquad b = \begin{pmatrix}400000\\[4pt]450000\end{pmatrix}.
  • Tipos das restrições para GLPK: ambas do tipo ‘ \le’.
  • Limites inferiores: 0 para ambas as variáveis.
  • Código Scilab que implementa isso (copie e cole no console do Scilab). Comentários no código explicam cada linha.
// Scilab: resolução do PL com GLPK
// Definimos as variáveis e os dados do problema

// vetor de custos (minimização do negativo do lucro)
c = [-7; -5];

// matriz A e vetor b para restrições A * x <= b
A = [1 0; 0 1];
b = [400000; 450000];

// limites inferiores e superiores nas variáveis
lb = [0; 0];
ub = [inf; inf]; // sem limite superior além das restrições A*x<=b

// Tipo das restrições: 'U' = upper bound (<=)
ctype = "UU"; // duas restrições do tipo <=

// Tipo das variáveis: 'C' = contínua
vartype = "CC";

// Parâmetros de GLPK (opcional)
param.msglev = 1; // 1 mostra mensagens, 0 suprime

// Executa GLPK. Observação: glpk minimiza por padrão, então passamos c negativo.
[xopt, fmin, ierr] = glpk(c, A, b, lb, ub, ctype, vartype, param);

// Resultado: xopt é a solução (x_g, x_d), fmin é o valor mínimo de -lucro,
// então lucro = -fmin.
disp("Solução encontrada (ton/ano):");
disp("x_g (gasolina) = " + string(xopt(1)));
disp("x_d (gasóleo)    = " + string(xopt(2)));
disp("Lucro total (USD) = " + string(-fmin));
  • Observações sobre o código:
    • Se sua instalação do Scilab não tiver a função glpk ativa, instale o módulo GLPK via ATOMS (Ferramentas → ATOMS → instalar GLPK) ou use outro solver disponível (por exemplo, linprog se existir). A ideia permanece: minimizar -7 x_g -5 x_d sujeito às restrições.
    • Ao rodar o código, o solver deverá retornar x_g = 400000, x_d = 450000 e fmin = -5050000 (portanto lucro = -fmin = 5050000).]

Passo 8

Interpretação final, checagens rápidas e comentário motivador.
  • Checagem rápida: as variáveis estão dentro dos limites e o lucro calculado coincide com a avaliação direta. Não há conflito entre as variáveis (cada uma tem sua restrição), por isso a solução é intuitiva.
  • Se o enunciado, no exame, significar que destilação e dessulfuração são recursos compartilhados (ou seja, existe só um reservatório para destilação e outro para dessulfuração e a soma das produções deve respeitar esses limites), então as restrições mudam para somar as duas variáveis nessas linhas. Nesse caso o modelo seria:
x_g + x_d \le \text{(capacidade total de destilação)},\quad x_g + x_d \le \text{(capacidade total de dessulfuração)},\;\text{etc.}çãçã
e aí seria necessário resolver o LP com Simplex (ou com o mesmo glpk) — eu posso montar esse caso também se você achar que era essa a leitura do enunciado.
  • Parabéns por chegar até aqui! Respira fundo: o problema é simples quando a modelagem fica clara. Se quiser, eu refaço considerando os reservatórios como recursos compartilhados (isso muda a solução e é um bom exercício para ver trade-offs).

Resposta

A)
\begin{aligned} \max\;& Z = 7\,x_g + 5\,x_d\\[4pt] \text{s.a.}\;& x_g \le 400000,\\[2pt] & x_d \le 450000,\\[2pt] & x_g \ge 0,\; x_d \ge 0. \end{aligned}
B)
x_g^\ast = 400000\\ \text{ton/ano}
x_d^\ast = 450000\\ \text{ton/ano}
Lucro máximo: \$\,5050000]

Exercícios relacionados