• Nenhum resultado encontrado

Linguagem de Programação

N/A
N/A
Protected

Academic year: 2022

Share "Linguagem de Programação"

Copied!
49
0
0

Texto

(1)

Computadores e outros dispositivos eletrˆonicos program´aveis executam instru¸c˜oes ativando (ou desativando) determinadas partes em seus componentes. As instru¸c˜oes s˜ao comunidadas ao dispositivo por uma sequˆencia de zeros e uns (c´odigo bin´ario).

Uma linguagem de programa¸c˜ao ´e uma ponte entre a linguagem humana e a de m´aquina, mesclando conceitos de ambas.

As linguagens de programa¸c˜ao s˜ao classificadas em v´arios n´ıveis de acordo com sua proximidade com a linguagem humana.

Linguagens de baixo n´ıvel s˜ao mais pr´oximas da linguagem da m´aquina enquanto as de alto n´ıvel se aproximam da linguagem natural humana.

(2)

Uma linguagem de programa¸c˜ao pode sercompilada(traduzida para uma linguagem de m´aquina) ouinterpretada.

Uma linguagem interpretada n˜ao precisa ser compilada. Ela ´e lida por um programa que faz a tradu¸c˜ao para a linguagem de m´aquina.

Python´e uma linguagem de alt´ıssimo n´ıvel (VHLL – very high level language), interpretada, de c´odigo fonte aberto e dispon´ıvel para v´arios sistemas operacionais.

O interpretador doPython j´a vem instalado noLinux. Para windowsele est´a dispon´ıvel paradownloadem

http://www.python.org

OSageMath´e implementado principalmente emPython.

(3)

Python´e uma linguagemdinamicamente tipada. Isto quer dizer que n˜ao ´e preciso declarar as vari´aveis ou ou tipo delas. A forma como a vari´avel ´e usada no c´odigo identifica como ela ser´a armazenada.

A = 3 ´E identificada como inteira (tipoint) A = 3.0 ´E identificada como inteira (tipofloat) A = "tr^es" ´E identificada comostring

type(A) Para saber o tipo definido para a vari´avel

(4)

. coment´ ario

Tudo que estiver ap´os o s´ımbolo # em uma linha de comando do Python´e assumido como coment´ario.

Para comentar um bloco de comandos, coloque-o entre trˆes aspas simples.

#Coment´arios em python a=2 # a recebe 2 b=5

’’’in´ıcio bloco de coment´arios a=3

a=33 b=24 c=15

fim do bloco de coment´arios’’’

a+b

(5)

Opera¸c˜oes aritm´eticas:

8+3 adi¸c˜ao

8*3 multiplica¸c˜ao

8/3 divis˜ao de inteiros

8./3 divis˜ao de reais

8**3 potencia¸c˜ao

8**(1/3) radicia¸c˜ao

8%3 resto de divis˜ao

3*("na"+"da") 3x a concatena¸c˜ao de ’na’ com ’da’

Opera¸c˜oes booleanas:

a==b verifica se s˜ao iquais

a!=b oua<>b verifica se s˜ao diferentes

(6)

. Listas

Umalista´e uma sequˆencia de vari´aveis delimitada por colchetes. Pode conter tipos diferentes e pode ser alterada (pois ´emut´avel).

list=[4,"nada", 3.0] define a lista listcom 3 elementos.

list[0] exibe o primeiro elemento da lista.

list[-2] exibe o pen´ultimo elemento da lista.

len(list) informa o tamanho da lista.

list+[3,5] concatenalistcom a lista[3,5].

list[1]=7 insere o valor 7 na posi¸c˜ao 1 da lista.

del list[1] remove o elemento da posi¸c˜ao 2 delist.

list.index(4) indica a posi¸c˜ao que o valor ”4”est´a na lista.

Se tiver mais de uma posi¸c˜ao com mesmo valor, indica a primeira ocorrˆencia.

(7)

. Listas: pseudo-matriz

(8)

. Tupla

Uma tupla´e uma sequˆencia de vari´aveis delimitada por parˆenteses.

Assim como em uma lista, pode conter tipos diferentes. No entanto, uma tupla n˜ao pode ser alterada depois de criada (pois ´eimut´avel).

Os comandos de acesso e manipula¸c˜ao de tuplas s˜ao anal´ogas aos usados para listas.

tup=(4,"nada", 3.0) define a tuplatupcom 3 elementos.

tup[1] acessa o segundo elemento da tuplatup.

matriz=((1,2),(3,4)) cria uma pseudo-matriz 2x2

matriz[0][1] exibe o elemento da posi¸c˜ao 1x2 de matriz

(9)

. set

Conjuntos s˜ao definidos com a sintaxeset([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

(10)

. Set

SageMathtem sua pr´opria fun¸c˜ao conjunto (Set) que al´em de incorporar as propriedades da Teoria de conjuntos, tem algumas fun¸c˜oes 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\}

(11)

. Range

A fun¸c˜aorange(a, b)gera uma lista de uma sequˆencia de n´umeros 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˜ao 4.

(12)

. For

Na maioria das linguagens de programa¸c˜ao, o comandoforrealiza uma itera¸c˜ao percorrendo uma sequˆencia de n´umeros inteiros de uma progress˜ao aritm´etica.

EmPythona itera¸c˜ao ´e feita percorrendo os itens de uma sequˆencia 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

(13)

N˜ao ´e necess´ario utilizar{ }para delimitar um bloco de comandos ou endpara finalizar uma estrutura.

N˜ao existe um delimitador espec´ıfico para blocos de c´odigo. A delimita¸c˜ao ´e feita pela indenta¸c˜ao( teclatabou 4 espa¸cos).

. . . . 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´a alinhado com o comandofor(e, portanto, o valor deineste caso n˜ao ´e iterado percorrendo a sequˆencia de inteiros emrange(1,3)). Como o ´ultimo valor parai´e 2, foi impressog_2.

(14)

. Exemplo:

. . . . matriz = ((1,0,0),(0,1,0),(0,0,1))

for i in range(len(matriz)):

for j in range(len(matriz)):

print matriz[i][j], print ""

Resultado:

1 0 0 0 1 0 0 0 1

. . . .

(15)

Exemplos de formata¸c˜ao destrings:

a,b,c=3.1415,5,’n´umero’ atribui, respectivamente, valores para as vari´aveisa,bec.

print "a=%f" %a imprime: a={valor da float(f) a}

print "b=%d" %b imprime: b={valor do inteiro(d) b}

print "c=%s" %s imprime: c={valor da string(s) c}

print ’%f ´e %s’ %(a,c) imprime: 3.1416 ´e um n´umero print ’%.2f’ %a imprime o float com 2 casas decimais print ’%6.2f’ %a imprime usando 6 espa¸cos no total

(insere espa¸co em branco se preciso).

\n pula uma linha

\t acrescenta espa¸co de tabula¸c˜ao

(16)
(17)

. if–elif–else

A estrutura geral de uma condicionaliftem a seguinte sintaxe:

if condi¸c~ao:

# comandos ...

elif condi¸c~ao:

# comandos ...

else:

# comandos ...

#Exemplo

var = [-2, 4, 5, 6, 0, -3, 4, 8, 3]

for i in var:

if i < 0:

print "Valor negativo: %d" % i elif i == 0:

print "zero na posi¸c~ao", var.index(0) else:

print "Valor positivo: %d" % i

(18)

. M´ odulo:

Existemm´odulosque podem ser inseridos no c´odigo.

Para importar um m´odulo basta colocar no in´ıcio do c´odigo:

import nome_do_m´odulo Exemplos:

import datetime# para marcar tempo import random# para gerar n´umeros aleat´orios Para conhecer as fun¸c˜oes de um m´odulo basta digitar:

help(nome_do_modulo).

(19)

. Exemplo

Procedimento para gerar uma pseudo-matriz (lista de listas) aleat´oria:

. . . . 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)

. . . .

(20)

OSageMath´e umsoftwarelivre e de c´odigo aberto de matem´atica que engloba softwares de v´arias ´areas, tais como, ´algebra, geometria, teoria dos n´umeros, an´alise num´erica, criptografia, computa¸c˜ao simb´olica e num´erica.

Criado em 2005 com o objetivo de ser uma alternativa gratuita a softwarescomerciais comoMaple, Mathematicaematlab.

OSageMathutiliza a linguagem de programa¸c˜aoPython. No entanto, n˜ao ´e preciso saberPythonpara usar a maioria dos recursos do programa.

O conhecimento necess´ario dePythonpara resolver umPPLou PPLI noSageMath´e proporcional `a complexidade do problema.

(21)

Endere¸co: http://www.sagemath.org

Para usar oSageMath´e preciso um navegador de internet como ambiente de trabalho.

Para usar nowindows´e preciso instalar uma m´aquina virtual.

Online:

https://cloud.sagemath.com http://sagecell.sagemath.org

(22)

http://sagecell.sagemath.org

(23)

http://sagecell.sagemath.org

(24)

Suponha que se queira resolver o seguintePPL:

max x1+ 4x2+ 3x3 s.a. x1+ 2x2≤5

5x1+ 5x3≤8 x1, x2, x3≥0

(25)

Suponha que se queira resolver o seguintePPL:

max x1+ 4x2+ 3x3

s.a. x1+ 2x2≤5 5x1+ 5x3≤8

x1, x2, x3≥0

Crie umMixedIntegerLinearProgram (por padr˜ao, o problema ´e de maximiza¸c˜ao)

(26)

Suponha que se queira resolver o seguintePPL:

max x1+ 4x2+ 3x3

s.a. x1+ 2x2≤5 5x1+ 5x3≤8

x1, x2, x3≥0

crie um vetor de vari´aveisx:

(n˜ao ´e preciso definir o tamanho do vetor)

(27)

Suponha que se queira resolver o seguintePPL:

max x1+ 4x2+ 3x3

s.a. x1+ 2x2≤5 5x1+ 5x3≤8

x1, x2, x3≥0

adicione a fun¸c˜ao objetivo do PPL:

(28)

Suponha que se queira resolver o seguintePPL:

max x1+ 4x2+ 3x3

s.a. x1+ 2x2≤5 5x1+ 5x3≤8

x1, x2, x3≥0

adicione as restri¸c˜oes do PPL:

(29)

Suponha que se queira resolver o seguintePPL:

max x1+ 4x2+ 3x3 s.a. x1+ 2x2≤5

5x1+ 5x3≤8 x1, x2, x3≥0

resolva o PPL:

(30)

Suponha que se queira resolver o seguintePPL:

max x1+ 4x2+ 3x3

s.a. x1+ 2x2≤5 5x1+ 5x3≤8

x1, x2, x3≥0

z= 14.8

(31)

Suponha que se queira resolver o seguintePPL:

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

Exibir solu¸c˜ao:

(32)

Suponha que se queira resolver o seguintePPL:

max x1+ 4x2+ 3x3

s.a. x1+ 2x2≤5 5x1+ 5x3≤8

x1, x2, x3≥0

(33)

Suponha que se queira resolver o seguintePI:

max x1+ 4x2+ 3x3 s.a. x1+ 2x2≤5

5x1+ 5x3≤8 x1, x2, x3∈Z+

(34)

Suponha que se queira resolver o seguintePI:

max x1+ 4x2+ 3x3

s.a. x1+ 2x2≤5 5x1+ 5x3≤8 x1, x2, x3∈Z+

z= 11 x1= 0 x2= 2 x3= 1

O que muda ´e a declara¸c˜ao das vari´aveisx.

(35)

Suponha que se queira resolver o seguintePB:

max x1+ 4x2+ 3x3 s.a. x1+ 2x2≤5

5x1+ 5x3≤8 x1, x2, x3∈N

(36)

Suponha que se queira resolver o seguintePB:

max x1+ 4x2+ 3x3

s.a. x1+ 2x2≤5 5x1+ 5x3≤8 x1, x2, x3∈N

z= 7 x1= 0 x2= 1 x3= 1

O que muda ´e a declara¸c˜ao das vari´aveisx.

(37)

Escrevendo o problema na forma matricial

max x1+ 4x2+ 3x3 s.a. x1+ 2x2≤5

5x1+ 5x3≤8 x1, x2, x3≥0

(38)

Escrevendo um PPL de minimiza¸c˜ao na forma matricial

min 2x1+ 4x2+ 3x3

s.a.

x1+ 2x2≥5 5x1+x2+ 3x3≥8 x1+ 3x2≥3 x1, x2, x3≥0

(39)

. Alguns comandos ´ uteis

O conjunto solu¸c˜ao pode ser salvo em um vetor:

x_sol=p.get_values(x) Especificar o n´umero de casas decimais:

round(p.solve(),2) round(p.get_values(x),2) Selecionar osolver para resolver o MIP:

MixedIntegerLinearProgram(solver=’nomesolver’) Exemplos desolver: GLPK, Coin, CPLEX, Gurobi (Alguns comandos s˜ao espec´ıficos do solver) MixedIntegerLinearProgram(solver=’GLPK’) Para resolver um MIP de minimiza¸c˜ao:

MixedIntegerLinearProgram(maximization=False)

(40)

. Alguns comandos ´ uteis

Seja o MIP:

. . . . p = MixedIntegerLinearProgram()

v = p.new_variable(nonnegative=True)

. . . . p.get_min(v) retorna o valor m´ınimo das vari´aveis do vetorv p.get_min(v[1]) retorna o valor m´ınimo da vari´avelv[1]

p.set_min(v[1],None) permitev[1]assumir qq valor real negativo p.set_max(v[1],6) fixa o valor 6 como limitante superior parav[1]

p.set_binary(v[3]) fixev[3]como bin´aria

(p.polyhedron()).show() para exibir o poliedro(at´e 3D naturalmente) dir(p) Construtor de uma determinada fun¸c˜ao.

(41)

Dado o MIP:

. . . . p = MixedIntegerLinearProgram()

v = p.new_variable(nonnegative=True)

. . . . Inserir a restri¸c˜ao: P5

i=0vi≤4

. . . . soma = p.sum(v[i] for i in xrange(5))

p.add_constraint(soma, max=4)

. . . . Inserir restri¸c˜ao: P3

i=1vi= 3

. . . . soma = p.sum(v[i] for i in xrange(1,4))

p.add_constraint(soma, min=3,max=3)

. . . . Informa¸. . . .c˜oes sobre as restri¸c˜oes:

p.constraints() # lista de restri¸c~oes p.constraints(0) # primeira restri¸c~ao

p.number_of_constraints() # n´umero de restri¸c~oes . . . .

(42)

. Exemplo:

min x1+ 2x2+ 3x3+ 4x4

s.a.

x1+x2+x3+x4≥10 x3+x4= 4

xi∈ {1,2,3,4}, i= 1, . . . ,4.

Defina um vetoracom os coeficientes da fun¸c˜ao objetivo. Sejano n´umero de coordenadas dea.

Definapum PPI exum vetor de vari´aveis inteiras.

Fa¸casoma=Pn

i=1aixi e insira a restri¸c˜ao soma≥10.

Fa¸casoma=Pn−1

i=2 xi e insira a restri¸c˜ao soma= 4.

Para todoi, fixe o limitante superior (upper bound) da vari´avelxiem 3.

Sejaxˆi, i= 1, ..., n, o conjunto solu¸c˜ao do PPI. Imprima[ˆxi, i= 1, ..., n].

(43)

. Exemplo:

min x1+ 2x2+ 3x3+ 4x4

s.a.

x1+x2+x3+x4≥10 x3+x4= 4

xi∈ {1,2,3,4}, i= 1, . . . ,4.

(44)

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¸c˜ao e um vetor de vari´aveis inteirasw.

Defina a fun¸c˜ao objetivoPn

i=1aiwi, em quen=|a|.

Defina as restri¸c˜oes:

Pn

i=1b1iwi=c1

Pn

i=1b2iwi≤c2

Resolva oPPI

Imprima o valor ´otimo e os valores das vari´aveis n˜ao nulas.

(45)

Escrevendo um PLI de forma mais gen´erica:

(46)

Problema (tutoria): Considere 5 turmas de 3 disciplinas (MAT0, MAT1 e MAT2) distribu´ıdas em um dos poss´ıveis 5 hor´arios (0-4). Um conjunto de 3 tutores (Jo˜ao, Maria, Jos´e) com os seguintes hor´arios livres e disciplinas que podem ministrar. As tabelas exibem os dados dos tutores (hor´arios livres e disciplinas que podem ministrar) e das turmas (hor´ario e disciplina).

Tutor Disponibilidade MAT Jo˜ao 0, 1, 3 0, 1, 2

Maria 0, 2, 3 1, 2

Jos´e 1, 2 0, 1

Turma 1 2 3 4 5

Disciplina 0 0 1 1 2

Hor´ario 0 1 2 0 3

Escreva um trecho de c´odigo para gerar uma listatutorTurmaem que cada elementoi´e o conjunto de tutores que podem ministrar a turmai.

Imprima em cada linha cada elemento detutorTurma.

(47)

. . . .

Tutor=(’Jo~ao’,’Maria’,’Jos´e’)

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´ario 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 ""

. . . .

(48)

. 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´aximo: 60s p.get_relative_objective_gap() # gap

(49)

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]

p.set_objective(soma) for i in range(1,4):

soma=0

for j in range(1,4):

soma+=A[i-1][j-1]*v[j]

p.add_constraint(soma, max=coefb[i-1]) p.solver_parameter("timelimit", 60) timeini = datetime.datetime.now() p.solve()

timefim = datetime.datetime.now() 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

Sa´ıda:

v_1 = 0.0 v_2 = 6.0 v_3 = 2.0 zbest= 36.0 gap = 2.78 bestbound = 37.0 time = 0:00:00.000138

Referências

Documentos relacionados

Direção-Geral de Alimentação e Veterinária – DSMDS Última revisão do texto em Abril de 2013.. Página 2

“Ao receber o grau de bacharel em Ciências Contábeis,// juro, perante Deus e a sociedade,// exercer a minha profissão com dedicação,// responsabilidade e competência,//

Precisamos de uma ferramenta que fa¸ ca a convers˜ ao de uma linguagem que est´ a em um n´ıvel de abstra¸ c˜ ao mais alto (pr´ oximo ` a linguagem natural) a um n´ıvel de

Ao longo do meu estágio deu para perceber que a Termalistur E.E.M., mesmo sendo uma empresa pública, não é propriamente pequena e trabalha todos os dias afinco para conseguir

Devido à sua vasta aplicação e pela bacia não apresentar informações a respeito de modelagem, este estudo teve como objetivo realizar a calibração e a validação do modelo

No sentido de reverter tal situação, a realização deste trabalho elaborado na disciplina de Prática enquanto Componente Curricular V (PeCC V), buscou proporcionar as

Ainda que tal número não seja exato, pode-se ter uma idéia da complexidade cultural e lingüística do Brasil indígena, bem como do porquê do tupi ter servido

Ebert Daniel M35-39 Eintracht Frankfurt Triathlon DEU (Germany). Ewald Björn M35-39