Articles Tagged 'School'

~ Boids in Python

Python Logo

Na het bekijken van het onderstaande filmpje van een zwerm spreeuwen vroeg ik mij af of die bewegingen zich aan een bepaald algoritme houden en of ik een programma kon schrijven die dit gedrag simuleerde. Na wat onderzoek bleek dat zowat alle dieren die zich in kudde voortbewegen dit doen volgens gelijkaardige, relatief eenvoudige processen.



Er zijn drie basisregels waaraan onder andere scholen vissen, zwermen vogels en kuddes gnoes zich houden:

  1. Voorkom botsingen met de dichtste buren door de andere kant op te gaan.
  2. Beweeg ongeveer in de zelfde richting en even snel als het gemiddelde van de buren.
  3. Beweeg naar het midden van de groep.

De paper Flocks, Herds, and Schools:
A Distributed Behavioral Model – 1987
van Craig W. Reynolds was de eerste die deze regels formeel omschreef. Aan de hand van die documentatie en een praktische omschrijving kon ik aan een implementatie beginnen. De boids implementatie in Python gebruikt pygame om een groep creaturen voor te stellen met een gekleurd vierkantje. De creaturen bewegen zich volgens de drie bovenstaande regels. Daarnaast proberen ze om binnen het zichtbare kader te blijven en begeven ze zich naar het midden van het kader. Om de boel wat interactiever te maken wordt de muisaanwijzer gezien als een gevaarlijk roofdier die niets liever lust dan vierkantjes. De vierkantjes proberen de roof-muis dus te ontlopen. De zesde en laatste regel legt een maximum snelheid op, zodat de bewegingen realistisch blijven.

De huidige implementatie is O(n²), terwijl het O(nk) zou moeten zijn, met k de grootte van de burenlijst. Een vloeiende simulatie van een zwerm van duizenden is dus momenteel niet mogelijk. De berekeningen voor een extra dimensie zijn erg eenvoudig te implementeren, helaas is de visualisatie van de resultaten dat niet. Ik heb geprobeerd om met de OpenGL bindingen voor Python te werken maar veel resultaat heeft dat niet opgeleverd. Dit is de 3D-versie, maar dan met een 2D visualsatie.

Ik heb er voor het gemak ook een uitvoerbaar bestand voor Windows van gemaakt.


~ Vergelijking Ruby VMs

Ruby Logo

Ik heb een B-Tree en een Red-Black tree geschreven in Ruby. Om die datastructuren te testen heb ik een programma geschreven dat alle woorden uit een grote tekst inleest in een b-tree met het woord als sleutel en de frequentie als waarde en daarna een red black tree gebruikt als priority queue met als sleutel de frequentie en als waarde het woord. Op die manier kunnen de meest voorkomende woorden bepaald worden. De broncode is hier neer te laden.

Het programma is een ideale test voor Ruby VM’s: het is redelijk intensief en gevarieerd. IronRuby, JRuby, Ruby 1.8 en Ruby 1.9 werden getest op een Intel Core 2 Duo E6660 en dit zijn de resultaten:

VM Duur Geheugen VM details
JRuby 28.79 sec 162MB jruby 1.1.3 (ruby 1.8.6 patchlevel 114) (2008-07-20 rev 7243) [x86-java]
IronRuby 88.15 sec 195MB IronRuby 1.0.0.1 on .NET 2.0.50727.1433
Ruby 1.8 104.1 sec 102MB ruby 1.8.6 (2007-09-24 patchlevel 111) [i386-mswin32]
Ruby 1.8 66.8 sec 96MB ruby 1.8.6 (2007-09-24 patchlevel 111) [universal-darwin9.0]
Ruby 1.9 33.42 sec 88MB ruby 1.9.1p0 (2009-01-30 revision 21907) [i386-darwin9.2.0]

De verschillen zijn dus erg groot. Zowel in geheugengebruik als in duur. Ruby 1.8 is blijkbaar erg traag maar gebruikt relatief weinig geheugen. JRuby is in deze test drie keer sneller maar gebruikt meer geheugen. Ook IronRuby is sneller dan de standaard Ruby VM maar gebruikt net niet het dubbele aan geheugen. Hierbij moet wel verteld worden dat IronRuby een alfa build is, de resultaten kunnen dus nog veel veranderen.

Ruby 1.9 werd later getest op Mac OS X, met dezelfde pc. De nieuwe Ruby lijkt toch enkele beloften in te lossen. Ter vergelijking werd de voor Mac OS X geoptimaliseerde Ruby 1.8 VM die standaard met het besturingssysteem meegeleverd wordt ook nog getest.


~ Collaborative Filtering: Onderzoek & implementatie

Vooruit Logo

Gisteren werd de laatste hand gelegd aan de thesis over collaborative filtering (CF) waar Greet Dolvelde en ikzelf een jaar mee bezig zijn geweest. Als je hier meer over wilt weten dan kan je het werk Collaborative Filtering: Onderzoek & implementatie [pdf] downloaden. De intiemste details van verschillende CF-benaderingen worden er in geuren en kleuren uit de doeken gedaan. Uit de poster zou moeten duidelijk zijn waarover de thesis eigenlijk gaat:

Poster Collaborative filtering: onderzoek & implementatie

De poster is ook verkrijgbaar in pdf-formaat.


~ Genetisch algoritme in Python

Python Logo

Maandag heb ik een examen over A.I. Dat gaat onder ander over genetische algoritmen. Om dat principe in werking te zien heb ik een eenvoudig programmatje geschreven in Python: er zitten enkele beestjes (vierkantjes) in een omgeving. Als de beestjes opvallen, witte beestjes zie je goed zitten op een zwarte achtergrond, worden ze verslonden. De beestjes die minder opvallen overleven, muteren of planten zich voort. Overlevenden gaan een generatie langer mee. Bij het muteren verandert de huidskleur willekeurig. Bij voortplanten wordt er een kind gemaakt die het gemiddelde van de huidskleuren van zijn ouders als kleur heeft. Als het meerendeel van de beestjes uiteindelijk een goeie schutkleur aangenomen hebben kan de achtergrond veranderd worden en begint alles van voor af aan.

Screenshot genetisch algoritme.

Dit is de broncode van het programma, het werkt enkel met grijswaarden. Er is ook een uitvoerbaar bestand voor Windows. De .exe is gemaakt met PyInstaller. De achtergrondkleur kan veranderd worden door er op te klikken. Dit is broncode van de versie met kleur.


~ Studium Generale: Het Vergeten Van Het Geheugen

Ik heb voor het vak Studium Generale een paper geschreven. De paper moet een kritische verwerking zijn van vijf bijgewoonde lezingen. Dit jaar was het thema

Het studium generale van de Hogeschool Gent zal zich dit academiejaar
buigen over de paradoxale werking van geheugen en vergeten voor de huidige
wereld. Ook blijkt het massale opslaan en toegankelijk maken van het collectieve
geheugen slechts voor een minderheid kritische meerwaarde te bezitten; het
toenemen van historisch besef en kritische inventarisatie gaat niet hand in hand
met de toename aan inzicht.

In deze paper wordt de aandacht gevestigd op één aspect van de brede waaier aan
mogelijke onderwerpen: De invloed van retorische technieken en de filosofie van
het dramatisme op de vorming van het collectieve geheugen. Aan dat centrale
thema worden de verschillende lezingen verbonden. De paper is te downloaden als pdf en ook de latex bron bestanden zijn beschikbaar:


~ Stage bij kunstencentrum Vooruit

Vooruit Logo

Kunstencentrum Vooruit heeft sinds kort een nieuwe site opgericht. Aan de site is een community luik gekoppeld waarop gebruikers een profiel kunnen aanmaken en evenementen op een persoonlijke wishlist kunnen plaatsen. Daarnaast kunnen ze er ook tickets voor voorstellingen kopen. Ook kunnen de gebruikers relaties tussen zichzelf en vrienden leggen.

Aan de hand van die gegevens en de gegevens van in het back-office systeem zou het mogelijk moeten zijn om een cultureel profiel op te stellen van de gebruikers en ze gepersonaliseerde, relevante tips geven. De voordelen van zo’n Customer Intelligence systeem zijn legio:

  • Kunstencentrum Vooruit leert zijn klanten beter kennen
  • De klanten krijgen gepersonaliseerde tips en hierdoor wordt hun culturele interesse geprikkeld
  • Trends kunnen makkelijker ontdekt worden
  • Er kan gerichter reclame gevoerd worden

En dat C.I. systeem gaan wij volgend jaar ontwikkelen. Er zal een uitgebreid onderzoek gebeuren naar de manier waarop en daarna wordt een implementatie gekoppeld met de in Ruby on Rails ontwikkelde website.


~ Sorteeralgoritmes in c++

Voor het vak algoritmen hebben we enkele sorteeralgoritmes besproken en in c++ geïmplementeerd. Dit is mijn versie van de algoritmes het gebruikt een interface SortAlgorithm en het Strategy design pattern om zijn werk te doen.

Sorteer algoritmes en het Strategy design pattern

In principe kan om het even wat gesorteerd worden maar sommige sorteeralgoritmes (Counting Sort) werken enkel met int’s. Om strings te sorteren kan gebruik gemaakt worden van de Nstring klasse.

Elk sorteeralgoritme kan getest en gemeten worden, dit is de uitvoor voor het shell sort algoritme met de Sedgewick incrementen:


Measuring sorting algorithm: Shell Sort: Sedgewick increments
                            Random           Sorted         Reversed
              128                0                0                0
              230                0                0                0
              414                0                0                0
              745                0                0                0
             1341                0                0                0
             2413                0                0                0
             4343                0                0                0
             7817                0                0                0
            14070             0.01                0                0
            25326             0.01                0             0.01
            45586             0.01             0.01             0.01
            82054             0.03             0.01             0.02
           147697             0.07             0.02             0.03
           265854             0.12             0.05             0.06
           478537             0.22             0.09             0.12
           861366             0.44             0.15             0.22

Hier kan de code gedownload worden: download. Niet alle algoritmes werken even goed dit is een lijst van werkende algoritmes die het wel doen:

  • Heap sort
  • Selection sort
  • Insertion sort
  • Counting sort (enkel met int’s)
  • Quicksort
  • Shell sort met
    • Sedgewick incrementen
    • Twee incrementen
    • veelvouden van drie als incrementen

~ Edutainment paper: Imperceptible edutainment & mathematics

Ik heb voor BIT4, een cursus die ik hier volg een paper geschreven over onwaarneembare edutainment en wiskunde. De bedoeling ervan is aan te tonen dat edutainment meer is dan schooltelevisie of iets als een flash game over de Afrikaanse zwaluw. Ik probeer te bewijzen dat drie verschillende spellen spelenderwijs wiskunde aanleren en dus edutaining zijn. Right...:


~ Wat we in Halmstad doen

Halmstad University

Mel en ik zijn bezig aan een systeem om war games te ondersteunen. War games zijn grootschalige ramp-oefeningen.

Bijvoorbeeld een aanval van terroristen op een kerncentrale. Er wordt een bepaald scenario opgesteld: terroristen gijzelen werknemers en dreigen de boel op te blazen. Er wordt op deze situatie gereageerd door iedereen die daar in het echt ook mee zou te maken hebben: politie, swat teams, er worden fake nieuwsberichten gemaakt door de media, de werknemers van de centrale zelf,....
Tijdens die simulatie wordt adhv vragenlijsten gepolst hoe goed (of slecht) alles verloopt. Die vragenlijsten komen op een beveiligde website die wij aan het programmeren zijn. Die data is dan de basis voor een rapport met de bevindingen: wat verliep er goed en wat kan beter.

We gebruiken het ASP.NET 2.0 platform in samenwerking met een sql express 2005 database én een object database: db4o. Daarmee zijn we aan het experimenteren. Daarbij horen unit tests en load tests. Daaruit blijkt dat Db4o zijn beloftes waar maakt:

Embed db4o's native Java and .NET open source object database engine into your product and store even the most complex object structures with only one line of code. db4o slashes development cost and time, provides superior performance, and requires no DBA.

blijkbaar zijn we verplicht een access database te gebruiken, hoe 1994, zucht.


~ Hallo uit halmstad

We zijn hier eergisteren (maandag) aangekomen. We namen het vliegtuig van Brussel naar Kopenhagen en dan de trein naar Halmstad. De reis is volledig volgens plan verlopen, we kwamen zoals gepland om 16.54 toe. Dus daar valt niet veel spannends over te melden. Bij deze: niets spannends wink ([;)]).

Sinds kort, drie minuuten dus, heb ik draadloos internet op mijn kamer. Dat is praktisch omdat een groot deel van onze opdracht "maak een website" is. Aan die opdracht kunnen we ten vroegste vrijdag beginnen: vrijdag krijgen we een uitgebreidere briefing over wat we moeten doen. Gisteren kregen we al een oppervlakkige uitleg tijdens een lunch met onze mentor.


~ Ik ga naar Halmstad

Ik heb me, vorig jaar al, kandidaat gesteld om aan een Erasmus/Socrates uitwisselingsprogramma mee te doen. Ik had meteen interesse om naar Zweden te vertrekken. Ik ga dus waarschijnlijk vanaf begin maart in Zweden, meer bepaald Halmstad, te vinden zijn. Aan de "Högskolan Halmstad" zou ik dan een opdracht krijgen die vergelijkbaar is met een stage in een bedrijf.
Välkommen till Högskolan I Halmstad

~ Eindwerk over Beeldschermtechnologieën: LCD, PDP & CRT

LCD-Scherm

Samen met Kris Welvaert en Dries Boone heb ik een eindwerk gemaakt over verschillende beeldschermtechnologieën. Dit is een pdf van het eindwerk over LCD, PDP & CRT. De inleiding maakt duidelijk over wat het precies allemaal gaat:

De televisie en de computer hebben in de 2 de helft van de twintigste eeuw de wereld totaal veroverd en op vele gebieden sterk veranderd. Dag na dag en in alle delen van
de wereld kijken mensen naar televisie; en dag na dag zijn miljoenen computermonitoren in bedrijf over een immens gebied in sterk verschillende toepassingen.


Schermen zijn een niet te verslaan medium geworden om elektronische informatie
(tekst of grafieken), stilstaande of bewegende beelden weer te geven. Geen enkel
ander medium heeft de veelzijdigheid, de snelheid en de interactie als die van een
scherm. Belangrijkste kenmerken van een scherm zijn de weergavekwaliteit en de
reactietijd. Ze bestaan in alle soorten, maten en gewichten. Afhankelijk van de
doelgroep ziet men dat er zich bepaalde weergavetechnieken profileren, zoals
bijvoorbeeld, voor grote groepen, zal er meer gebruik gemaakt worden van projectoren
dan van enig andere techniek. Net zoals met verplaatsbare schermen, hier ziet men
hoofdzakelijk maar flat panel displays (FPD). Deze kunnen nog wel onderverdeeld
worden in bepaalde technieken maar steeds zullen dit FPD’s zijn. Bij schermen voor
persoonlijk gebruik die stabiel moeten zijn is wel een grote verscheidenheid aan
weergaventypes. Men zal deze daarom nog onderverdelen in bepaalde
toepassingsgebieden zoals op het hoofd gemonteerde schermen, muurgemonteerde
schermen, bureauschermen…

Het zou onmogelijk zijn om alle beeldvormingprincipes voldoende te kunnen belichten,
daarom hebben wij ons beperkt tot het bespreken van drie beeldvormingprincipes,
namelijk CRT (Cathode Ray Tube), PDP (Plasma Display Panel) en LCD (Liquid Chrystal
Display) omdat dit tot op heden de meest courante beeldschermen zijn. Voorafgaand
aan deze hoofdstukken hebben wij de eigenschappen van licht en kleur en de werking
van het oog uitgelegd, dit om de werking van de verschillende technieken te kunnen
begrijpen. Vervolgens is er ook een hoofdstuk over modulatie in ons eindwerk
opgenomen, om de zendermodulatie van televisie te kunnen begrijpen en tot slot
hebben wij nog een hoofdstukje over teletekst.