Na nossa quarta aula de métodos computacionais discutimos Noções de Programação Orientada a Objeto. Esses são os slides usados em sala.
Abaixo temos os exemplos apresentados em sala de aula:
Exemplo de Classes
Exemplo de encapsulamento
Exemplo de sobrecarga de operadores
Exemplo de polimorfismo
Exemplos de iteradores
Exemplos de geradores
Exemplo de herança
Exemplo de classe abstrata
Referências Adicionais para essa aula:
1. Usuários de Python podem ter interesse em olhar:
Think Python - Allen Downey
2. Usuários de C++ podem ter interesse em olhar:
Think C++
3. Usuários de Java podem ter interesse em olhar:
Intro to Java Programming
Soluções de exercícios
Exercício 5 (a):
M sets
Exercício 5 (b):
Julia sets
Exercício 6:
Alocação de carteiras
Exercício 7:
Círculos
Search This Blog
Saturday, March 30, 2019
Tuesday, March 26, 2019
Aula 3 de Métodos Computacionais em Economia (2019) - Recursão
Na nossa terceira aula de métodos computacionais discutimos recursões. Esses são os slides usados em sala.
Abaixo temos os exemplos apresentados em sala de aula:
Implementações da sequencia de Fibonacci
Implementações do fatorial de um número
Solução da Torre de Hanoi
Referências:
Think recursively - Eric S. Roberts
Persian Recursion Anne M. Burns Mathematics Magazine Vol. 70, No. 3 (Jun., 1997), pp. 196-199
The Algorithmic Beauty of Plants - Przemyslaw Prusinkiewicz and Aristid Lindenmayer (1991)
Introduction to recursive programming - Manuel Rubio Sanchez
Mathematical puzzles and diversions (Volume 2) - Martin Gardner
Referências Adicionais para essa aula:
1. Usuários de Python podem ter interesse em olhar:
Think Python - Allen Downey: Capítulo 5.
2. Usuários de C++ podem ter interesse em olhar:
Think C++: Capítulo 4.
Soluções da série de exercícios
Observação: Vários dos exercícios abaixo usam a idéia de Turtle Graphics discutida aqui.
Algoritmo de Euclides [Questão 5 dos slides]
Árvores usando recursão [Questão 6 dos slides]
Pinturas de Mondrian usando recursão [Questão 7 dos slides]
Sierpinski Gasket [Questão 8]
Ilhas de Koch [Questão 9(a)]
Ilhas de Koch 2 [Questão 9(b)]
Gosper Hexagonal Curve [Questão 9(c)]
L-systems [Questão 9(d)]
Tree OL Systems 2 [Questão 9(e)]
Tree OL Systems [Questão 9(f)]
Tree OL Systems [Questão 9(g)]
Tree OL Systems [Questão 9(g) - solução 2]
Tree OL Systems [Questão 9(i)]
Tree OL Systems [Questão 9(m)]
Tree OL Systems [Questão 9(o)]
Tree OL Systems [Questão 9(r)]
Tree OL Systems [Questão 9(s)]
Como implementar persian recursions [Questão 10(a) e 10(b)]
Triangulo de Sierpinski [Questão 11(a)]
Curva de Hilbert [Questão 11(b)]
Árvore binária [Questão 11(c)]
Tabuleiro [Questão 11(d)]
Combinações no jogo de basquete [Questão 11(e)]
Soma de bits [Questão 11(f)]
Números de Catalan [Questão 11(g)]
Números de Catalan [Questão 11(g)]
Árvore binária [Questão 11(h)]
Pirâmides [Questão 11(i)]
John-Mary [Questão 11(j)]
Abaixo temos os exemplos apresentados em sala de aula:
Implementações da sequencia de Fibonacci
Implementações do fatorial de um número
Solução da Torre de Hanoi
Referências:
Think recursively - Eric S. Roberts
Persian Recursion Anne M. Burns Mathematics Magazine Vol. 70, No. 3 (Jun., 1997), pp. 196-199
The Algorithmic Beauty of Plants - Przemyslaw Prusinkiewicz and Aristid Lindenmayer (1991)
Introduction to recursive programming - Manuel Rubio Sanchez
Mathematical puzzles and diversions (Volume 2) - Martin Gardner
Referências Adicionais para essa aula:
1. Usuários de Python podem ter interesse em olhar:
Think Python - Allen Downey: Capítulo 5.
2. Usuários de C++ podem ter interesse em olhar:
Think C++: Capítulo 4.
Soluções da série de exercícios
Observação: Vários dos exercícios abaixo usam a idéia de Turtle Graphics discutida aqui.
Algoritmo de Euclides [Questão 5 dos slides]
Árvores usando recursão [Questão 6 dos slides]
Pinturas de Mondrian usando recursão [Questão 7 dos slides]
Sierpinski Gasket [Questão 8]
Ilhas de Koch [Questão 9(a)]
Ilhas de Koch 2 [Questão 9(b)]
Gosper Hexagonal Curve [Questão 9(c)]
L-systems [Questão 9(d)]
Tree OL Systems 2 [Questão 9(e)]
Tree OL Systems [Questão 9(f)]
Tree OL Systems [Questão 9(g)]
Tree OL Systems [Questão 9(g) - solução 2]
Tree OL Systems [Questão 9(i)]
Tree OL Systems [Questão 9(m)]
Tree OL Systems [Questão 9(o)]
Tree OL Systems [Questão 9(r)]
Tree OL Systems [Questão 9(s)]
Como implementar persian recursions [Questão 10(a) e 10(b)]
Triangulo de Sierpinski [Questão 11(a)]
Curva de Hilbert [Questão 11(b)]
Árvore binária [Questão 11(c)]
Tabuleiro [Questão 11(d)]
Combinações no jogo de basquete [Questão 11(e)]
Soma de bits [Questão 11(f)]
Números de Catalan [Questão 11(g)]
Números de Catalan [Questão 11(g)]
Árvore binária [Questão 11(h)]
Pirâmides [Questão 11(i)]
John-Mary [Questão 11(j)]
Aula 2 de Métodos Computacionais em Economia (2019) - Coleções Básicas de Dados
Soluções de exercícios
Como implementar o produto de matrizes? [Considere apenas a solução convencional nessa resposta. As outras serão discutidas mais para frente no curso]
Como fatorar um número inteiro?
Thursday, March 21, 2019
Aula 1 de Métodos Computacionais em Economia (2019): Noções de Programação Estruturada
Nós tivemos nossa primeira aula de método computacionais. Esses são os
slides usados em sala de aula.
Abaixo temos os exemplos apresentados em sala de aula:
Exemplo de Controle de Fluxo usando Condicionais
Exemplo do uso do Loop For em um programa computacional
Exemplo do uso do Loop While em um programa computacional
Referências Adicionais para essa aula:
1. Usuários de Python podem ter interesse em olhar:
Think Python - Allen Downey
2. Usuários de C++ podem ter interesse em olhar:
Think C++
Alguns links externos relacionados com essa aula:
Qual o propósito de incluir "if __name__ == '__main__':" em python?
Computação Humana
Page Rank
Melhores livros de Python
Soluções das séries de exercício:
Questão 1
Questão 2
Questão 3
Questão 4
Questão 5
Questão 6
Questão 11 (a)
Questão 12
slides usados em sala de aula.
Abaixo temos os exemplos apresentados em sala de aula:
Exemplo de Controle de Fluxo usando Condicionais
Exemplo do uso do Loop For em um programa computacional
Exemplo do uso do Loop While em um programa computacional
Referências Adicionais para essa aula:
1. Usuários de Python podem ter interesse em olhar:
Think Python - Allen Downey
2. Usuários de C++ podem ter interesse em olhar:
Think C++
Alguns links externos relacionados com essa aula:
Qual o propósito de incluir "if __name__ == '__main__':" em python?
Computação Humana
Page Rank
Melhores livros de Python
Soluções das séries de exercício:
Questão 1
Questão 2
Questão 3
Questão 4
Questão 5
Questão 6
Questão 11 (a)
Questão 12
Sobre a solução de exercícios no Curso de Metodos Computacionais em 2019
Considere as informações abaixo sobre a solução de exercícios que serão usados para a avaliação no nosso curso:
0) Os exercícios a serem resolvidos são individuais e estarão disponíveis juntos com os slides que serão publicados aqui nesse site depois da aula.
1) Os exercícios que serão usados para avaliação são indicados por uma estrela.
2) Se você escolher um exercício, você envia um email para a turma (seus colegas e eu) avisando que escolheu aquele exercício. No mesmo momento, você atualiza a planilha do google.
3) Todos os exercícios devem ser resolvidos e publicados no prorum.com. Você precisará criar uma conta no site para perguntar e responder. Você pode usar o seu nome ou um apelido que você criar (nesse caso, você deve avisar ao seu professor que manterá em sigilo). Se você usar o seu nome, suas perguntas, respostas e comentários ficarão públicos. Eu não vejo problema nenhum nisso, visto que todos estão no curso para aprender. Entretanto, alguém pode manter seu nome em sigilo se desejar. O nome público do site e da planilha devem ser os mesmo.
4) Como fazer a pergunta e respondê-la?
a) Primeiro você deverá fazer a pergunta.
b) Depois que você fizer a pergunta, aparecerá uma aba para resposta, onde você incluirá a sua resposta.
c) Quando terminar de responder a sua pergunta, inclua o link na planilha editável mencionada acima.
d) O PRorum aceita edição em latex. Use e explore isso. Evite usar editores de equações bizarros como aqueles usados no Word. Se você nunca usou, aproveite essa oportunidade para aprender. As dicas estão nesse link:
http://prorum.com/?qa=213/como-escrever-equacoes-matematicas-usar-latex-no-prorum-com&show=213#q213
4) Os exercícios devem ser auto-contidos para permitir que qualquer pessoa, estudante, ex-aluno, aluno de outro curso (por exemplo, alguns dos exercícios desse curso também são usados no meu curso de Métodos Computacionais ou Economia Quantitativa) possa acessa-lo sem ter que acessar os slides, livro ou outro material específico do curso. Lembre que é sempre difícil entender códigos ou resoluções de outros colegas. Por isso, seja cuidadoso e lembre que esse material que você está gerando contribui para a metade de sua nota no curso e será provavelmente usado por muitos anos e por muitos colegas.
5) Foi combinado em sala que cada estudante resolveria 3 exercícios e comentaria outros três de outros colegas.
6) Sugere-se que cada aluno se planeje para resolver pelo menos um exercício estrela por mês. Essa política evita o problema de deixar todos os exercícios para o final. Por favor, não deixe para resolver todos os exercícios na última semana. Essa postura gera prejuízos em pelo menos três dimensões:
a) Quando isso ocorre, a solução dos exercícios apresentam menor qualidade.
b) Dificulta a vida de seu colega que precisa comentar seu exercício.
7) Dificulta a vida de seu professor que precisa corrgir seu exercício.
8) Os comentários devem ser precisos. Não use "Ótima solução"! Use "Ótima solução, pois você explorou..." Ou então "Faltou na solução XXX". "Sua solução pode ser melhorada se você considerar os seguintes aspectos."
9) Alguns exemplos de boas soluções em versões anteriores do curso:
http://prorum.com/?qa=2448/como-posso-testar-um-intervalo-possui-numeros-perfeitos&show=2448#q2448
http://prorum.com/?qa=2414/implementar-extrair-informacoes-conectividade-aciclicidade&show=2414#q2414
http://prorum.com/?qa=2609/como-prever-corretamente-os-digitos-da-base-de-dados-mnist&show=2609#q2609
0) Os exercícios a serem resolvidos são individuais e estarão disponíveis juntos com os slides que serão publicados aqui nesse site depois da aula.
1) Os exercícios que serão usados para avaliação são indicados por uma estrela.
2) Se você escolher um exercício, você envia um email para a turma (seus colegas e eu) avisando que escolheu aquele exercício. No mesmo momento, você atualiza a planilha do google.
3) Todos os exercícios devem ser resolvidos e publicados no prorum.com. Você precisará criar uma conta no site para perguntar e responder. Você pode usar o seu nome ou um apelido que você criar (nesse caso, você deve avisar ao seu professor que manterá em sigilo). Se você usar o seu nome, suas perguntas, respostas e comentários ficarão públicos. Eu não vejo problema nenhum nisso, visto que todos estão no curso para aprender. Entretanto, alguém pode manter seu nome em sigilo se desejar. O nome público do site e da planilha devem ser os mesmo.
4) Como fazer a pergunta e respondê-la?
a) Primeiro você deverá fazer a pergunta.
b) Depois que você fizer a pergunta, aparecerá uma aba para resposta, onde você incluirá a sua resposta.
c) Quando terminar de responder a sua pergunta, inclua o link na planilha editável mencionada acima.
d) O PRorum aceita edição em latex. Use e explore isso. Evite usar editores de equações bizarros como aqueles usados no Word. Se você nunca usou, aproveite essa oportunidade para aprender. As dicas estão nesse link:
http://prorum.com/?qa=213/como-escrever-equacoes-matematicas-usar-latex-no-prorum-com&show=213#q213
4) Os exercícios devem ser auto-contidos para permitir que qualquer pessoa, estudante, ex-aluno, aluno de outro curso (por exemplo, alguns dos exercícios desse curso também são usados no meu curso de Métodos Computacionais ou Economia Quantitativa) possa acessa-lo sem ter que acessar os slides, livro ou outro material específico do curso. Lembre que é sempre difícil entender códigos ou resoluções de outros colegas. Por isso, seja cuidadoso e lembre que esse material que você está gerando contribui para a metade de sua nota no curso e será provavelmente usado por muitos anos e por muitos colegas.
5) Foi combinado em sala que cada estudante resolveria 3 exercícios e comentaria outros três de outros colegas.
6) Sugere-se que cada aluno se planeje para resolver pelo menos um exercício estrela por mês. Essa política evita o problema de deixar todos os exercícios para o final. Por favor, não deixe para resolver todos os exercícios na última semana. Essa postura gera prejuízos em pelo menos três dimensões:
a) Quando isso ocorre, a solução dos exercícios apresentam menor qualidade.
b) Dificulta a vida de seu colega que precisa comentar seu exercício.
7) Dificulta a vida de seu professor que precisa corrgir seu exercício.
8) Os comentários devem ser precisos. Não use "Ótima solução"! Use "Ótima solução, pois você explorou..." Ou então "Faltou na solução XXX". "Sua solução pode ser melhorada se você considerar os seguintes aspectos."
9) Alguns exemplos de boas soluções em versões anteriores do curso:
http://prorum.com/?qa=2448/como-posso-testar-um-intervalo-possui-numeros-perfeitos&show=2448#q2448
http://prorum.com/?qa=2414/implementar-extrair-informacoes-conectividade-aciclicidade&show=2414#q2414
http://prorum.com/?qa=2609/como-prever-corretamente-os-digitos-da-base-de-dados-mnist&show=2609#q2609
Curso de Métodos Computacionais em 2019
Como já discutido aqui, o curso de métodos computacionais nesse semestre será dividido em três partes: A primeira parte lida com tópicos básicos de programação estruturada e orientação a objeto. A segunda parte com projeto de algoritmos. A terceira parte foca em Aprendizagem de Máquinas e Deep Learning.
A pretensão básica do curso é que o bom estudante depois do curso terá habilidade de lidar com qualquer tópico considerado em aqui, mesmo que o tópico específico não tenha sido discutido em sala.
As versões anteriores desse curso, você pode encontrar: versão 2017, versão 2016 e versão 2018.
Por favor, dê uma olhada na lista de pré-requisitos (no final do post). Principalmente aquele que vêm do fundo do meu coração.
PARTE I - Noções de Programação
1) Introdução a programação estruturada
Aula 1
2) Coleções de dados
Aula 2
3) Recursões
Aula 3
4) Noções de programação orientada a objeto
Aula 4
5) Complexidade computacional
Aula 5
6) Pilhas e filas
Aula 6
Parte II - Projeto de algoritmos
1) Força bruta
Aula 7
2) Força bruta II - Busca exaustiva
Aula 8
3) Força bruta III - Busca exaustiva em grafos
Aula 9
4) Redução e conquista
Aula 10
5) Divisão e conquista
Aula 11
6) Transformação e conquista
Aula 12
7) Backtracking
Aula 13
8) Branch and Bound
Aula 14
9) Programação Dinâmica
Aula 15
10) Estratégias Gananciosas
Aula 16
11) Melhoria Iterativa
Aula 17
12) Quick Sort
Aula 18
13) Compromisso entre eficiência temporal e espacial
Aula 19
INTERLÚDIO
[Ferramentas]
1) Introdução aos Métodos de Monte Carlo
Aula 20
2) Análise numérica e otimização
[Atividade extra-classe]
Aula 21
2) Modelos baseados em agentes
Aula 22
PARTE III - Aprendizagem de Máquinas (Machine Learning)
1) Introdução a aprendizagem de máquinas
Aula 23
2) Modelos lineares de regressão (Modelos lineares de funções de base)
Aula 24
3) Modelos Bayesianos
Aula 25
4) Previsão (Big picture)
Aula 26
5) Modelos lineares regularizados
Aula 27
6) Modelos lineares de classificação
Aula 28
7) Árvores de decisão
Aula 29
8) Redes neurais e deep learning
Aula 30
8) Aprendizagem por reforço
Aula 31
9) Processamento de linguagem natural
Aula 32
AVALIAÇÂO
Haverá duas avaliações: Uma prova que inclui partes I e II do curso e exercícios individuais que abordem tópicos do curso inteiro. Como resolver exercícios?
REFERÊNCIAS
Existe uma lista gigante de referências por tópico. Existe um resumo dessas referências aqui. Se você quiser uma lista mais detalhada, dê uma olhada nas aulas individuais da nossa versão anterior do curso aqui.
PERGUNTAS FREQUENTES
Esse é um curso para aprender métodos computacionais para econometria?
Não, mas vários tópicos tangenciam problemas similares considerados em econometria. Normalmente, um curso usual de Machine Learning incluiria um tópico com noções básicas de modelos de regressão, mas como esse curso está no programa de economia não faz muito sentido ficar explorando isso. Adicionalmente, como já mencionado, se o estudante aprende bem as partes I e II do curso, ele terá habilidade de lidar com qualquer tópico considerado em aqui. Além disso, as técnicas utilizadas para replicar os exemplos do Wooldridge em Python são triviais se você aprender o conteúdo do curso.
Qual a linguagem que será usada no curso?
De uma forma geral o curso não deve focar em nenhuma linguagem específica. Entretanto, nesse semestre a maioria dos exemplos será em Python, embora você pode encontrar exemplos em R, Matlab, C++, Java desenvolvidos em versões anteriores do curso. A maioria dos exercícios da primeira parte não dependerá especificamente de nenhuma linguagem. Alguns exercícios só poderão ser implementados em Python.
Quais os pre-requisitos para o curso?
Não temos pre-requisitos específicos, mas vários tópicos dependem de conhecimentos de Álgebra-Linear, Otimização e maturidade em matemática, estatística ou econometria equivalente a de um aluno de mestrado em economia de um bom programa.
FROM THE BOTTOM OF MY HEART (o pre-requisito mais importante):
De fato, um pre-requisito fundamental em qualquer curso que leciono é muita disposição para aprender e lidar com coisas novas para resolver novos problemas. Os estudantes devem ter ou desenvolver a capacidade de lidar com um problema novo que estende o material em sala de aula sem a ajuda do professor, tendo em mãos apenas as referências básicas. Essa habilidade muito comum em estudantes da engenharia infelizmente não é muito explorada em estudantes de economia.
Deixar a arrogância em casa para ser capaz de perceber que não sabemos tudo e que existem sempre pessoas com mais conhecimento em um determinado tópico que nós mesmos. Aproveitar desse fato para aprender com os colegas e com o professor àquelas dimensões mais restritas.
Esse é um curso OPTATIVO e lúdico desenhado para o estudante e o professor se divertirem. Se você não está muito motivado com o curso ou acha que o curso não o acrescentará muito e você pretende manter uma atitude negativa e passiva ao longo do curso, existem dezenas de cursos mais adequados para você no programa.
Não sou aluno do Programa de Doutorado em Economia. Eu posso fazer o curso?
Sim. Você pode entrar em contato com a secretária do Programa de Pós-Graduação em Economia da UnB e verificar a disponibilidade de vagas para matrícula como aluno especial.
Posso assistir como ouvinte?
Infelizmente a UnB não permite esse tipo de aluno.
HORÁRIO: TERÇAS E QUINTAS 10 AS 12
Subscribe to:
Posts (Atom)