Devnology Coding Dojo 05-01-2011

24
Devnology Coding Dojo Genetisch Algoritme + Travelling Salesman Problem Stefan Nijenhuis [email protected]

Transcript of Devnology Coding Dojo 05-01-2011

Page 1: Devnology Coding Dojo 05-01-2011

Devnology Coding Dojo

Genetisch Algoritme + Travelling Salesman Problem

Stefan [email protected]

Page 2: Devnology Coding Dojo 05-01-2011

Coding Dojo: GA + TSP 05-01-2011

Agenda

Introductie (30 minuten) travelling salesman probleemgenetisch algoritmecoding dojo

Fun -> Dojo Evaluatie (10 minuten)

Page 3: Devnology Coding Dojo 05-01-2011

Coding Dojo: GA + TSP 05-01-2011

HandsUp Wie

Was eerder bij een Devnology meeting? Was eerder bij een coding dojo? Heeft wel eens een genetisch algoritme

geïmplementeerd? Is bekend met het Travelling Salesman probleem? Kan in C# ontwikkelen? Heeft ervaring met Test Driven Development? Heeft ervaring met Behaviour Driven Development?

Page 4: Devnology Coding Dojo 05-01-2011

Coding Dojo: GA + TSP 05-01-2011

Doelen1. Een leuke en gezellige avond

2. Wat leren over je eigen stijl van coderen en communiceren

3. Wat leren over TDD, BabySteps

4. Wat leren over Genetic Algorithms

5. Wat leren over het Travelling Salesman probleem

6. Wat leren over C# (en .Net)

7. Een werkende oplossing

hoog

laag

priorite

it

Page 5: Devnology Coding Dojo 05-01-2011

Coding Dojo: GA + TSP 05-01-2011

Travelling Salesman problem

Gegeven een aantal steden en de kosten om van de ene stad naar de andere te reizen,

Wat is dan de meest goedkope reis die je kunt maken zodat elke stad 1x wordt aangedaan voordat je terugkeert naar de stad waar je gestart bent.

(Dit is de enige stad die je twee keer bezoekt)

Page 6: Devnology Coding Dojo 05-01-2011

Coding Dojo: GA + TSP 05-01-2011

A G

BF

C

E

D100

80

70

70

120

60

40

70

90

110

5030

Is er een route die je door elke stad brengt en terug naar het startpunt ‘A’ voor minder dan 520?

Het antwoord is ja. De oplossing is ABCGFDEA

Voorbeeld

Uit: The Travelling Salesman Problem - By Matt Leonard & Nathan Rodger

Page 7: Devnology Coding Dojo 05-01-2011

Coding Dojo: GA + TSP 05-01-2011

Mona Lisa TSP Challenge

“An optimal solution to the 100,000-city Mona Lisa instance would set a new world record for the TSP”

http://www.tsp.gatech.edu/data/ml/monalisa.html

Page 8: Devnology Coding Dojo 05-01-2011

Coding Dojo: GA + TSP 05-01-2011

Genetisch Algoritme

Een algoritme gebaseerd op evolutie om een passende oplossing te vinden voor een specifiek probleem

Charles Darwin

Sweet!

Page 9: Devnology Coding Dojo 05-01-2011

Coding Dojo: GA + TSP 05-01-2011

Hoe werkt het? (1)

Allereerst heb je een PROBLEEM waarvoor je een oplossing zoekt

Daarna encodeer je mogelijke oplossingen voor dit probleem. Dit zijn CHROMOSOMEN

Hoe goed een oplossing past voor het probleem heet de FITNESS

Nieuwe oplossingen ontstaan door het KRUISEN van twee CHROMOSOMEN

Soms MUTEREN we nakomelingen om diversiteit in stand te houden

We herhalen dit tot we klaar zijn.

Page 10: Devnology Coding Dojo 05-01-2011

Coding Dojo: GA + TSP 05-01-2011

Hoe werkt het? (2)

Genepool

Generation 0

Create initialpopulation Generation 0

Sort by fitness

Conditions met?

Sort by fitness

Generation ++

Crossover& Mutate

End

yesPromite Elite

Generation ++no

Page 11: Devnology Coding Dojo 05-01-2011

Coding Dojo: GA + TSP 05-01-2011

Tournament: Select a number of chromosomes from generation n

Pick 2 chosen ones

Crossover

loves

daddy mommy

kid1 kid2

Mutate (sometimes)

Add kids to generation n+1

Repeat unit generation n+1 is fully filled

Crossover & Mutation

Page 12: Devnology Coding Dojo 05-01-2011

Coding Dojo: GA + TSP 05-01-2011

En waarom zou ik het gebruiken?

Het biedt een alternatief om oplossingen voor problemen te vinden met (zeer) grote solution spaces

Het biedt een manier om een (goed) passende oplossing te vinden voor een beperkte hoeveelheid (cpu) tijd

Kan parallel worden en eenvoudig gedistribueerd worden uitgevoerd

Toepassingsgebieden: besluitvorming, artificial intelligence, gaming, …

Page 13: Devnology Coding Dojo 05-01-2011

Coding Dojo: GA + TSP 05-01-2011

GA & The Mona Lisa

after 904314 generations

Could you paint a replica of the Mona Lisa using only 50 semi transparent polygons?

http://rogeralsing.com/2008/12/07/genetic-programming-evolution-of-mona-lisa/

Page 14: Devnology Coding Dojo 05-01-2011

Coding Dojo: GA + TSP 05-01-2011

Page 15: Devnology Coding Dojo 05-01-2011

Coding Dojo: GA + TSP 05-01-2011

MODEL

Randori - Kata

moderator

1. SN / TH: Create Genes

2. TH / RK: Fix the code

Page 16: Devnology Coding Dojo 05-01-2011

Coding Dojo: GA + TSP 05-01-2011

Yammer today

Page 17: Devnology Coding Dojo 05-01-2011

Coding Dojo: GA + TSP 05-01-2011

7 Minuten Dynamiek

1. Benoem een (deel)scenario dat jullie als pair gaan implementeren in 7 MINUTEN

2. Leg aan publiek uit wat jullie gaan doen door een FALENDE test te schrijven (EXPLAIN IT WITH CODE!)

3. Implementeer de test zodat de test SLAAGT

4. REFACTOR indien nodig.

5. GOTO 1 (indien er nog voldoende tijd is)

(1) BABYSTEPS

(2) “Explain it with code”

(2, 3, 4) RED – GREEN – REFACTOR (TEST DRIVEN DEVELOPMENT)

Page 18: Devnology Coding Dojo 05-01-2011

Coding Dojo: GA + TSP 05-01-2011

Opzet Solution

StoryQ

GATSP.Business.Functional.TestsGATSP.Business.Tests

GATSP.Business

MSTest

Page 19: Devnology Coding Dojo 05-01-2011

Coding Dojo: GA + TSP 05-01-2011

StoryQ & .Netusing System;using System.Reflection;using Microsoft.VisualStudio.TestTools.UnitTesting;using StoryQ;namespace GATSP.Business.Functional.Tests{ [TestClass] public class InitialSetupOfChromosomesTests { [TestMethod] [Ignore] public void InitialSetupOfChromosomes() { new Story("InitialSetupOfChromosomes") .InOrderTo("FindTheShortestRoute") .AsA("TravellingSalesman") .IWant("A new generation of chromosomes") .WithScenario("initial setup of chromosomes") .Given(ANewGenePool) //GIVEN part of automated test .When(ICreateAnInitialPool) //WHEN part of automated test .Then(IGetANewGenerationOfChromosomes) //THEN part of automated test .ExecuteWithReport(MethodBase.GetCurrentMethod()); } public void ANewGenePool() { throw new NotImplementedException(); } public void ICreateAnInitialPool() { throw new NotImplementedException(); } public void IGetANewGenerationOfChromosomes() { throw new NotImplementedException(); } }}

Dit is voor

leesbaarheid /

rapportage

Dit is de echte

testuitvoering

Dit voor fysieke

rapportage

Page 20: Devnology Coding Dojo 05-01-2011

Coding Dojo: GA + TSP 05-01-2011

Functionele Tests (Startpunten)

InitialSetupOfChromosomes SortPopulationOfChromosomes CrossoverTwoChromosomes MutateAChromosome CrossoverAndMutatePopulation

Page 21: Devnology Coding Dojo 05-01-2011

Coding Dojo: GA + TSP 05-01-2011

Ontwikkelomgeving

VS2010 Grote fonts (Code pane, environment font) MSTest LineNumbers aan DojoTimer

Reset timer Restart tests

See detailsRuns every minute

DojoTimer

Page 22: Devnology Coding Dojo 05-01-2011

Coding Dojo: GA + TSP 05-01-2011

LET’S START

Voorstel: begin bij functionele test “InitialSetupOfChromosomes”

Per werkplek kunnen de eerste pairs beginnen..

Laat code ontstaan in de testclass/testmethode. Tijdens de refactorstap kun je via refactorings ExtractMethod en MoveMethod de code naar een betere plek verhuizen. .

Hou je aan de 7 minuten dynamiek

Page 23: Devnology Coding Dojo 05-01-2011

Coding Dojo: GA + TSP 05-01-2011

Evaluatie

Wat hebben we geleerd?

Wat kunnen we de volgende keer beter doen?

Nog een volgende keer?

Page 24: Devnology Coding Dojo 05-01-2011

Coding Dojo: GA + TSP 05-01-2011

Travelling Salesman problem

GENETIC PROGRAMMING MONA LISA http://rogeralsing.com/2008/12/07/genetic-programming-evolution-of-mona-lisa/

GENETIC GALLERY http://rogeralsing.com/2008/12/11/genetic-gallery/

MONA LISA TSP http://www.tsp.gatech.edu/data/ml/monalisa.html

TSP ART http://www.oberlin.edu/math/faculty/bosch/tspart-page.html