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

Post on 21-Dec-2018

228 Views

Category:

Documents

0 Downloads

Preview:

Click to see full reader

TRANSCRIPT

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

Nota de direito autoral

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

3

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

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

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

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

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

Formato Aceito pelo GLPK

• Problema LP ou MILP

9Conteúdo retirado do manual do GLPK

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)

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)

Formato Aceito pelo GLPK

• Problema LP ou MILP

12

Função objetivo

também é uma variável

Conteúdo retirado do manual do GLPK

Formato Aceito pelo GLPK

• Problema LP ou MILP

13

Limite das variáveis

Conteúdo retirado do manual do GLPK

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

Exemplo

15Conteúdo retirado do manual do GLPK

Forma GLPKForma Canônica

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.

Exemplo:Arquivo example_refman.py

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

17

Se fosse minimização, colocarímosGLP_MIN

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

Exemplo:Arquivo example_refman.py

• Outras restrições (rows)

19

Exemplo:Arquivo example_refman.py

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

Cria 3 variáveis

Restrição 1 com nome x1

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

Exemplo:Arquivo example_refman.py

• Outras variáveis

22

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)

Exemplo:Arquivo example_refman.py

• Outros coeficientes

24

Exemplo:Arquivo example_refman.py

• Outros coeficientes

25

Exemplo:Arquivo example_refman.py

• Outros coeficientes

26

Exemplo:Arquivo example_refman.py

• Carregamento das matrizes dos coeficientes no problema

27

Número total de coeficientes

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

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

Exemplo:Arquivo example_refman.py

• Impressão de valores

30

Conversão de valor numérico para string

(texto)

Exemplo:Arquivo example_refman.py

• Remoção das variáveis do problema

31

Execução do exemplo

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

– python <nomeArquivo>

• Para o exemplo

– python example_refman.py

32

top related