Docsity
Docsity

Prepare-se para as provas
Prepare-se para as provas

Estude fácil! Tem muito documento disponível na Docsity


Ganhe pontos para baixar
Ganhe pontos para baixar

Ganhe pontos ajudando outros esrudantes ou compre um plano Premium


Guias e Dicas
Guias e Dicas


Método de Programação Linear Inteira, Notas de estudo de Engenharia Elétrica

Funcionamento do PLI

Tipologia: Notas de estudo

2014

Compartilhado em 11/03/2014

carlos-lazaro-11
carlos-lazaro-11 🇧🇷

3

(1)

2 documentos

1 / 9

Toggle sidebar

Esta página não é visível na pré-visualização

Não perca as partes importantes!

bg1
Página | 1
PROGRAMAÇÃO LINEAR INTEIRA
Carlos Lázaro Menco, UFSM
Resumo: O problema geral de programação
linear inteira consiste na alocação de recursos
limitados a atividades em competição, de forma
ótima; através de variáveis que possam
assumir valores inteiros. O método Branch-and-
Bound tem aplicação em diversas áreas, tais
como economia, planejamento, otimizar
investimentos, etc. Com este artigo busca-se que
o engenheiro eletricista tenha uma familiaridade
maior com a formulação geral do problema e
tenha condições de modelar problemas
utilizando esta importante técnica de
otimização.
Palavras chaves: Programação linear inteira,
método Branch-and-Bound, maximização,
técnica de otimização.
I. INTRODUÇÃO.
A programação inteira surge devido a
necessidade da modelagem dos problemas
através de variáveis inteiras (discretas), não
contínuas.
O problema geral da programação linear inteira é
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.
A formulação do problema a ser resolvido por
programação linear segue alguns passos básicos:
Deve ser definido o objetivo básico do
problema, ou seja, a otimização a ser
alcançada. Por exemplo, maximização de
lucros, ou de desempenhos, ou de bem-
estar social; minimização de custos, de
perdas, de tempo. Tal objetivo será
representado por uma função objetivo, a
ser maximizada ou minimizada.
________________________________________
C. A. Lázaro Menco, é estudante d e Pós-gr aduação em
Engenharia Elétrica na Universidade Federal de Santa Maria,
UFSM/RS.
Para que esta função objetivo seja
matematicamente especificada, devem
ser definidas as variáveis de decisão
envolvidas. Normalmente, assume-se
que todas estas variáveis possam
assumir somente valores inteiros.
Estas variáveis normalmente estão
sujeitas a uma série de restrições,
normalmente representadas por
inequações.
Todas essas expressões, entre tanto, devem estar
de acordo com a hipótese principal da
programação linear, ou seja, todas as relações
entre as variáveis devem ser lineares. Isto implica
proporcionalidade das quantidades envolvidas.
Esta característica de linearidade pode ser
interessante no tocante à simplificação da
estrutura matemática envolvida, mas prejudicial
na representação de fenômenos não lineares (por
exemplo, funções tipicamente quadráticas).
II. DEFINIÇÃO DO PROBLEMA MATEMÁTICO.
O problema de programação linear inteira é
formado por uma função objetivo e um conjunto
de restrições que são funções das variáveis de
decisão do problema. O conjunto de variáveis
pode ser dividido em dois subconjuntos:
- de variáveis reais contínuas:
,
,,
;
- de variáveis inteiras:
,
,,
;
A formulação do problema é dada por:
Max/min  
s.a.  
Onde:
inteiro
pf3
pf4
pf5
pf8
pf9

Pré-visualização parcial do texto

Baixe Método de Programação Linear Inteira e outras Notas de estudo em PDF para Engenharia Elétrica, somente na Docsity!

PROGRAMAÇÃO LINEAR INTEIRA

Carlos Lázaro Menco, UFSM

Resumo: O problema geral de programação linear inteira consiste na alocação de recursos limitados a atividades em competição, de forma ótima; através de variáveis que só possam assumir valores inteiros. O método Branch-and- Bound tem aplicação em diversas áreas, tais como economia, planejamento, otimizar investimentos, etc. Com este artigo busca-se que o engenheiro eletricista tenha uma familiaridade maior com a formulação geral do problema e tenha condições de modelar problemas utilizando esta importante técnica de otimização.

Palavras chaves: Programação linear inteira, método Branch-and-Bound, maximização, técnica de otimização.

I. INTRODUÇÃO.

A programação inteira surge devido a necessidade da modelagem dos problemas através de variáveis inteiras (discretas), não contínuas.

O problema geral da programação linear inteira é 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.

A formulação do problema a ser resolvido por programação linear segue alguns passos básicos:

  • Deve ser definido o objetivo básico do problema, ou seja, a otimização a ser alcançada. Por exemplo, maximização de lucros, ou de desempenhos, ou de bem- estar social; minimização de custos, de perdas, de tempo. Tal objetivo será representado por uma função objetivo, a ser maximizada ou minimizada.

C. A. Lázaro Menco, é estudante de Pós-graduação em Engenharia Elétrica na Universidade Federal de Santa Maria, UFSM/RS.

  • Para que esta função objetivo seja matematicamente especificada, devem ser definidas as variáveis de decisão envolvidas. Normalmente, assume-se que todas estas variáveis possam assumir somente valores inteiros.
  • Estas variáveis normalmente estão sujeitas a uma série de restrições, normalmente representadas por inequações.

Todas essas expressões, entre tanto, devem estar de acordo com a hipótese principal da programação linear, ou seja, todas as relações entre as variáveis devem ser lineares. Isto implica proporcionalidade das quantidades envolvidas. Esta característica de linearidade pode ser interessante no tocante à simplificação da estrutura matemática envolvida, mas prejudicial na representação de fenômenos não lineares (por exemplo, funções tipicamente quadráticas).

II. DEFINIÇÃO DO PROBLEMA MATEMÁTICO.

O problema de programação linear inteira é formado por uma função objetivo e um conjunto de restrições que são funções das variáveis de decisão do problema. O conjunto de variáveis pode ser dividido em dois subconjuntos:

  • de variáveis reais contínuas: ᡶ 㐄 䙰ᡶ⡩ , ᡶ⡰, … , ᡶぁ 䙱 ; ᡶ〶 ∊ ᡄ
  • de variáveis inteiras: ᡷ 㐄 䙰ᡷ⡩ , ᡷ⡰, … , ᡷぁ 䙱 ; ᡷ〶 ∊ ᡀ

A formulação do problema é dada por:

Max/min ↅ∆ ㎗ ↆ∇ s.a. ⅗∆ ㎗ Ⅰ∇ 㐉 ↄ

Onde: ∆ 㐐 ❷ ∇ 㐐 ❷ ∇ inteiro

III. CONSIDERAÇÕES MATEMÁTICAS.

Na modelagem de um problema de programação linear, algumas situações específicas podem ocorrer, o que pode levar a casos em uma forma matemática diferente da apresentada até o momento.

Entretanto, alguns artifícios matemáticos ajudam a reduzir o modelo obtido à forma padrão estudada.

Estes artifícios são mostrados a seguir:

a. Minimização de uma função:

A minimização de uma função z(x) é matematicamente análoga à maximização da negativa desta função (-z(x)).

Exemplo: Minimizarᡒ 㐄 ᡕ⡩ᡶ⡩ ㎗ ᡕ⡰ᡶ⡰ ㎗ ⋯ ㎗ ᡕぁ ᡶぁ

É equivalente a:

Maximizarᡒ䖓^ 㐄 ㎘ ᡕ⡩ᡶ⡩ ㎘ ᡕ⡰ᡶ⡰ ㎘ ⋯ ㎘ ᡕぁ ᡶぁ

Comᡒ′ 㐄 ㎘ ᡒ

Essa é uma das formas de se resolver os problemas de minimização utilizando o mesmo algoritmo. Caso queira resolver diretamente, devemos alterar o critério de entrada das variáveis na base. A variável que entra na base passa a ser aquela que tem o maior valor positivo na linha z-transformada. Caso todas tenham coeficientes negativos ou nulos, a solução obtida é ótima.

b. Restrições de limite inferior (≥):

Uma desigualdade em uma direção (≤ ou ≥) pode ser mudada para uma desigualdade na direção oposta, pela multiplicação de ambos os lados da desigualdade por (-1).

Exemplo: ᡓ⡩ᡶ⡩ ㎗ ᡓ⡰ᡶ⡰ 㐐 ᡔ

É equivalente a: ㎘ ᡓ⡩ᡶ⡩ ㎘ ᡓ⡰ᡶ⡰ 㐉 ㎘ ᡔ

c. Restrições de igualdade:

Uma equação pode ser substituída por duas desigualdades de direções opostas.

Exemplo: ᡓ⡩ᡶ⡩ ㎗ ᡓ⡰ᡶ⡰ 㐄 ᡔ

É equivalente a duas desigualdades simultâneas: ᡓ⡩ᡶ⡩ ㎗ ᡓ⡰ᡶ⡰ 㐐 ᡔ ᡓ⡩ᡶ⡩ ㎗ ᡓ⡰ᡶ⡰ 㐉 ᡔ

IV. CARACTERISTICAS DOS MODELOS PLI. Um problema de programação linear inteira pode apresentar as seguintes situações:

  • Todas as variáveis de decisões são inteiras: são problemas denominados Problemas de Programação Linear Inteira Pura – PLIP
  • Parte das variáveis de decisões é inteira: são problemas denominados Problemas de Programação Linear Inteira Mista – PLIM
  • Todas as variáveis de decisões são binárias: são problemas denominados Problemas de Programação Linear Inteira Binária – PLIB
  • Parte das varáveis de decisões são binárias: são problemas denominados Problemas de Programação Linear Inteira Binária Mista – PLIBM.

V. O MÉTODO BRANCH-AND-BOUND.

O método Branch-and-Bound (em português, ramificar e limitar) é um algoritmo que apresenta a qualidade de examinar só uma pequena parte das soluções possíveis. Como os problemas de PLI são “relativamente grandes”, para resolvê-los diretamente deve-se dividi-lo em sub-problemas cada vez menores, até que estes possam ser solucionados. Sendo assim, a ideia é desenvolver uma enumeração inteligente dos pontos candidatos “nós” em busca da solução ótima inteira do problema, por meio da partição do espaço e avaliação progressiva das soluções.

A forma de divisão em problemas menores parte do princípio da separação de uma das variáveis de decisão inteiras, em um problema relaxado, utilizando-a em restrições contraditórias, criando uma espécie de ramificação (a partir de um nó), como em uma árvore.

Uma das formas de relaxação consiste em, temporariamente, ignorar as restrições de

Passo 6→ Examine ambos os ramos novamente e adote como limite superior o valor máximo da função objetivo para todos os nós finais. Se o limite inferior é igual ao limite superior, pare. Se não, volte ao passo 3.

EXERCÍCIO 1: Aplicação do método Branch-and- Bound para variáveis de decisão binárias (PLIB).

Maximizar ᡒ 㐄 9ᡶ⡩ ㎗ 5ᡶ⡰ ㎗ 6ᡶ⡱ ㎗ 4ᡶ⡲ s.a. 6ᡶ⡩ ㎗ 3ᡶ⡰ ㎗ 5ᡶ⡱ ㎗ 2ᡶ⡲ 㐉 10 ᡶ⡱ ㎗ ᡶ⡲ 㐉 1 ㎘ᡶ⡩ ㎗ ᡶ⡱ 㐉 0 ㎘ᡶ⡰ ㎗ ᡶ⡲ 㐉 0

ᡶ〷 é binário para j= 1, 2, 3, 4.

Resolvendo pelo método Branch-and-Bound, usando o software MATLAB chega-se ao seguinte resultado:

% Algoritmo PLIB em MATLAB. f = [-9; -5; -6; -4];

A = [6 3 5 2; 0 0 1 1; -1 0 1 0; 0 -1 0 1];

b = [10; 1; 0; 0];

[x,fval,exitflag,output] = bintprog(f,A,b)

x =1 → ᡶ⡩ 1 → ᡶ⡰ 0 → ᡶ⡱ 0 → ᡶ⡲ fval = -

output = iterations: 12 nodes: 5 time: 1. algorithm: 'LP-based branch-and-bound'

Foi usado SIMPLEX em MATLAB para achar a forma relaxada do problema de PL. Agora de forma manual nós temos o seguinte:

%Algoritmo PL ‘Simplex’ em MATLAB. f=[ -9; -5; -6; -4]; A=[6 3 5 2;0 0 1 1;-1 0 1 0;0 -1 0 1], b=[10;1;0;0]; Aeq=[1 0 0 0;0 1 0 0;0 0 1 0;0 0 0 1], beq=[1; 1; 0; 0]; lb=zeros(4,1),ub=ones(4,1); options=optimset('LargeScale','off','Simplex','on'); [x,fval,exitflag,output,lambda]=linprog(f,A,b,… Aeq,beq,lb,ub,[],options);

  1. Simplex solution node Z. ---Variable--- x = 0.8333→ ᡶ⡩ 1.0000→ ᡶ⡰ 0 → ᡶ⡱ 1.0000→ ᡶ⡲ ---Objetive function---

fval = -16.

---info---

output = iterations: 5 algorithm: 'medium scale: simplex' message: 'Optimization terminated.'

Este é o resultado relaxado, agora tomamos o maior valor decimal e ramificamos. Neste caso é ᡶ⡩.

  1. Simplex solution node ᡶ⡩ 㐄 0. ---Variable--- x = 1 0 1

---Objetive function--- fval = -

---info--- output = iterations: 2 algorithm: 'medium scale: simplex' message: 'Optimization terminated.'

  1. Simplex solution node ᡶ⡩ 㐄 1. ---Variable--- x = 1.
    0

---Objetive function--- fval = -16.

---info--- output = iterations: 3 algorithm: 'medium scale: simplex' message: 'Optimization terminated.'

De acordo com o passo 5, limitamos ao seguinte ramo:

  1. Simplex solution node ᡶ⡰ 㐄 0. ---Variable--- x =1. 0
    0

---Objetive function--- fval = -13.

---info--- output = iterations: 1 algorithm: 'medium scale: simplex message: 'Optimization terminated.

  1. Simplex solution node ᡶ⡰ 㐄 1. ---Variable--- x =1.
    0

---Objetive function--- fval = -

---info--- output =iterations: 2 algorithm: 'medium scale: simplex' message: 'Optimization terminated.

De acordo com o passo 5, limitamos ao seguinte ramo:

  1. Simplex solution node ᡶ⡱ 㐄 0. ---Variable--- x = 1.
    0

---Objetive function--- fval = -

---info--- output = iterations: 1 algorithm: 'medium scale: simplex' message: 'Optimization terminated.'

  1. Simplex solution node ᡶ⡱ 㐄 1.

Exiting: The constraints are overly stringent; no feasible point exists. ---Variable--- x = []

---Objetive function--- fval = []

---info--- output =iterations: 0 algorithm: 'medium scale: simplex'

Este é o resultado relaxado, agora tomamos o maior valor decimal e ramificamos. Neste caso é ᡶ⡰.

  1. Simplex solution node ᡶ⡰ 㐉 3. ---Variable--- x = 3 3

---Objetive function--- fval = -

---info--- output = iterations: 2 algorithm: 'medium scale: simplex'

  1. Simplex solution node ᡶ⡰ 㐐 4. ---Variable--- x =1.

---Objetive function--- fval = -

---info--- output = iterations: 2 algorithm: 'medium scale: simplex'

De acordo com o passo 5, limitamos ao seguinte ramo:

  1. Simplex solution node ᡶ⡩ 㐉 1. ---Variable--- x =1.

---Objetive function--- fval = -40.

---info--- output = iterations: 2 algorithm: 'medium scale: simplex'

  1. Simplex solution node ᡶ⡩ 㐐 2. Exiting: The constraints are overly stringent; no feasible starting point found.

De acordo com o passo 5, limitamos ao seguinte ramo:

  1. Simplex solution node ᡶ⡰ 㐉 4. ---Variable--- x = 1 4

---Objetive function--- fval = -

---info--- output =iterations: 2 algorithm: 'medium scale: simplex'

  1. Simplex solution node ᡶ⡰ 㐐 5. ---Variable--- x = 0 5

---Objetive function--- fval = -

---info--- output =iterations: 1 algorithm: 'medium scale: simplex'

De acordo com o passo 5, limitamos ao seguinte ramo:

Então como solução ótima em PLI temos: fval= 40, com ᡶ⡩ 㐄 0, ᡶ⡰ 㐄 5; onde têm um valor menor q o valor da fval relaxada e o valor das variáveis de decisões são inteiros.

VII. CASO DE APLICAÇÃO. Para um dado conjunto de obras, devem-se selecionar aquelas a serem priorizadas de tal forma se maximizar o benefício global, respeitando-se uma determinada restrição orçamentária assim como relações de exclusão ou de obrigatoriedade entre obras.

  • Definição das obras, com custos e benefícios correspondentes: ITEM OBRA CUSTO BENEFÍCIO 1 Poda 5000 500 2 Recondutoramento 20000 1000 3 Circuito novo 40000 1500 4 Expansão SE 50000 1000 5 SE nova 80000 1000

  • Definição de obras excludentes: ITEM OBRA OBRA EXCLUDENTE

1 Recondutoramento Circuito novo

2 Expansão SE SE nova

  • Definição de obras dependentes:

ITEM OBRA OBRA DEPENDENTE

1 Recondutoramento Poda

Então o problema pode ser formulado da seguinte forma:

Maximizar 㔳 ᠨ〶 ᡷ〶

〶⢀⡩ s.a.

㔳 ᠩ〶 ᡷ〶

〶⢀⡩

ᡦ: número total de obras. ᠨ〶: benefício da obra i, em R$. ᡷ〶: variável de decisão referente à obra i. ᠵᡀᡈ぀〨け: orçamento total disponível, em R$

% Algoritmo PLIB no Matlab Max Z = 500x_1+1000x_2+1500x_3+ 1000x_4+... ...+1000x_ % s.a % --restrições do orçamento-- 5000x_1+20000x_2+40000x_3+50000x_4+... ...+80000x_5 =< 100000 % --restrições de obras excludentes-- x_2+x_3 =< 1 x_3+x_4 =< 1 % --restrições de obras interdependentes-- x_2+x_1 >= 0 % Onde: x_j é binário para j= 1, 2, 3, 4.

f = [-500; -1000; -1500; -1000; -1000]; A = [5000 20000 40000 50000 80000; 0 1 1 0 0;... ...0 0 0 1 1; -1 1 0 0 0]; b = [100000; 1; 1; 0];

[x,fval,exitflag,output] = bintprog(f,A,b)

Optimization terminated.

x = [1 0 1 1 0]

fval = -

algorithm: 'LP-based branch-and-bound'