Kort verslag van de bijeenkomst op 7 december 2013
De dag werd gevuld met een voortzetting van lopende discussies, gemengd met wat (min of meer) nieuwe onderwerpen:
- Henk kwam weer terug op de "vrije wil", en het verband met recursie, zoals hij dat in zijn artikel De computer en 'de vrije wil' heeft geprobeerd uiteen te zetten. Gerard vond dat de "opgebouwde wereld" mooi werd uiteengezet door Robbert Dijkgraaf in zijn college over "Het Allerkleinste" in het kader van DWDD-University. Henk opperde dat er misschien verband bestond tussen recursie en bewustzijn; Gerard merkte op dat het wel leuk is om allerlei verbanden te vermoeden, maar dat de hamvraag altijd is: Hoe zit het dan precies in elkaar? Een derde punt van discussie was de onvoorspelbaarheid van menselijk gedrag: Henk weet dit aan het grote aantal deeltjes (componenten) die de menselijke hersenen vormen; Gerard merkte op dat "massaliteit" de voorspelbaarheid ook kan vergroten — het gedrag van groepen is vaak beter te voorspellen dan dat van afzonderlijke individuen. Een interessant punt dat in deze discussie zijdelings ter sprake kwam is de vraag: "Kun je rekenen als je niet kunt tellen?"
- We vervolgden ook onze "eeuwigdurende" discussie over de plus- en minpunten van de diverse programmeertalen — een onderwerp dat voor AI behoorlijk relevant is: voor een zo complexe programmeerklus als het nabootsen van (menselijk) denken en gedrag kun je maar beter het beste "gereedschap" gebruiken dat er voorhanden is! Gerard deelde mee dat Python zo langzamerhand zijn all-round voorkeurstaal aan het worden was, mede omdat in deze taal een aantal ideeën uit LISP zijn overgenomen die voor sommige programmeerklussen zeer elegante oplossingen mogelijk maken. Hij gaf aan dat hij een oplossing elegant vond als die heel compact en logisch is; maar dat om zo'n oplossing te begrijpen van andere programmeurs wel gevergd mag worden dat ze de bij die oplossing gebruikte taal-features goed beheersen.
Henk heeft (met dank aan Theo) Python op zijn laptop geïnstalleerd om het uit te proberen. Voor wie ook met deze taal wil kennismaken: de Wikipedia-pagina over Python bevat een korte inleiding met simpele voorbeeldjes. De compiler/interpreter voor de taal, die je nodig hebt om eigen Python-programma's te laten werken, is te downloaden van de officiële Python website. - Om de interesse voor Artificiële Intelligentie buiten ons groepje wat aan te wakkeren, vroeg Gerard om ideeën om AI wat concreter te maken. Dat leverde vooralsnog weinig op; misschien is het een idee om wat aan taal- en spraakherkenning te doen? Henk had een (te?) ambitieus idee om de omschrijvingen (gegevens) in een Logiquiz, of Logigram, m.b.v. een computerprogramma om te zetten vanuit omgangstaal naar een voor de computer bruikbaarder vorm. Dat zou mooi aansluiten bij een programma dat hij ooit heeft geschreven voor het oplossen van dit soort puzzels.
- Gerard had in zijn privé-archief wat antieke nummers van het programmeertijdschrift Dr. Dobbs Journal opgediept en daar met Theo over gesproken op een bijeenkomst van de C-interessegroep. Als vervolg daarop had Theo vandaag een hele jaargang uit het archief van die groep bij zich, zodat ook de bezoekers van onze bijeenkomst ze konden doorkijken. Ook Gerard had een nummer meegebracht (februari 1997), vanwege een artikel over het programmeren van een op zes poten lopend robot-insect (in Forth). Abraham was geïnteresseerd in een kopie, maar zoals Theo al vermoedde blijkt het betreffende artikel, "Robots and Finite State Machines", ook online te lezen. Desgewenst is ook de programma-code te downloaden.
- Tot slot heeft Gerard nog wat verteld over het boek waarin hij bij vlagen serieus aan het studeren is: Compilerbouw, door N.Wirth. Het boek beschrijft hoe de syntax (grammatica) van een formele taal kan worden beschreven in EBNF(= Extended Backus Naur Form)-notatie, hoe EBNF-regels (producties genaamd) simpel kunnen worden gevisualiseerd in diagrammen, en hoe die syntax-diagrammen op hun beurt weer rechttoe-rechtaan kunnen worden omgezet in gedeelten van een parser (ontleedprogramma) voor die taal.
Deze werkwijze levert (en vereist) wel voor elke taal een andere, specifieke parser. Vervolgens laat Wirth zien hoe syntaxdiagrammen ook in een datastructuur kunnen worden opgeslagen, en hoe een algemene parser aan de hand van zulke datastructuren zinnen van die taal kan ontleden zonder dat de programmacode behoeft te worden aangepast. (De technische term hiervoor is data-driven programming.)
Het hoofdstuk dat Gerard nu aan het uitpluizen is, legt uit dat EBNF (dat immers zelf ook een formele taal is!) in zichzelf kan worden beschreven, en vertelt hoe een EBNF-parser kan worden uitgebouwd tot een programma dat EBNF-producties van een willekeurige taal als invoer gebruikt, en daarmee de syntax-datastucturen opbouwt waarmee de algemene parser die taal kan ontleden. Ook hier stuiten we dus weer op recursie (EBNF in zichzelf beschreven)! Dit verhaal wordt ongetwijfeld vervolgd na de volgende "vlaag"...
(GV 15 december 2013)
Kort verslag van de bijeenkomst op 2 november 2013
We hebben het over de volgende onderwerpen gehad:
- Er werd nog even kort teruggekomen op de GOTO-discussie van de vorige keer; overigens zonder dat er opzienbarende nieuwe gezichtspunten naar voren kwamen.
- Theo meldde dat hij nog steeds bezig is met het programmeren van een "game server"; het vordert wel, maar langzaam.
- Kees hield als vervolg op zijn eerder gehouden interessante lezing over het rekenen met grote getallen, een lezing over de getaltheoretische onderzoekingen waar hij die grote getallen voor nodig had. Het verhaal begon met Pythagorese drietallen, d.w.z. drie gehele getallen die tezamen de zijden van een rechthoekige driehoek kunnen zijn. Via de laatste stelling van Fermat (beter het "vermoeden van Fermat" genoemd, want de stelling werd pas ruim twee eeuwen na Fermat's dood wiskundig bewezen) kwam Kees uit bij het vermoeden van Euler. Beide vermoedens gaan over generalisaties van Pythagorese drietallen. Onderweg passeerden wat formules en resultaten uit de literatuur de revue, liet hij m.b.v. interessante grafieken iets zien van zijn eigen statistische onderzoekingen (vallend onder de experimentele wiskunde), en legde hij het modulaire rekenen uit. Boeiende materie, goed uitgelegd aan de hand van een Powerpoint-presentatie, waarvan alle aanwezigen ook nog een hand-out kregen. Nu hoeven we alleen nog maar een Kunstmatig Intelligent Programma te schrijven dat ons deze wiskundige onderzoekingen uit handen kan nemen... (grapje!)
- De rest van de bijeenkomst heeft Gerard getracht te laten zien hoe zijn berekening van het convexe omhulsel van TetraBot verloopt. Hij kwam met een tekening van dit omhulsel in uitgeklapte vorm, een soort "plattegrond" dus. De nieuwe naamgeving van de uiteinden, met 3 cijfers per "teenpunt" in plaats van latijnse en griekse (hoofd)letters, deed de onderliggende struktuur veel beter uitkomen. Doordat hij bij het debuggen van zijn programma gelogd had welke driehoeken in welke volgorde aan het omhulsel werden toegevoegd, kon iedereen op een kopie van die plattegrond zelf nagaan hoe het convexe omhulsel werd opgebouwd. Verder dan enkele stappen zijn we helaas niet gekomen, en ook de boekhouding die in de procedure moet worden bijgehouden — om op elk moment te weten welke hoekpunten, ribben en zijvlakken we al hebben, en vooral welke punten niet meer gebruikt mogen worden — kwam niet echt aan bod. Het ziet er dus naar uit dat dit onderwerp nog wel eens terug komt. Theo gaf Gerard nog de nuttige suggestie mee om eens te kijken wat er over convexe-omhulselalgoritmen (met misschien zelfs bruikbare programmacode) op het Web te vinden is.
Het verzoek ven Peter om van gedachten te wisselen over de content die wij als interessegroep kunnen bieden, eventueel ook aan andere HCC!leden of zelfs aan buitenstaanders, moest helaas blijven liggen tot een volgende keer, ook omdat Peter zelf eerder weg moest.
(GV 9 november 2013)
Kort verslag van de bijeenkomst op 5 oktober 2013
- Een korte terugblik op (onze deelname aan) de MegaCompuFair van de HCC!CompUsers interessegroep in de Bilt. Het aantal bezoekers was niet heel groot, wat mogelijk te maken had met de 'concurrentie' van de gelijktijdig gehouden 50Plus-beurs in Utrecht. Bovendien was het uiteindelijk 'slechts' een evenement georganiseerd door één interessegroep, en geen HCC-brede gebeurtenis zoals de vrijwilligersdag van vorig jaar.
Toch kijken we ook ditmaal weer met tevredenheid terug op onze deelname. Diverse bezoekers hebben kennis gemaakt met ons TetraBot-project; het was gezellig; we hebben ons gezicht laten zien; en de contacten met diverse andere interessegroepen zijn verstevigd. Daarnaast heeft Gerard zijn lezing over het Koningszet-probleem weer gehouden; ook al waren er erg weinig toehoorders in de zaal, de lezing werd met aandacht gevolgd. Dus zo mogelijk zijn we volgend jaar weer present. - Voor het begin van de plenaire sessie had Abraham een Propeller-bordje aan onze beamer gehangen, waarop tot onze verrassing een heel goede implementatie van Conway's Game of Life bleek te draaien! Een Propeller-bord is een microcontroller, zoiets als een Arduino, d.w.z. een computertje dat geschikt is om allerlei apparaten te besturen. Het Life-programma had Abraham ergens op het Internet gevonden.
- Naar aanleiding hiervan liet Gerard (een oude versie van) het programma Mirek's Cellebration zien, waarin niet alleen Conway's Game of Life, maar ook heel veel andere cellulaire automaten kunnen worden gedraaid. Het programma bevat een bibliotheek met voorbeelden en een help-database met allerlei informatie over cellulaire automaten.
- Van het een komt het ander, en Gerard liet ook nog twee van zijn eigen oude projectjes zien, n.l. een programma om een Langton-mier te laten lopen, en een poging om m.b.v. een Logo-turtle een soort van 'handschrift' voort te brengen.
- Tenslotte hield Gerard een uitgebreid verhaal over GOTO-eliminatie, naar aanleiding van zijn werkzaamheden aan de TetraBot-simulatie. De aanvankelijke implementatie was recursief, waarbij elke tak van TetraBot zijn eigen 'sub-takken' maakte. Gerard wilde dit wijzigen in een "centrale" opbouw, om de controle over het geheel binnen het Java-programma te versimpelen.
Titus had een oplossing met 3 geneste FOR-loops aangedragen, maar dan zou de code om een segment aan te maken op meerdere plekken moeten worden aangeroepen. Bovendien zou er een programmawijziging nodig zijn telkens als we met een andere "diepte" van de TetraBot willen experimenteren. (Aan de andere kant: hoe vaak zal dit voorkomen? Waarschijnlijk zelden of nooit...) Hoe dan ook, deze oplossing was niet helemaal naar Gerards zin, en hij ging op zoek naar een andere.
Uiteindelijk was het hem gelukt om een geschikt algoritme te vinden voor het genereren van alle segmenten (in de goede volgorde!); maar dit algoritme berustte op GOTO-statements, en de programmeertaal Java kent die niet. Hij stond dus voor de taak om zijn aanpak te converteren naar een algoritme dat alleen herhalingslussen gebruikte.
Gelukkig had Henk in het verleden, naar aanleiding van diverse discussies over het nut en de gevaren van het GOTO-statement, een "receptje" van enkele regels opgesteld om GOTO's uit een programma te elimineren. Hiermee is Gerard aan het werk getogen, en ondanks enkele onduidelijkheden in Henks beschrijving is de conversie tot een goed einde gebracht. Dit alles werd door Gerard uitgelegd, waarbij hij het uitgangsalgoritme illustreerde met behulp van een stroomschema, en het resulterende, GOTO-loze algoritme met een Nassi-Shneidermandiagram (ook wel programmastructuur-diagram, of PSD, genoemd). Ze bleken elkaar qua complexiteit, zo op het oog, niet veel te ontlopen.
(GV 16 oktober 2013, aangepast 9 november 2013)
Kort verslag van de bijeenkomst op 7 september 2013
Naast de gebruikelijke informele gesprekken over van alles en nog wat, en bestuursactiviteiten, was er ook een interessante plenaire sessie met de volgende onderwerpen:
- Een uitgebreide discussie over het artikeltje dat Henk Palstra had geschreven over de computer en de 'vrije wil'. Daarbij hadden Peter en Gerard het idee dat ze nu iets beter begrepen welk punt Henk precies probeerde te maken. Ook bleek dat Henk niet geheel tevreden was met da lay-out van het artikel op deze website; Gerard legde uit dat de leesbaarheid bij display op een beeldscherm andere eisen stelt aan de opmaak van een artikel dan bij een geprinte versie.
- Een door Henk geschreven computerprogramma dat het spelletje Mastermind speelt. Henk heeft zijn programma uitgebreid, zodat het aantal kleuren waaruit gekozen kan worden niet meer 4, maar maximaal 10 is. Hierdoor kunnen niet meer alle mogelijke gevallen tegelijkertijd in het geheugen worden bewaard. Henk heeft uitgelegd hoe de computer bekijkt hoe elk van de mogelijke zetten de verdere keuzeruimte beperkt, hoe de computer op grond daarvan bepaalt wat zijn volgende "gok" wordt, en hoe hij de kansen voor elke mogelijke keuze aanpast naarmate er nieuwe keuzemogelijkheden ontdekt worden.
- Tenslotte liet Gerard zien dat zijn TetraBot-simulatieprogramma nu ook de mogelijkheid biedt om de motoren van TetraBot afzonderlijk te laten draaien, in twee richtingen. Hiervoor heeft hij de segmenten namen gegeven, gebaseerd op hun initiële richtingen. Voor elk gemotoriseerd segment heeft hij een button toegevoegd met de naam van dat segment. Als zo'n button met de muiscursor wordt aangewezen, dan licht het corresponderende segment rood op. Wordt er dan een muisknop ingedrukt, dan draait het segment totdat de knop wordt losgelaten. Het segment draait linksom als de linker muisknop wordt ingedrukt, en rechtsom bij de rechter muisknop. De snelheid is nog niet aanpasbaar.
(GV 18 september 2013)
Kort verslag van de bijeenkomst op 6 juli 2013
De hele plenaire sessie was gewijd aan één onderwerp, namelijk een door Gerard geschreven Scratch-programma. Allereerst wat historie (aanvullende bijzonderheden zijn te vinden in de verslagen van de genoemde bijeenkomsten):
- Onze interessegroep werd voor het eerst attent gemaakt op de programmeertaal Scratch door Titus, op een bijeenkomst ergens in het voorjaar van 2012.
- Gerard heeft met behulp van deze taal gewerkt aan een versie van Party Planner en hiervan verslag gedaan op 7 juli 2012.
- Op 1 september 2012 kwam Gerard met een veel simpeler projectje: een enkele rondlopende mier. Deze mier was voor belangstellenden ook te bewonderen op de HCC!compusers MegaCompuFair, op 29 september 2012 in de Bilt.
- Op de bijeenkomst van 6 oktober 2012 zijn Peter en Gerard begonnen aan een nieuw onderwerp, namelijk een muurvermijdende vleermuis.
- In de daaropvolgende weken heeft Peter de vleermuis afgemaakt, en samengevoegd met de lopende mier van Gerard tot een boeiende roofdier-prooisimulatie. (Dat vleermuizen in de natuur geen lopende mieren eten maar vliegende insecten, is een onbetekenend detail; misschien dat de evolutie over een paar miljoen jaar de werkelijkheid op één lijn heeft gebracht met onze simulatie...) Dit programma was te zien op de HCC!verenigingsdag op 27 oktober 2012 in Den Bosch, en werd getoond aan eigen publiek op onze bijeenkomst van 3 november 2012.
- Op 1 december 2012 vestigde Peter de aandacht op diverse van Scratch afgeleide of op Scratch gelijkende talen en programmeeromgevingen.
- Ondertussen zat Abraham nog met een niet afgemaakt project, namelijk de hardware-versie van de lerende muis. Het programmeren van het neurale netwerk was een barrière die hij nog niet had genomen. Op de bijeenkomst van 2 maart 2013 vroeg hij aan Gerard, die met Patrick de Java-versie had gemaakt, of het mogelijk was om het neurale netwerk ook in Scratch te programmeren.
- Op 4 mei bleek de reden achter Abrahams verzoek: het is met een van Scratch afgeleide programmeeromgeving mogelijk om hardware aan te sturen! Op dezelfde bijeenkomst liet Gerard zien dat hij een begin had gemaakt met de Scratch-muis.
En vandaag kon Gerard een werkende (dat wil zeggen: lerende) versie van de muis in Scratch presenteren, zoals te zien is op de bovenstaande foto. Hierbij kwamen o.a. de volgende zaken aan bod:
- De "mechanica" van het systeem, d.w.z. het bewegen van de muis:
- Het terugstuiten van de rand van het scherm is een standaardfunctie in Scratch.
- De muis moet ook wegkaatsen van de planten. Om het aantal scripts van de muis beperkt te houden, is de verantwoordelijkheid om bij een botsing de terugstuitrichting te berekenen bij de planten gelegd.
- Met behulp van de modulo-functie kunnen we op een elegante manier alle richtingen begrenzen tussen -180 en +180 (graden). De meer voor de hand liggende methode met als — dan, vergelijkingen en assignments vergt in het "puzzelstukjessysteem" van Scratch veel meer ruimte.
- Het visuele systeem is vereenvoudigd t.o.v. de oorspronkelijke versie:
- De oorspronkelijke versie heeft ogen die in het centrum van het beeldveld (de "gele vlek") gevoeliger zijn dan aan de randen. In de Scratch-versie is het "netvlies" overal even gevoelig. De sterkte van het signaal is dus alleen afhankelijk van het percentage van het netvlies dat wordt ingenomen door het beeld van de planten.
- Er wordt bij de berekening van het signaal van de fotocellen geen rekening gehouden met de mogelijkheid dat een plant voor de muis het zicht op de andere plant geheel of gedeeltelijk kan ontnemen.
- De architectuur van het neurale netwerk en het leeralgoritme zijn ongewijzigd overgenomen van de oorspronkelijke versie. Gerard heeft geprobeerd de logica erachter uit te leggen door te beredeneren wat de neuronen in de tussenlaag representeren, en daaruit af te leiden wat de gewichten van de tweede verbindingslaag moeten worden. Bovendien heeft hij laten zien dat het neurale netwerk nog aanzienlijk vereenvoudigd zou kunnen worden.
- In tegenstelling tot de Java-versie, waar je eigenlijk alleen maar vol bewondering naar kunt kijken, is de Scratch-versie erg geschikt om zelf mee te experimenteren:
- Het is in Scratch vrij gemakkelijk om de waarden van variabelen tussentijds te wijzigen: gewoon in een assignmentblok de variabelenaam kiezen, een waarde invullen, en het blok aanklikken met de muis. Daarom zijn een aantal parameters, die in vorige versies gewoon als getallen in de code stonden, nu als variabelen opgenomen.
- Voor de muis zelf zijn dat de snelkeid (het aantal pixels per stap) en de draaiing (de mate waarin zijn richting wordt bijgestuurd op basis van het signaal van de uitvoerneuronen).
- Voor het visuele systeem zijn dat de ooghoek (de hoek die de ogen onderling maken) en de beeldhoek (het beeldveld van één oog). Ook wordt er in de scripts rekening mee gehouden dat in Scratch de grootte van de planten kan worden aangepast.
- Voor het neurale netwerk zijn dat de leerfactor (de mate waarin tijdens de "leermomenten" de gewichten worden aangepast), de retentie (de mate waarin de muis onthoudt wat hij gedaan heeft, om daarvan te kunnen leren als hij een plant raakt), de steilheid van de sigmoidefunctie, en de willekeur (de ruis in de uitvoerneuronen, die hij nodig heeft om te kunnen leren).
- Terwijl het programma loopt, worden op de achtergrond twee grafieken getekend:
- Het percentage van het totale aantal botsingen dat de rode plant geraakt is. Deze grafiek zal, als alles naar wens verloopt, een dalend verloop laten zien.
- De gemiddelde grootte van (de absolute waarde van) de gewichten. Deze grafiek zou stijgend moeten verlopen.
De Scratch-versie heeft wel een belangrijk nadeel: hij is aanzienlijk langzamer dan de Java-versie. Daarnaast lijkt hij niet altijd goed te leren, soms krijgen gewichten het verkeerde teken. Daarbij speelt natuurlijk een rol dat de allereerste leereffecten plaatsvinden op basis van random ruis; maar het is ook mogelijk dat de bovengenoemde vereenvoudigingen in het visuele systeem medeverantwoordelijk zijn, of de andere waarde die sommige van de parameters in de Scratch-versie hebben. Nader onderzoek zal hopelijk meer duidelijkheid brengen.Hoewel verscheidene aanwezigen ook hadden aangegeven dat ze iets plenair te melden hadden, heeft Gerard met zijn presentatie helaas de hele bijeenkomst gemonopoliseerd. De volgende keer, na de vakantie, is er hopelijk weer meer ruimte voor andere sprekers en onderwerpen.
(GV 15 juli 2013)
Kort verslag van de bijeenkomst op 1 juni 2013
- Martijn vertelde dat hij beroepsmatig ervaring heeft met computer-visiontechnieken: ze worden gebruikt om bij tulpen, die op een lopende band langskomen, te bepalen waar precies de bloemknop zit. Dit gebeurt met behulp van röntgenstraling, omdat de knop vaak achter bladeren schuil gaat. Hem is gevraagd om op een van onze toekomstige bijeenkomsten hierover een korte, voorbereide presentatie te geven. Hij zal zich over dit verzoek beraden.
- Kees hield aan de hand van een hand-out van 2 pagina's een korte voordracht over routines voor het werken met grote (gehele) getallen. Weliswaar heeft de door hem gebruikte programmeertaal Java daarvoor een class (BigInteger geheten) met speciale routines, maar Kees vond die standaardfuncties te traag en heeft zijn eigen pakket geschreven. Dat bleek echter nog langzamer te zijn. Zo kwam hij er achter dat de traagheid niet zozeer lag bij de Java-implementatie, maar bij het probleem waarbij hij die grote getallen nodig had: de tijdbehoefte daarvan nam veel sterker dan lineair toe met de grootte van de gebruikte getallen. Hij is dus weer teruggegaan naar de Java-versie, met uitzondering van drie functionaliteiten die in BigInteger ontbraken: de conversie van een int naar een BigInteger, het berekenen van machten, en het berekenen van hogere-machtswortels. Van die drie functies heeft hij de werking uitgelegd. Theo opperde dat voor het eerste doel (de conversie) de standaardfunctie BigInteger.valueOf( int ) gebruikt kan worden.
Een volgende keer zal Kees wat vertellen over het probleem waarvoor hij die grote getallen nodig had. - Peter vertelde dat de 'overlapping' (qua leden) met de andere interessegroepen van de 'paraplu techniek' ("programmeren en besturing" lijkt hem een betere naam) bekend is. Zo heeft HCC!AI momenteel 23 leden gemeenschappelijk met HCC!C, 26 met HCC!Pascal, en 17 met HCC!Robotica.
- N.a.v. zijn plannen voor een programmeercompetitie, merkte Peter op dat de website waar het programma draaide uit de lucht is. Maar hij is er via een Amerikaans internetforum ook achtergekomen waarom hij het programma zelf in verscheidene web-browsers niet aan de praat heeft gekregen: het programma draait alleen op servers, niet op clients. Bij een snelle test op de HCC!AI Windows XP laptop (waarop door Wim de Rooij ooit software voor een Joomla website is geïnstalleerd) bleek dat inderdaad het ontbrekende ingediënt te zijn geweest. Er zit dus weer leven in het initiatief!
- Titus kan zijn gesimuleerde TetraBot nu met één scriptfile aansturen. Het programma is desgewenst beschikbaar (als .exe-bestand voor Windows) voor mensen die zelf met de bewegingsmogelijkheden van TetraBot willen experimenteren.
- Verder liet Titus nog twee andere werkstukjes zien: een korte animatie met twee halve bollen (die hij wil uitbouwen tot een animatie waarin een bloem ontstaat), en een plaatje dat hij de computer m.b.v. raytracing heeft laten tekenen. Dit laatste vertoont nog wel een aantal onverklaarbare heldergroene punten. Theo deed hiervoor enkele mogelijke verklaringen aan de hand, w.o. ongewenste afronding bij type-conversie.
- Tussen de bedrijven door deelde Henk ook een nieuwe, verbeterde versie van zijn artikel De computer en 'de vrije wil' aan geïnteresseerden uit. Eerder had hij al het commentaar van Peter en Gerard op de eerste versie van dit stukje ontvangen. We zijn benieuwd of hij het artikel nog weet te verbeteren.
- Tegen het slot van de bijeenkomst kwam Abraham ons op de hoogte stellen van de vorderingen met de hardware-versie van TetraBot. Eén van de problemen was dat hij geen bruikbare sensorsignalen binnenkreeg. Dit heeft hij opgelost door de volgende ingrepen:
- Over de ingefreesde en geverfde zwart-witte ringen heeft hij een papiertje met een zwart-wit streepjespatroon geplakt. Dit geprinte patroon vertoont een sterker contrast dan het door Aloys vervaardigde (en zeer fraai en professioneel ogende) oorspronkelijke frees- en schilderwerk.
- Op deze papier-printjes heeft Abraham de zwarte strepen naar verhouding breder gemaakt.
- Verder heeft hij de uitgangsspanning van de lichtgevoelige sensoren, die moeten waarnemen of ze boven een witte of boven een zwarte streep zitten, met transistoren versterkt.
- Tenslotte heeft hij de afstand tussen de sensoren en de papierstroken verkleind.
Ondertussen neemt Aloys de mechanische constructie nog eens door: de buizen lopen namelijk soms aan bij het draaien van de motoren, en ook dat moet verholpen worden.
(GV 3 juni 2013)
Kort verslag van de bijeenkomst op 4 mei 2013
De volgende onderwerpen kwamen aan de orde:
- Henk kondigde aan dat hij een conceptversie van zijn artikel over de vrije wil zo ongeveer af had, en dat hij benieuwd is naar eventuele op- en aanmerkingen. Hij had het geschrift echter nog niet vermenigvuldigd. Omdat het geen goed idee leek om tijdens de bijeenkomst met zijn allen een door de beamer op de muur geprojecteerd artikel te gaan zitten lezen, is afgesproken dat Gerard het op de website plaatst, en dit concept t.z.t. vervangt door een (mede op grond van de ontvangen feedback) meer definitieve versie.
- Mark bracht onder de aandacht dat er op het Internet vele uitstekende (en ook gratis!) cursussen zijn te vinden, waaronder ook een aantal over Kunstmatige Intelligentie! Zelf was hij via Coursera bezig met de cursus machine learning van Andrew Ng.
- Gerard liet weer wat boeken en tijdschriften zien, die hij onlangs voor zichzelf op de kop had weten te tikken. Interessant waren vooral een boek over compilerbouw (Gerard heeft al eens een presentatie gehouden over parsen, en ook Titus is bij zijn programmeeraktiviteiten wel eens tegen dit vakgebied opgelopen); een boek over graphics (met informatie die mogelijk van pas komt bij het verbeteren van zijn TetraBot-simulatieprogramma); en een boek over het gebruik van diverse AI-technieken bij het programmeren van computergames.
- Peter moest tot zijn spijt meedelen dat zijn idee voor een programmeerwedstrijd is stukgelopen: de programmeer-omgeving die hij op het oog had bleek helaas niet browser-onafhankelijk.
- Ed Buzzi van de HCC!Robotica interessegroep kwam (op verzoek van Peter en Gerard) even bij onze groep zitten, zodat we informatie en standpunten konden uitwisselen over de mogelijke fusie van de "techniekgroepen" (die er voorlopig nog niet in lijkt te zitten), en over andere mogelijkheden om samen te werken.
- Ook Abraham heeft de afgelopen maand niet stilgezeten: hij is aan de gang geweest met iets dat niet Scratch genoemd mag worden, omdat er door derden aanpassingen in zijn gemaakt, maar dat wel van Scratch is afgeleid, en er daarom toch wel heel erg op lijkt. Met behulp van deze software is hij er in geslaagd om wat lichtjes op een electronicakaartje aan en uit te laten gaan. Dat lijkt misschien niet zo spectaculair, maar het bewijst dat er met deze Scratch-kloon hardware (lees: een Robot!) aangestuurd kan worden. Abraham wil met deze aanpak zijn robotmuis-project weer wat leven gaan inblazen. In aansluiting daarop liet Gerard zien dat hij begonnen was een Scratch-versie van de java-muis te maken: het arme beestje ziet, proeft en leert nog niets, maar stuitert al wel vrolijk terug als hij tegen de planten of de randen van zijn "wereld" botst.
- Het laatste uurtje van de middag was gewijd aan checkers, de Amerikaanse versie van het damspel. Gerard had namelijk thuis op een donker en stoffig hoekje van zijn harde schijf de ontbrekende broncode van zijn checkers-programma gevonden, en hij was er in geslaagd het programma weer aan de praat te krijgen. Natuurlijk maakte hij meteen misbruik van de gelegenheid om het checkers-programma van Kees tot een heuse wedstrijd uit te dagen! Helaas kon Gerards programma op de oude W98-laptop van de AIgg niet veel dieper dan 5 halve zetten vooruitrekenen. (Zo'n halve zet heet in spelletjesjargon een ply; een hele zet is als beide spelers één stuk hebben verplaatst.) Kees was zo sportief om zijn programma (dat op een veel krachtiger computer draaide) ook tot 5 ply te beperken. Na wat gekibbel over wie er met zwart mocht spelen (in checkers doet zwart de eerste zet, en beiden hadden hun programma zo geschreven dat het met wit speelde...) en een kleine programma-aanpassing van Gerard dienaangaande, kon de bloedstollende krachtmeting beginnen. Bij gebrek aan een spelserver of een peer-to-peerprotocol en een netwerkverbinding tussen de beide computers, moest elk de zetten van zijn tegenstander zelf in zijn computer intypen. De volgende (ietwat donkere) foto geeft een indruk van de sfeer tijdens deze zitting.
Links op de voorgrond zit Kees. Over zijn schouder kijken we mee naar het scherm van zijn laptop, dat de bordposities toont m.b.v. ASCII-karakters. (Of Unicode, daar wil ik vanaf wezen...) Rechts op de achtergrond, van opzij gezien, zit Gerard de laatste zet van Kees in te typen. Zijn programma geeft de bordpositie weer m.b.v. een grafische afbeelding (een door de computer getekend plaatje), die via de beamer op de muur wordt geprojecteerd, zodat ook de toeschouwers in dit gevecht konden worden meegesleept.
Maar natuurlijk zegt zo'n foto niet alles: denksporten staan nu eenmaal niet bekend om hun waarde als visueel spektakel. Daarom volgen hier de zetten van de partij, zoals door Gerard genoteerd:
Gerard Kees Gerard Kees Gerard Kees Gerard Kees 1 12 – 16 24 – 19 13 8 – 11 19 – 16 25 12 – 16 6 – 2 37 27 – 23 1 – 6 2 16 – 20 28 – 24 14 4 – 8 22 – 18 26 24 – 27 2 × 11 38 23 – 27 12 – 16 3 9 – 14 22 – 17 15 15 – 22 25 – 18 27 19 – 23 15 – 10 39 27 – 23 7 – 11 4 14 – 18 23 – 14 16 10 – 15 17 – 13 28 23 – 26 10 – 6 40 23 – 27 11 – 15 5 6 – 9 26 – 22 17 15 × 22 24 – 19 29 27 – 23 6 – 1 41 27 – 23 15 – 19 6 9 – 18 22 × 6 18 8 – 12 13 – 9 30 23 – 27 14 – 10 42 23 – 27 19 – 24 7 1 × 10 31 – 26 19 22 – 26 27 – 23 31 5 – 9 10 – 6 43 27 – 23 24 – 19 8 2 – 6 32 – 28 20 26 × 31 9 – 6 32 9 – 14 6 – 2 44 23 – 27 19 – 24 9 6 – 9 26 – 22 21 31 – 27 23 – 18 33 14 – 18 11 – 15 45 27 – 23 24 – 19 10 9 – 14 30 – 26 22 27 – 24 19 – 15 34 18 – 23 15 – 19 11 11 – 15 26 – 23 23 12 × 19 15 × 8 35 26 – 31 19 × 12 12 14 – 18 23 × 14 24 3 × 12 18 – 15 36 23 – 26 2 – 7
Aan het eind had het programma van Kees duidelijk materieel voordeel behaald, maar kon het (mede door de bovenvermelde sportieve geste van Kees) niet ver genoeg doorrekenen om daarmee de partij in zijn voordeel te beslissen, en koos het voor risicoloos heen-en-weerschuiven van een van zijn kings (dammen). Aangezien het programma van Gerard al eerder dezelfde strategie had opgevat, eindigde de partij in remise door herhaling van zetten.
(GV 16 mei 2013)
Kort verslag van de bijeenkomst op 6 april 2013
- Een groot deel van de bijeenkomst werd gevuld met een discussie over een mogelijk samengaan van de diverse interessegroepen die zich met de technische kant van de computerhobby bezighouden: Basic, C, Forth, NewBrain, Pascal, Robotica, en AI. Diverse mensen waren skeptisch over de voordelen van een fusie en vreesden voor de mogelijkheid om onze eigen aktiviteiten voort te kunnen blijven zetten; anderen zagen het wat minder somber in, en pleitten voor een constructieve opstelling. Dit verhaal krijgt ongetwijfeld een vervolg.
- Gerard vestigde de aandacht op enkele interessante recente tijdschriftartikelen, o.a. over natuurlijke taal en over het menselijke brein.
- Henk werkt nog aan zijn artikel over de vrije wil. Hij gebruikt daarin het begrip opgebouwde wereld: het idee dat het heelal is opgebouwd uit elementaire bouwsteentjes, die in slechts een beperkt aantal soorten zijn onder te verdelen, en die zich stapsgewijs samenvoegen tot steeds grotere eenheden, volgens wetten die in principe door mensen te begrijpen zijn. Een snelle zoektocht op het Internet via Google leerde ons dat de term "opgebouwde wereld" in deze betekenis niet gangbaar is. Dat betekent dat als Henk zijn betoog (mede) op dit begrip wil baseren, hij het zelf voor zijn lezers zal moeten definiëren.
- Theo heeft gewerkt aan een HTML-server om computers (en desgewenst ook mensen) boter-kaas-en-eieren tegen elkaar te laten spelen, en liet zijn meest recente versie zien. Hoewel hij er aan is gaan twijfelen of HTML voor deze toepassing wel een geschikt communicatieprotocol is, ziet het er toch erg veelbelovend uit. Gerard stelde daarom voor om met deze benadering door te gaan totdat de beperkingen van HTML onoverkomelijk worden.
- Peters plannen voor een programmeercompetitie beginnen steeds vastere vormen aan te nemen. Het gaat om een omgeving met elkaar beschietende rijdende robotjes, en lijkt dus wel op Robocode, waarvoor in onze groep al eerder aandacht is geweest. Peter heeft zijn oog echter laten vallen op een variant waarbij kenners van gangbare programmeertalen als C# of Java geen duidelijke voordelen hebben.
- Gerard vertelde dat hij zijn lezing over het Koningszet-probleem inderdaad voor geïnteresseerden van de C en Open Source interessegroepen heeft gehouden. Naar aanleiding daarvan kreeg hij van Theo een interessante aanvullende suggestie: het lijn-tekenalgoritme van Bresenham is ook bruikbaar als oplossing voor dit probleem. Het is echter niet meteen duidelijk hoe de efficiëntie, de flexibiliteit en de robuustheid van deze methode zich verhouden tot de door Gerard behandelde methoden. Gerard nam zich voor om hiernaar te gaan kijken.
- Titus meldde dat hij een bug heeft verwijderd uit het programmaatje waarin hij een Cartesisch Genetisch Algoritme toepast op een eenvoudig probleem. Het programma leert nu! Dat wil echter nog niet zeggen dat alles nu koek en ei is: bij alle testruns die hij liet zien, bleef het programma in een lokaal optimum steken. Er valt dus nog wel wat aan te verbeteren…
- Gerard besprak enkele aanpassingen die hij wil gaan aanbrengen in zijn TetraBot-simulatie-programma:
- Momenteel zijn de vectoren die hij bij zijn ruimtelijke berekeningen gebruikt, immutable objects. Dit is een tamelijk bug-resistente manier van programmeren, maar leidt tot het voortdurend aanmaken van nieuwe vector-objecten en het "weggooien" van de oude, hetgeen van de programmeertaal nogal wat geheugenbeheer (garbage collection) vergt. I.v.m. de efficiëntie en samenhang van zijn programma wil Gerard nu toch gaan werken met vectoren die bij de berekeningen daadwerkelijk worden gewijzigd.
- Verder heeft hij een ideetje uiteengezet om de segmenten van TetraBot een naam te geven op grond van hun richting (in de beginpositie!); deze naamgeving is belangrijk als je d.m.v. een script alle gewrichten van TetraBot afzonderlijk wilt aansturen.
(GV 13 april 2013)
Kort verslag van de bijeenkomst op 2 maart 2013
- De Algemene Ledenvergadering begon wat later dan gepland, en vergde nauwelijks een uur. De meeste agendapunten waren hamerstukken; wel kwamen er enkele nuttige ideeën en suggesties naar boven, die het bestuur in haar werkzaamheden zal meenemen.
- Na de A.L.V. nam Abraham de gelegenheid te baat om voor het TetraBot-archief met zijn eigen camera de volgende foto te maken van Titus z'n fischertechnik-pythagorasboom (mooi scrabble-woord trouwens…) waarmee het allemaal begon.
- Gerard vertelde dat hij de Koningszet-lezing deze maand op de gezamenlijke bijeenkomst van de C en OpenSource interessegroepen geeft.
- Ook liet Gerard het door hem meegebrachte boek The Art of Java van Herbert Schildt en James Holmes rondgaan; dit boek is interessant omdat hoofdstuk 10 gaat over "AI-based problem solving".
- Tenslotte vertelde Gerard dat hij nu bezig was met hoofdstuk 3 in het boek Cognitive Psychology van John R. Anderson; dit hoofdstuk gaat over modellen die het doel en het mechanisme van het verschijnsel "aandacht" verklaren.
- Henk vestigde de aandacht van de groep op het boek Universum uit het niets van Lawrence Krauss, waar hij weinig van zei te begrijpen. Hij was dit boek, dat een materialistisch en atheïstisch wereldbeeld uitdraagt, aan het lezen als achtergrondmateriaal voor een artikel over de vrije wil, dat hij voor onze website aan het schrijven is en dat gestaag vordert.
- Abraham had een vraag over Scratch: zou het mogelijk zijn om het neurale netwerk van onze lerende muis-applet in deze taal te programmeren? Gerard was daar wel optimistisch over.
- Onder aanwezigheid van de voorzitter van Robotica werd een uitgebreide discussie gevoerd over de verhouding tussen de HCC als geheel en de interessegroepen. Dit naar aanleiding van een formulier dat was uitgereikt op de laatste Vergadering van Interessegroepen, met het verzoek daarop te vermelden wat wij als interessegroepen aan content kunnen ophoesten. Algemeen werd de opvatting gedeeld dat wij bijeenkomen om gezamenlijk onze hobby te beoefenen, en dat wij elkaar en oprecht geïnteresseerde nieuwelingen daarbij doorgaans graag een helpende hand bieden; maar dat wij geen lezingen- en cursusfabriek of op afroep beschikbare vraagbaak zijn. Het is echter wel in ons belang om ook buiten het eigen kringetje belangstelling voor onze hobby te kweken, en zo meer input en activiteit in onze interessegroepen te krijgen. Gerard drong er daarom op aan om af en toe ook wat tijd te steken in het presentabel maken van de content, die a.h.w. als bijproduct uit onze bezigheden ontstaat. Om deze resultaten ook daadwerkelijk naar buiten te brengen, kunnen dan misschien incidentele, informele contacten met regio's en andere interessegroepen worden gelegd.
- Door deze discussie (en de A.L.V.) was er helaas geen tijd meer voor de volgende onderwerpen:
- Peter kon nu zijn voorstel voor een programmeercompetitie in een wat concretere vorm presenteren.
- Gerard wilde eventueel nog wat vertellen over de wijzigingen die hij begonnen was aan te brengen in zijn TetraBot-simulatieprogramma.
(GV 9 maart 2013)
Kort verslag van de bijeenkomst op 2 februari 2013
De volgende onderwerpen kwamen onder andere aan de orde in de plenaire sessie:
- Mark vertelde dat hij geïnteresseerd was geraakt in het programmeren van apps voor Android; hij was bezig met een app voor scholieren om Franse werkwoorden te helpen leren. Gerard merkte op dat computerondersteund onderwijs ook een belangrijke praktische toepassing van AI is. Verder suggereerde Gerard dat een app om Boter-Kaas-en-Eieren te spelen misschien ook wel leuk was (voor scholieren en kinderen), en als vorm van game-playing ook als AI-aktiviteit beschouwd kan worden.
- Titus had, op verzoek van Abraham, zijn oorspronkelijke pythagorasboom van fischertechnik meegenomen. Uit dit bouwsel kwam het idee van TetraBot voort. Helaas had Abraham zijn digitale camera niet bij zich; zodat Gerard maar aan het fotograferen is geslagen.
- Peter verklaarde nog steeds te werken aan zijn idee om een AI-gerelateerde competitie op te zetten via onze website. Tevens had hij een expertsysteem in Javascript ontdekt. N.a.v. van de vraag naar de beste waarden voor het momentum en de leerfactor in error-backpropagation neurale netwerken, wist hij nog te melden dat deze tegenwoordig vaak dynamisch werden aangepast tijdens het leren, om de convergentiesnelheid te optimaliseren.
- Kees deelde ons mee dat hij bezig was met het maken van een library voor het rekenen met (zeer) grote getallen. Java heeft hiervoor wel een standaard class, BigInteger, maar die is zeer traag.
- Henk had zitten bladeren in De ijzeren wil van Bas Haring, een uiterst leesbaar boekje over de vraag of intelligente machines mogelijk zijn, en daardoor was zijn interesse in het "probleem van de vrije wil" weer opgerakeld. Hij sprak het idee uit dat die vrije wil kan samenhangen met de mogelijkheid (van mensen en/of computers) om zichzelf te programmeren, en herinnerde ons er aan dat hij ooit een dergelijke mogelijkheid, die aanwezig is in computertalen als Lisp, Logo, assembler en Python, ook in een BASIC-interpreter had ingebouwd. Gerard nodigde hem uit om zijn ideeën hierover eens goed op schrift te stellen, voor eventuele publicatie op deze website.
- Abraham vertelde ons dat hij nu 5 ZigBee-modules (2,4 GHz radiocommunicatie) voor TetraBot binnen had gekregen. Ze werken nog ook: hij heeft getest door elke module een eigen identificatienummer uit te laten zenden. Voor de besturing van de motoren wil hij een z.g. propellor-chip gaan gebruiken. Een mechanisch probleem is dat de mechanica in de poten nog enigzins lijkt aan te lopen.
- Gerard tenslotte vertelde dat hij bezig was in een boek over Cognitive Psychology met een sterk neurobiologische inslag, en dat hij het werk aan zijn TetraBot-simulatieprogramma weer wilde hervatten. Verder riep hij de aanwezigen op om zo mogelijk eens op een regiobijeenkomst of een bijeenkomst van een andere (liefst qua onderwerp verwante) interessegroep te gaan kijken. Hij had zelf namelijk door zijn bezoeken aan de C-interessegroep ervaren dat zoiets tot nuttige contacten en interessante informatie-uitwisseling kan leiden.
(GV 8 maart 2013)
Kort verslag van de bijeenkomst op 5 januari 2013
- Gerard heeft voor onze AI-bibliotheek het boek The Society of Mind van Marvin Minsky weten te bemachtigen. Marvin Minsky is een van de belangrijkste onderzoekers op AI-gebied, en in The Society of Mind ontvouwt hij een theorie die beschrijft hoe allerlei simpele mechanismen of modules, die elk voor zich niet veel kunnen, door samenwerking toch zoiets als de menselijke geest kunnen vormen.
- Ook vertelde Gerard dat hij bezig was in het boek Logo. Deze paperback (uit de Aula-reeks van Het Spectrum) gaat niet specifiek op de programmeertaal Logo in, maar vooral op wat je ermee kunt doen in het onderwijs.
- In aanvulling op het vorige punt en op wat hij vorige maand vertelde, wees Peter de groep ook op Etoys, nog weer een andere tak aan de boom van educatieve programmeertalen en -omgevingen. Het mooie van Etoys is dat het volledig object-georiënteerd is, omdat het is gebaseerd op Smalltalk, een van de eerste en "zuiverste" object-georiënteerde programmeertalen.
- Henk deelde mee dat hij nu ook "op Internet is". Dat maakt communicatie en eventuele samenwerking met de rest van de groep natuurlijk een stuk gemakkelijker…
- Kees had een vraag voor de groep: hoe groot moeten de leerfactor (meestal aangegeven met de Griekse letter eta) en de "momentum factor" (alpha) in een backpropagation neuraal netwerk zijn? Het antwoord (van Peter en Gerard) was dat daar geen echt vaste regels voor te geven zijn; het hangt af van de bouw van het netwerk (aantal en grootte van de netwerklagen), de trainingsdataset, en vooral de vorm van de (meerdimensionale) te optimaliseren functie. Hoewel ervaring van veel nut kan zijn bij het vinden van de beste waarden, blijft het meestal toch een proces van trial and error.
- Titus introduceerde het bij ons nog onbekende spelletje "Drie is te veel". Hij was het tegengekomen in twee artikelen van M.C. van Hoorn en H.N. Pot in Pythagoras, het wiskundetijdschrift voor jongeren, waarvan de oude nummers ook op het Internet te vinden zijn. In nummer 20/5 (mei 1981, pp.118-119) worden de regels van twee varianten uiteengezet, en in nummer 21/1 (september 1981, pp. 14-17) wordt de strategie uitgelegd. Het spel heeft interessante overeenkomsten met "boter-kaas-en-eieren", en is dus ook een interessant proeftuintje voor AI.
- Daarnaast vertelde Titus dat hij bezig was met Cartesisch genetisch programmeren. Ook hier komen we waarschijnlijk wel op terug.
- Peter vertelde dat hij speelde met het idee om via onze website een soort competitie op te zetten. Omdat hij het idee eerst nog wilde uitwerken, volgen de bijzonderheden later. Houd deze nieuwsrubriek dus in de gaten…
(GV 10 januari 2013)