Programação Linear Aplicada em Redes de Telecomunicaçõesrodrigo/docs/proglin/aula6.pdf ·...
Transcript of Programação Linear Aplicada em Redes de Telecomunicaçõesrodrigo/docs/proglin/aula6.pdf ·...
![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.](https://reader031.fdocumentos.com/reader031/viewer/2022021911/5c1c14db09d3f23c268be6b5/html5/thumbnails/1.jpg)
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.](https://reader031.fdocumentos.com/reader031/viewer/2022021911/5c1c14db09d3f23c268be6b5/html5/thumbnails/2.jpg)
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.](https://reader031.fdocumentos.com/reader031/viewer/2022021911/5c1c14db09d3f23c268be6b5/html5/thumbnails/3.jpg)
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.](https://reader031.fdocumentos.com/reader031/viewer/2022021911/5c1c14db09d3f23c268be6b5/html5/thumbnails/4.jpg)
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.](https://reader031.fdocumentos.com/reader031/viewer/2022021911/5c1c14db09d3f23c268be6b5/html5/thumbnails/5.jpg)
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.](https://reader031.fdocumentos.com/reader031/viewer/2022021911/5c1c14db09d3f23c268be6b5/html5/thumbnails/6.jpg)
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.](https://reader031.fdocumentos.com/reader031/viewer/2022021911/5c1c14db09d3f23c268be6b5/html5/thumbnails/7.jpg)
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.](https://reader031.fdocumentos.com/reader031/viewer/2022021911/5c1c14db09d3f23c268be6b5/html5/thumbnails/8.jpg)
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.](https://reader031.fdocumentos.com/reader031/viewer/2022021911/5c1c14db09d3f23c268be6b5/html5/thumbnails/9.jpg)
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.](https://reader031.fdocumentos.com/reader031/viewer/2022021911/5c1c14db09d3f23c268be6b5/html5/thumbnails/10.jpg)
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.](https://reader031.fdocumentos.com/reader031/viewer/2022021911/5c1c14db09d3f23c268be6b5/html5/thumbnails/11.jpg)
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.](https://reader031.fdocumentos.com/reader031/viewer/2022021911/5c1c14db09d3f23c268be6b5/html5/thumbnails/12.jpg)
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.](https://reader031.fdocumentos.com/reader031/viewer/2022021911/5c1c14db09d3f23c268be6b5/html5/thumbnails/13.jpg)
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.](https://reader031.fdocumentos.com/reader031/viewer/2022021911/5c1c14db09d3f23c268be6b5/html5/thumbnails/14.jpg)
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.](https://reader031.fdocumentos.com/reader031/viewer/2022021911/5c1c14db09d3f23c268be6b5/html5/thumbnails/15.jpg)
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.](https://reader031.fdocumentos.com/reader031/viewer/2022021911/5c1c14db09d3f23c268be6b5/html5/thumbnails/16.jpg)
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.](https://reader031.fdocumentos.com/reader031/viewer/2022021911/5c1c14db09d3f23c268be6b5/html5/thumbnails/17.jpg)
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.](https://reader031.fdocumentos.com/reader031/viewer/2022021911/5c1c14db09d3f23c268be6b5/html5/thumbnails/18.jpg)
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.](https://reader031.fdocumentos.com/reader031/viewer/2022021911/5c1c14db09d3f23c268be6b5/html5/thumbnails/19.jpg)
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.](https://reader031.fdocumentos.com/reader031/viewer/2022021911/5c1c14db09d3f23c268be6b5/html5/thumbnails/20.jpg)
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.](https://reader031.fdocumentos.com/reader031/viewer/2022021911/5c1c14db09d3f23c268be6b5/html5/thumbnails/21.jpg)
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.](https://reader031.fdocumentos.com/reader031/viewer/2022021911/5c1c14db09d3f23c268be6b5/html5/thumbnails/22.jpg)
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.](https://reader031.fdocumentos.com/reader031/viewer/2022021911/5c1c14db09d3f23c268be6b5/html5/thumbnails/23.jpg)
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.](https://reader031.fdocumentos.com/reader031/viewer/2022021911/5c1c14db09d3f23c268be6b5/html5/thumbnails/24.jpg)
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.](https://reader031.fdocumentos.com/reader031/viewer/2022021911/5c1c14db09d3f23c268be6b5/html5/thumbnails/25.jpg)
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.](https://reader031.fdocumentos.com/reader031/viewer/2022021911/5c1c14db09d3f23c268be6b5/html5/thumbnails/26.jpg)
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.](https://reader031.fdocumentos.com/reader031/viewer/2022021911/5c1c14db09d3f23c268be6b5/html5/thumbnails/27.jpg)
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.](https://reader031.fdocumentos.com/reader031/viewer/2022021911/5c1c14db09d3f23c268be6b5/html5/thumbnails/28.jpg)
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.](https://reader031.fdocumentos.com/reader031/viewer/2022021911/5c1c14db09d3f23c268be6b5/html5/thumbnails/29.jpg)
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.](https://reader031.fdocumentos.com/reader031/viewer/2022021911/5c1c14db09d3f23c268be6b5/html5/thumbnails/30.jpg)
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.](https://reader031.fdocumentos.com/reader031/viewer/2022021911/5c1c14db09d3f23c268be6b5/html5/thumbnails/31.jpg)
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.](https://reader031.fdocumentos.com/reader031/viewer/2022021911/5c1c14db09d3f23c268be6b5/html5/thumbnails/32.jpg)
Execução do exemplo
• Para executar qualquer arquivo em python, faça no terminal:
– python <nomeArquivo>
• Para o exemplo
– python example_refman.py
32