Bruno Scrok Brunoro
Oct 5, 2018 · 2 min read

E ai galera, essa semana me deparei com um novo desafio, trabalhar com programação linear dentro da pesquisa operacional, utilizando C#.

Quem me conhece, sabe que por muito tempo meu mundo foi mobile, onde certas aplicações não possuem tamanha complexidade, mas como eu adoro novos desafios, decidi encarar esse, me abracei, quero entender tudo e de quebra ajudar a comunidade pois não encontrei artigos que abordassem esse tema utilizando código

O que é programação linear?

O problema geral de programação linear é utilizado para otimizar (maximizar ou minimizar) uma função linear de variáveis, chamada de função objetivo, sujeita a uma série de equações (ou inequações) lineares, chamadas restrições. Fonte: Wikibooks

Meu objetivo não é ensinar nem explicar em detalhes o que é programação linear, por isso separei alguns matérias que me ajudaram a entender (essa loucura).

O primeiro vídeo apresenta um problema para ser resolvido através da programação linear, já o segundo como chegar ao resultado de um problema utilizando uma representação gráfica.

Entendendo o problema

Se você já sabe o que é programação linear e só está lendo este artigo para saber como implementar um algorítimo utilizando C#, vamos lá, mas primeiro precisamos entender o problema:

Uma madeireira deseja obter 1000kg de lenha, 2000kg de madeira para móveis e 50m² de casca de árvore, dispondo de carvalhos e de pinheiros, sendo que o carvalho gera 40kg de lenha, 150kg de madeira e 3m² de casca aproveitável, o pinheiro 100kg de lenha, 60kg de madeira e 8m² de casca aproveitável. Precisamos minimizar os custos sabendo que cada carvalho custa R$ 1500,00 para a empresa e cada pinheiro R$ 1200,00.

Esse problema pode ser traduzido para uma equação Z, onde x é carvalho e y pinheiro.

Z =1500x + 1200y

Agora, temos algumas restrições, são elas:

lenha

R1 = 40x + 100y≥ 1000

quantidade de madeira

R2 = 150x + 60y ≥ 2000

quantidade de casca

R3 = 3x + 8y ≥ 50

x e y tem que ser maior que 0

R4 = x,y ≥ 0

Você deve ter notado que no vídeo é apresentada uma quinta restrição, não vamos levar ela em conta, pois para o código é irrelevante, pois ele já trata que só podemos ter números do conjunto dos reais.


Se você chegou até aqui e não boiou está ótimo, eu demorei uma semana para entender toda essa primeira parte, mas depois que entendi peguei gosto por isso.

Agora vamos transformar isso em código, nós vamos utilizar a biblioteca Google OR-Tools.

Logo abaixo está o código em C# utilizando ASP.NET Framework 4.6.1 e o Google OR-Tools:

Lembro que não sou especialista nisso, mas que estou em constante aprendizado, qual correção estou aberto.

Abraços e nos vemos em breve com mais post ;)

Senhora Capivara

Blog da Senhora Capivara

Bruno Scrok Brunoro

Written by

Desenvolvedor, palestrante, musico, jipeiro e um Gordo Raiz — http://brunosbrunoro.com.br

Senhora Capivara

Blog da Senhora Capivara

Welcome to a place where words matter. On Medium, smart voices and original ideas take center stage - with no ads in sight. Watch
Follow all the topics you care about, and we’ll deliver the best stories for you to your homepage and inbox. Explore
Get unlimited access to the best stories on Medium — and support writers while you’re at it. Just $5/month. Upgrade