Genetische algoritmen in Java met JGAP
|
|
|
- Melissa Coppens
- 10 jaren geleden
- Aantal bezoeken:
Transcriptie
1 Genetische algoritmen in Java met JGAP Inleiding JGAP, uitgesproken als "jee-gep", is een framework voor het implementeren van genetische algoritmen en het gebruik ervan in Java. Genetische algoritmen zijn voor velen onbekend terrein maar een krachtig instrument voor het oplossen van bepaalde problemen. Dit artikel is een introductie tot genetische algoritmen en beschrijft de toepassingen daarvan. Het beschrijft hoe het JGAP framework kan worden ingezet om problemen op te lossen met genetische algoritmen. Dit wordt gedaan aan de hand van een concreet voorbeeld. Genetische algoritmen Sommige problemen zijn zo complex en het aantal mogelijke oplossingen zo groot, dat het onmogelijk is om deze problemen met een wiskundig algoritme op te lossen. Met brute force simpelweg alle mogelijke oplossingen proberen kost zoveel tijd dat deze aanpak niet realistisch is. Voor dit soort problemen is een alternatieve aanpak nodig. Eén van deze alternatieven zijn genetische algoritmen. Een genetisch algoritme is een zoekalgoritme welke uit een enorme hoeveelheid potentiële oplossingen, (in veel gevallen) een optimale oplossing weet te vinden. De verzameling van alle mogelijke oplossingen wordt zoekgebied genoemd. Een genetisch algoritme vindt de oplossing voor een bepaald probleem door iteratief een initiële, willekeurig gekozen, verzameling van oplossingen te muteren tot nieuwere, potentieel betere oplossingen. Genetische algoritmen zijn geïnspireerd op genetische operaties welke in de natuur voorkomen, zoals mutatie en crossover, en het Darwinian principe van natuurlijke selectie. Een potentiële oplossing wordt een chromosoom genoemd. Een chromosoom bestaat uit een constant aantal genen. Een gen is een uniek, individueel, onderdeel van een chromosoom. Een aantal chromosomen bij elkaar wordt een populatie genoemd. De populatie kan dus worden gezien als een verzameling van mogelijke oplossingen. De chromosomen in de populatie worden met behulp van een iteratief proces omgevormd tot nieuwe chromosomen. Dit iteratieve proces wordt de evolutie genoemd. In elke iteratie van de evolutie wordt gebruik gemaakt van mutatie en crossover. Mutatie is het muteren van de individuele genen van een chromosoom. Crossover is het combineren van bestaande chromosomen tot nieuwe chromosomen. Mutatie en crossover leveren beide nieuwe chromosomen op. Nadat mutatie en crossover zijn toegepast op de chromosomen in de populatie, wordt er bepaald welke chromosomen meedoen in de volgende iteratie van de evolutie. Om dit te bepalen wordt het mechanisme van natuurlijke selectie toegepast. Dit mechanisme is gebaseerd op de zogenaamde fitheid van een chromosoom. De fitheid geeft aan hoe goed een bepaald chromosoom is ten opzichte van andere chromosomen. Chromosomen met een betere fitheid hebben een grotere kans om door te gaan naar een volgende iteratie in de evolutie dan chromosomen met een lagere fitheid. Door het proces van mutatie, crossover en selectie te herhalen op de chromosomen in de populatie, ontstaat er uiteindelijk een populatie met een (bijna)optimaal chromosoom (oplossing) voor het betreffende probleem. Dit chromosoom heeft dan de beste fitheid ten opzichten van alle andere chromosomen in de populatie. Het evolutieproces is weergegeven in figuur 1.
2 Figuur 1 Doordat genetische algoritmen efficiënt zijn in het gericht zoeken naar oplossingen uit een enorme hoeveelheid potentiële oplossingen, zijn ze geschikt voor het oplossen van bepaalde soorten problemen. Een voorbeeld van een dergelijk probleem is een planningprobleem. In een fabriekshal vinden we een typisch voorbeeld van een planningprobleem. In de fabriekshal staan machines waarop taken in een bepaalde volgorde en tijd uitgevoerd worden. Deze taken draaien ook weer op specifieke machines welke door bepaalde personen worden bestuurd. Afhankelijk van het aantal te plannen taken kan het aantal potentiële oplossingen enorm zijn. In tegenstelling tot een heuristisch algoritme, welke zich op 1 enkele oplossing concentreert, opereren genetische algoritmen op een hele verzameling van oplossingen, de populatie. Doordat uit elke iteratie van de evolutie de beste oplossingen overblijven, welke gebruikt worden voor het vormen van nieuwe oplossingen, worden er al snel acceptabele oplossingen gevonden. Een ander voorbeeld van een probleem waarbij genetische algoritmen succesvol zijn, is het travelling salesman problem (TSP) en varianten daarop. Dit probleem luidt als volgt: gegeven een lijst van steden, wat is het kortst mogelijke pad om al deze steden maar 1 keer te bezoeken? Ook bij dit probleem geldt, hoe meer steden hoe groter het aantal mogelijke oplossingen. Voorbereiding Voordat er met het implementeren van het genetische algoritme wordt begonnen moeten er vooraf een aantal stappen worden doorlopen welke de context van het probleem bepalen. Deze stappen zijn altijd noodzakelijk wanneer een genetisch algoritme wordt ingezet voor het oplossen van een bepaald probleem. Deze stappen zijn: 1. Het bepalen van de genetische representatie van de oplossing. In deze stap wordt bepaald hoe een chromosoom, welke bestaat uit individuele genen, is
3 opgebouwd. In het concrete voorbeeld wordt hier dieper op ingegaan. 2. Het bepalen van de fitness functie. De fitheid bepaalt hoe goed een bepaald chromosoom is ten opzichte van andere chromosomen. Het definiëren van een goede fitness functie is het belangrijkste onderdeel van de voorbereiding. Wanneer de fitness functie niet goed is gedefinieerd, is de kans groter dat er veel minder goede chromosomen worden gekozen voor de volgende iteratie in de evolutie. Op deze manier ontstaat er nooit een optimale oplossing voor het betreffende probleem. 3. Het bepalen van de run parameters van de evolutie. De run parameters bepalen het gedrag van de evolutie. Parameters waar aan gedacht moet worden zijn de initiële grootte van de populatie en het aantal iteraties in de evolutie die uitgevoerd worden. 4. Het bepalen van de succescriteria. De succescriteria bepalen wanneer de evolutie van het genetische algoritme eindigt. Dit kan bijvoorbeeld een vooraf vastgesteld aantal iteraties van de evolutie zijn. De run kan ook eindigen wanneer aan een bepaalde eis, welke is gesteld aan de fitheid van een chromosoom, is voldaan. De run is bijvoorbeeld geslaagd wanneer de fitheid van een chromosoom groter is dan 50. JGAP Java Genetic Algorithms Package, kortweg JGAP, implementeert de concepten van genetische algoritmen als een Java framework. De genetische concepten zijn in JGAP geïmplementeerd als afzonderlijke objecten. Mede hierdoor is de stap van de theorie naar de praktijk goed te begrijpen. De belangrijkste classes wanneer wordt gewerkt met genetische algoritmen zijn de volgende: IChromosome De IChromosome interface representeert een potentiële oplossing en bestaat uit een vast aantal genen. Gene De Gene interface is een onderdeel van een chromosoom. Elke Gene heeft een waarde. De waarde van een Gene wordt allele genoemd welke met de getallele() methode geretourneerd wordt. JGAP biedt een aantal implementaties van de Gene interface. Voorbeelden van deze implementaties zijn: a) IntegerGene. Dit is een implementatie van Gene waarbij de allele een Integer is. b) BooleanGene. Dit is een implementatie van Gene waarbij de allele een Boolean. c) StringGene. Dit is een implementatie van Gene waarbij de allele een String is. Verder is het mogelijk om zelf nieuwe implementaties van de Gene interface te maken. Dit wordt gedaan door de class BaseGene te extenden. Let er hierbij wel op dat de equals en hashcode() methode geïmplementeerd worden! GenoType De GenoType is de populatie en bestaat uit een aantal chromosomen. FitnessFunction De fitness functie bepaalt hoe goed een bepaald chromosoom is ten opzichte van andere chromosomen. De baseclass FitnessFunction moet subclassed worden waarbij de evaluate(ichromosome a_subject) methode geïmplementeerd moet worden. Deze methode wordt voor elke chromosoom in de populatie aangeroepen en berekent de fitheid van de meegegeven IChromosome. De fitheid wordt geretourneerd als een double. De absolute waarde van de fitheid is hierbij niet van belang. Het gaat om het relatieve verschil tussen de fitheid van de chromosomen in de populatie. GAConfiguration Dit object bevat de configuratie data voor het genetische algoritme. Voorbeelden van configuratie data is de grootte van de initiële populatie en de implementatie van de
4 fitness function. Veel parameters hebben default waarden. Concreet voorbeeld De beste manier om te leren is door gebruik te maken van voorbeelden. Het voorbeeld dat hier is beschreven is een variant op het bin-packing probleem. Het probleem luidt als volgt: Een verhuisbedrijf is gespecialiseerd in het verplaatsen van spullen van de ene locatie naar de andere. Deze spullen worden in dozen verpakt. Deze dozen hebben allemaal een verschillend volume. Om kosten te besparen is het voor het verhuisbedrijf noodzakelijk om zijn verhuiswagens zo optimaal mogelijk in te zetten. Dit betekent dat er niet meer verhuiswagens mogen worden gebruikt voor het vervoeren van de dozen dan strikt noodzakelijk. De dozen worden in dit voorbeeld gerepresenteerd door een array van Box instanties. De Box class representeert een individuele doos met een volume. Codevoorbeeld 1a laat de initialisatie van de dozen zien: private void createboxes(int seed) { // De seed maakt het mogelijk de initialisatie te reproduceren Random r = new Random(seed); this.boxes = new Box[125]; for (int i = 0; i < 125; i++) { Box box = new Box( (r.nextdouble() * 2.75)); box.setid(i); this.boxes[i] = box; Codevoorbeeld 1a In codevoorbeeld 1a worden 125 dozen met een volume variërend tussen 0.25 en 3 kubieke meter gecreëerd. Deze dozen worden in busjes geplaatst met een inhoud van 4.33 kubieke meter. De busjes worden gerepresenteerd door de Van class. De volgorde van de dozen in de Box array, is de volgorde waarop de dozen in de busjes worden geplaatst. Het doel van het genetische algoritme is het vinden van de optimale volgorde waarop de dozen in de busjes worden geplaatst. Dit betekent dat het aantal benodigde busjes zo klein mogelijk moet zijn. De dozen uit codevoorbeeld 1a hebben een gezamenlijk volume van kubieke meter, welke gegenereerd zijn met een seed van 37. Het minimum aantal benodigde busjes is / 4.33 = Aangezien er geen halve busjes gebruikt kunnen worden, wordt het resultaat naar boven afgerond op 49. Als we de dozen in de busjes plaatsen in de volgorde waarop de Box array initieel geïnitialiseerd is, zijn er 63 busjes nodig! Dit is beduidend meer dan het optimale aantal van 49. Het aantal mogelijke verschillende combinaties, het zoekgebied, is 125! (faculteit van het aantal dozen) = 1,88e+209. Een perfecte kandidaat voor een genetisch algoritme. Als eerste moeten we de genetische representatie van de oplossing bepalen. De oplossing bestaat in dit voorbeeld uit een lijst van array indices, de volgorde waarop de dozen in de busjes worden geplaatst. De oplossing kunnen we in JGAP representeren als een chromosoom met 125 IntegerGene's. Elke IntegerGene krijgt een waarde uit de range 0 t/m 124, de indices uit de Box array. Elke IntegerGene representeert dus een Box in de Box array. Nu we de genetische representatie hebben bepaald, moeten we de fitness functie implementeren. De fitness functie voor dit probleem is weergegeven in codevoorbeeld 1b. protected double evaluate(ichromosome a_subject) { double wastedvolume = 0.0D; double volumeincurrentvan = 0.0D; int numberofvansneeded = 1; Gene[] genes = a_subject.getgenes(); for (Gene gene : genes) { int index = (Integer) gene.getallele(); if (enoughspaceavailable(volumeincurrentvan, this.boxes[index])) { volumeincurrentvan += this.boxes[index].getvolume(); else { numberofvansneeded++;
5 wastedvolume += Math.abs(vanCapacity - volumeincurrentvan); // Make sure we put the box which did not fit in this van in the next van volumeincurrentvan = this.boxes[index].getvolume(); return wastedvolume * numberofvansneeded; Codevoorbeeld 1b De fitness functie in codevoorbeeld 1b berekent hoeveel busjes er nodig zijn voor de dozen waarvan de volgorde wordt gerepresenteerd door het meegegeven chromosoom. Van elke Gene in het chromosoom wordt de waarde opgevraagd welke een index in de Box array representeert. Er wordt bepaald hoeveel dozen er in een busje passen. Wanneer er geen dozen meer in het busje passen, wordt het overgebleven volume opgeteld bij het totaal aan overgebleven volume. Hoe meer volume verspild wordt, hoe hoger de fitness waarde. Als laatste wordt de fitness waarde vermenigvuldigd met het aantal busjes dat nodig is voor dit chromosoom. Hoe meer busjes hoe hoger de fitness waarde. In dit voorbeeld geldt: hoe lager de fitness waarde hoe beter de oplossing. Nu we de genetische representatie en de fitness functie hebben bepaald, is het tijd om de run parameters en de succes criteria te bepalen. Het aantal evolutie iteraties dat we uitvoeren stellen we vast op Dit aantal is gekozen op basis van een aantal experimentele runs van het algoritme. De initiële grootte van de populatie zetten we op 50. Dit betekent dat er initieel 50 chromosomen gecreëerd worden. De evolutie eindigt wanneer er 2500 iteraties zijn uitgevoerd óf wanneer het optimale aantal benodigde busjes van 49 is bereikt. Codevoorbeeld 1c toont de evolutie: private void evolve(genotype a_genotype) { // 4.33 is the volume of an individual van int optimalnumberofvans = (int) Math.ceil(this.totalVolumeOfBoxes / 4.33); double previousfittest = a_genotype.getfittestchromosome().getfitnessvalue(); int numberofvansneeded = Integer.MAX_VALUE; for (int i = 0; i < 2500; i++) { // the evolve method performs one iteration in the evolution a_genotype.evolve(); double fittness = a_genotype.getfittestchromosome().getfitnessvalue(); int vansneeded = this.numberofvansneeded(a_genotype.getfittestchromosome().getgenes()).size(); if (fittness < previousfittest && vansneeded < numberofvansneeded) { this.printsolution(a_genotype.getfittestchromosome()); previousfittest = fittness; numberofvansneeded = vansneeded; // Optimal solution is reached if (numberofvansneeded == optimalnumberofvans) { break; IChromosome fittest = a_genotype.getfittestchromosome(); // Code omitted to print solution Codevoorbeeld 1c Codevoorbeeld 1c berekent als eerste het optimaal aantal benodigde busjes. Wanneer het genetische algoritme dit aantal bereikt, stopt de evolutie. Er worden maximaal 2500 evolutie iteraties uitgevoerd. Tijdens elke iteratie wordt bepaald of het beste chromosoom in de populatie beter is dan de tot dan toe gevonden chromosoom. Indien dit zo is dan tonen we de betreffende oplossing. De output van het genetische algoritme is te zien in codevoorbeeld 1d.
6 The total volume of the [125] boxes is [ ] cubic metres. The optimal number of vans needed is [49] Fitness value [ ] The total number of vans needed is [63] Fitness value [ ] The total number of vans needed is [61]...Some output omitted Fitness value [ ] The total number of vans needed is [51] Fitness value [ ] The total number of vans needed is [50] Fitness value [ ] The total number of vans needed is [49] computation time = Van [1] has contents with a total volume of [ ] and contains the following boxes: Box:0, volume [ ] cubic metres. Box:117, volume [ ] cubic metres. Van [2] has contents with a total volume of [ ] and contains the following boxes: Box:17, volume [ ] cubic metres. Box:110, volume [ ] cubic metres. Box:26, volume [ ] cubic metres....further output omitted Codevoorbeeld 1d Zoals te zien in codefragment 1d bereikt het genetische algoritme de optimale verdeling van de dozen zodat deze in 49 busjes passen. De fitness waarde van deze oplossing is De gemiddelde tijd die het algoritme nodig heeft om de optimale oplossing te vinden ligt gemiddeld tussen de 20 en 25 seconden. Ter vergelijking: bij een aantal van 20 dozen heeft een brute-force algoritme circa 30 seconden nodig om tot de optimale oplossing te komen. Een genetisch algoritme heeft, op dezelfde systeemconfiguratie, maar 31 milliseconden nodig om tot de optimale oplossing te komen bij hetzelfde aantal dozen! De volledige source code van dit voorbeeld is te vinden op Google code, zie hiervoor de referenties. Conclusie Genetische algoritmen is een krachtige techniek voor het oplossen van bepaalde soorten problemen. Problemen welke op een efficiënte manier door genetische algoritmen worden opgelost zijn o.a. complexe planningproblemen of problemen waarvoor geen wiskundige analyse beschikbaar is. JGAP maakt het mogelijk om op een eenduidige manier genetische algoritmen binnen Java te gebruiken. JGAP implementeert de concepten uit de theorie waardoor de brug van theorie naar praktijk eenvoudig is te maken. Voor wie verder geïnteresseerd is in de interne werking van genetische algoritmen, zoals bijvoorbeeld de werking van crossover en mutatie en het samenstellen van een nieuwe populatie, wordt verwezen naar bronnen [4] en [5] uit de referenties. Referenties De schrijver Jamie Craane is software architect en Java competence manager bij QNH Business Integration.
Programmeren A. Genetisch Programma voor het Partitie Probleem. begeleiding:
Programmeren A Genetisch Programma voor het Partitie Probleem begeleiding: Inleiding Het Partitie Probleem luidt als volgt: Gegeven een verzameling van n positieve integers, vindt twee disjuncte deelverzamelingen
Vakgroep CW KAHO Sint-Lieven
Vakgroep CW KAHO Sint-Lieven Objecten Programmeren voor de Sport: Een inleiding tot JAVA objecten Wetenschapsweek 20 November 2012 Tony Wauters en Tim Vermeulen [email protected] en [email protected]
recursie Hoofdstuk 5 Studeeraanwijzingen De studielast van deze leereenheid bedraagt circa 6 uur. Terminologie
Hoofdstuk 5 Recursion I N T R O D U C T I E Veel methoden die we op een datastructuur aan kunnen roepen, zullen op een recursieve wijze geïmplementeerd worden. Recursie is een techniek waarbij een vraagstuk
Stacks and queues. Hoofdstuk 6
Hoofdstuk 6 Stacks and queues I N T R O D U C T I E In dit hoofdstuk worden drie datastructuren stack, queue en deque behandeld. Om deze datastructuren te implementeren, worden onder andere arrays en linked
Tentamen Object Georiënteerd Programmeren TI1200 30 januari 2013, 9.00-12.00 Afdeling SCT, Faculteit EWI, TU Delft
Tentamen Object Georiënteerd Programmeren TI1200 30 januari 2013, 9.00-12.00 Afdeling SCT, Faculteit EWI, TU Delft Bij dit tentamen mag je geen gebruik maken van hulpmiddelen zoals boek of slides. Dit
Kunstmatige Intelligentie (AI) Hoofdstuk van Russell/Norvig = [RN] Genetische algoritmen. voorjaar 2016 College 11, 3 mei 2016
AI Kunstmatige Intelligentie (AI) Hoofdstuk 4.1.4 van Russell/Norvig = [RN] Genetische algoritmen voorjaar 2016 College 11, 3 mei 2016 www.liacs.leidenuniv.nl/ kosterswa/ai/ 1 Introductie Er zijn allerlei
Minder Big data Meer AI.
Minder Big data Meer AI. Minder Big data, meer AI. Marijn uilenbroek BI & Analytics consultant Utrecht, 1 november 2016 BI&A symposium 2016 Minder Big data meer AI 2 BI&A symposium 2016 Minder Big data
Tentamen Object Georiënteerd Programmeren TI1206 29 oktober 2014, 9.00-11.00 Afdeling SCT, Faculteit EWI, TU Delft
Tentamen Object Georiënteerd Programmeren TI1206 29 oktober 2014, 9.00-11.00 Afdeling SCT, Faculteit EWI, TU Delft Bij dit tentamen mag je geen gebruik maken van hulpmiddelen zoals boek of slides. Digitale
Objectgeorïenteerd werken is gebaseerd op de objecten die door het systeem gemanipuleerd worden.
Herhaling Objectgeorïenteerd werken is gebaseerd op de objecten die door het systeem gemanipuleerd worden. De basisbouwsteen is het object; een geïntegreerde eenheid van data en operaties werkend op deze
Zelftest Inleiding Programmeren
Zelftest Inleiding Programmeren Document: n0824test.fm 22/01/2013 ABIS Training & Consulting P.O. Box 220 B-3000 Leuven Belgium TRAINING & CONSULTING INLEIDING BIJ DE ZELFTEST INLEIDING PROGRAMMEREN Deze
Recursion. Introductie 37. Leerkern 37. Terugkoppeling 40. Uitwerking van de opgaven 40
Recursion Introductie 37 Leerkern 37 5.1 Foundations of recursion 37 5.2 Recursive analysis 37 5.3 Applications of recursion 38 Terugkoppeling 40 Uitwerking van de opgaven 40 Hoofdstuk 5 Recursion I N
Verslag Opdracht 4: Magische Vierkanten
Verslag Opdracht 4: Magische Vierkanten Stefan Schrama, Evert Mouw, Universiteit Leiden 2007-08-14 Inhoudsopgave 1 Inleiding 2 2 Uitleg probleem 2 3 Theorie 2 4 Aanpak 2 5 Implementatie 4 6 Experimenten
voegtoe: eerst methode bevat gebruiken, alleen toevoegen als bevat() false is
PROEF-Tentamen Inleiding programmeren (IN1608WI), X januari 2010, 9.00-11.00, Technische Universiteit Delft, Faculteit EWI, Afdeling 2. Open boek tentamen: bij het tentamen mag alleen gebruik worden gemaakt
IMP Uitwerking week 13
IMP Uitwerking week 13 Opgave 1 Nee. Anders moet bijvoorbeeld een venster applicatie een subklasse zijn van zowel Frame en WindowListener. Als de applicatie ook een button of een menu heeft, dan moet het
Zelftest Programmeren in Java
Zelftest Programmeren in Java Document: n0883test.fm 22/01/2013 ABIS Training & Consulting P.O. Box 220 B-3000 Leuven Belgium TRAINING & CONSULTING INLEIDING BIJ DE ZELFTEST PROGRAMMEREN IN JAVA Deze test
HOOFDSTUK 3. Imperatief programmeren. 3.1 Stapsgewijs programmeren. 3.2 If Then Else. Module 4 Programmeren
HOOFDSTUK 3 3.1 Stapsgewijs programmeren De programmeertalen die tot nu toe genoemd zijn, zijn imperatieve of procedurele programmeertalen. is het stapsgewijs in code omschrijven wat een programma moet
ALGORITMIEK: answers exercise class 7
Problem 1. See slides 2 4 of lecture 8. Problem 2. See slides 4 6 of lecture 8. ALGORITMIEK: answers exercise class 7 Problem 5. a. Als we twee negatieve (< 0) getallen bij elkaar optellen is het antwoord
Als een PSD selecties bevat, deelt de lijn van het programma zich op met de verschillende antwoorden op het vraagstuk.
HOOFDSTUK 3 3.1 Stapsgewijs programmeren In de vorige hoofdstukken zijn programmeertalen beschreven die imperatief zijn. is het stapsgewijs in code omschrijven wat een programma moet doen, net als een
Elementary Data Structures 3
Elementary Data Structures 3 Ferd van Odenhoven Fontys Hogeschool voor Techniek en Logistiek Venlo Software Engineering 29 september 2014 ODE/FHTBM Elementary Data Structures 3 29 september 2014 1/14 Meer
Modelleren en Programmeren
Modelleren en Programmeren Jeroen Bransen 6 december 2013 Terugblik Programma en geheugen Opdrachten Variabelen Methoden Objecten Klasse Programma en geheugen Opdrachten Variabelen zijn gegroepeerd in
Universiteit van Amsterdam FNWI. Voorbeeld van tussentoets Inleiding programmeren
Universiteit van Amsterdam FNWI Voorbeeld van tussentoets Inleiding programmeren Opgave 1: Wat is de uitvoer van dit programma? public class Opgave { static int i = 0 ; static int j = 1 ; int i = 1 ; int
Kleine cursus PHP5. Auteur: Raymond Moesker
Kleine cursus PHP5 Auteur: Raymond Moesker Kleine cursus PHP PHP is platform en CPU onafhankelijk, open source, snel, heeft een grote userbase, het is object georiënteerd, het wordt omarmd door grote bedrijven
Programmeren in Java 3
26 september 2007 Deze les korte herhaling vorige les Unified Modelling Language notatie van een class afleiding pointers abstracte classes polymorphisme dubieuze(?) constructies interfaces Meer over class
Modelleren en Programmeren
Modelleren en Programmeren Jeroen Bransen 11 december 2015 Ingebouwde datastructuren Meer boomstructuren Access specifiers Gebruikersinvoer Codestijl Packages SAT-solver Ingebouwde datastructuren Ingebouwde
Modelleren en Programmeren
Modelleren en Programmeren Jeroen Bransen 13 december 2013 Terugblik Fibonacci public class Fibonacci { public static void main(string[] args) { // Print het vijfde Fibonaccigetal System.out.println(fib(5));
Tentamen Objectgeorienteerd Programmeren TI februari Afdeling ST Faculteit EWI TU Delft
I ' Tentamen Objectgeorienteerd Programmeren TI 1200 1 februari 2012 9.00-12.00 Afdeling ST Faculteit EWI TU Delft Bij dit tentamen mag je geen gebruik maken van hulpmiddelen zoals boek of slides. Dit
Onafhankelijke verzamelingen en Gewogen Oplossingen, door Donald E. Knuth, The Art of Computer Programming, Volume 4, Combinatorial Algorithms
Onafhankelijke verzamelingen en Gewogen Oplossingen, door Donald E. Knuth, The Art of Computer Programming, Volume 4, Combinatorial Algorithms Giso Dal (0752975) Pagina s 5 7 1 Deelverzameling Representatie
Inleiding Programmeren 2
Inleiding Programmeren 2 Gertjan van Noord November 28, 2016 Stof week 3 nogmaals Zelle hoofdstuk 8 en recursie Brookshear hoofdstuk 5: Algoritmes Datastructuren: tuples Een geheel andere manier om te
Tentamen Imperatief Programmeren
Tentamen Imperatief Programmeren Maandag 22 oktober 2001 Toelichting Dit is een open boek tentamen, d.w.z. het cursusboek mag gebruikt worden. N.B.: Het tentamen is individueel: voor het maken van de opgaven
Inleiding Programmeren 2
Inleiding Programmeren 2 Gertjan van Noord November 26, 2018 Stof week 3 nogmaals Zelle hoofdstuk 8 en recursie Brookshear hoofdstuk 5: Algoritmes Datastructuren: tuples Een geheel andere manier om te
Optimalisering en Complexiteit, College 2. Han Hoogeveen, Utrecht University
Optimalisering en Complexiteit, College 2 Han Hoogeveen, Utrecht University Inhoud vandaag Inhoud: Uitleg methode Bespreking oude opdracht: Bezorgen wenskaarten Slides staan al op het web www.cs.uu.nl/docs/vakken/opt/colleges.html
Tree traversal. Bomen zijn overal. Ferd van Odenhoven. 15 november 2011
15 november 2011 Tree traversal Ferd van Odenhoven Fontys Hogeschool voor Techniek en Logistiek Venlo Software Engineering 15 november 2011 ODE/FHTBM Tree traversal 15 november 2011 1/22 1 ODE/FHTBM Tree
Beginselen van programmeren Practicum 1 (Doolhof) : Oplossing
Beginselen van programmeren Practicum 1 (Doolhof) : Oplossing Introductie In dit document geven we een mogelijke oplossing voor het eerste practicum. Deze oplossing gebruikt verschillende klassen en overerving,
Overerving & Polymorfisme
Overerving & Polymorfisme Overerving Sommige klassen zijn speciaal geval van andere klasse Docent is een speciaal geval van werknemer, dwz. elke docent is ook werknemer Functionaliteit van docent = functionaliteit
Een eenvoudig algoritme om permutaties te genereren
Een eenvoudig algoritme om permutaties te genereren Daniel von Asmuth Inleiding Er zijn in de vakliteratuur verschillende manieren beschreven om alle permutaties van een verzameling te generen. De methoden
Backlog. De openstaande stories. Studenten. Clermond de Hullu Wiebren Wolthuis Simon Wels Maik Gosenshuis. MDL- referentie D09
Backlog De openstaande stories Studenten Clermond de Hullu Wiebren Wolthuis Simon Wels Maik Gosenshuis MDL- referentie D09 Versiebeheer Versie Datum Wijzigingen Door wie 0.1 06-10- 09 Eerste opzet voor
Datatypes Een datatype is de sort van van een waarde van een variabele, veel gebruikte datatypes zijn: String, int, Bool, char en double.
Algemeen C# Variabele Een variabele is een willekeurige waarde die word opgeslagen. Een variabele heeft altijd een datetype ( De soort waarde die een variabele bevat). Datatypes Een datatype is de sort
10 Meer over functies
10 Meer over functies In hoofdstuk 5 hebben we functies uitgebreid bestudeerd. In dit hoofdstuk bekijken we drie andere aspecten van functies: recursieve functies dat wil zeggen, functies die zichzelf
Voorbeeldtentamen Inleiding programmeren (IN1608WI), Oktober 2003, , Technische Universiteit Delft, Faculteit EWI, Afdeling 2.
Voorbeeldtentamen Inleiding programmeren (IN1608WI), Oktober 2003, 14.00-15.30, Technische Universiteit Delft, Faculteit EWI, Afdeling 2. Dit tentamen bestaat uit twee delen. Deel 1 (14.00-14.45, gesloten
Programmeren in Java les 3
4 september 2015 Deze les korte herhaling vorige week loops methodes Variabelen Soorten variabelen in Java: integer: een geheel getal, bijv. 1,2,3,4 float: een gebroken getal, bijv. 3.1415 double: een
Tentamen Inleiding Programmeren (IN1608WI), duur van de toets 2 uur Technische Universiteit Delft, Faculteit EWI, Afdeling 2.
Tentamen Inleiding Programmeren (IN1608WI), duur van de toets 2 uur Technische Universiteit Delft, Faculteit EWI, Afdeling 2. Gesloten boek examen: er mag geen gebruik worden gemaakt van het studieboek.
Lessen Java: Reeks pag. 1
Lessen Java: Reeks 2 1-3-2016 pag. 1 Primitieve types type grootte waardes byte 8 bits 128, 127 short 16 bits 32768, 32767 int 32 bits 2 31, 2 31 1 long 64 bits 2 63, 2 63 1 type grootte waardes float
Java spiekbrief. Commentaar. Definitie van een methode. Types. Variabelendeclaratie. Definitie van een klasse. Namen. Definitie van een veld
Java spiekbrief Commentaar Dient enkel voor de menselijke lezer. // tot het einde van de lijn /* Dit type commentaar kan gerust meerdere lijnen beslaan. */ /** En deze speciale vorm wordt gebruikt voor
Deel 1: Arduino kennismaking. Wat is een microcontroller, structuur van een programma, syntax,
Deel 1: Arduino kennismaking Wat is een microcontroller, structuur van een programma, syntax, Wat is een microcontroller Wat is een microcontroller? Microcontroller = kleine dedicated computer. - Beperkt
Recursie: definitie. De som van de kwadraten van de getallen tussen m en n kan als volgt gedefinieerd worden:
Recursie: definitie Een object wordt recursief genoemd wanneer het partieel bestaat uit of partieel gedefinieerd is in termen van zichzelf. Recursie wordt gebruikt bij wiskundige definities, bijvoorbeeld:
Datastructures. Opdracht 3
Datastructures Opdracht 3 Naam Jeffrey van der Lingen Kevin Huijzendveld Joshua Turpijn Klas IS205 Vak Datastructures Datum 06/11/2016 Inhoudsopgave Inleiding... 3 1. Hashfunctie... 4 1.1 Inleiding...
Computervaardigheden. Universiteit Antwerpen. Computervaardigheden en Programmatie. Grafieken en Rapporten 1. Inhoud. Wat is scripting?
Inhoud Computervaardigheden Hoofdstuk 4 Scripting (Let op: dit is enkel voor studenten Biologie.) Dit hoofdstuk bekijkt heel kort de basis van scripting. - Opstellen van functies. - Conditionele code.
Modeleren. Modelleren. Together UML. Waarvan maken we een model? overzicht les 14 t/m 18. ControlCenter 6.2
Modelleren Werkelijkheid Modelleren Modeleren Waarvan maken we een model?!analyse " Maak een model van de te automatiseren werkelijkheid of van het op te lossen probleem! Domeinkennis = structuur! Functionele
Game of Life in Java
Game of Life in Java Auteur: drs. M.S.L.F. Manssen http://www.manssen.eu Game of Life is een spel van een rooster van cellen, waarbij telkens een ronde gebeurt waarbij de nieuwe waardes van cellen gebeurt.
TENTAMEN Programmeren 1 VOORBEELDUITWERKING
TENTAMEN Programmeren 1 vakcode: 213500 datum: 10 juli 2004 tijd: 9:00-12:30 uur VOORBEELDUITWERKING Algemeen Bij dit tentamen mag gebruik worden gemaakt van het boek van Niño/Hosch, en van de handleiding
http://www.liacs.nl/home/kosters/java/
sheets Programmeren 1 Java college 2, Walter Kosters De sheets zijn gebaseerd op de hoofdstukken 2 tot en met 6 van: D. Bell en M. Parr, Java voor studenten, Prentice Hall, 2002 http://www.liacs.nl/home/kosters/java/
Inhoud. Eindtoets. Introductie 2. Opgaven 3. Bijlage bij opgaven 9. Terugkoppeling 12
Open Universiteit Inhoud Introductie 2 Opgaven 3 Bijlage bij opgaven 9 Terugkoppeling 12 1 Open Universiteit Objectgeoriënteerd programmeren in Java 1 I N T R O D U C T I E Deze eindtoets is bedoeld als
NAAM: Programmeren 1 Examen 29/08/2012
Programmeren 29 augustus 202 Prof. T. Schrijvers Instructies Schrijf al je antwoorden op deze vragenbladen (op de plaats die daarvoor is voorzien). Geef ook je kladbladen af. Bij heel wat vragen moet je
In BlueJ. Doe onderstaande met muis/menu s:
In BlueJ Doe onderstaande met muis/menu s: Download en unzip het bestand sklok-run.zip en open het in BlueJ Maak een Schaakklok-object Voer herstart() uit voor dit object Vraag de resterende tijd op voor
Uitleg van de Hough transformatie
Uitleg van de Hough transformatie Maarten M. Fokkinga, Joeri van Ruth Database groep, Fac. EWI, Universiteit Twente Versie van 17 mei 2005, 10:59 De Hough transformatie is een wiskundige techniek om een
Ingebouwde klassen & methodes
Ingebouwde klassen & methodes Statische methodes Methodes die bij een klasse horen ipv. bij een object public class Docent { public static Docent departementshoofd() { return new Docent("Jan Ivens"); private
Knowledgeable Referenceable Personable Accountable Scalable
Knowledgeable Referenceable Personable Accountable Scalable 1 WebForms en JavaBeans bij Essent Energie OGH presentatie 3 juli 2003 2 Agenda Inleiding Eenvoudige Java Bean in Web Forms Demo Meer complexe
Dynamisch Programmeren. Het Rugzakprobleem
INLEIDING Dynamisch Programmeren 1 Dynamisch Programmeren Section Page Inleiding................................................. 1 1 Oplossing................................................ 2 2 Subprobleem.............................................
Tentamen Programmeren in C (EE1400)
TU Delft Tentamen Programmeren in C (EE1400) 3 feb. 2012, 9.00 12.00 Faculteit EWI - Zet op elk antwoordblad je naam en studienummer. - Beantwoord alle vragen zo nauwkeurig mogelijk. - Wanneer C code gevraagd
Tree traversal. Ferd van Odenhoven. 15 november Fontys Hogeschool voor Techniek en Logistiek Venlo Software Engineering. Doorlopen van bomen
Tree traversal Ferd van Odenhoven Fontys Hogeschool voor Techniek en Logistiek Venlo Software Engineering 15 november 2011 ODE/FHTBM Tree traversal 15 november 2011 1/22 1 ODE/FHTBM Tree traversal 15 november
Modelleren en Programmeren
Modelleren en Programmeren Jeroen Bransen 27 november 2015 Recursie Objecten Constructors Aanpassen variabelen this keyword Recursie Recursie Recursieve functie roept zichzelf (direct of indirect) aan
Tentamen Objectgeorienteerd Programmeren IN1205 Voorbeeld
Tentamen Objectgeorienteerd Programmeren IN1205 Voorbeeld Afdeling ST Faculteit EWI TU Delft Bij dit tentamen mag u gebruik maken van: Barnes, Object-Oriented Programming with Java en de Notitie Algoritmiek
Tentamen in2705 Software Engineering
Tentamen in2705 Software Engineering Voorbeeld (bijna tweemaal te groot) U mag meenemen naar dit tentamen: Lethbridge, afdrukken PPT slides, afdrukken handouts. 1. De TU wil een nieuw systeem ontwikkelen
HOGESCHOOL VAN AMSTERDAM Informatica Opleiding. CPP 1 van 10
CPP 1 van 10 ADSdt 1-2009 TENTAMENVOORBLAD Voor aanvang van het tentamen s.v.p. de tentamengegevens goed doorlezen om eventuele misverstanden te voorkomen!! Naam student : Studentnummer : Groep : Studieonderdeel
Java Les 3 Theorie Herhaal structuren
Java Les 3 Theorie Herhaal structuren Algemeen Een herhaal structuur een is programmeertechniek waarbij bepaalde Java instructies worden herhaald net zo lang tot een bepaalde voorwaarde is bereikt. Een
In een klassendiagram worden klassen beschreven in termen
Sander Hoogendoorn is Partner bij Ordina Patterns voor het gebruik van referenties in bedrijfsklassen G O E D G E B R U I K VA N R E F E R E N T I E S In de dagen dat applicaties voornamelijk bestonden
Programmeren in Java 3
7 maart 2010 Deze les Zelf componenten maken Concurrency (multithreading): werken met threads levenscyclus van een thread starten tijdelijk onderbreken wachten stoppen Zelf componenten maken Je eigen component:
Hopfield-Netwerken, Neurale Datastructuren en het Nine Flies Probleem
Hopfield-Netwerken, Neurale Datastructuren en het Nine Flies Probleem Giso Dal (0752975) 13 april 2010 Samenvatting In [Kea93] worden twee neuraal netwerk programmeerprojecten beschreven, bedoeld om studenten
Introductie in C++ Jan van Rijn. September 2013
Introductie in C++ Jan van Rijn September 2013 Inhoud Classes Overerving Const correctness Standard C++ library Templates Classes Voordelen van classes: Modelleren Modulariteit Informatie afschermen Makkelijk(er)
Scala. Korte introductie. Sylvia Stuurman
Korte introductie Sylvia Stuurman Wat is er zo bijzonder aan? Schaalbaar Objectgeoriënteerd (handiger dan Java!) Functioneel Scripts schrijven Gecompileerd: Java bytecode Pagina 2 voor scripts Pagina 3
Programmeren in C++ Efficiënte zoekfunctie in een boek
Examen Software Ontwikkeling I 2e Bachelor Informatica Faculteit Wetenschappen Academiejaar 2010-2011 21 januari, 2011 **BELANGRIJK** 1. Lees eerst de volledige opgave (inclusief de hints/opmerkingen)!
Unit testen met Rhino mocks Twee handen op één buik
Unit testen met Rhino mocks Twee handen op één buik Sinds Kent Beck in 2000 zijn meesterwerk 'Extreme Programming Explained' schreef, weet iedere ontwikkelaar dat gedegen testen van software noodzakelijk
V = {a, b, c, d, e} Computernetwerken: de knopen zijn machines in het netwerk, de kanten zijn communicatiekanalen.
WIS14 1 14 Grafen 14.1 Grafen Gerichte grafen Voor een verzameling V is een binaire relatie op V een verzameling geordende paren van elementen van V. Voorbeeld: een binaire relatie op N is de relatie KleinerDan,
Abstracte klassen & Interfaces
Abstracte klassen & Interfaces Overerving public class Vierhoek {... Vierhoek public class Rechthoek extends Vierhoek {... public class Ruit extends Vierhoek {... Rechthoek Ruit Elke rechthoek is een vierhoek.
Inleiding Software Engineering! Unit Testing, Contracten, Debugger! 13 Februari 2014!
Inleiding Software Engineering Unit Testing, Contracten, Debugger 13 Februari 2014 Beknopte info over Unit Testing en Contracten kan je vinden op het einde van dit document. Eclipse beschikt over een handige
Grafen. Indien de uitgraad van ieder punt 1 is, dan bevat de graaf een cykel. Indien de ingraad van ieder punt 1 is, dan bevat de graaf een cykel.
Grafen Grafen Een graaf bestaat uit een verzameling punten (ook wel knopen, of in het engels vertices genoemd) en een verzameling kanten (edges) of pijlen (arcs), waarbij de kanten en pijlen tussen twee
Programmeermethoden. Recursie. week 11: november kosterswa/pm/
Programmeermethoden Recursie week 11: 21 25 november 2016 www.liacs.leidenuniv.nl/ kosterswa/pm/ 1 Pointers Derde programmeeropgave 1 Het spel Gomoku programmeren we als volgt: week 1: pointerpracticum,
Een unit test is geen integratie test. Niet het hele systeem, maar onderdelen van een systeem worden getest.
WAT IS EEN UNIT TEST? Een unit test is een test om de functionaliteit van stukken code te controleren. Een goede unit test waarborgt een consistente werking van een klein onderdeel (een unit ) van de broncode.
Java. Basissyllabus. Egon Pas
Java Basissyllabus Egon Pas 2011 BeanPole bvba Gasmeterlaan 92-9000 Gent BTW BE 472.902.516 Tel: + 32 9 224 42 17 Fax: + 32 9 223 62 88 www.beanpole.be [email protected] 1 Programmeren 1.1 Hoe werkt een
Uitwerking tentamen Analyse van Algoritmen, 29 januari
Uitwerking tentamen Analyse van Algoritmen, 29 januari 2007. (a) De buitenste for-lus kent N = 5 iteraties. Na iedere iteratie ziet de rij getallen er als volgt uit: i rij na i e iteratie 2 5 4 6 2 2 4
Modulewijzer tirprog02/infprg01, programmeren in Java 2
Modulewijzer tirprog02/infprg01, programmeren in Java 2 W. Oele 17 november 2009 1 Inhoudsopgave 1 Inleiding 3 2 Studiehouding 3 3 Voorkennis 4 4 Inhoud van deze module 5 5 Leermiddelen 5 6 Theorie en
