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