Upload
trantuyen
View
230
Download
0
Embed Size (px)
Citation preview
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