programação linear aplicada em redes de telecomunicaçõesrodrigo/docs/proglin/aula6.pdf ·...

32
Programação Linear Aplicada em Redes de Telecomunicações Prof. Rodrigo de Souza Couto

Upload: trantuyen

Post on 21-Dec-2018

226 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: Programação Linear Aplicada em Redes de Telecomunicaçõesrodrigo/docs/proglin/aula6.pdf · Programação Linear Aplicada em Redes de Telecomunicações Prof. Rodrigo de Souza Couto

Programação Linear Aplicada em Redes de Telecomunicações

Prof. Rodrigo de Souza Couto

Page 2: Programação Linear Aplicada em Redes de Telecomunicaçõesrodrigo/docs/proglin/aula6.pdf · Programação Linear Aplicada em Redes de Telecomunicações Prof. Rodrigo de Souza Couto

FERRAMENTA PARA SOLUÇÃO DE PROBLEMAS DE PROGRAMAÇÃO LINEAR: GLPK

2

Page 3: Programação Linear Aplicada em Redes de Telecomunicaçõesrodrigo/docs/proglin/aula6.pdf · Programação Linear Aplicada em Redes de Telecomunicações Prof. Rodrigo de Souza Couto

Nota de direito autoral

• Algumas partes deste slides são copiadas do manual do GLPK sob as seguintes condições

3

Page 4: Programação Linear Aplicada em Redes de Telecomunicaçõesrodrigo/docs/proglin/aula6.pdf · Programação Linear Aplicada em Redes de Telecomunicações Prof. Rodrigo de Souza Couto

GLPK (GNU Linear Programming Kit)

• Ferramenta em código aberto

• Soluciona problemas ILP e MILP

• Requisitos

– PC com Linux

• Para a disciplina, sugere-se o Ubuntu em uma máquina Virtual no Virtualbox (ou no Vmware)

– O Virtualbox é instalado no Windows e, a partir do Virtualbox, cria-se um máquina virtual com Ubuntu

– Ubuntu: https://www.ubuntu.com/download/desktop

– VirtualBox: https://www.virtualbox.org/4

Page 5: Programação Linear Aplicada em Redes de Telecomunicaçõesrodrigo/docs/proglin/aula6.pdf · Programação Linear Aplicada em Redes de Telecomunicações Prof. Rodrigo de Souza Couto

Instalação do GLPK por linha decomando

• Baixe o instalador do glpk. A versão abaixo é a 4.61. Se quiser outra versão consulte http://ftp.gnu.org/gnu/glpk/

– wget http://ftp.gnu.org/gnu/glpk/glpk-4.61.tar.gz

• Descompacte o arquivo

– tar –xvf glpk-4.61.tar.gz

• Entre no diretório descompactado

– cd glpk-4.61

• Configure a instalação. Caso dê erro, solucione antes de continuar a instalação

– sudo ./configure

• Instale o GLPK

– sudo make install 5

Page 6: Programação Linear Aplicada em Redes de Telecomunicaçõesrodrigo/docs/proglin/aula6.pdf · Programação Linear Aplicada em Redes de Telecomunicações Prof. Rodrigo de Souza Couto

Testando o solver

• Verifique se o solver foi instalado, fazendo

– glpsol --version

• Caso dê algum erro do tipo “error while loading shared libraries:”, faça (atenção: o ultimo comando reiniciará a máquina):

– sudo su

– echo LD_LIBRARY_PATH="/usr/local/lib" >> /etc/environment

– reboot

6

Page 7: Programação Linear Aplicada em Redes de Telecomunicaçõesrodrigo/docs/proglin/aula6.pdf · Programação Linear Aplicada em Redes de Telecomunicações Prof. Rodrigo de Souza Couto

Python GLPK

• Biblioteca utilizada para fazer chamada às APIs do GLPK

– Em um programa Python é possível construir a formulação para o GLPK e obter os resultados

• Existem outras biblioteca para Python, como também para outras linguagens

– O manual do GPLK assume o uso da linguagem C

7

Page 8: Programação Linear Aplicada em Redes de Telecomunicaçõesrodrigo/docs/proglin/aula6.pdf · Programação Linear Aplicada em Redes de Telecomunicações Prof. Rodrigo de Souza Couto

Instalação do Python GLPK

• Instale utilizando o apt-get

– sudo apt-get install python-glpk

• Para testar a instalação, entre no Python e, em seguida, chama a biblioteca

– python

– from glpk.glpkpi import *

– exit()

• Se der erto “AttributeError: 'module' object has no attribute '_tabversion”

– Substitua o diretório do ply em /usr/local/lib e /usr/local

• /usr/lib/python2.7/dist-packages/ply

• Arquivo salvo na pasta da disciplina8

Page 9: Programação Linear Aplicada em Redes de Telecomunicaçõesrodrigo/docs/proglin/aula6.pdf · Programação Linear Aplicada em Redes de Telecomunicações Prof. Rodrigo de Souza Couto

Formato Aceito pelo GLPK

• Problema LP ou MILP

9Conteúdo retirado do manual do GLPK

Page 10: Programação Linear Aplicada em Redes de Telecomunicaçõesrodrigo/docs/proglin/aula6.pdf · Programação Linear Aplicada em Redes de Telecomunicações Prof. Rodrigo de Souza Couto

Formato Aceito pelo GLPK

• Problema LP ou MILP

10

Variáveis estruturais: As que a gente já

conhece da formulação

básica

Conteúdo retirado do manual do GLPK

Também chamadas de columns(colunas)

Page 11: Programação Linear Aplicada em Redes de Telecomunicaçõesrodrigo/docs/proglin/aula6.pdf · Programação Linear Aplicada em Redes de Telecomunicações Prof. Rodrigo de Souza Couto

Formato Aceito pelo GLPK

• Problema LP ou MILP

11

Cada restrição é

representada como uma

variável (variável auxiliar)

Conteúdo retirado do manual do GLPK

Também chamadas de rows (linhas)

Page 12: Programação Linear Aplicada em Redes de Telecomunicaçõesrodrigo/docs/proglin/aula6.pdf · Programação Linear Aplicada em Redes de Telecomunicações Prof. Rodrigo de Souza Couto

Formato Aceito pelo GLPK

• Problema LP ou MILP

12

Função objetivo

também é uma variável

Conteúdo retirado do manual do GLPK

Page 13: Programação Linear Aplicada em Redes de Telecomunicaçõesrodrigo/docs/proglin/aula6.pdf · Programação Linear Aplicada em Redes de Telecomunicações Prof. Rodrigo de Souza Couto

Formato Aceito pelo GLPK

• Problema LP ou MILP

13

Limite das variáveis

Conteúdo retirado do manual do GLPK

Page 14: Programação Linear Aplicada em Redes de Telecomunicaçõesrodrigo/docs/proglin/aula6.pdf · Programação Linear Aplicada em Redes de Telecomunicações Prof. Rodrigo de Souza Couto

Limite das variáveis

• Utilizado para limitar variáveis como também para limitar restrições (lado direito da restrição como conhecemos)

14Conteúdo retirado do manual do GLPK

Page 15: Programação Linear Aplicada em Redes de Telecomunicaçõesrodrigo/docs/proglin/aula6.pdf · Programação Linear Aplicada em Redes de Telecomunicações Prof. Rodrigo de Souza Couto

Exemplo

15Conteúdo retirado do manual do GLPK

Forma GLPKForma Canônica

Page 16: Programação Linear Aplicada em Redes de Telecomunicaçõesrodrigo/docs/proglin/aula6.pdf · Programação Linear Aplicada em Redes de Telecomunicações Prof. Rodrigo de Souza Couto

Execução do Exemplo:Arquivo example_refman.py

• Inicialização de bibliotecas e variáveis

16

Importação da biblioteca do Python-GLKP

Criação de matrizes, com tamanho grande, para os coeficientes das restrições

Criação do problema, ainda vazio, no GLPK

Atribuição de nome ao problema.

Qualquer nome pode ser escolhido.

Page 17: Programação Linear Aplicada em Redes de Telecomunicaçõesrodrigo/docs/proglin/aula6.pdf · Programação Linear Aplicada em Redes de Telecomunicações Prof. Rodrigo de Souza Couto

Exemplo:Arquivo example_refman.py

• Definição do problema como minimização ou maximização

17

Se fosse minimização, colocarímosGLP_MIN

Page 18: Programação Linear Aplicada em Redes de Telecomunicaçõesrodrigo/docs/proglin/aula6.pdf · Programação Linear Aplicada em Redes de Telecomunicações Prof. Rodrigo de Souza Couto

Exemplo:Arquivo example_refman.py

• Criação das restrições (rows)

18

Cria 3 restriçõesRestrição 1 com

nome p

Indica se tratar das restrição 1Define os

limitantes da restrição

Indica definição de um limitante

superior (inferior seria GLP_LO)

Valor ignorado, pois seria referente

a um GLP_LO

Limitante superior

Page 19: Programação Linear Aplicada em Redes de Telecomunicaçõesrodrigo/docs/proglin/aula6.pdf · Programação Linear Aplicada em Redes de Telecomunicações Prof. Rodrigo de Souza Couto

Exemplo:Arquivo example_refman.py

• Outras restrições (rows)

19

Page 20: Programação Linear Aplicada em Redes de Telecomunicaçõesrodrigo/docs/proglin/aula6.pdf · Programação Linear Aplicada em Redes de Telecomunicações Prof. Rodrigo de Souza Couto

Exemplo:Arquivo example_refman.py

• Criação de variáveis estruturais (columns)

Cria 3 variáveis

Restrição 1 com nome x1

Page 21: Programação Linear Aplicada em Redes de Telecomunicaçõesrodrigo/docs/proglin/aula6.pdf · Programação Linear Aplicada em Redes de Telecomunicações Prof. Rodrigo de Souza Couto

Exemplo:Arquivo example_refman.py

• Criação de variáveis estruturais (columns)

21

Define os limitantes da variável

Indica variável 1

Indica limitante inferior

Limitante inferior Valor

ignorado

Define valor dos coeficientes na função

objetivo

Indica variável 1 Valor 10.0

Page 22: Programação Linear Aplicada em Redes de Telecomunicaçõesrodrigo/docs/proglin/aula6.pdf · Programação Linear Aplicada em Redes de Telecomunicações Prof. Rodrigo de Souza Couto

Exemplo:Arquivo example_refman.py

• Outras variáveis

22

Page 23: Programação Linear Aplicada em Redes de Telecomunicaçõesrodrigo/docs/proglin/aula6.pdf · Programação Linear Aplicada em Redes de Telecomunicações Prof. Rodrigo de Souza Couto

Exemplo:Arquivo example_refman.py

• Coeficientes das variáveis nas restrições

23

Armazena o índice da restrição na qual o

coeficiente se encontra

Armazena o índice da variável na qual o

coeficiente se encontra

Armazena o valor do coeficiente

Valor entre colchetes é apenas a ordem do

coeficiente na sequência(Para um coeficiente, ordem é igual em todas as matrizes)

Page 24: Programação Linear Aplicada em Redes de Telecomunicaçõesrodrigo/docs/proglin/aula6.pdf · Programação Linear Aplicada em Redes de Telecomunicações Prof. Rodrigo de Souza Couto

Exemplo:Arquivo example_refman.py

• Outros coeficientes

24

Page 25: Programação Linear Aplicada em Redes de Telecomunicaçõesrodrigo/docs/proglin/aula6.pdf · Programação Linear Aplicada em Redes de Telecomunicações Prof. Rodrigo de Souza Couto

Exemplo:Arquivo example_refman.py

• Outros coeficientes

25

Page 26: Programação Linear Aplicada em Redes de Telecomunicaçõesrodrigo/docs/proglin/aula6.pdf · Programação Linear Aplicada em Redes de Telecomunicações Prof. Rodrigo de Souza Couto

Exemplo:Arquivo example_refman.py

• Outros coeficientes

26

Page 27: Programação Linear Aplicada em Redes de Telecomunicaçõesrodrigo/docs/proglin/aula6.pdf · Programação Linear Aplicada em Redes de Telecomunicações Prof. Rodrigo de Souza Couto

Exemplo:Arquivo example_refman.py

• Carregamento das matrizes dos coeficientes no problema

27

Número total de coeficientes

Page 28: Programação Linear Aplicada em Redes de Telecomunicaçõesrodrigo/docs/proglin/aula6.pdf · Programação Linear Aplicada em Redes de Telecomunicações Prof. Rodrigo de Souza Couto

Exemplo:Arquivo example_refman.py

• Solução do problema pelo método Simplex

– A ser visto mais adiante no curso

– Método utilizado exclusivamente pra problemas LP

• Problemas MILP utilizam branch-and-cut

28

Inserção de parâmetros para o método (veremos mais

adiante). Caso seja “None”, utiliza configuração padrão.

A execução desse comando irá gerar uma saída na tela, indicando o sucesso (ou não) da

solução

Page 29: Programação Linear Aplicada em Redes de Telecomunicaçõesrodrigo/docs/proglin/aula6.pdf · Programação Linear Aplicada em Redes de Telecomunicações Prof. Rodrigo de Souza Couto

Exemplo:Arquivo example_refman.py

• Obtenção dos valores

29

Em Python não é necessário declarar

variáveis!!

Variável Z recebe o valor ótimo da função

objetivo

Variável x3 recebe o valor ótimo de x3

x3 possui índice 3

Page 30: Programação Linear Aplicada em Redes de Telecomunicaçõesrodrigo/docs/proglin/aula6.pdf · Programação Linear Aplicada em Redes de Telecomunicações Prof. Rodrigo de Souza Couto

Exemplo:Arquivo example_refman.py

• Impressão de valores

30

Conversão de valor numérico para string

(texto)

Page 31: Programação Linear Aplicada em Redes de Telecomunicaçõesrodrigo/docs/proglin/aula6.pdf · Programação Linear Aplicada em Redes de Telecomunicações Prof. Rodrigo de Souza Couto

Exemplo:Arquivo example_refman.py

• Remoção das variáveis do problema

31

Page 32: Programação Linear Aplicada em Redes de Telecomunicaçõesrodrigo/docs/proglin/aula6.pdf · Programação Linear Aplicada em Redes de Telecomunicações Prof. Rodrigo de Souza Couto

Execução do exemplo

• Para executar qualquer arquivo em python, faça no terminal:

– python <nomeArquivo>

• Para o exemplo

– python example_refman.py

32