Índice
- O Curso R
-
- Tutoriais
-
- Apostila
-
- 6. Testes de Hipótese (em preparação!)
- Exercícios
-
- Material de Apoio
-
- Área dos Alunos
-
- Cursos Anteriores
-
IBUSP
Outras Insitutições
Linques
Visitantes
Outras Insitutições
Mestrando em Ecologia, meu interesse é na estrutura de comunidades vegetais, principalmente se existe estruturação na distribuição de caracteres funcionais em uma floresta.
Meus exercícios resolvidos Meus Exercícios
Pong foi um jogo que marcou a história, ele foi o primeiro comercializado para o público geral, em larga escala, com sucesso. Sua criação foi o início da era da indústria de jogos eletrônicos. Antes disso, jogos eram em geral trechos de código que programadores compartilhavam entre si por diversão ou demonstrações de poder computacional. E que jogo melhor para testar os limites no R? Sendo uma linguagem orientada a objetos, o R é, a primeira vista, incompatível com um jogo do tipo arcade, que depende de eventos. Sendo um jogo simples, sua construção vai depender menos da capacidade de escrever grandes quantidades de códigos com várias condicionais e mais da capacidade de abstração, pesquisa de soluções e resiliência a frustrações. À semelhança dos jogos pré-pong, o produto final é só uma curiosidade para quem tiver acesso ao código, mas o verdadeiro objetivo está no processo: Ser um desafio para um programador e talvez uma fonte de inspiração disponível na comunidade, por apresentar a resolução para problemas incomuns e explorar o alcance do que é viável.
Durante essa disciplina e Planeco os alunos são apresentados a uma forma de selecionar modelos usando comparações por anova par-a-par. Essa seleção é curiosa por ser um algorítimo repetitivo que é executado apenas parcialmente pela máquina (ajuste dos modelos, tabela anova e sumários) com outra parte sendo executada pelo humano (criação de modelos mais simples, decisão sobre o P-valor e chamar as funções que a máquina irá executar). Parece fazer sentido deixar a tomada de decisões a cargo do humano, mas então recordamos que se trata de um aluno seguindo alguns poucos critérios bastante objetivos e definidos a priori.
A tarefa repetitiva executada pelo aluno pode ser realizada pela máquina em muito menos tempo e trazendo resultados mais consistentes. Com isso os alunos podem checar suas respostas e comparar o efeito de partir de diferentes modelos cheios (incluindo os que seriam grandes demais para valer a pena testar manualmente) e comparar os resultados com os de outros critérios para selecionar modelos.
Essa função provavelmente não seria indicada para encontrar modelos inferenciais, por criar uma nova camada de caixa preta no processo e por ser cego à interpretação dos modelos que está gerando. Mas é útil para qualquer um que esteja praticando e pode até ser útil para criar modelos que sejam puramente preditivos.
— Alexandre Adalardo de Oliveira 2018/05/11 17:11 Renan,
Gosto mais da proposta 1, não sou muito fã de procedimentos de seleção automática de modelos. Acho importante o ritual de simplificação para aumentar o entendimento do processo envolvido. Além dissoa iteração faz com que as pessoas fiquem mais intimas do modelo e do significado das variáveis. Mas isso é só minha visão. Ambas as propostas são factíveis, mas acho a 1 mais desafiantes para o exercício de programação. Bora no pong!
Extras: Além do acordado, a função trás um oponente virtual, um placar em tempo real, 3 modos de jogo e a opção de jogar novamente sem ter que chamar a função outra vez além de outras adições menores.
As seguintes considerações estão também comentadas no código:
1. Colocar o controle e o jogo em telas diferentes (como dito na proposta) tornava a experiência pior, agora eles estão na mesma janela
2. O grau de precisão da posição da bolinha é maior do que eu pretendia originalmente, então os cálculos para corrigir a posição após colisões foi retirado por ser quase imperceptível o efeito
3. Na proposta original seria retornado o tempo de jogo como forma de score, mas o cálculo de score usado aqui é mais interessante
4. O aumento de velocidade em y da bolinha também foi retirado por estar ativamente tornando o jogo menos divertido, além disso, para derrotar o oponente o jogador terá que acelerar a bolinha por conta própria
5. Dependendo do programa que você usar para trabalhar no R, as janelas criadas pelo tcltk podem aparecer quando você criar a função (mesmo sem dar o comando para rodar) e podem estar desconfiguradas. Nesse caso, surgirá a janela de fim de jogo com a mensagem padrão “Aperte Ok”. Apertar ok deve fazer as janelas fecharem. A função deve rodar normalmente independente disso acontecer.
6. Os pacotes tcltk permitem que as funções do R sejam chamadas de acordo com eventos e rodem em paralelo, por exemplo o slider pode ter uma função chamada sempre que seu valor é mudado. Provavelmente tem como fazer esse jogo rodar ainda melhor usando essas opções orientadas a eventos, mas considerando a justificativa da proposta achei melhor evita-las o máximo possível. A janela de novo jogo atribui uma função aos botões que é ativada no evento do botão ser apertado, mas como tk.wait mantém o R em pausa até um botão ser apertado e essa função apenas atribui um novo valor a uma variável, a lógica não é diferente de pedir input do usuário na linha de comando, usei a janela pela estética.