Programação Linear Aplicada · Capítulo 5

Cap. 5
Problema de Transporte

leitura ~65 minProf. Clayton J A SilvaIBM0803

Objetivos de aprendizagem

  • Caracterizar problemas de distribuição entre fontes e destinos.
  • Formular o modelo clássico de transporte como programação linear.
  • Construir soluções básicas pelos métodos do Canto Noroeste e do Custo Mínimo.
  • Verificar a otimalidade pelos métodos Stepping Stone e dos Multiplicadores.
  • Aplicar o modelo em ferramentas computacionais.

Da distribuição simples à otimização de rotas

Antes da formulação geral, examinaremos dois exemplos progressivos. O primeiro apresenta duas origens e dois destinos; o segundo amplia a rede para três depósitos. Em ambos, a solução básica inicial é construída pelo Método do Canto Noroeste e depois avaliada pelo Stepping Stone.

exemplo introdutório 01

Dois depósitos e dois centros de consumo

Os depósitos D1 e D2 disponibilizam, respectivamente, 15 e 35 unidades. Os centros C1 e C2 demandam 20 e 30 unidades. Os custos unitários são apresentados na matriz.

OrigemC1C2Oferta
D12,503,0015
D23,502,3035
Demanda203050
Min Z = 2,5x₁₁ + 3x₁₂ + 3,5x₂₁ + 2,3x₂₂ x₁₁ + x₂₁ = 20 x₁₂ + x₂₂ = 30 x₁₁ + x₁₂ = 15 x₂₁ + x₂₂ = 35 xᵢⱼ ≥ 0

Solução inicial — Canto Noroeste

OrigemC1C2Oferta
D115 (2,50)0 (3,00)15
D25 (3,50)30 (2,30)35
Demanda203050
Z = 15×2,50 + 5×3,50 + 30×2,30 = 124,00

Teste de otimalidade

A única célula não básica é x₁₂. O ciclo fechado é x₁₂(+) → x₁₁(−) → x₂₁(+) → x₂₂(−).

ΔZ₁₂ = 3,00 − 2,50 + 3,50 − 2,30 = +1,70
Resultado
Como a única variação marginal é positiva, a solução inicial já é ótima: Z mínimo = 124,00.
exemplo introdutório 02

Três depósitos e dois centros de consumo

Adiciona-se o depósito D3, com capacidade de 40 unidades. As demandas passam a ser 40 unidades em C1 e 50 em C2, preservando o equilíbrio entre oferta e demanda.

OrigemC1C2Oferta
D12,503,0015
D23,502,3035
D33,202,8040
Demanda405090
Min Z = 2,5x₁₁ + 3x₁₂ + 3,5x₂₁ + 2,3x₂₂ + 3,2x₃₁ + 2,8x₃₂ x₁₁ + x₂₁ + x₃₁ = 40 x₁₂ + x₂₂ + x₃₂ = 50 x₁₁ + x₁₂ = 15 x₂₁ + x₂₂ = 35 x₃₁ + x₃₂ = 40 xᵢⱼ ≥ 0

Quadro inicial — Canto Noroeste

OrigemC1C2Oferta
D115 (2,50)0 (3,00)15
D225 (3,50)10 (2,30)35
D30 (3,20)40 (2,80)40
Demanda405090
Z = 15×2,50 + 25×3,50 + 10×2,30 + 40×2,80 = 260,00

Avaliação das rotas não básicas

Para x₁₂, o ciclo x₁₂(+) → x₁₁(−) → x₂₁(+) → x₂₂(−) fornece:

ΔZ₁₂ = 3 − 2,5 + 3,5 − 2,3 = +1,70

Não é conveniente utilizar essa rota. Para x₃₁, o ciclo x₃₁(+) → x₂₁(−) → x₂₂(+) → x₃₂(−) fornece:

ΔZ₃₁ = 3,2 − 3,5 + 2,3 − 2,8 = −0,80

Como a variação é negativa, x₃₁ entra na base. O maior ajuste admissível é θ = min(25, 40) = 25.

Nova solução básica

OrigemC1C2Oferta
D115 (2,50)0 (3,00)15
D20 (3,50)35 (2,30)35
D325 (3,20)15 (2,80)40
Demanda405090
Z = 15×2,50 + 35×2,30 + 25×3,20 + 15×2,80 = 240,00

Teste completo de otimalidade

As células não básicas são x₁₂ e x₂₁. Para x₁₂, o ciclo passa por x₁₁, x₃₁ e x₃₂. Para x₂₁, o ciclo passa por x₂₂, x₃₂ e x₃₁.

ΔZ₁₂ = 3,0 − 2,5 + 3,2 − 2,8 = +0,90 ΔZ₂₁ = 3,5 − 2,3 + 2,8 − 3,2 = +0,80
Resultado ótimo
As duas variações marginais são positivas. Logo, nenhuma rota não básica reduz o custo: Z mínimo = 240,00. A redução em relação ao Canto Noroeste é de 20,00 (aproximadamente 7,69%).
Leitura dos quadros: os números em destaque são as quantidades transportadas; os valores entre parênteses são os custos unitários de cada rota. Os dois exemplos introdutórios foram adaptados dos apontamentos fornecidos.

O problema de transporte

Uma organização dispõe de diferentes fontes de fornecimento e precisa distribuir um produto a diversos destinos. Cada fonte possui uma capacidade; cada destino apresenta uma demanda; e cada rota possui um custo unitário. O desafio é decidir quanto transportar em cada rota para atender às necessidades com o menor custo total possível.

Definição
O problema clássico de transporte é um modelo de programação linear que determina os fluxos entre origens e destinos, minimizando o custo total e respeitando as quantidades disponíveis e demandadas.

Elementos da rede

Fontes: fábricas, centros de distribuição ou fornecedores.

Destinos: depósitos, mercados ou clientes.

Rotas: ligações possíveis, cada uma com seu custo unitário de transporte.

O modelo também inspira problemas de transbordo e designação de tarefas, embora esses casos exijam formulações próprias.

Fonte 1Fonte 2Destino 1Destino 2Destino 3
Figura 5.1 — Rede de transporte com duas origens e três destinos.
Decisão

Quantidade enviada de cada fonte para cada destino.

Objetivo

Minimizar o custo agregado de todas as rotas utilizadas.

Condições

Respeitar capacidades, demandas e não negatividade.

Modelo clássico de transporte

Considere m fontes e n destinos. A fonte i fornece a quantidade aᵢ; o destino j requer bⱼ; e cᵢⱼ representa o custo de transportar uma unidade da fonte i ao destino j.

xᵢⱼ

Quantidade transportada da fonte i para o destino j (variável de decisão).

cᵢⱼ

Custo unitário da rota i → j.

aᵢ e bⱼ

Oferta disponível na origem e demanda do destino.

Função objetivo

Minimizar Z = ∑ᵢ₌₁ᵐ ∑ⱼ₌₁ⁿ cᵢⱼ · xᵢⱼ

Restrições

Oferta: ∑ⱼ₌₁ⁿ xᵢⱼ = aᵢ para cada fonte i Demanda: ∑ᵢ₌₁ᵐ xᵢⱼ = bⱼ para cada destino j Não negatividade: xᵢⱼ ≥ 0
Equilíbrio: na formulação com igualdades, a oferta total deve ser igual à demanda total: ∑aᵢ = ∑bⱼ. Se forem diferentes, pode-se adicionar uma fonte ou destino fictício, com custos apropriados ao contexto. A capacidade de uma fonte pode ser modelada por ≤ quando não se exige utilizar toda a oferta.

Estrutura da solução básica

Em um problema equilibrado, uma das m + n equações é redundante. Portanto, a matriz de restrições possui posto m + n − 1 e uma base contém esse número de variáveis. Em casos degenerados, algumas variáveis básicas podem ter valor zero.

Duas fontes e três destinos

Considere duas fábricas com capacidades de 15 e 25 unidades e três mercados com demandas de 20, 10 e 10 unidades. Os custos unitários estão indicados no quadro.

FonteDestino 1Destino 2Destino 3Oferta
Fábrica 1103515
Fábrica 2127925
Demanda20101040
Min Z = 10x₁₁ + 3x₁₂ + 5x₁₃ + 12x₂₁ + 7x₂₂ + 9x₂₃ x₁₁ + x₁₂ + x₁₃ = 15 x₂₁ + x₂₂ + x₂₃ = 25 x₁₁ + x₂₁ = 20 x₁₂ + x₂₂ = 10 x₁₃ + x₂₃ = 10 xᵢⱼ ≥ 0
Verificação: oferta = 15 + 25 = 40; demanda = 20 + 10 + 10 = 40. O problema está equilibrado.

Construção de uma solução viável

Antes de testar a otimalidade, é conveniente encontrar uma distribuição que atenda às restrições. Dois procedimentos clássicos são apresentados a seguir.

método 01

Canto Noroeste

  1. Iniciar pela célula superior esquerda da tabela.
  2. Alocar o mínimo entre a oferta restante da linha e a demanda restante da coluna.
  3. Eliminar a linha ou coluna satisfeita e avançar para a próxima célula disponível.
  4. Repetir até satisfazer todas as ofertas e demandas.

Esse método não utiliza os custos para escolher as células; por isso, a solução inicial pode ser relativamente cara.

Canto NoroesteD1D2D3Oferta
F1150015
F25101025
Demanda201010
Z = 15×10 + 5×12 + 10×7 + 10×9 = 370
método 02

Custo Mínimo

  1. Identificar a célula disponível com o menor custo unitário.
  2. Alocar o máximo possível sem exceder oferta ou demanda.
  3. Atualizar as quantidades remanescentes e retirar linhas ou colunas satisfeitas.
  4. Repetir até completar a distribuição.

O método considera os custos locais, mas não garante, isoladamente, a solução ótima global.

Custo MínimoD1D2D3Oferta
F1010515
F2200525
Demanda201010
Z = 10×3 + 5×5 + 20×12 + 5×9 = 340
Comparação: o Custo Mínimo reduziu o custo inicial de 370 para 340, uma economia de 30 unidades monetárias. Ainda é necessário testar a otimalidade.

Do Canto Noroeste à solução ótima

Partindo de uma solução básica viável, o Stepping Stone permite melhorar sucessivamente a distribuição. O procedimento repete três operações: avaliar → selecionar → ajustar, até que nenhuma rota não básica possa reduzir o custo.

algoritmo

Procedimento iterativo

  1. Iniciar: construir a solução pelo Canto Noroeste; identificar as células básicas e calcular Z.
  2. Avaliar: para cada célula não básica, construir um ciclo fechado de deslocamentos horizontais e verticais entre células básicas. Alternar sinais + e −, começando com + na célula candidata, e calcular Δᵢⱼ pela soma algébrica dos custos.
  3. Testar: se todos os Δᵢⱼ ≥ 0, encerrar: a solução é ótima. Um Δᵢⱼ = 0 pode indicar solução ótima alternativa.
  4. Selecionar: escolher uma célula com Δᵢⱼ < 0 (por exemplo, a mais negativa).
  5. Ajustar: definir θ como a menor alocação nas posições de sinal − do ciclo; somar θ nas posições + e subtrair θ nas posições −.
  6. Atualizar: retirar da base uma célula que ficou nula, manter m + n − 1 variáveis básicas e retornar à avaliação.
Atenção à degenerescência: quando duas células chegam simultaneamente a zero, apenas uma sai da base. A outra pode permanecer básica com alocação zero. Em problemas degenerados, a regra de escolha das células deve evitar ciclos de iteração.

Aplicação: quadro inicial pelo Canto Noroeste

Em cada célula, a quantidade alocada aparece em negrito e o custo unitário entre parênteses.

OrigemD1D2D3Oferta
F115 (10)0 (3)0 (5)15
F25 (12)10 (7)10 (9)25
Demanda20101040
Z₀ = 15×10 + 5×12 + 10×7 + 10×9 = 370

Iteração 1 — avaliar e selecionar

As células vazias são x₁₂ e x₁₃. Seus ciclos passam por células básicas e produzem:

Ciclo de x₁₂: (+ x₁₂) → (− x₁₁) → (+ x₂₁) → (− x₂₂) → x₁₂ Δ₁₂ = 3 − 10 + 12 − 7 = −2 Ciclo de x₁₃: (+ x₁₃) → (− x₁₁) → (+ x₂₁) → (− x₂₃) → x₁₃ Δ₁₃ = 5 − 10 + 12 − 9 = −2

As duas rotas permitem redução de custo. Escolhemos x₁₂ para entrar na base. O limite é θ = min(x₁₁, x₂₂) = min(15, 10) = 10.

Após ajuste 1D1D2D3Oferta
F15 (10)10 (3)0 (5)15
F215 (12)0 (7)10 (9)25
Demanda20101040
Z₁ = 5×10 + 10×3 + 15×12 + 10×9 = 350

Iteração 2 — nova oportunidade de melhoria

Reavaliando as células não básicas x₁₃ e x₂₂:

Δ₁₃ = 5 − 10 + 12 − 9 = −2 Δ₂₂ = 7 − 12 + 10 − 3 = +2

A rota x₁₃ entra na base. No ciclo x₁₃ (+), x₁₁ (−), x₂₁ (+), x₂₃ (−), temos θ = min(5, 10) = 5.

Após ajuste 2D1D2D3Oferta
F10 (10)10 (3)5 (5)15
F220 (12)0 (7)5 (9)25
Demanda20101040
Z₂ = 10×3 + 5×5 + 20×12 + 5×9 = 340

Teste final de otimalidade

Agora as células não básicas são x₁₁ e x₂₂:

Δ₁₁ = 10 − 5 + 9 − 12 = +2 Δ₂₂ = 7 − 3 + 5 − 9 = 0
Solução ótima
Z* = 340. Como não existem variações negativas, não há melhoria possível. A redução em relação ao Canto Noroeste é de 30 unidades monetárias (8,11%). O valor Δ₂₂ = 0 indica a existência de outra distribuição ótima.
EtapaCusto totalRedução acumulada
Canto Noroeste3700
1ª melhoria35020
2ª melhoria — ótimo34030

Como verificar se a solução é ótima?

Para cada variável não básica, calcula-se o efeito de introduzir uma unidade adicional na rota, compensando os fluxos das demais células para manter o equilíbrio.

método 03

Stepping Stone — ciclos fechados

  1. Escolher uma célula não básica e construir um ciclo fechado por movimentos horizontais e verticais, passando pelas células básicas.
  2. Marcar alternadamente sinais + e − nos vértices, iniciando com + na célula avaliada.
  3. Somar os custos com seus sinais para obter a variação unitária ΔZ.
  4. Em minimização, uma variação negativa indica oportunidade de reduzir o custo; uma variação nula indica possível solução ótima alternativa.

Aplicação ao exemplo

Partindo da solução pelo Custo Mínimo, as células não básicas são x₁₁ e x₂₂.

ΔZ(x₁₁) = 10 − 3 + 7 − 12 = +2 ΔZ(x₂₂) = 7 − 3 + 5 − 9 = 0

Como nenhuma variação é negativa, a solução de custo Z = 340 é ótima. O valor zero para x₂₂ revela a possibilidade de uma segunda distribuição ótima.

método 04

Multiplicadores — MODI (potenciais u e v)

  1. Atribuir um potencial uᵢ a cada fonte e vⱼ a cada destino.
  2. Para cada célula básica, escrever uᵢ + vⱼ = cᵢⱼ.
  3. Fixar arbitrariamente um potencial em zero e calcular os demais.
  4. Para cada célula não básica, calcular Pᵢⱼ = cᵢⱼ − uᵢ − vⱼ.
  5. Em minimização, todos os Pᵢⱼ ≥ 0 confirmam a otimalidade.
Escolhendo u₁ = 0: u₁ + v₂ = 3 → v₂ = 3 u₁ + v₃ = 5 → v₃ = 5 u₂ + v₃ = 9 → u₂ = 4 u₂ + v₁ = 12 → v₁ = 8 P₁₁ = 10 − 0 − 8 = 2 P₂₂ = 7 − 4 − 3 = 0
Conclusão do exemplo
A solução de custo 340 é ótima. Como P₂₂ = 0, há soluções alternativas com o mesmo custo mínimo. Por exemplo, outra distribuição ótima é x₁₂ = 5, x₁₃ = 10, x₂₁ = 20, x₂₂ = 5 e x₂₃ = 0.
Interpretação: os valores Pᵢⱼ são custos reduzidos. Eles medem o impacto marginal de inserir uma rota não básica, mantendo a viabilidade por meio dos ajustes correspondentes.

Resolução no Excel Solver e em Python

Planilha e Solver

  1. Organizar uma matriz 2 × 3 com as quantidades transportadas (variáveis de decisão).
  2. Registrar, em outra matriz, os custos unitários de cada rota.
  3. Calcular as somas das linhas (utilização das fontes) e colunas (atendimento dos destinos).
  4. Calcular o custo total com SOMARPRODUTO entre custos e quantidades.
  5. No Solver, minimizar o custo total, alterando as seis variáveis, impondo as cinco igualdades e a não negatividade; escolher o método Simplex LP.
=SOMARPRODUTO(intervalo_custos;intervalo_quantidades)

Python com SciPy

# Descrição geral: solução de um problema clássico de transporte. # Data de criação: 14/10/2026 # Versão: 1.0 # Copyright (c) 2026 Clayton J A Silva from scipy.optimize import linprog # Custos na ordem: x11, x12, x13, x21, x22, x23. custos = [10, 3, 5, 12, 7, 9] # Restrições de oferta (2) e demanda (3). matriz = [ [1, 1, 1, 0, 0, 0], [0, 0, 0, 1, 1, 1], [1, 0, 0, 1, 0, 0], [0, 1, 0, 0, 1, 0], [0, 0, 1, 0, 0, 1], ] limites = [15, 25, 20, 10, 10] def resolver_transporte(custos, matriz, limites): """Minimiza o custo sujeito ao equilíbrio e x >= 0.""" return linprog(custos, A_eq=matriz, b_eq=limites, bounds=(0, None), method="highs") resultado = resolver_transporte(custos, matriz, limites) if resultado.success: print("Custo mínimo:", resultado.fun) print("Quantidades:", resultado.x.reshape(2, 3)) else: print("Falha:", resultado.message)

O solver poderá retornar qualquer uma das distribuições ótimas. Os valores das variáveis podem diferir, mas o custo ótimo será 340.

Teste rápido

Questão 1 / formulação

Qual condição é necessária para utilizar a formulação clássica equilibrada com igualdades?

A oferta total deve igualar a demanda total, ou o modelo precisa de ajustes.
Questão 2 / solução inicial

Qual é a principal diferença entre os métodos do Canto Noroeste e do Custo Mínimo?

O Custo Mínimo usa custos na alocação inicial, mas não garante otimalidade.
Questão 3 / otimalidade

Em um problema de minimização, o que significa um custo reduzido negativo para uma célula não básica?

Um custo reduzido negativo indica oportunidade de melhoria na solução atual.

Resumo: do quadro inicial à solução ótima

O problema de transporte procura minimizar o custo de distribuição, respeitando as capacidades das origens e as demandas dos destinos. A resolução manual pode ser organizada em três operações repetidas: avaliar → selecionar → ajustar.

1 · Modelar

Definir xᵢⱼ, custos cᵢⱼ, ofertas aᵢ e demandas bⱼ. Conferir o equilíbrio entre oferta e demanda.

2 · Inicializar

Obter uma solução viável pelo Canto Noroeste ou pelo Custo Mínimo. Calcular Z.

3 · Avaliar

Para cada célula não básica, construir um ciclo fechado e calcular a variação unitária ΔZ.

4 · Selecionar

Se houver ΔZ negativo, escolher uma rota de melhoria, preferencialmente a mais negativa.

5 · Ajustar

Determinar θ pelo menor fluxo nas posições negativas, atualizar o quadro e repetir o teste.

6 · Concluir

Quando todas as variações forem não negativas, a solução é ótima. ΔZ = 0 pode indicar outra solução ótima.

Min Z = Σᵢ Σⱼ cᵢⱼ xᵢⱼ Σⱼ xᵢⱼ = aᵢ (origens) Σᵢ xᵢⱼ = bⱼ (destinos) xᵢⱼ ≥ 0
ExemploCanto NoroesteCusto ótimoEconomia
2 depósitos × 2 centros124,00124,000,00
3 depósitos × 2 centros260,00240,0020,00
Andrade: 2 fontes × 3 destinos370,00340,0030,00
Cuidados: a base de um problema equilibrado contém m + n − 1 variáveis básicas; em soluções degeneradas, algumas podem ser zero. O Canto Noroeste não garante a otimalidade. O teste deve considerar todas as células não básicas.

Os exemplos e os métodos apresentados no desenvolvimento principal foram adaptados didaticamente da referência de Eduardo L. de Andrade, Pesquisa Operacional, a partir das páginas fornecidas, sem reprodução integral do texto original.

← anteriorCap. 4