MAT 475 Tópicos em Matemática Aplicada

Propaganda
MAT 475 – Tópicos em Matemática Aplicada
(Lana Mara R. dos Santos, [email protected])
Aula 11a15: SageMath e Python
Linguagem de Programação
Computadores e outros dispositivos eletrônicos programáveis
executam instruções ativando (ou desativando) determinadas partes
em seus componentes. As instruções são comunidadas ao dispositivo
por uma sequência de zeros e uns (código binário).
Uma linguagem de programação é uma ponte entre a linguagem
humana e a de máquina, mesclando conceitos de ambas.
As linguagens de programação são classificadas em vários nı́veis de
acordo com sua proximidade com a linguagem humana.
Linguagens de baixo nı́vel são mais próximas da linguagem da
máquina enquanto as de alto nı́vel se aproximam da linguagem
natural humana.
MAT 475 – Tópicos em Matemática Aplicada
(Lana Mara R. dos Santos, [email protected])
Aula 11a15: SageMath e Python
Python
Uma linguagem de programação pode ser compilada (traduzida para
uma linguagem de máquina) ou interpretada.
Uma linguagem interpretada não precisa ser compilada. Ela é lida
por um programa que faz a tradução para a linguagem de máquina.
Python é uma linguagem de altı́ssimo nı́vel (VHLL – very high level
language), interpretada, de código fonte aberto e disponı́vel para
vários sistemas operacionais.
O interpretador do Python já vem instalado no Linux. Para
windows ele está disponı́vel para download em
http://www.python.org
O SageMath é implementado principalmente em Python .
MAT 475 – Tópicos em Matemática Aplicada
(Lana Mara R. dos Santos, [email protected])
Aula 11a15: SageMath e Python
Python
Python é uma linguagem dinamicamente tipada. Isto quer dizer que
não é preciso declarar as variáveis ou ou tipo delas. A forma como a
variável é usada no código identifica como ela será armazenada.
A = 3
A = 3.0
A = "tr^
es"
type(A)
É identificada como inteira (tipo int)
É identificada como inteira (tipo float)
É identificada como string
Para saber o tipo definido para a variável
MAT 475 – Tópicos em Matemática Aplicada
(Lana Mara R. dos Santos, [email protected])
Aula 11a15: SageMath e Python
Python
. comentário
Tudo que estiver após o sı́mbolo # em uma linha de comando do
Python é assumido como comentário.
Para comentar um bloco de comandos, coloque-o entre três aspas
simples.
#Comentários em python
a=2 # a recebe 2
b=5
’’’inı́cio bloco de comentários
a=3
a=33
b=24
c=15
fim do bloco de comentários’’’
a+b
MAT 475 – Tópicos em Matemática Aplicada
(Lana Mara R. dos Santos, [email protected])
Aula 11a15: SageMath e Python
Python
Operações aritméticas:
8+3
8*3
8/3
8./3
8**3
8**(1/3)
8%3
3*("na"+"da")
adição
multiplicação
divisão de inteiros
divisão de reais
potenciação
radiciação
resto de divisão
3 x a concatenação de ’na’ com ’da’
Operações booleanas:
a==b
a!=b ou a<>b
verifica se são iquais
verifica se são diferentes
MAT 475 – Tópicos em Matemática Aplicada
(Lana Mara R. dos Santos, [email protected])
Aula 11a15: SageMath e Python
Python
. Listas
Uma lista é uma sequência de variáveis delimitada por colchetes. Pode
conter tipos diferentes e pode ser alterada (pois é mutável).
list=[4,"nada", 3.0]
define a lista list com 3 elementos.
list[0]
exibe o primeiro elemento da lista.
list[-2]
exibe o penúltimo elemento da lista.
len(list)
informa o tamanho da lista.
list+[3,5]
concatena list com a lista [3,5].
list[1]=7
insere o valor 7 na posição 1 da lista.
del list[1]
remove o elemento da posição 2 de list.
list.index(4)
indica a posição que o valor ”4”está na lista.
Se tiver mais de uma posição com mesmo valor,
indica a primeira ocorrência.
MAT 475 – Tópicos em Matemática Aplicada
Aula 11a15: SageMath e Python
Python
. Listas: pseudo-matriz
(Lana Mara R. dos Santos, [email protected])
MAT 475 – Tópicos em Matemática Aplicada
(Lana Mara R. dos Santos, [email protected])
Aula 11a15: SageMath e Python
Python
. Tupla
Uma tupla é uma sequência de variáveis delimitada por parênteses.
Assim como em uma lista, pode conter tipos diferentes. No entanto,
uma tupla não pode ser alterada depois de criada (pois é imutável).
Os comandos de acesso e manipulação de tuplas são analógas aos
usados para listas.
tup=(4,"nada", 3.0)
define a tupla tup com 3 elementos.
tup[1]
acessa o segundo elemento da tupla tup.
matriz=((1,2),(3,4))
cria uma pseudo-matriz 2x2
matriz[0][1]
exibe o elemento da posição 1x2 de matriz
MAT 475 – Tópicos em Matemática Aplicada
(Lana Mara R. dos Santos, [email protected])
Aula 11a15: SageMath e Python
Python
. set
Conjuntos são definidos com a sintaxe set([elementos]).
X = set([1,19,’a’])
Y = set([1,1,1, 2/3])
Z=X.intersection(Y)
print ’X =’,X
print ’Y =’,Y
print Z
print X == set([’a’, 1, 1, 19])
print ’a’ in X
print ’a’ in Y
Resultado:
X = set([’a’, 1, 19])
Y = set([1, 2/3])
set([1])
True
True
False
MAT 475 – Tópicos em Matemática Aplicada
(Lana Mara R. dos Santos, [email protected])
Aula 11a15: SageMath e Python
Python
. Set
SageMath tem sua própria função conjunto (Set) que além de incorporar
as propriedades da Teoria de conjuntos, tem algumas funções adicionais.
X =set([1,19,’a’])
Y = Set([1,1,1, 2/3])
print ’X =’,X
print ’Y =’,Y
print latex(X)
print latex(Y)
Resultado:
X = set([’a’, 1, 19])
Y = {1, 2/3}
\text{\texttt{set([’a’,{ }1,{ }19])}}
\left\{1, \frac{2}{3}\right\}
MAT 475 – Tópicos em Matemática Aplicada
(Lana Mara R. dos Santos, [email protected])
Aula 11a15: SageMath e Python
Python
. Range
A função range(a, b) gera uma lista de uma sequência de números
inteiros no intervalo [a,b)
range(2,7)
lista com os inteiros de 2 a 6.
range(7)
lista com os inteiros de 0 a 6.
range(1,17,4)
lista com os inteiros de 1 a 16, com razão 4.
MAT 475 – Tópicos em Matemática Aplicada
(Lana Mara R. dos Santos, [email protected])
Aula 11a15: SageMath e Python
Python
. For
Na maioria das linguagens de programação, o comando for realiza
uma iteração percorrendo uma sequência de números inteiros de
uma progressão aritmética.
Em Python a iteração é feita percorrendo os itens de uma sequência
que pode ser de diversos tipos (lista, string etc.). Por exemplo:
..................................................................
for i in range(1,4):
print i,
print ""
for i in range(3)+range(5,7):
print i,
print "\n"
lista=[’fada’,’casa’,’nada’]
for i in lista: print i
Resultado:
1 2 3
0 1 2 5 6
fada
casa
nada
MAT 475 – Tópicos em Matemática Aplicada
(Lana Mara R. dos Santos, [email protected])
Aula 11a15: SageMath e Python
Python
Não é necessário utilizar { } para delimitar um bloco de comandos
ou end para finalizar uma estrutura.
Não existe um delimitador especı́fico para blocos de código. A
delimitação é feita pela indentação ( tecla tab ou 4 espaços).
..................................................................
for i in range(1,3):
print i
print "f_",i
print "g_",i
Resultado:
1
f_ 1
2
f_ 2
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .g_
. . .2. . . . . . . . . . . . . . . . . . . .
Observe que a linha de comando {print "g_",i} está alinhado com o
comando for (e, portanto, o valor de i neste caso não é iterado
percorrendo a sequência de inteiros em range(1,3)). Como o último
valor para i é 2, foi impresso g_2.
MAT 475 – Tópicos em Matemática Aplicada
(Lana Mara R. dos Santos, [email protected])
Aula 11a15: SageMath e Python
Python
. Exemplo:
..................................................................
matriz = ((1,0,0),(0,1,0),(0,0,1))
Resultado:
for i in range(len(matriz)):
1 0 0
for j in range(len(matriz)):
0 1 0
print matriz[i][j],
0 0 1
. . . . print
. . . . . . .""
.......................................................
MAT 475 – Tópicos em Matemática Aplicada
(Lana Mara R. dos Santos, [email protected])
Aula 11a15: SageMath e Python
Python
Exemplos de formatação de strings:
a,b,c=3.1415,5,’número’
print
print
print
print
print
print
\n
\t
"a=%f" %a
"b=%d" %b
"c=%s" %s
’%f é %s’ %(a,c)
’%.2f’ %a
’%6.2f’ %a
atribui, respectivamente, valores para
as variáveis a,b e c.
imprime: a={valor da float(f) a}
imprime: b={valor do inteiro(d) b}
imprime: c={valor da string(s) c}
imprime: 3.1416 é um número
imprime o float com 2 casas decimais
imprime usando 6 espaços no total
(insere espaço em branco se preciso).
pula uma linha
acrescenta espaço de tabulação
MAT 475 – Tópicos em Matemática Aplicada
Aula 11a15: SageMath e Python
Python
(Lana Mara R. dos Santos, [email protected])
MAT 475 – Tópicos em Matemática Aplicada
(Lana Mara R. dos Santos, [email protected])
Aula 11a15: SageMath e Python
Python
. if–elif–else
A estrutura geral de uma condicional if tem a seguinte sintaxe:
if condiç~
ao:
# comandos
...
elif condiç~
ao:
# comandos
...
else:
# comandos
...
#Exemplo
var = [-2, 4,
for i in var:
if i < 0:
print
elif i ==
print
else:
print
5, 6, 0, -3, 4, 8, 3]
"Valor negativo: %d" % i
0:
"zero na posiç~
ao", var.index(0)
"Valor positivo: %d" % i
MAT 475 – Tópicos em Matemática Aplicada
(Lana Mara R. dos Santos, [email protected])
Aula 11a15: SageMath e Python
Python
. Módulo:
Existem módulos que podem ser inseridos no código.
Para importar um módulo basta colocar no inı́cio do código:
import nome_do_módulo
Exemplos:
import datetime # para marcar tempo
import random # para gerar números aleatórios
Para conhecer as funções de um módulo basta digitar:
help(nome_do_modulo).
MAT 475 – Tópicos em Matemática Aplicada
(Lana Mara R. dos Santos, [email protected])
Aula 11a15: SageMath e Python
Python
. Exemplo
Procedimento para gerar uma pseudo-matriz (lista de listas) aleatória:
..................................................................
import random
def cria_matriz(lin,col):
A=[]
for i in range(lin):
linha=[]
for j in range(col):
linha = linha + [random.randint(1,10)]
A= A + [linha]
return A
cria_matriz(2,3)
..................................................................
MAT 475 – Tópicos em Matemática Aplicada
(Lana Mara R. dos Santos, [email protected])
Aula 11a15: SageMath e Python
SageMath
O SageMath é um software livre e de código aberto de matemática
que engloba softwares de várias áreas, tais como, álgebra, geometria,
teoria dos números, análise numérica, criptografia, computação
simbólica e numérica.
Criado em 2005 com o objetivo de ser uma alternativa gratuita a
softwares comerciais como Maple, Mathematica e matlab.
O SageMath utiliza a linguagem de programação Python . No
entanto, não é preciso saber Python para usar a maioria dos
recursos do programa.
O conhecimento necessário de Python para resolver um PPL ou
PPLI no SageMath é proporcional à complexidade do problema.
MAT 475 – Tópicos em Matemática Aplicada
(Lana Mara R. dos Santos, [email protected])
Aula 11a15: SageMath e Python
Como usar o SageMath
Endereço: http://www.sagemath.org
Para usar o SageMath é preciso um navegador de internet como
ambiente de trabalho.
Para usar no windows é preciso instalar uma máquina virtual.
Online:
https://cloud.sagemath.com
http://sagecell.sagemath.org
MAT 475 – Tópicos em Matemática Aplicada
Aula 11a15: SageMath e Python
Como usar o SageMath
http://sagecell.sagemath.org
(Lana Mara R. dos Santos, [email protected])
MAT 475 – Tópicos em Matemática Aplicada
Aula 11a15: SageMath e Python
Como usar o SageMath
http://sagecell.sagemath.org
(Lana Mara R. dos Santos, [email protected])
MAT 475 – Tópicos em Matemática Aplicada
(Lana Mara R. dos Santos, [email protected])
Aula 11a15: SageMath e Python
Programação linear no SageMath
Suponha que se queira resolver o seguinte PPL:
max
x1 + 4x2 + 3x3
s.a.
x1 + 2x2 ≤ 5
5x1 + 5x3 ≤ 8
x1 , x2 , x3 ≥ 0
MAT 475 – Tópicos em Matemática Aplicada
(Lana Mara R. dos Santos, [email protected])
Aula 11a15: SageMath e Python
Programação linear no SageMath
Suponha que se queira resolver o seguinte PPL:
Crie um MixedIntegerLinearProgram
(por padrão, o problema é de maximização)
max
x1 + 4x2 + 3x3
s.a.
x1 + 2x2 ≤ 5
5x1 + 5x3 ≤ 8
x1 , x2 , x3 ≥ 0
MAT 475 – Tópicos em Matemática Aplicada
(Lana Mara R. dos Santos, [email protected])
Aula 11a15: SageMath e Python
Programação linear no SageMath
Suponha que se queira resolver o seguinte PPL:
crie um vetor de variáveis x:
(não é preciso definir o tamanho do vetor)
max
x1 + 4x2 + 3x3
s.a.
x1 + 2x2 ≤ 5
5x1 + 5x3 ≤ 8
x1 , x2 , x3 ≥ 0
MAT 475 – Tópicos em Matemática Aplicada
(Lana Mara R. dos Santos, [email protected])
Aula 11a15: SageMath e Python
Programação linear no SageMath
Suponha que se queira resolver o seguinte PPL:
adicione a função objetivo do PPL:
max
x1 + 4x2 + 3x3
s.a.
x1 + 2x2 ≤ 5
5x1 + 5x3 ≤ 8
x1 , x2 , x3 ≥ 0
MAT 475 – Tópicos em Matemática Aplicada
(Lana Mara R. dos Santos, [email protected])
Aula 11a15: SageMath e Python
Programação linear no SageMath
Suponha que se queira resolver o seguinte PPL:
adicione as restrições do PPL:
max
x1 + 4x2 + 3x3
s.a.
x1 + 2x2 ≤ 5
5x1 + 5x3 ≤ 8
x1 , x2 , x3 ≥ 0
MAT 475 – Tópicos em Matemática Aplicada
(Lana Mara R. dos Santos, [email protected])
Aula 11a15: SageMath e Python
Programação linear no SageMath
Suponha que se queira resolver o seguinte PPL:
resolva o PPL:
max
x1 + 4x2 + 3x3
s.a.
x1 + 2x2 ≤ 5
5x1 + 5x3 ≤ 8
x1 , x2 , x3 ≥ 0
MAT 475 – Tópicos em Matemática Aplicada
(Lana Mara R. dos Santos, [email protected])
Aula 11a15: SageMath e Python
Programação linear no SageMath
Suponha que se queira resolver o seguinte PPL:
max
x1 + 4x2 + 3x3
s.a.
x1 + 2x2 ≤ 5
5x1 + 5x3 ≤ 8
x1 , x2 , x3 ≥ 0
z = 14.8
MAT 475 – Tópicos em Matemática Aplicada
(Lana Mara R. dos Santos, [email protected])
Aula 11a15: SageMath e Python
Programação linear no SageMath
Suponha que se queira resolver o seguinte PPL:
Exibir solução:
max
x1 + 4x2 + 3x3
s.a.
x1 + 2x2 ≤ 5
5x1 + 5x3 ≤ 8
x1 , x2 , x3 ≥ 0
z = 14.8
x1 = 0.0
x2 = 2.5
x3 = 1.6
MAT 475 – Tópicos em Matemática Aplicada
(Lana Mara R. dos Santos, [email protected])
Aula 11a15: SageMath e Python
Programação linear no SageMath
Suponha que se queira resolver o seguinte PPL:
max
x1 + 4x2 + 3x3
s.a.
x1 + 2x2 ≤ 5
5x1 + 5x3 ≤ 8
x1 , x2 , x3 ≥ 0
MAT 475 – Tópicos em Matemática Aplicada
(Lana Mara R. dos Santos, [email protected])
Aula 11a15: SageMath e Python
Programação linear inteira (mista) no SageMath
Suponha que se queira resolver o seguinte PI:
max
x1 + 4x2 + 3x3
s.a.
x1 + 2x2 ≤ 5
5x1 + 5x3 ≤ 8
x1 , x2 , x3 ∈ Z+
MAT 475 – Tópicos em Matemática Aplicada
(Lana Mara R. dos Santos, [email protected])
Aula 11a15: SageMath e Python
Programação linear inteira (mista) no SageMath
Suponha que se queira resolver o seguinte PI:
O que muda é a declaração das variáveis x.
max
x1 + 4x2 + 3x3
s.a.
x1 + 2x2 ≤ 5
5x1 + 5x3 ≤ 8
x1 , x2 , x3 ∈ Z+
z = 11
x1 = 0
x2 = 2
x3 = 1
MAT 475 – Tópicos em Matemática Aplicada
(Lana Mara R. dos Santos, [email protected])
Aula 11a15: SageMath e Python
Programação linear inteira (mista) no SageMath
Suponha que se queira resolver o seguinte PB:
max
x1 + 4x2 + 3x3
s.a.
x1 + 2x2 ≤ 5
5x1 + 5x3 ≤ 8
x1 , x2 , x3 ∈ N
MAT 475 – Tópicos em Matemática Aplicada
(Lana Mara R. dos Santos, [email protected])
Aula 11a15: SageMath e Python
Programação linear inteira (mista) no SageMath
Suponha que se queira resolver o seguinte PB:
O que muda é a declaração das variáveis x.
max
x1 + 4x2 + 3x3
s.a.
x1 + 2x2 ≤ 5
5x1 + 5x3 ≤ 8
x1 , x2 , x3 ∈ N
z=7
x1 = 0
x2 = 1
x3 = 1
MAT 475 – Tópicos em Matemática Aplicada
(Lana Mara R. dos Santos, [email protected])
Aula 11a15: SageMath e Python
Programação linear (inteira mista) no SageMath
Escrevendo o problema na forma matricial
max
x1 + 4x2 + 3x3
s.a.
x1 + 2x2 ≤ 5
5x1 + 5x3 ≤ 8
x1 , x2 , x3 ≥ 0
MAT 475 – Tópicos em Matemática Aplicada
(Lana Mara R. dos Santos, [email protected])
Aula 11a15: SageMath e Python
Programação linear (inteira mista) no SageMath
Escrevendo um PPL de minimização na forma matricial
min 2x1 + 4x2 + 3x3
s.a.
x1 + 2x2 ≥ 5
5x1 + x2 + 3x3 ≥ 8
x1 + 3x2 ≥ 3
x1 , x2 , x3 ≥ 0
MAT 475 – Tópicos em Matemática Aplicada
(Lana Mara R. dos Santos, [email protected])
Aula 11a15: SageMath e Python
Programação linear inteira (mista) no SageMath
. Alguns comandos úteis
O conjunto solução pode ser salvo em um vetor:
x_sol=p.get_values(x)
Especificar o número de casas decimais:
round(p.solve(),2)
round(p.get_values(x),2)
Selecionar o solver para resolver o MIP:
MixedIntegerLinearProgram(solver=’nomesolver’)
Exemplos de solver: GLPK, Coin, CPLEX, Gurobi
(Alguns comandos são especı́ficos do solver)
MixedIntegerLinearProgram(solver=’GLPK’)
Para resolver um MIP de minimização:
MixedIntegerLinearProgram(maximization=False)
MAT 475 – Tópicos em Matemática Aplicada
(Lana Mara R. dos Santos, [email protected])
Aula 11a15: SageMath e Python
Programação linear inteira (mista) no SageMath
. Alguns comandos úteis
Seja o MIP:
..................................................................
p = MixedIntegerLinearProgram()
v = p.new_variable(nonnegative=True)
..................................................................
p.get_min(v)
p.get_min(v[1])
p.set_min(v[1],None)
p.set_max(v[1],6)
p.set_binary(v[3])
(p.polyhedron()).show()
dir(p)
retorna o valor mı́nimo das variáveis do vetor v
retorna o valor mı́nimo da variável v[1]
permite v[1] assumir qq valor real negativo
fixa o valor 6 como limitante superior para v[1]
fixe v[3] como binária
para exibir o poliedro(até 3D naturalmente)
Construtor de uma determinada função.
MAT 475 – Tópicos em Matemática Aplicada
(Lana Mara R. dos Santos, [email protected])
Aula 11a15: SageMath e Python
Programação linear inteira (mista) no SageMath
Dado o MIP:
..................................................................
p = MixedIntegerLinearProgram()
v = p.new_variable(nonnegative=True)
..................................................................
P5
Inserir a restrição:
i=0 vi ≤ 4
..................................................................
soma = p.sum(v[i] for i in xrange(5))
. . .p.add_constraint(soma,
. . . . . . . . . . . . . . . . . . . . . . . . . . .max=4)
....................................
P3
Inserir restrição: i=1 vi = 3
..................................................................
soma = p.sum(v[i] for i in xrange(1,4))
. . .p.add_constraint(soma,
. . . . . . . . . . . . . . . . . . . . . . . . . . .min=3,max=3)
....................................
Informações
. . . . . . . . . . . .sobre
. . . . . .as
. . .restrições:
.............................................
p.constraints() # lista de restriç~
oes
p.constraints(0) # primeira restriç~
ao
p.number_of_constraints()
#
número
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . de
. . . .restriç~
. . . . . . . . o. es
.........
MAT 475 – Tópicos em Matemática Aplicada
(Lana Mara R. dos Santos, [email protected])
Aula 11a15: SageMath e Python
Programação linear inteira (mista) no SageMath
. Exemplo:
Defina um vetor a com os coeficientes da
função objetivo. Seja n o número de
coordenadas de a.
min x1 + 2x2 + 3x3 + 4x4
s.a.
x1 + x2 + x3 + x4 ≥ 10
x3 + x4 = 4
xi ∈ {1, 2, 3, 4},
i = 1, . . . , 4.
Defina p um PPI e x um vetor de variáveis
inteiras.
P
Faça soma= n
i=1 ai xi e insira a restrição
soma ≥ 10.
P
Faça soma= n−1
i=2 xi e insira a restrição
soma = 4.
Para todo i, fixe o limitante superior
(upper bound) da variável xi em 3.
Seja x̂i , i = 1, ..., n, o conjunto solução do
PPI. Imprima [x̂i , i = 1, ..., n].
MAT 475 – Tópicos em Matemática Aplicada
(Lana Mara R. dos Santos, [email protected])
Aula 11a15: SageMath e Python
Programação linear inteira (mista) no SageMath
. Exemplo:
min x1 + 2x2 + 3x3 + 4x4
s.a.
x1 + x2 + x3 + x4 ≥ 10
x3 + x4 = 4
xi ∈ {1, 2, 3, 4},
i = 1, . . . , 4.
MAT 475 – Tópicos em Matemática Aplicada
(Lana Mara R. dos Santos, [email protected])
Aula 11a15: SageMath e Python
Programação linear inteira (mista) no SageMath
Exemplo:
Defina os seguintes elementos:
a = [1, 2, −3, 4], b = ((1, 2, 3, 0), (4, 3, 0, 6)), c = (10, 4).
Defina um PI de minimização e um vetor de variáveis inteiras w.
Pn
Defina a função objetivo i=1 ai wi , em que n = |a|.
Defina as restrições:
Pn
b1i wi = c1
Pi=1
n
i=1 b2i wi ≤ c2
Resolva o PPI
Imprima o valor ótimo e os valores das variáveis não nulas.
MAT 475 – Tópicos em Matemática Aplicada
(Lana Mara R. dos Santos, [email protected])
Aula 11a15: SageMath e Python
Programação linear inteira (mista) no SageMath
Escrevendo um PLI de forma mais genérica:
MAT 475 – Tópicos em Matemática Aplicada
(Lana Mara R. dos Santos, [email protected])
Aula 11a15: SageMath e Python
Programação linear inteira (mista) no SageMath
Problema (tutoria): Considere 5 turmas de 3 disciplinas (MAT0, MAT1 e
MAT2) distribuı́das em um dos possı́veis 5 horários (0-4). Um conjunto de 3
tutores (João, Maria, José) com os seguintes horários livres e disciplinas que
podem ministrar. As tabelas exibem os dados dos tutores (horários livres e
disciplinas que podem ministrar) e das turmas (horário e disciplina).
Tutor
Disponibilidade
MAT
João
Maria
José
0, 1, 3
0, 2, 3
1, 2
0, 1, 2
1, 2
0, 1
Turma
1
2
3
4
5
Disciplina
Horário
0
0
0
1
1
2
1
0
2
3
Escreva um trecho de código para gerar uma lista tutorTurma em que
cada elemento i é o conjunto de tutores que podem ministrar a turma i.
Imprima em cada linha cada elemento de tutorTurma.
MAT 475 – Tópicos em Matemática Aplicada
(Lana Mara R. dos Santos, [email protected])
Aula 11a15: SageMath e Python
Programação linear inteira (mista) no SageMath
.........................................................................................
Tutor=(’Jo~
ao’,’Maria’,’José’)
discipTutor=(set([0,1,2]), set([1,2]),set([0,1])) #disciplina_tutor
disponiTutor=((0,1,3),(0,2,3),(1,2)) #horarios disponı́veis
dadosTurma=((0,0),(0,1),(1,2),(1,0),(2,3)) #turma=disciplina,horário
ntutor,nturma=len(Tutor), len(dadosTurma)
ndisc,nhora=3,4
tutorTurma=[]
for j in range(nturma):
linha=set([])
for i in range(ntutor):
if dadosTurma[j][0] in discipTutor[i] and dadosTurma[j][1] in disponiTutor[i]:
linha = linha.union([i])
tutorTurma= tutorTurma + [linha]
print "Tutores que podem ministrar as turmas:\n"
for i in range(nturma):
print "Turma_",i,":",
for j in tutorTurma[i]:
print Tutor[j],
print ""
.........................................................................................
MAT 475 – Tópicos em Matemática Aplicada
(Lana Mara R. dos Santos, [email protected])
Aula 11a15: SageMath e Python
Programação linear inteira (mista) no SageMath
. Bibliotecas de um especı́fico solver
Seja o MIP:
..................................................................
p = MixedIntegerLinearProgram(solver = "GLPK")
v = p.new_variable(nonnegative=True)
..................................................................
p.solver_parameter("timelimit", 60)
# tempo máximo: 60s
p.get_relative_objective_gap()
# gap
MAT 475 – Tópicos em Matemática Aplicada
(Lana Mara R. dos Santos, [email protected])
Aula 11a15: SageMath e Python
Programação linear inteira (mista) no SageMath
import datetime
p = MixedIntegerLinearProgram(solver=’GLPK’)
v = p.new_variable(integer=True, nonnegative=True)
coeff,coefb=(1,5,3),(6,8,19)
A=([1,2,-3],[3,-1,1],[2,2,3])
soma=0
for i in range(1,4): soma+=coeff[i-1]*v[i]
Saı́da:
p.set_objective(soma)
v_1 = 0.0
for i in range(1,4):
soma=0
v_2 = 6.0
for j in range(1,4):
v_3 = 2.0
soma+=A[i-1][j-1]*v[j]
zbest= 36.0
p.add_constraint(soma, max=coefb[i-1])
p.solver_parameter("timelimit", 60)
gap = 2.78
timeini = datetime.datetime.now()
bestbound = 37.0
p.solve()
timefim = datetime.datetime.now()
time = 0:00:00.000138
v = p.get_values(v)
for i in range(1,4): print "v_"+str(i),"=", round(v[i],2)
print "zbest=", p.get_objective_value()
print "gap = ", round(100* p.get_relative_objective_gap(),2)
print "bestbound = ", p.best_known_objective_bound()
print "time = ",timefim-timeini
Download