sexta-feira, 7 de março de 2014

Começou nessa semana a segunda turma de Discrete Optimization no Coursera. Eu normalmente já recomendaria, mas dessa vez é especial porque eu ajudei a fazer esse curso!

https://www.coursera.org/course/optimization

Background: Ano passado teve a primeira turma do curso, eu me inscrevi e foi excelente. O formato é diferente dos tradicionais videos-com-quiz: o curso é formado de seis exercícios NP-completos, sua tarefa é resolvê-los em 9 semanas. Os seis problemas são: knapsack, graph coloring, traveling salesman, facility location e vehicle routing, ou seja, só pedreira.

Cada problema tem seis instâncias, você precisa escrever um script que roda localmente na sua casa e submeter só a solução. Para o algoritmo, vale tudo, você escolhe a linguagem e a abordagem que quer usar. Os videos do curso são tutoriais das abordagens possíveis, todos eles são liberados no day-one e você assiste na ordem que quiser. Eu me diverti um monte no ano passado, e acabei terminando o curso com distinction.

Pois bem, depois de acabar o curso, o professor mandou um email para todos que terminaram com distinction perguntando quem tinha alguma idéia para melhorar o curso, e eu tinha uma idéia muito prática.

Programar simulated annealing é mole, qualquer um faz. Mas alguns dos algoritmos propostos são mais difíceis. Para o MIP, por exemplo, precisaria de um curso inteiro para aprender a fazer do zero. Por isso, a recomendação é procurar uma lib pronta por aí e focar no modelo ao invés da implementação. Mas as libs prontas são muito difíceis de usar, com apis horrorosas! E mesmo que um aluno aprenda a usar a api, o conhecimento não passa para os outros, porque o code of conduct não permite compartilhar código entre os alunos.

Então a minha sugestão foi: (1) escrever uma lib mais fácil de usar, e (2) fazer um sétimo exercício open source, que não vale pontos e é feito justamente para os alunos trocarem entre si o conhecimento aprendido. O professor gostou da idéia, e essa turma já está usando esse modelo!

A lib eu mesmo fiz: o EasySCIP, que é um binding em cima do SCIP. Até escrevi um post no ano passado sobre ela:

http://blog.ricbit.com/2013/12/mande-mais-dinheiro-usando-mip.html

O professor criou o sétimo exercício, que é weighted set cover. O curso tem um github oficial, e a idéia é os alunos forkarem e colocarem seus códigos no fork. Assim qualquer um pode entrar na lista de forks e aprender com as soluções dos colegas:

https://github.com/discreteoptimization/setcover

Recomendo demais esse curso, aprendi um monte com ele.

Um comentário:

  1. Me inscrevi no curso, vamos ver se pela 1a vez eu termino um desses MOOCS :-)
    Bacana a sua sugestão, acho que vai mesmo tornar o curso mais interessante e parabéns para o professor por ter aceitado.

    ResponderExcluir