...

Bijeenkomsten gehouden in 2006

In 2006 zijn op de volgende data bijeenkomsten gehouden: 2 december 2006 geen lezing 4 november 2006 geen lezing 7 oktober 2006 lezing "Koningszet", door Gerard Vriens 2 september 2006 geen lezing 5 augustus 2006 geen lezing 1 juli 2006 geen lezing 3 juni 2006 geen lezing 6 mei 2006 geen lezing 1 april 2006 geen lezing 4 maart 2006 geen lezing 4 februari 2006 lezing van Enno Diekema over genetische algoritmen 7 januari 2006 lezing "Parsen", door Gerard Vriens Van de bijeenkomsten in 2006 zijn geen verslagen beschikbaar; wel is van één van de lezingen nog een abstract bewaard gebleven: Toelichting op de lezing "Parsen", door Gerard Vriens Communicatie gebeurt d.m.v. reeksen onderscheiden symbolen, die beantwoorden aan een syntax. Om zo'n boodschap te "begrijpen", moet de ontvanger de syntactische struktuur ervan achterhalen, en eventueel afhankelijk van die struktuur aktie ondernemen. Dit proces noemen we parsen. Het is niet eenvoudig om hiervoor een computerprogramma (een zogenaamde parser) te schrijven, zelfs als de syntaxregels tamelijk simpel zijn. Gelukkig zijn er programma's, parser generatoren, die hierbij kunnen helpen; de bekendste hiervan is yacc. In deze lezing wordt aan de hand van een simpel voorbeeld uitgelegd hoe een syntax wordt beschreven d.m.v. zogenaamde herschrijfregels; hoe we zulke regels (plus wat aanvullende informatie) aan yacc meegeven; en hoe de door yacc gegenereerde parser (in de vorm van een finite state machine (FSM) met twee stacks) globaal werkt. GV 25-12-2005 GV 07-03-2012

21 april 2020

...

Bijeenkomsten gehouden in 2007

In 2007 zijn op de volgende data bijeenkomsten gehouden: 1 december 2007 3 november 2007 6 oktober 2007 1 september 2007 ( In augustus was er geen bijeenkomst: de zaal was wegens vakantie gesloten. ) 7 juli 2007 2 juni 2007 5 mei 2007 7 april 2007 3 maart 2007 3 februari 2007 6 januari 2007 Van deze bijeenkomsten zijn er geen verslagen beschikbaar. Wel is bekend dat er op geen van de bijeenkomsten lezingen (door externe sprekers) zijn gehouden. GV 07-03-2012

21 april 2020

...

Bijeenkomsten gehouden in 2009

Kort verslag van de bijeenkomst op 3 oktober 2009 In een algemene bespreking van de stand van zaken werd geconstateerd dat het nuttig zou zijn om lezingen te gaan houden bij de afdelingen en andere interessegroepen van HCC. Zo kunnen we meer mensen interesseren in AI, en mensen die daar al in geïnteresseerd zijn wijzen op de mogelijkheid om kennis en ervaringen uit te wisselen binnen de AI-interessegroep. Er is een projectgroep opgericht om een eerste lezing samen te stellen, met een tijdsduur van 2 maanden (de projectgroep, niet de lezing!). In de projectgroep zitten: Wim de Rooij, kartrekker Kees Vlak Titus Krijgsman Gerard Vriens Peter Uilenreef neemt geen deel aan de discussies, maar is als geïnteresseerd bestuurslid wel op de mailinglist aangesloten. Er is voor de eerste maand een grof tijdschema opgesteld, dat moet leiden tot een algemene opzet van de lezing. De tweede maand is dan bestemd voor de concrete vormgeving. GV 29-10-2009 Kort verslag van de bijeenkomst op 4 juli 2009 De volgende onderwerpen zijn aan de orde geweest: Er is kort gesproken over de komende HCC-dagen. Bij gebrek aan informatie was het (nog) niet mogelijk tot concrete plannen te komen. Titus liet zien dat hij zijn animatiefiguren niet alleen uit blokjes, maar nu ook uit ronde figuren kan opbouwen. Verder vertoonde hij een programma dat de groei van een driedimensionale fractale boom laat zien. Een dergelijke boom, door hem gebouwd m.b.v. Fisher Techniek, staat hierbij afgebeeld. Tenslotte liet Titus enkele grafische programmeertalen voor robotbesturing de revue passeren. Gerard vertelde iets over synchroon vs. asynchroon updaten van neuronen, m.n. in een Hopfield neuraal netwerk, en over het genereren van trekkingen uit een exponentiële verdeling bij real-time simulaties. Ook liet hij een op het Web te vinden programma zien, dat een natuurkundige Monte Carlo-simulatie uitvoert en een interessante truc bevat om het programma sneller te maken. Zou dit idee (in aangepaste vorm) ook bruikbaar zijn bij sommige neurale-netwerksimulaties? GV 04-07-2009 Kort verslag van de bijeenkomst op 6 juni 2009 De volgende onderwerpen zijn aan de orde geweest: Dhr. Ras bracht het meest recente nummer van de Connectie (maart 2009) onder de aandacht, en met name het artikel "Computing Consciousness" daarin. N.a.v. de bespreking vorige maand merkte Gerard op dat het negabinaire talstelsel geen sign-extensie nodig heeft. In het kader van numerieke programmering had Gerard een eenvoudig voorbeeld waarin het voor de nauwkeurigheid uitmaakte hoe een bepaalde berekening werd uitgevoerd. Veel oudere AI-toepassingen, zoals Eliza en expertsystemen, werken met een soort dialoog op een karaktergeoriënteerd beeldscherm (zoals onder MS-DOS, vroeger). De aandacht werd gevestigd op de Text class uit het boek Java Gently (aanwezig in onze bibliotheek), die het gemakkelijker maakt om tekst en getallen in te voeren vanaf het toetsenbord en uit te voeren naar een "command prompt" beeldscherm. Gerard liet ook enkele meegebrachte boeken zien: fascicle 4.1 van Knuth, "Oom Jan leert zijn neefje dammen", en een reader over "Knowledge Representation". Naar aanleiding van dit laatste boek werd een dicussie opgestart over wat kennis precies is. Ter sprake kwam het rijtje (de hiërarchie?) data - informatie - kennis, het verband van kennis met (informatie-) opslag, en het verband van kennis met begrijpen: als je iets niet begrijpt, maar wel kunt reproduceren, is het dan kennis? GV 04-07-2009 Kort verslag van de bijeenkomst op 2 mei 2009 De volgende onderwerpen zijn aan de orde geweest: In het kader van "programmeertechnieken in het algemeen" is er gesproken over de boeken The Art of Computer Programming" van Donald E. Knuth, en de door hem ontworpen machinetalen voor de "virtuele computers" MIX en MMIX. Titus liet een eerste versie zien van zijn programma "Keuze", dat kan worden beschouwd als een elementair beslissingondersteunend programma. Aansluitend ontspon zich een discussie over de mogelijkheid om dit programma in een projektgroep uit te werken tot een Java applet. Gerard besprak twee nieuwsitems uit de Scientific American van april, over bewegingsziekte (zoals wagenziekte of zeeziekte) in het kader van de integratie van inputs uit verschillende sensorische kanalen, en over altruïsme versus egoïsme, Gerard deed ook kort verslag van zijn vorderingen bij het oplossen van de numerieke instabiliteit in het zenuwcelmodel van Hodgkin en Huxley. Hierbij ontdekte hij o.a. dat halvering van de tijdstap een verbetering gaf, en dat QBasic double precision getallen waarschijnlijk niet zijn wat je er van verwachten mag. In het kader van dit laatste onderwerp en zijn eerste verkenningen op het gebied van de numerieke programmering stuitte hij bij Knuth (zie boven) op het negabinaire getalstelsel, dat aan de aanwezigen werd gepresenteerd. GV 05-05-2009

21 april 2020

...

Bijeenkomsten gehouden in 2010

Behalve in de vakantiemaand augustus is er elke maand een bijeenkomst gehouden. Van de bijeenkomsten in maart, april, mei, juni, juli, september, oktober en december is helaas geen verslag beschikbaar. Kort verslag van de bijeenkomst op 6 november 2010 De volgende onderwerpen zijn aan de orde geweest: Omdat er op onze bijeenkomsten in het verleden wat discussies gevoerd zijn over het 4-kleurenprobleem (tegenwoordig de 4-kleurenstelling), heeft Henk Palstra onze aandacht gevestigd op een stukje uit het boek Algoritmiek van David Harel. Meer over deze stelling en de relevantie voor AI binnenkort elders op deze website. Gerard Vriens heeft wat recente krantenartikelen laten zien die in verband staan met AI en/of robotica. Het grootste deel van de bijeenkomst is gevuld met het TetraBot-project, waaraan we samen met een aantal mensen van de Robotica ig werken. De belangrijkste feiten zijn: Gerard is momenteel bezig met het refactoren van het simulatieprogramma, zodat op dat gebied nog weinig vorderingen zichtbaar zijn; en bij de constructie van de mechanica blijkt gewicht een factor van belang te zijn (het lijkt er op dat de onderdelen te zwaar worden, zodat de motoren het allemaal niet meer trekken). Er wordt deze maand hard nagedacht over mogelijke oplossingen. (GV 20 november 2010) Kort verslag van de bijeenkomst op 6 februari 2010 De volgende onderwerpen zijn aan de orde geweest: Henk Palstra heeft iets verteld over het opspannen van een minimale boom tussen punten, en het verband hiervan met het handelsreizigerprobleem (ook bekend als Traveling Salesman Problem of kortweg TSP), dat een bekend standaardprobleem vormt voor Genetische Algoritmen. Gerard Vriens heeft een puzzeltje laten zien, waarbij 2 sets van 5 tetromino's in een rechthoek van 5 bij 8 moeten worden gepast. Dit kan volgens de beschrijving op 783 unieke manieren (dus spiegelingen en rotaties worden niet als verschillend geteld). Hij heeft de aanwezigen uitgedaagd om via een zoekprogramma al deze manieren te vinden en te tellen - maar vooral om een chromosoomcodering en fitnessfunctie te vinden zodat het probleem kan worden aangepakt met een genetisch algoritme. (GV 21 februari 2010) Kort verslag van de bijeenkomst op 2 januari 2010 Er waren 7 aanwezigen. De volgende onderwerpen zijn aan de orde geweest: Titus liet zien hoe in het spel PacMan het tamelijk complexe gedrag van de "spookjes" met behulp van een simpele (5 toestanden) Finite State Machine kan worden gemodelleerd. Kees Vlak heeft "voor eigen publiek" de GA-lezing van de projectgroep een try-out gegeven. De lezing duurde ongeveer een uur en werd door alle aanwezigen zeer gewaardeerd. Aansluitend aan de lezing vond er evaluatie en discussie plaats. De lezing werd door alle aanwezigen zeer gewaardeerd, en de leden van de projectgroep waren het er over eens dat Kees de lezing ook voor buitenstaanders kan gaan geven. Ook werden nog enkele punten ter verbetering aangedragen. Gerard liet zien hoe een relationele database kan worden gebruikt om gegevens over een aantal verdachte sujetten, allen bendeleden van ofwel de Jets ofwel de Sharks, op te slaan en op verschillende manieren weer op te vragen. Daarna legde hij ruwweg uit hoe m.b.v. het IAC neurale-netwerk (een model van het menselijke associatieve geheugen) hetzelfde kan worden gedaan, en welke extra voordelen deze vorm van opslag biedt. Tenslotte vertelde hij iets over recent onderzoek naar het "woordenboek in ons hoofd", dat ook op associaties lijkt te berusten en mogelijk op soortgelijke manier werkt. GV 02-01-2010

20 april 2020

...

Bijeenkomsten gehouden in 2011

In augustus was er geen bijeenkomst, wegens vakantie. Van de bijeenkomsten op 3 september, 2 juli, 5 februari en 8 januari zijn helaas geen verslagen beschikbaar. Kort verslag van de bijeenkomst op 3 december 2011 Ook op deze bijeenkomst werd ons zaaltje weer voor een belangrijk deel gevuld met robotici en hun aktiviteiten. Er was dus weinig gelegenheid voor een plenaire sessie. We hebben dan ook het goede voorbeeld van de roboticagroep gevolgd en de dag gevuld met zelfwerkzaamheid en informele contacten. Daarbij bleek dat Aloys gestaag vorderde met het vervaardigen van de overige drie poten van onze TetraBot; maar omdat hij (vanwege de efficiëntie) alles in serieproductie uitvoert (en dus, paradoxaal genoeg, de poten in parallelle verwerking gestalte krijgen), was er in concreto nog weinig méér te zien dan een verzameling losse onderdelen! Ondertussen was Gerard druk bezig om zijn Javasimulatie naar de AI-ig laptop met Windows XP® te verplaatsen. Op deze computer was Java wel reeds geïnstalleerd, maar nog nooit gebruikt; er moest dus een batchbestandje worden aangemaakt. Tegelijkertijd werden deze stappen ook gevolgd door Titus, wiens computer in hetzelfde stadium verkeerde. Titus, die het met Windows 7® moest doen, werd daarin bijgestaan door Kees. Daarna het kopiëren van de .java-bestanden, het hercompileren (zou eigenlijk niet nodig moeten zijn, maar Gerard werkt thuis met een niet-helemaal-standaard Java-versie), en ziedaar: het werkte! Vervolgens heeft Abraham van deze simulatie een filmpje gemaakt, dat inmiddels is opgenomen in het TetraBot-presentatiefilmpje (zie hierboven). Aan het eind van de bijeenkomst werd de simulatie nog even aan de geïnteresseerden getoond en uitgelegd wat nu precies het nut van deze visualisatie is. (GV 10 december 2011) Kort verslag van de bijeenkomst op 5 november 2011 Waren wij de vorige maand ingekwartierd bij Robotica (op hun open dag, zie hieronder), ditmaal was de situatie omgekeerd, omdat in hun gebruikelijke zaaltje andere, niet HCC-gerelateerde aktiviteiten plaatsvonden. Daarom bestond de bijeenkomst vooral uit informele discussies, o.a. over sudoku's, Rubik's kubus, en het spelletje Mastermind — en dat alles terwijl de robotici tegelijkertijd met hun eigen aktiviteiten en discussies bezig waren. Pas later op de middag was er gelegenheid voor een (korte) plenaire sessie, waarin Gerard liet zien dat zijn TetraBot-simulatie nu eindelijk het convexe omhulsel kan bepalen en in beeld brengen (weliswaar met nog wat kleine bugs). Het ziet er interessant uit, en de volgende keer gaan Gerard en Abraham proberen er een filmpje van te maken. En ondertussen gaat het werk aan de simulatie en het werkende prototype natuurlijk gewoon door... (GV 7 november 2011) Kort verslag van de bijeenkomst op 1 oktober 2011 Omdat de HCC!Robotica interessegroep zijn open dag hield (gekoppeld aan de RoboRama-wedstrijden), waren we in hun zaal te gast. Door de levendige ambiance kwam het er niet van een plenaire sessie te houden; maar desondanks was het weer een leerzame en gezellige bijeenkomst. Natuurlijk hadden we ook hier de nodige vragen over ons TetraBot-project te beantwoorden. Ook hadden we een tweetal boeken over robotica uit onze eigen bibliotheek ter inzage gelegd. Verder had Abraham uit "de opslagplaats" wat tijdschriften over computer graphics meegenomen, waarin Gerard en Titus op zoek gingen naar ideeën voor hun TetraBot-simulaties. Gerard liet Henk een artikeltje lezen over symmetrie in sudoku's, waarna beiden probeerden de bijgevoegde voorbeeldsudoku op te lossen — Gerard met de hand, en Henk met zijn in QBasic geschreven programma. Natuurlijk won de computer, zelfs al moest Henk eerst nog het programma aanpassen om ervoor te zorgen dat ook de beide diagonalen de cijfers 1 t/m 9 bevatten! De onderstaande foto toont (rechts op de voorgrond) ons hoekje bij de ingang van de zaal, en laat (ook op de achtergrond) zien dat het een uiterst geslaagde dag was! (GV 6 oktober 2011) CompUsers gebruikersdag Op 24 september j.l. werd de gebruikersdag van de CompUsers interessegroep gehouden. Andere interessegroepen werd de gelegenheid geboden zich te presenteren; eigenlijk een soort HCC-dagen oude stijl dus: kleinschalig, leerzaam en tóch interessant, en bovendien oergezellig. Natuurlijk was de Artificiële Intelligentie interessegroep aanwezig, niet alleen met een presentatie in de grote zaal (waarbij vooral de huidige stand van het TetraBotproject werd getoond en toegelicht) maar ook met een lezing door Kees Vlak over Genetische Algoritmen. De bovenstaande foto geeft een indruk van onze presentatie: Gerard discussieert met Aloys over het omhullende veelvlak van TetraBot, aan de hand van het draadmodel dat door Abraham is vervaardigd (evenals deze foto, trouwens). Op de voorgrond zit Peter, verdiept in de software op zijn laptop. Langs deze weg willen wij de organisatoren van deze dag een groot compliment maken: het was allemaal buitengewoon goed geregeld, en we hebben onszelf en hopelijk ook de bezoekers uitstekend vermaakt. HCC mag zich zorgen maken over het ledental, maar evenementen als dit tonen aan dat de computer als hobby-object nog springlevend is! (GV 30 september 2011) Kort verslag van de bijeenkomst op 4 juni 2011 Het vierkleurenprobleem is de vraag hoeveel kleuren er minimaal nodig zijn om een (vlakke) landkaart in te kleuren zonder dat twee aangrenzende landen dezelfde keur hebben. Het vermoeden bestond al lang (sinds 1852) dat je altijd met 4 kleuren toe kunt (zoals de naam al zegt). In 1976 is dit uiteindelijk ook wiskundig bewezen; een bewijs, waarbij de computer een cruciale rol speelde. Henk Palstra heeft enkele ideeën gepresenteerd die bij dit bewijs een belangrijke rol speelden. Titus bracht een van Fischertechniek gemaakt model mee van een robotslang. Het model is nog niet van motoren voorzien (en de besturing is nog weer een fase verder), maar geeft wel een eerste idee van wat precies de bedoeling is. Gerard heeft tot in detail uiteengezet hoe hij het convexe omhulsel van de TetraBot denkt te gaan berekenen, en waarom dit een nuttige stap zou kunnen zijn bij de ontwikkeling van een loopalgoritme. Tenslotte hebben Wim Jansen, Aloys Verstraeten en Abraham Vreugdenhil laten zien dat de constructie van de TetraBot-mechanica goed vordert. Aloys heeft alle koppelstukken (zeg maar, de gewrichten) op de draaibank vervaardigd; hiervoor moest hij eerst speciale boorfrezen vervaardigen. Er is nu een van de vier benen compleet af, al moet er nog wel wat worden bijgeschaafd om alle onderdelen soepel te laten draaien. (GV 27 juni 2011) Kort verslag van de bijeenkomst op 7 mei 2011 Abraham bracht ons op de hoogte van wat "de concurrentie" uitspookt: de Amerikaanse lucht- en ruimtevaartorganisatie NASA heeft ook een "TetraBot", eveneens gebaseerd op een tetrahedron (=viervlak), maar dan op een totaal andere manier. Hij liet enkele filmpjes zien van het apparaat, die hij op het Internet had gevonden. Wij zijn helaas nog niet zo ver dat wij filmpjes kunnen laten zien (zelfs geen animaties), maar het werk gaat gestaag door! Verder praatte Abraham ons bij over de besturing van onze eigen TetraBot. De bedoeling is dat de gewrichten hun signalen draadloos doorgezonden krijgen, maar de communicatie tussen zend- en ontvangchip werkt nog niet. Daarnaast moet er nog een precieze vorm voor de commando's worden bedacht. Titus kwam met een programmaatje dat experimenteel een optimale strategie voor het casinospel blackjack bepaalt; kritische beschouwing leerde dat de resultaten (nog) niet overeen kwamen met de theoretisch correcte waarden. Verder bracht hij een theorie naar voren over "hoe moppen werken", waarna een korte discussie volgde over de mogelijkheid om computers moppen te laten verzinnen (en vertellen?). Wim Jansen heeft van Alois weer enkele koppelstukken ontvangen, en hoopt de volgende bijeenkomst één volledige poot (of moeten we "been" zeggen?) draaiend (letterlijk!) te hebben. Peter vestigde onze aandacht op het programma Yobotics, waarmee grafische robotsimulaties kunnen worden gemaakt. Het is nog de vraag of hiermee niet alleen de scharniergewrichten van bijvoorbeeld de menselijke knie, maar ook de roterende "gewrichten" van TetraBot kunnen worden gesimuleerd. Tot slot liet Gerard zien dat zijn programmaatje om het koningszetprobleem met een genetisch algoritme aan te pakken veel (voor hem) nieuwe inzichten had opgeleverd, maar nog niet helemaal naar behoren functioneerde. (GV 14 mei 2011) Kort verslag van de bijeenkomst op 2 april 2011 Tijdens het informele gedeelte vestigde Henk Palstra de aandacht op de column van Bas Haring uit de Volkskrant van 26 maart j.l., waarin een korte Prolog-functie werd gedefinieerd en uitgelegd. Gerard had een Go-spel meegenomen, en om de aanwezigen kennis te laten maken met dit boeiende spel, waaraan de AI-technieken nog een hele kluif hebben, werd op een 9×9-bord een partijtje gespeeld. Daarna was het de beurt aan de TetraBot-hardwaregroep, die nu twee gewrichten in één poot hebben gemotoriseerd; de resulterende beweging gaf al een aardig beeld van hoe het complete bouwsel moet gaan functioneren. Het gewicht en de inwendige wrijving blijven nog punten van zorg; en natuurlijk moet er nog steeds een loopalgoritme ontwikkeld worden. Abraham liet de metingen zien van de rotaties bij handmatig voortbewegen; deze aanpak ziet er veelbelovend uit! Titus liet zien hoe hij in zijn software-simulatie van TetraBot nu alle gewrichten afzonderlijk m.b.v. het toetsenbord kan laten draaien. De volgende stappen hier zullen zijn om de draaisnelheden variabel te maken, en om het geheel bestuurbaar te maken met een programmascript. Door de prachtige grafische visualisatie (m.b.v. OpenGL) ziet het er nu al erg overtuigend uit. Gerard heeft uitgelegd dat het zoeken naar een loopmethode met een Genetisch Algoritme (GA) een variabele chromosoomlengte zal vereisen. Om hiermee ervaring op te doen, wil hij een GA schrijven voor Koningszet, een zgn. toy-problem dat hij al eerder met diverse zoekheuristieken heeft aangepakt. Tenslotte heeft Kees Vlak uiteengezet dat het stemgedrag van de leden van de Provinciale Staten voor de Eerste Kamer kan worden gezien als een optimalisatieprobleem; mede door een (gedeeltelijke) gelijkenis met het knapsack-probleem werd een aanpak met (ook hier!) een GA niet bij voorbaat kansloos geacht... (GV 2 april 2011) Kort verslag van de bijeenkomst op 12 maart 2011 Na het eerste uur, waarin de mensen binnenkwamen, zich installeerden, en elkaar wat bijpraatten, werd van 12:00 tot 13:00 de Algemene LedenVergadering gehouden. In de daarop volgende pauze liet Henk Palstra aan geïnteresseerden zien dat hij een BASIC-programma heeft geschreven om een 2x2x2 Rubik-kubus (de zgn. Pocket Cube) op te lossen, en te bewijzen dat dat altijd in 11 of minder operaties mogelijk is. (Dit n.a.v. het bewijs, geleverd in juli 2010, dat de normale 3x3x3 kubus altijd in 20 of minder operaties kan worden "ontward".) De tijd na de pauze was gewijd aan TetraBot. De hardwaregroep, bestaande uit leden van de Robotica Ig, liet zien dat ze al een heel eind gevorderd waren met de daadwerkelijke constructie van de eerste poot: volgende maand hopen ze er twee motoren in gemonteerd te hebben. Gerard, die zich bezig heeft gehouden met het theoretische gedeelte, liet weten de werkzaamheden enige tijd te zullen onderbreken om het probleem wat te laten bezinken. Hij heeft uitgelegd welke problemen hij ondervond bij het berekenen van het "minimale omhullende convexe veelvlak", dat verhelderend zou kunnen blijken bij de visualisatie van de bewegingen. En tenslotte gaf hij aan hoe hij het vinden van een goed loopalgoritme m.b.v. een genetisch algoritme dacht aan te pakken. Twee alternatieve benaderingen kwamen in de discussie ook kort ter sprake: het meten van de rotatiesnelheden bij handmatig bewegen van de afzonderlijke poten (naar een idee van Abraham). Een grove methode hiervoor zou zijn om een draadmodel gewoon aan een touwtje over een ruwe ondergrond voort te slepen (naar een idee van Henk Palstra), en de resulterende rotaties met een video- of webcamera op te nemen. het besturen van TetraBot met een zelflerend neuraal netwerk. Hiervoor zouden "slip-sensoren" nodig zijn, die misschien kunnen worden verkregen door optische muizen te slopen. (GV 13 maart 2011)

20 april 2020

...

Bijeenkomsten gehouden in 2012

Kort verslag van de bijeenkomst op 1 december 2012 Abraham bracht een voortgangsrapport uit over de hardware-versie van TetraBot. Zoals op de onderstaande foto te zien is aan de op diverse plaatsen uitstkende kabeltjes, zijn de heren technici begonnen aan het "zenuwstelsel" van hun bouwsel. Oftewel: de komende maanden worden besteed aan het bedraden van de sensoren en motoren. Daarnaast is het de bedoeling dat de ZigBee-modules (voor draadloze communicatie tussen de besturingscomputer en de onderdelen van TetraBot) worden besteld, en dat de microcontrollers worden gesoldeerd. Peter vestigde de aandacht van de groep op Marvin's Arena, een omgeving waarin je een zelf-geprogrammeerde gesimuleerde rijdende robot kunt laten deelnemen aan toernooien waarin die robot het moet uitvechten met één of meer tegenstanders. Het is een concept dat sterk lijkt op het door ons al eerder onder de aandacht gebrachte Robocode, maar de te gebruiken programmeertalen zijn Visual Basic Express, C#, en C++; alleen talen die door Microsoft's Visual Studio worden ondersteund, dus, zodat Javaprogrammeurs er weinig mee zullen kunnen beginnen. Ook vertelde Peter over BYOB (Build Your Own Blocks), een afsplitsing van Scratch met belangrijke uitbreidingen, zoals de mogelijkheid om zelf nieuwe blokken en zelfs recursieve functies te definiëren. Daarnaast ontdekte hij het bestaan van StarLogo TNG, dat evenals Scratch en BYOB van "puzzelstukjes" gebruikt maakt. (NB: De science fiction fans kennen de afkorting TNG natuurlijk: The Next Generation! Gerard meldde dat hij en Titus de (vierde) studentenconferentie van de NSVKI hadden bezocht. Via één van de lezingen daar had hij kennis gemaakt met Quantum tic-tac-toe, een variant op boter-kaas-en-eieren die hij nog niet kende. Op zijn verzoek ging Peter met zijn computer het wereldwijde web op en werden er twee demonstratiepartijtjes gespeeld: een tegen onszelf en een tegen de computer. Ook aan de andere lezingen van de NSVKI-conferentie werden door Gerard enkele woorden gewijd. Mark en Gerard vertelden waar ze de afgelopen maand mee bezig waren geweest: de vintage expertsysteemshell ESIE, daterend van ongeveer halverwege de jaren '80, en nog steeds op het Internet te vinden (verpakt, onder de naam artintel.zip). Gerard liet iets zien van twee van de meegeleverde kennisbestanden, ANIMAL en DOCTOR. Als uitsmijter liet Abraham ons via enkele filmpjes kennismaken met de kilobots, kleine robotjes die zich kunnen verplaatsen d.m.v. trillende pootjes, en die voorzien zijn van de mogelijkheid tot onderlinge communicatie. Ze zijn bij uitstek geschikt om zwermgedrag en groepsintelligentie te onderzoeken, en het leukste is dat ze nog gewoon te koop zijn ook! (GV 9 december 2012) Kort verslag van de bijeenkomst op 3 november 2012 De dag werd voor een belangrijk deel gevuld met één-op-één-gesprekken, onder andere over de afgelopen HCC!Verenigingsdag, over mogelijke paden op een boter-kaas-en-eierenbord en de kansen daarop, en over de "vintage" expertsysteem-shell ESIE. Er werden ook enkele zaken plenair besproken: Peter liet nogmaals zijn in Scratch gebouwde roofdier-prooi-simulatie zien, die hij op de HCC!Verenigingsdag had gemaakt (zie elders op deze pagina); daarbij vertelde hij ook iets over de manier waarop het gedrag van beide dieren in deze simulatie, een vleermuis en een mier, met behulp van tamelijk korte scriptjes was geprogrammeerd. Een interessant nieuwtje was dat je een Scratch-project kan importeren in een ander project, zodat de eerder door Gerard afzonderlijk gemaakte vleermuis en mier op eenvoudige wijze konden worden samengevoegd. Daarna heeft Peter beide sprites aangevuld met scripts om ze op elkaar te laten reageren. Het is erg boeiend om te zien hoe het "rechtlijnige" gedrag van de vleermuis verandert zodra hij zijn prooi in het vizier krijgt! Gerard vestigde kort de aandacht op enkele AI-gerelateerde artikelen in recente edities van de populair-wetenschappelijke tijdschriften, en op het boek De sprekende aap van Jean Aitchison, dat hij onlangs gelezen heeft. Het boek gaat over de oorsprong en ontwikkeling van de menselijke taal, en Gerard was vooral geboeid door de manier waarop creooltalen door de schrijfster worden gebruikt om deze kwestie toe te lichten. Er ontspon zich een korte discussie over nut en noodzaak van definities van voor AI belangrijke termen (zoals "intelligentie" en "bewustzijn") en de rol van de filosofie in de grondslagen van wetenschap en techniek. Gerard improviseerde een korte inleiding in neurale netwerken ten behoeve van een nieuwe bezoeker die uit interesse voor dit onderwerp naar onze bijeenkomst gekomen was. (GV 4 november 2012) HCC verenigingsdag op 27 oktober 2012 De HCC!AI interessegroep heeft de voorgaande twee jaren op het HCC!digital-evenement geschitterd door afwezigheid; we "pasten niet in het concept". Dit jaar heeft HCC besloten om HCC!digital te vervangen door een HCC!Verenigingsdag, waarop alle Interessegroepen en Regio's de kans kregen zich te presenteren aan leden en niet-leden. Daarbij is geprobeerd om van een drietal gemeenschappelijke thema's uit te gaan, nl. eenvoudig, toegankelijk, veilig. Het evenement vond plaats op zaterdag 27 oktober 2012, in Meeting 1931, een onderdeel van de Brabanthallen in Den Bosch. De AI-ig was te vinden onder één (figuurlijke!) "paraplu" met de fantasievolle naam Techniek, samen met een aantal andere op techniek en programmeren gerichte interessegroepen, nl. Basic, C, Forth, NewBrain, Pascal en Robotica. Wij deelden onze tafels met Basic en C. Door werkzaamheden aan het spoor verliep het treinverkeer 's ochtends erg moeizaam; een groot deel van de standbemanning kwam pas vlak voor opening van de hal aan. Met wat improviseren zijn we er toch in geslaagd om voor iedereen een goede plek te vinden. We hebben verschillende onderwerpen gepresenteerd, die tezamen een aardig beeld gaven van de leuke mogelijkheden die AI biedt om hobbymatig bezig te zijn: De meest prominente plaats was natuurlijk gereserveerd voor TetraBot. Deze ongewone constructie, met veren opgehangen aan een door Abraham vervaardigde "galg", trok dan ook de nodige aandacht; en niet in het minst doordat Abraham (en soms ook Kees) het geringste blijk van belangstelling aangrepen om een gesprek met de bezoekers aan te knopen over de bedoeling van het beestje. Via de beamer, geprojecteerd op een leeg stukje muur, heeft Peter iets laten zien van het werken met de programmeertaal Scratch, en de mogelijkheden die dit biedt voor het schrijven van eenvoudige programmaatjes met een AI- of AL(Artificial Life)-karakter. Hij heeft de eerder door Gerard gemaakte "dolende mier" samengevoegd met de door hemzelf afgemaakte "muurvermijdende vleermuis" tot een interessante roofdier-prooi-simulatie. Via dezelfde beamer (op momenten dat die niet door Peter werd gebruikt) heeft Kees zijn zelfgeschreven checkers-programma laten zien. Hoewel er nog niet veel speciale intelligentie is ingebouwd, zodat het zelfs voor "huisdammers" met wat nadenken mogelijk moet zijn om van dit programma te winnen, zijn Kees en Gerard daar samen, ondanks een bundeling van hun krachten, niet in geslaagd. Wat maar weer eens aantoont dat een programma best "slimmer" kan zijn dan zijn maker.... Geïnspireerd door het thema "veilig", hadden Abraham en Gerard samen een "presentatieposter" gemaakt over veiligheid in de Robotica, en dan met name de roboticawetten van Asimov. Deze poster was tussen enkele andere tegen de achterwand geplakt, en kreeg helaas niet de aandacht die hij verdiende; maar hij vormde in ieder geval een passende en sfeervolle decoratie... En n.a.v. het thema "eenvoudig" heeft Gerard een lezing gehouden met de titel "Koningszet", waarin hij heeft laten zien dat zelfs het allersimpelst denkbare probleem, bezien vanuit AI-perspectief, nog een leerzaam en interessant experiment oplevert! De volgende foto's geven een impressie van onze activiteiten op deze zeer geslaagde dag. Hierboven: helemaal op de voorgrond TetraBot, opgehangen aan zijn galg om de reeds ingebouwde motoren niet te beschadigen. Daarachter, zittend aan tafel achter hun schootcomputers, Peter en Kees. Peter zit rechts, en roert wat in zijn koffie terwijl hij zijn gedachten laat gaan over zijn Scratch-programma. Kees, in geruit overhemd, is blijkbaar eveneens in diep gepeins verzonken; helemaal links is, op de muur geprojecteerd, nog een stukje van het (karaktergeoriënteerde) scherm van zijn checkersprogramma te zien. Op de achtergrond, met onder de kop "HCC AI / Robotica" de pakkende slagzin "Robotica & veiligheid = AI", onze Asimov-poster. De andere posters, van NewBrain en Robotica, zijn overigens ook door Abraham gemaakt. Hieronder: Kees legt aan twee bezoekers uit wat die gekke vertakte PVC-buizen op de voorgrond nu precies voorstellen. (Voor wie het nog niet doorhad: dat is onze TetraBot...) Op de achtergrond is te zien dat de Verenigingsdag toch wel aardig wat publiek getrokken heeft! Rechtsonder is nog een lid van de C-interessegroep te zien, met wie we onze tafels hebben gedeeld. (GV 1 november 2012) Kort verslag van de bijeenkomst op 6 oktober 2012 Evenals vorig jaar waren we weer te gast op de jaarlijkse open dag van de HCC Robotica interessegroep, en door het geroezemoes in de grote zaal zat een plenaire sessie er helaas niet in. Dat wil echter niet zeggen dat we stilgezeten hebben, de tijd werd aangenaam en nuttig doorgebracht met één-op-één-contacten. Zo hebben Abraham en Aloys samen weer grondig de vorderingen van het TetraBot-project doorgesproken. Gerard en Peter hebben zich ter leringhe ende vermaeck met Scratch beziggehouden, in een poging een muurvermijdende vleermuis te programmeren. Dat is nog niet geheel naar wens gelukt, en er gaan waarschijnlijk nog wel wat aangename uurtjes vrije tijd in gestoken worden. Verder zijn er ook een aantal nuttige afspraken gemaakt voor de HCC!verenigingsdag, waar we erg naar uitkijken. De volgende keer, op 3 november, hebben we weer een "normale" bijeenkomst — hoewel, normaal? Iedere bijeenkomst levert toch weer verrassende nieuwe activiteiten en inzichten op; en met de HCC!Robotica interessegroep (die in november weer de Roborama robot wedstrijd organiseert) als "goede buur", is het onmogelijk om je te vervelen! (GV 13 oktober 2012) HCC!AI op de MegaCompUfair Op 29 september j.l. hield de de interessegroep HCC!CompUsers haar jaarlijkse grote bijeenkomst, de MegaCompUfair. Natuurlijk konden wij, de HCC Artificiële Intelligentie interessegroep, hierbij niet ontbreken! We waren dus met twee personen (en een aantal rijdende en trillende robotjes, alsmede nog een laptopcomputer met een dolende mier) naar De Bilt getogen, waar we evenals de voorafgaande jaren een zeer geslaagde dag beleefden — zoals ook de bijgaande foto laat zien.  (GV 17 oktober 2012) Kort verslag van de bijeenkomst op 1 september 2012 Helaas was de opkomst niet zo groot, maar de wegblijvers hadden ongelijk, want het was toch een vruchtbare bijeenkomst. De volgende onderwerpen kwamen aan bod: Aloys en Abraham brachten ons op de hoogte van de huidige stand van zaken m.b.t. TetraBot. Aloys had de witte markeringen voor de draaiingssensoren nu ingefreesd, wat natuurlijk veel slijtvaster is dan een opgeplakt papiertje. Het probleem dat de constructie te zwaar is geworden om door de motoren te worden "opgetild" — in ieder geval het type motoren dat wij ons financieel kunnen veroorloven —, gaat waarschijnlijk opgelost worden door TetraBot d.m.v. een veer op te hangen aan een dragende arm of raamwerk, zodat er nog maar een klein gedeelte van het gewicht via de uiteinden van de "benen" op de grond rust. Niet de meest fraaie oplossing, we zien natuurlijk allemaal het liefst dat TetraBot zelfstandig kan lopen; maar het is zonder veel problemen te realiseren, en doet niets af aan het onderliggende principe van de TetraBot. Tenslotte worden kleine kinderen bij het zetten van hun eerste stapjes ook door Pappa of Mamma ondersteund!Onder de toeziende blik van Abraham (links) onderzoekt Gerard (rechts) de vorderingen die zijn gemaakt met de TetraBot-constructie. Gerard en Abraham hebben onze bijdrage aan de komende HCC!Compusers gebruikersdag en de HCC!Verenigingsdag doorgesproken. Gerard heeft een heel simpel Scratchprogramma met een "lopende mier" laten zien, dat wel enig verband met AI heeft, en waarmee anderen kunnen experimenteren. Als we dit (en hopelijk nog enkele andere) op de HCC!Verenigingsdag willen presenteren, moet er nog wel een A4-tje bij met beschrijving en aanwijzingen. Henk en Kees hebben wat gesproken over hun Checkers-programma's. Die van Kees speelt al wel (zij het nog niet op "grootmeesterniveau"). Die van Henk moet nog gaan kiezen uit de gegenereerde zetten. We besloten dat een willekeurige keuze het beste beginpunt is. Immers, zonder positie-evaluatie zijn alle zetten gelijkwaardig, en kun je niet anders dan "een dobbelsteen of munt opgooien". Daarna kun je een evaluatieroutine inbouwen; maar zolang die nog tamelijk simpel is (bijvoorbeeld: in eerste instantie alleen kijken naar materieel voordeel of nadeel) en je doorrekening nog niet vele zetten diep, zul je nog steeds regelmatig gelijkwaardige zetten tegenkomen, en dus weer terug moeten vallen op de willekeurige keuze. Gerard (links) en Kees (rechts) kijken belangstellend toe terwijl Henk (midden) zijn checkers-zettengenerator demonstreert. Er is ook even gesproken over "het probleem van de Vrije Wil". (Probleem? Hoezo probleem?) Kees heeft voor Henk wat informatie over deze filosofische kwestie, die wel belangrijke implicaties voor de Kunstmatige Intelligentie kan hebben, van het Internet gedownload. En terwijl Henk zich in deze informatie verdiepte, spraken Gerard en Kees over de implementatiedetails van hun checkersprogramma's, met name over een slimme evaluatietruc die Kees heeft ingebouwd om een beter eindspel te krijgen, en over de manier waarop Gerard het bitboard heeft geprogrammeerd. (GV 19 september 2012) Kort verslag van de bijeenkomst op 7 juli 2012 Het was weer een gezellige en interessante bijeenkomst, met behalve de "stamgasten" ook een paar nieuwe gezichten. Naast de gebruikelijke koetjes en kalfjes, zijn er vier belangrijke onderwerpen aan bod geweest: Aloys kwam langs met TetraBot, om te laten zien dat hij al één motor in een van de "dijbenen" had ingebouwd. Hij legde uit dat er een grote kracht nodig was om door het draaien van die poot de hele TetraBot omhoog te tillen, en dat hij daarom die motor thuis nog niet of nauwelijks had getest. En amper was hij begonnen om dat even daadwerkelijk te laten zien of inderdaad: de tandwielkast van de motor draaide de soep in! (De gebruikte aandrijving bestaat uit een motortje dat weinig vermogen levert bij een hoog toerental, en d.m.v. tandwielen wordt dat omgezet in een laag toerental met een groter vermogen. Motor en tandwielen worden door de fabrikant in één behuizing geleverd.) Terug naar de tekentafel, dus. Aloys suggereerde om alle segmenten van TetraBot korter te maken (zonder de verhouding 3 : 2 : 1 aan te tasten); dan zou er minder kracht door de motoren hoeven te worden geleverd, omdat het optillen met een kortere "hefboom" gebeurt. (En het gewicht wordt ook iets minder — hoewel de meeste massa niet in de "buizen", maar in de motoren en verbindingsstukken zit.)Het goede nieuws (want dat was er ook!), is dat het door Aloys ontworpen systeem om de draaiing te meten, met behulp van infrarooddiodes en zwart-witte markeringen aan de binnenkant van de buis, goed werkte. Vervolgens hield Gerard een (misschien iets te?) uitgebreid verhaal over een projectje met de programmeertaal Scratch. Deze taal is speciaal gemaakt voor kinderen, is vrij te downloaden, en je kunt er erg leuke dingen mee doen, vooral op het gebied van plaatjes en geluid. Voor Windows 98 (zoals nog steeds draait op de AI-ig laptop die Gerard voor demonstraties gebruikt) is er een oudere, maar goed werkende versie te downloaden, die echter wat mogelijkheden mist ten opzichte van de laatste versie.Het programma dat hij er mee probeerde te bouwen was "Party planner": een simulatie van een feestje met een aantal gasten, die elkaar in meer of mindere mate mogen, en als gevolg daarvan in de feestzaal lange tijd van plaats veranderen. Het idee stond beschreven in een aflevering van de rubriek Computer Recreations in het tijdschrift Scientific American, van september 1987. Gerard demonstreerde eerst een versie geschreven in QBasic, om te laten zien hoe een dergelijke simulatie zich zo ongeveer gedraagt. Daarna deed hij voor hoe je zoiets in Scratch zou kunnen opzetten. Hierbij werden een aantal voordelen van Scratch zichtbaar (zoals de sprites, het werken met visuele vormen, en nuttige ingebouwde functionaliteiten zoals afstandsbepaling tussen sprites), maar ook enkele nadelen (namelijk: programmascriptjes worden al snel groot en onoverzichtelijk als je dingen wilt die niet direct standaard zijn, en het programmeren door het slepen met vormen neemt toch aardig wat tijd in beslag). Kim vertelde iets over de thesis, waarop hij afgelopen week was gepromoveerd tot Master in de AI aan de universiteit van Maastricht. Het onderzoek gaat over het spel Domineering, en er kwam uit dat bij het toepassen van specifieke kennis verbeteringen van honderden procenten bereikt kunnen worden boven een "simpele" alfa-betazoekmethode — wat op zich al een tamelijk verfijnde techniek is! Hij verklaarde zich bereid hierover in het najaar voor ons een presentatie te houden; houd dus deze website in de gaten! Tenslotte is er nog wat tijd aan checkers besteed. Ook Mark bleek nu bezig met het schrijven van een checkersprogramma, wat het totale aantal met het "checkers-virus" besmette bezoekers op 5 brengt! Er werd o.a. gesproken over de notatie, vooral van zetten waarbij meer dan één schijf geslagen wordt. Ook kwam de aanpak van het schrijven van een checkersprogramma ter sprake; Gerard liet een artikel zien van Christopher Strachey uit Scientific American van september 1966 (!) waarin de opbouw van zo'n programma wordt uitgelegd. Strachey's voorbeeldprogramma is geschreven in CPL, een taal die (via de tussenstadia BCPL en B) de "overgrootvader" is van de programmeertaal C. Volgens Wikipedia was Strachey trouwens de eerste die ooit een checkersprogramma schreef, nog vóór Arthur Samuel! Daarna liet Gerard zien hoe in checkers twee dammen van één dam kunnen winnen, een winstvoering van (minstens) 13 (halve) zetten diep. De vraag doet zich dan voor hoe dit in een programma in te bouwen: door veel zetten te laten "doorrekenen", of door een zgn. eindspeldatabase te laten raadplegen, of door het gebruik van vuistregels? Tot besluit werd nog wat doorgefilosofeerd over "intelligentie" in checkers- en schaakprogramma's. (GV 11 juli 2012) Kort verslag van de bijeenkomst op 2 juni 2012 Ter tafel kwam o.a. het volgende: Mark vestigde onze aandacht op de AI-lezingen van Wolfgang Ertel, die o.a. op YouTube te vinden zijn. Ze zijn te vinden door Google aan het werk te zetten met de zoektermen "Wolfgang Ertel lecture artificial intelligence". Henk is nog steeds bezig in het boek van Dick Swaab, Wij zijn ons brein. Op de vraag van Gerard of hij daarover eens een boekbespreking zou kunnen houden, zei hij dat dat moeilijk wordt, omdat het boek uit een groot aantal tamelijk los van elkaar staande stukjes bestaat. Ook had Henk weer aan zijn checkers-programma gewerkt: het is de bedoeling om de mogelijke zetten niet meer alleen door "bordplaatjes", maar ook in de officiële checkersnotatie weer te geven. Dat gaat met name bij ingewikkelde slagzetten nog niet helemaal perfect. Nu kondigde ook Kees aan dat hij begonnen was met een checkersprogramma. Samen met Henk en Titus, en Gerard (die er jaren geleden een geschreven had, maar een deel van de broncode kwijt lijkt te zijn), en Mark (die wil onderzoeken of je een kennissysteem checkers kunt laten spelen) begint het zo langzamerhand op een echte epidemie te lijken! Gerard heeft de bibliotheek van de interessegroep met 2 boeken verrijkt: "Introduction to the Theory of Neural Computation" van Hertz, Krogh & Palmer, een voortreffelijk overzicht van diverse soorten neurale netwerken, waarvoor echter wel wat wiskundige kennis is vereist. "Mens en Machine", een prachtig geïllustreerd overzicht van ideeën over, en pogingen tot, het scheppen van een "kunstmatig leven" door de hele geschiedenis heen, verzameld door René Simmen. Vanaf de door stromend water aangedreven automaten uit de oudheid, via o.a. de schrijvende en schakende poppen uit de 18e en 19e eeuw, tot aan de computers van de jaren '60 van de vorige eeuw. En natuurlijk kwam ook TetraBot aan bod. Abraham had een rubberen matje meegenomen (nog uit de tijd van de balancerende bezemsteel), waardoor de slip beter gecontroleerd kon worden; en ook de "testbenen", waarvan het buitenste (meest distale) gewricht was weggeamputeerd, waren gemaakt. Met behulp van de testbenen werd al snel duidelijk dat de extra vrijheidsgraden, die door de distale gewrichten worden gerealiseerd, zeker niet gemist kunnen worden. Voorts hebben verdere experimenten met één van de bedachte loopalgoritmen het vermoeden versterkt dat lopen zonder slip inderdaad mogelijk is! Hieronder een actiefoto van zo'n experiment. Het werd wederom duidelijk dat het fysiek manipuleren van het exoskelet onmisbaar is om een intuïtief gevoel te ontwikkelen voor het soort bewegingen dat door de niet-rechte hoeken en het grote aantal draaipunten mogelijk (en onmogelijk!) wordt gemaakt. Dit soort hands-on experience voegt zonder meer een hele dimensie toe aan alle inzichten die door nadenken en wis- en natuurkundige analyse kunnen worden verkregen! (GV 18 juni 2012) Kort verslag van de bijeenkomst op 5 mei 2012 De volgende onderwerpen zijn aan bod geweest: Titus kwam met een zeeslagpuzzeltje, en Henk herinnerde zich dat hij daar nog een programma voor had... alleen bleek dat niet helemaal meer te werken (software-rot?), dus Henk is een poosje bezig geweest met debuggen. Uiteindelijk is dat gelukt, en de correcte oplossing kwam er uit rollen. Henk is thuis wat aan het solderen geweest en kwam met een schakeling in een schoenendoos, nog stammend uit de tijd van de telegrafie (niet de schoenendoos, maar het ontwerp van de schakeling), waarbij de uitdaging voor de overige bezoekers was om de logica van de schakeling te achterhalen. Uiteindelijk heeft Henk uitgelegd hoe het werkt. Gerard heeft weer wat leesvoer onder de aandacht gebracht; het meeste staat ook op de leesplank hieronder. Titus liet zien dat zijn TetraBot-simulatie (met OpenGL) nu een stapje verder is dan die van Gerard: zijn programma kan een bewegingsscript inlezen en de instructies daaruit in een programmalus herhalen. Dat wordt echter gedaan vanuit een standaard-beginstand, en het is allerminst zeker dat dit ook een stand is die in de loopbeweging voorkomt. De volgende stap moet dan ook zijn dat er voorafgaand aan dit herhaald uitgevoerde script eenmalig een reeks instructies kan worden doorlopen, die de TetraBot in een geschikte beginstand kan brengen — een soort intro dus. Titus en Gerard zijn, eerst met zijn tweeën, en later nogmaals met behulp van Dré Jansen en Kees, aan het experimenteren gegaan met het door Aloys vervaardigde TetraBot-exoskelet. Daarbij vormde de gladheid van de tafels en van de uiteinden van TetraBot zelf een extra moeilijkheid; de volgende keer moeten we misschien een kleedje of zo meenemen. Maar ondanks de krakkemikkige uitvoering van dit experiment, begint nu toch het vermoeden te rijzen dat er inderdaad een bewegingsmethode zonder slip mogelijk zou kunnen zijn. Aan Aloys is de vraag voorgelegd of er "testbenen" kunnen worden gemaakt met een gewricht minder, zodat we er beter achter kunnen komen waar het (letterlijk!) zou kunnen gaan wringen. Daar wordt nog verder over beraadslaagd. Tussendoor zijn er nog diverse onderwerpen voorbijgekomen, zoals het verband tussen AI en de ontwikkelingsprocessen van kinderen (of zelfs leerprocessen in het algemeen), de (betrekkelijk geringe?) waarde van toepassingsgerichte wetenschap, en de expertsysteem-shell CLIPS. Tot slot hadden we nog even tijd voor een testwedstrijdje Checkers tussen de programma's van Henk en van Titus. Dat was nogal improviseren. De computers hadden geen rechtstreekse communicatiemogelijkheid, dus dat moest door menselijke tussenkomst geregeld worden. Titus had het bord verkeerd om geprogrammeerd: de lange diagonaal liep van rechtsonder naar linksboven, dus bij hem moest alles in spiegelbeeld worden ingevoerd en geïnterpreteerd. De nummering van de velden in zijn programma was met "coördinaten", dus meer "schaakachtig", hetgeen een extra vertaalslag eiste. Henk's programma gaf alleen plaatjes te zien, dus ook hier moest vertaald worden naar officiële checkersnotatie. Bovendien zat er nog geen routine in om een keuze te maken uit de mogelijke zetten; hier bewees de randomgenerator van Gerards zakjapanner goede diensten. Gerard zelf zat met een "echt" checkersspel voor zich de vertaling en controle (op naleving van de spelregels) uit te voeren, terwijl Kees zorg droeg voor de notatie van de gedane zetten. Zo was bijna iedereen in touw. Het verloop van de partij was als volgt. (Voor de dammers onder ons: Checkers wordt gespeeld op een 8×8-bord, de nummering van de velden gaat wel op dezelfde manier als bij dammen, en zwart begint.) Henk opende met 9-14. Titus antwoordde symmetrisch, met 24-19. Henk ging verder met 12-16, waardoor Titus moest slaan, 19×12, en de symmetrie van de stand al vroeg verbroken werd. Toen was het tijd om de bijeenkomst af te breken, dus de partij eindigde onbeslist, maar met materieel voordeel voor Titus. (GV 6 mei 2012) Kort verslag van de bijeenkomst op 7 april 2012 Door een bijzondere bestuursvergadering samen met het bestuur van Robotica en Guido Hulscher van het HCC-bureau, o.a. over samenwerking tussen regio's en interessegroepen, was er deze keer wat minder tijd voor de plenaire sessie. Toch was de dag niet geheel verloren: Guido heeft zich in het Robotica-zaaltje op de hoogte laten stellen van TetraBot, een al enige tijd lopend samenwerkingsproject tussen diverse interessegroepen, nl. AI, Robotica, en de inmiddels opgeheven 6500 gebruikersgroep. Verder werden nog de volgende onderwerpen besproken: Henk Palstra liet zien dat hij een BASIC-programma had geschreven om het oplossen van zgn. codepuzzels te vergemakkelijken. Een codepuzzel is een soort ingevuld kruiswoorddiagram, waarbij elke letter (A t/m Z; Y=IJ) systematisch is vervangen door een getal (1 t/m 26, maar in willekeurige volgorde, dus NIET A=1, B=2, enz.). Dit getal staat klein in de linkerbovenhoek van de vakjes; het is de bedoeling de code te kraken, zodanig dat er alleen goede, bestaande woorden in het diagram komen te staan. Naast of onder het diagram staat gewoonlijk ook nog een in te vullen codetabel, waarin om de gebruiker op weg te helpen — en om de oplossing uniek te maken! — al enkele getal-lettercombinaties staan gegeven. Het programma van Henk vergemakkelijkt het oplossen doordat het alle vakjes met een bepaald getal tegelijkertijd met een letter kan invullen, zonder er eentje te vergeten (wat bij handmatig invullen nog wel eens voorkomt); ook kan een bepaalde invulling weer eenvoudig worden teruggedraaid, zodat het wat makkelijker wordt om "hypotheses" uit te proberen. Daarvoor moet wel eerst het hele diagram handmatig in de computer worden ingetoetst. Het is dus de vraag of dit programma echt tijd of moeite gaat besparen. Het programma bevatte echter een interessante feature: er werd ook geteld hoe vaak elk getal in het diagram voorkwam. Het is algemeen bekend dat de letter "E" in het Nederlands het vaakst gebruikt wordt — althans in normale tekst, d.w.z. tekst die niet speciaal is "gecomponeerd" om dit soort statistische wetmatigheden te doorbreken; zie Opperlandse taal-en letterkunde hoofdstuk 1, van Battus (of de latere editie Opperlans). Henk maakte hiervan dankbaar gebruik bij het oplossen van zijn voorbeeldpuzzel. Het ligt voor de hand om deze methode ook te gebruiken voor de andere letters; de puzzel zou dan geheel automatisch kunnen worden ingevuld. We vonden een frequentietabel op het Internet, maar die hielp ons niet veel verder, omdat de frequenties steeds dichter bij elkaar gaan liggen (mogelijk is de wet van Zipf hier aan het werk!). Een bijkomende moeilijkheid is, dat in sommige codepuzzels (ik zou zeggen: de goede) elke letter, dus ook bijv. de "Q" en de "X", minstens één keer voorkomen. Uiteraard verstoort deze eis de "natuurlijke" frequenties enigzins — en dan vooral bij de weinig voorkomende letters, die qua frequentie toch al dicht bij elkaar liggen! Er zijn zo voor de vuist weg 3 mogelijkheden te bedenken om dit op te lossen. De eerste, minst creatieve oplossing is om de computer een woordenlijst mee te geven. Dat moet echter een behoorlijk lange woordenlijst zijn, zelfs al zie je af van alle (in kruiswoordpuzzels niet geschuwde, maar in codepuzzels veelal afwezige) verbuigingen en vervoegingen, en ook al zijn de betekenissen irrelevant! De tweede mogelijkheid is om eens lekker met kansrekening aan de gang te gaan, en de beste fit van de getalfrekwenties in het diagram met de theoretische letterfrekwenties te nemen — overigens zonder echte garantie dat je dan ook de goede oplossing hebt; bij afwezigheid van een woordenlijst kent de computer de woorden immers niet. De derde methode is om gebruik te maken van di- en eventueel trigramfrequenties. Om dat te begrijpen kijken we even naar de (door mensen gevolgde) oplossingsprocedure, die meestal ongeveer als volgt verloopt. Je speurt het diagram af naar een woord (of een woordgedeelte) waarvan je denkt: "Gegeven de reeds bekende letters, kan dat haast niet anders zijn dan …". Dat geeft je een of meer nieuwe letters, waardoor je elders in het diagram weer een andere letter/getalreeks ziet, waarvan de getallen wederom eigenlijk maar voor één interpretatie vatbaar zijn; enzovoort. Zo wordt stap voor stap de codetabel (en daarmee het diagram) ingevuld. In dit opzicht lijkt het sterk op het invullen van een sudoku, waar ook telkens door het invullen van een vakje weer een of meer andere vakjes eenduidig bepaald worden! Het punt is dat je bij het zoeken van dergelijke unieke interpretaties veel gebruik maakt van de beperkingen (constraints) die in het Nederlands zijn opgelegd aan de opeenvolging van letters. Zo zal na een "Q" bijna altijd een "U" volgen, en wordt een "C" vaak gezien in directe combinatie met "H". Opeenvolgingen van veel medeklinkers of van veel klinkers zijn zeldzaam (maar niet onmogelijk; zie weer Opperlans). We kunnen dus gebruik maken van frequentietabellen van 2- en 3-lettercombinaties (eigenlijk een soort Bayesiaanse, voorwaardelijke kansen) om een zo plausibel mogelijke invulling van het diagram te verkrijgen. Dit sluit ook mooi aan bij de informatietheorie: zie A Mathematical Theory of Communication van Claude E. Shannon, de laatste alinea van paragraaf 2 en paragraaf 3. De beste strategie is natuurlijk om die drie oplossingen te combineren; dat lijkt waarschijnlijk ook het meest op hoe mensen het doen. Daarbij kan een patroonherkenningsalgoritme, mogelijk in de vorm van een neuraal netwerk, gebruikt worden om de woordenlijst te "doorzoeken". Een aardig idee voor een project! Heel kort is nog de mogelijkheid van een computer-checkerstoernooi aan bod geweest. Het blijkt dat Titus' programma nog niet alle spelregels machtig is: met name het meervoudig slaan moet nog ingebouwd worden. Aan de andere kant is Henk's programma ook nog niet echt speelklaar: het bevat wel een zettengenerator, die alle mogelijke zetten vanuit een positie laat zien; maar er zit nog geen positie-evaluatie in, zodat het programma nog geen keuze kan maken uit al die mogelijkheden. Gerard heeft aan beiden gesuggereerd om er nog weer eens wat vrije tijd tegenaan te gooien. Hij zal zelf op een van de volgende bijeenkomsten komen met een lijstje met spelregels. Wordt vervolgd, dus... De geplande experimenteersessie met de TetraBot-hardware is verschoven naar de volgende keer (en mogelijk ook de keer daarna). Aloys zal daarom nog niet de motoren inbouwen, maar eerst kijken of hij het sensorsysteem werkend kan krijgen, zodat we het handmatig draaien van het apparaat misschien ook m.b.v. de computer kunnen loggen. Ambitieus, maar wie weet... (GV 12 april 2012) Kort verslag van de bijeenkomst op 3 maart 2012 Gerard begon met te vertellen wat hij momenteel aan het lezen was: een Nederlandstalig Prolog-boekje, en een boek over de werking van de menselijke hersenen, waarin vooral aandacht wordt besteed aan de vraag wat de functie is van de verschillende onderdelen van het brein. Hierna legde Gerard uit waarom hij in zijn simulatieprogramma toch weer met het omhullende veelvlak van TetraBot aan de gang moet, en dat hij het 3-dimensionale probleem nu eens goed wil oplossen door het gedeeltelijk terug te voeren tot het 2- en 1-dimensionale geval. Ter illustratie liet hij een eerste, ongeteste versie van het 1-dimensionale omhulsel-algoritme zien. Henk liet zien dat hij Basic-programma's had geschreven voor het oplossen van Kakuro's, K-doku's, en grote sudokupuzzels bestaande uit meerdere overlappende "normale" sudoku's. In aansluiting hierop presenteerde Gerard nog twee artikeltjes voor "de Leesplank". Titus liet zien dat hij een dam- (of eigenlijk: checkers-) programma had geschreven. Gerard opperde het idee om Titus' programma te laten spelen tegen dat van Henk; hopelijk gaat dat op een van de volgende bijeenkomsten gebeuren. Tot slot lieten Abraham en Aloys nog zien hoever het met de hardware-versie van TetraBot stond: het "exoskelet" van de drie "poten" waar het geval zich op moet gaan voortbewegen is nu af. In één "dijbeen" was al een motor ingebouwd, maar het blijkt dat deze het werk niet helemaal aan kan en dat er dus nieuwe motoren moeten komen. Toch ziet het er al erg spannend uit. Gerard suggereerde om de volgende bijeenkomst handmatig met het exoskelet te experimenteren teneinde er zoveel mogelijk achter te komen waar de bewegingsvrijheden liggen en hoe die eventueel gebruikt kunnen worden om een voortbewegingsalgoritme te construeren. (GV 4 maart 2012) Kort verslag van de bijeenkomst op 4 februari 2012 Wegens de kou in "ons" lokaaltje (de verwarming van De Dissel was kaduuk) zijn we uitgeweken naar de kantine. Na de Algemene Ledenvergadering (ALV) zijn Kees Vlak en Gerard Vriens begonnen met het ontwerpen en bouwen van een object-georiënteerd sudoku-programma in Java. We werden het eens over 3 classes: allereerst een class Cell (een vakje waarin een cijfer moet worden ingevuld); daarnaast een class Diagram (het geheel van alle cellen, gerangschikt in een rechthoekig rooster); en tot slot een klasse die een groepje van (meestal 9) cellen voorstelt, waarin elk getal (meestal 1 t/m 9 dus) precies één keer voorkomt. Zo'n groepje kan een rij zijn, een kolom, een 3×3-blok, of meer in het algemeen een nonomino (zoals in een zgn blok- of puzzelsudoku; rijen, kolommen en 3×3-blokken zijn feitelijk ook nonomino's). En in zgn. diagonaalsudoku's (ook wel X-sudoku's genoemd) wordt zo'n groepje ook gevormd door — het woord zegt het al — elk van beide diagonalen, waarvan de cellen niet met de zijden, maar alleen met de hoeken tegen elkaar aan liggen. De naam die wij uiteindelijk aan zo'n groepje cellen hebben gegeven is Constraint, want dat is precies wat zo'n groepje doet: het levert een beperkende voorwaarde voor het invullen van de cellen, omdat waarden die al in zo'n groepje voorkomen niet meer in lege cellen kunnen worden ingevuld. Tot slot is er alvast een "dummy-programma" aangemaakt (en getest), dat alleen nog maar een leeg window op het computerscherm tovert. (GV 11 maart 2012) Kort verslag van de bijeenkomst op 7 januari 2012 Peter vestigde de aandacht op een speciale uitgave van Discover magazine, The Brain, met mooie plaatjes en interessante artikelen. Gerard liet enkele krantenknipsels rondgaan die met AI te maken hebben. Ook bracht hij een (2e-hands gekocht) boek voor onze bibliotheek mee, namelijk Cognition van Margaret W. Matlin. Aloys kwam langs om de huidige stand van de TetraBot-hardwareconstructie te laten zien. Er begint al aardig wat tekening in te komen; nadere details zijn binnenkort te zien op de TetraBot-pagina. Een poging om een elementaire Java-applet op Titus' computer aan de praat te krijgen, strandde om (vooralsnog) onbekende redenen. Verder werd de tijd vooral gevuld met gesprekken, o.a. over sudoku's. Dit onderwerp is ook al in eerdere bijeenkomsten aan de orde geweest. Afgesproken is om op een van de volgende bijeenkomsten, wanneer het dagprogramma dat toelaat, te beginnen met het daadwerkelijk schrijven van Javacode, allereerst om "gewone" sudoku's op te lossen; en om daarna te kijken of de Java-classes die we daarvoor ontwikkeld hebben misschien een geschikt basisgereedschap vormen om één of meer andere problemen m.b.t. sudoku's aan te gaan pakken. Naar aanleiding van Gerards TetraBot-simulatieprogramma, en zijn voornemen om (wederom!) eens goed te kijken naar de implementatie, ontspon zich een discussie over het nut daarvan. Gerard uitte het voornemen om in de toekomst aandacht aan tensegrity te gaan wijden, en de hoop dat gedeelten van zijn TetraBot-code voor dit doel ook bruikbaar zullen blijken. Tot slot vestigde Gerard de aandacht op de scholarpedia website, een wikipedia-achtige encyclopedie-in-wording, mede geschreven en bijgehouden door internationaal vermaarde wetenschappers, waarvan voor ons vooral de "Focal Areas" Computational Intelligence en Computational Neuroscience interessant zijn. (GV 10 januari 2012)

20 april 2020

...

Bijeenkomsten gehouden in 2013

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. Door deze ingrepen is Abraham er in geslaagd een goed meetbaar sensorsignaal te verkrijgen.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:  GerardKees GerardKees GerardKees GerardKees 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. Deze punten komen dus hopelijk op een van de volgende bijeenkomsten aan de orde. (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)  

20 april 2020

...

Bijeenkomsten gehouden in 2014

Kort verslag van de bijeenkomst op 6 december 2014 Er kwamen weer diverse problemen, ideeën en gezichtspunten ter tafel: Jan vertelde dat hij 20 transputers, in eigendom van de HCC, ter gebruik aangeboden had gekregen. Om deze te gebruiken, is er een computer met een ISA-bus nodig. Hij wil een transputer gebruiken om een robot aan de hand van bakens zijn positie te laten bepalen, en vervolgens door een poortje te laten rijden. Een probleem waar hij momenteel mee te kampen heeft is dat er software verdwijnt. Titus is aan de gang gegaan met de Tangram-puzzel. De bedoeling is om een computerprogramma te schrijven dat uitzoekt waar de stukjes moeten komen te liggen — nog niet om figuren te vormen die mensen, dieren, of andere dingen voorstellen, maar eenvoudigweg om de stukken weer terug in de vierkante doos te passen. Zijn in FreeBASIC geschreven programma bevat een genetisch algoritme. Op elk Tangramstuk wordt een referentiepunt gekozen, en de ligging van het stuk wordt gecodeerd door de coördinaten van het referentiepunt en de hoek waarover het stuk geroteerd is. Gerard merkte op dat daarbij alleen hoeken die een veelvoud van 45° bedragen hoeven te worden beschouwd. Om de fitness van de mogelijke oplossingen te bepalen, d.w.z. de mate waarin ze in het vierkant passen, heeft Titus een elegante oplossing gekozen: hij telt eenvoudigweg de zwarte pixels. Bij demonstratie van het programma was al wel te zien dat er driftige pogingen worden gedaan om voor alle stukken een geschikte plaats te vinden, maar het werkt nog niet naar behoren: het programma komt nog niet tot de oplossing. Jan deed kort verslag van zijn deelname aan de HCC Robotica Roborama-wedstrijd. Hij heeft meegedaan met 3 onderdelen: "T-tijd", "lijnvolgen", en "heen-en-weer". Het vierde onderdeel, blikken verzamelen, heeft hij aan zich voorbij laten gaan. Zijn robot was een Lego-karretje dat verstevigd was met 3mm-bouten en stalen assen. Dit karretje was o.a. voorzien van een opnemer (sensor) die uitgaande van de startrichting, met behulp van een versnellingsmeter met AD-converter en Kalman-filter zijn positie bepaalt. Omdat de door Lego zelf geleverde sensor er wel 5 graden naast kan zitten, gebruikt Jan er een van Microinfinity. Met deze hardware, en natuurlijk de nodige software, eindigde Jan als een solide middenmoter: 7e van de 14 deelnemers. Voor de geïnteresseerden: alle uitslagen van de Roborama-competitie (waaraan ook Titus heeft deelgenomen) zijn te vinden op de website van de HCC robotica interessegroep. Henk kwam met een programma om de 2×2 Rubik-kubus op te lossen. De werkwijze van dit programma (in wezen dezelfde aanpak als hij toepaste bij de schuifpuzzel) kwam nu goed uit de verf. Het programma bepaalt voor elke stand hoeveel draaiingen die verwijderd is van de oplossing, en slaat deze aantallen op in een array. Wanneer nu het programma een willekeurige stand krijgt voorgeschoteld, kijkt het welke standen daaruit bereikbaar zijn door één draaiing, en hoeveel draaiingen díe standen nog verwijderd zijn van de oplossing. Is dit minder dan de huidige stand, dan zijn het "goede" stappen; is het aantal benodigde draaiingen daarentegen meer dan het huidige, dan leidt die stand alleen maar van de oplossing weg en moet je hem juist niet kiezen.Zowel Henk als Gerard hadden een 2×2 kubus gekocht en meegenomen. Die van Gerard was echter al hopeloos verdraaid: Gerard bekende hem niet meer handmatig te kunnen oplossen. Dus werd de stand ingevoerd in de computer, de door het programma aanbevolen draaiingen werden uitgevoerd, en ziedaar, bijna als door toverij herkreeg de kubus zijn "fabrieksinstelling"!De uitleg van het algoritme om permutaties te vertalen in opeenvolgende getallen – nodig om kubus-configuraties en array-elementen aan elkaar te koppelen – komt op de volgende bijeenkomst aan bod. Gerard had de vorige keer de regels van de "Brain Teaser"-puzzel uit Creative Computing niet volledig uitgelegd, en kwam dus met een aanvulling: alleen velden met een "1" kunnen geselecteerd worden; en als alle velden 0 zijn heb je (dus!) verloren. Verder had hij het oorspronkelijke BASIC-programma vertaald naar Python; aan de hand van deze versie demonstreerde hij het spelletje. En hij wijdde ook enige aandacht aan zijn pogingen om het spel te analyseren. Daarbij bleek het verhelderend om de restrictie dat alleen "1"-velden geselecteerd kunnen worden, te laten vallen. Door een bepaald patroon van velden te selecteren, en de velden die daardoor veranderen op hun beurt weer te selecteren, en dat te herhalen, bleek hij in alle onderzochte gevallen na 2 of 4 van zulke stappen weer het oorspronkelijke patroon te krijgen. Hij vroeg zich af of dat algemeen geldig was. Tenslotte zei hij van plan te zijn om de methode die Henk voor de schuifpuzzel en de Rubik-kubus gebruikte, ook op deze puzzel toe te passen. (GV 6 januari 2015) Kort verslag van de bijeenkomst op 1 november 2014 We hebben ons weer aangenaam bezig gehouden met de volgende onderwerpen: Abraham had een mooie plexiglas dekplaat voor zijn LED-display gekocht. Daarmee is tijdens de bijeenkomst een filmpje gemaakt van alle 783 oplossingen van de 5×8 tetromino-puzzel. Op de onderstaande foto is de opstelling te zien op de tafel tegen de muur, rechts naast het whiteboard. Tegelijkertijd met onze bijeenkomst hield de HCC Robotica interessegroep haar jaarlijkse Roborama-competitie. Titus liet zich te elfder ure inschrijven met zijn Lego® EV3-robot, voor het onderdeel lijnvolgen. Omdat zijn robot de hele lijn niet in de gaten had, bleef hij maar rondjes draaien, zodat Titus en zijn robot met een score van 0 punten eindigden. Een resultaat dat in ieder geval ruimte biedt voor verbetering volgend jaar! (En zoals wij allemaal weten, is meedoen belangrijker dan winnen.) Titus nam zich voor om de discriminatiewaarde van de sensor, d.w.z. de overgangswaarde waarbij hij beslist of de robot boven de lijn zit of er naast, het komende jaar niet op de intuïtief aannemelijke waarde van 50% te leggen, maar deze empirisch te gaan bepalen door de sensor bij praktijktests uit te lezen. We verwachten dan ook dat we Titus komend jaar regelmatig bij Robotica op de testbaan kunnen aantreffen… Titus heeft zich de afgelopen maand ook bezig gehouden met het probleem van de kool, de wolf en de geit. Hij heeft het geprobeerd met een Monte-Carloaanpak: de "zetten" worden willekeurig gekozen, waarbij er telkens wordt gekeken of een situatie zich al eens eerder heeft voorgedaan, en of er niets wordt gegeten (d.w.z., of de kool en de geit worden gespaard). De methode lijkt niet goed te werken: de oplossing kwam niet verder dan halverwege, zelfs na 10000 keer herhalen in een programmalus. Van "iemand op Internet" vernam hij dat brute force wèl werkt — maar dat is eigenlijk geen verrassing… Henk legde nogmaals uit hoe hij in zijn schuifpuzzelprogramma de standen efficiënt kan opslaan doordat ze aftelbaar zijn. Hij had nu het idee om dezelfde 'truc' toe te passen op de 2×2×2 Rubik's cube. Daarbij zijn volgens zijn berekening 7! × 36 = 5040 × 729 = 3.674.160 standen mogelijk, die elk door een getal 0 ≤ n ≤ 3.674.159 kunnen worden gecodeerd. Hij moet daarvoor twee algoritmen opstellen: één om de volgorde van de blokjes in de kubus om te zetten in een waarde van n; en een andere om uit de waarde van n de stand van de kubus af te leiden.Henk opperde dat deze aanpak misschien ook toepasbaar kan zijn op de tetromino-puzzel. Gerard memoreerde dat hij de aandacht had gevestigd op de tetrominopuzzel omdat hij zich afvroeg of een genetisch algoritme hiervoor een oplossing zou kunnen vinden, en zo ja, wat dan de chromosoomcodering en de fitnessfunctie moeten zijn. Hij merkte op dat hij op de "oude" AI-pc een powerpointpresentatie van Wim de Rooij heeft teruggevonden over een mogelijke aanpak om de pentomino-puzzel met een GA op te lossen; hij nam zich voor die aanpak te gaan bestuderen. Gerard vertelde dat hij het boek Surfaces and Essences had gelezen, geschreven door Douglas Hofstadter (bekend van o.a. Gödel, Escher, Bach en zijn columns in Scientific American) en de fransman Emmanuel Sander. In dit boek, dat tegelijkertijd in het Engels en het Frans werd geschreven, maar inmiddels ook in Nederlandse vertaling verkrijgbaar is, betogen de schrijvers dat alle menselijk denken berust op analogieën. Met behulp van talloze voorbeelden, variërend van simpele versprekingen en de taalverwerving van kinderen tot de "wereldschokkende" inzichten van de grote wis- en natuurkundigen uit het verleden (m.n. Einstein) weten zij dit aannemelijk te maken. Gerard vond het jammer dat het boek geen aandacht besteedde aan het mechanisme, d.w.z. de manier waarop het herkennen van, en zoeken naar, analogieën in de hersenen plaats vindt. Daar zijn vermoedelijk goede redenen voor (zoals bijvoorbeeld dat het boek dan nog veel dikker zou worden dan de huidige 578 pagina's, of dat er over dat onderwerp nog maar weinig tot niets bekend is, of dat dat niet tot de expertise van de auteurs behoort), maar voor ons als AI'ers is dat natuurlijk wel de belangrijkste vraag! Daarnaast vestigde Gerard de aandacht op een boek uit 1979, Computers in Mathematics: A Sourcebook of Ideas, waarin een groot aantal interessante artikelen, puzzels, (BASIC-)programma's en cartoons uit het tijdschrift Creative Computing gebundeld staan. Als voorbeeld noemde Gerard een reeks van 5 artikelen over "Denkstrategieën met de computer" (inferentie, terug werken, subdoelen, "trial & error", en tegenspraken). Daarnaast had hij in het boek een spelletje gevonden, simpelweg Brain Teaser geheten, dat hem geschikt leek voor een "app" op tablet of smartphone. Het gaat daarbij om een "boter, kaas en eieren"-bordje dat gevuld is met enen en nullen. Door een veld te selecteren verandert het patroon op een bepaalde wijze (afhankelijk van de positie van het geselecteerde veld), en door zo stapsgewijs de inhoud van het bord te veranderen moet de speler een bepaald "doelpatroon" zien te krijgen. Dit "selecteren" van een veld gebeurt in het oorspronkelijke programma door een veldnummer in te tikken, maar voor dit soort dingen is een aanraakscherm natuurlijk een veel eenvoudiger gebruikersinterface (voor de gebruiker, niet per se voor de programmeur). (GV 5 november 2014) Kort verslag van de bijeenkomst op 4 oktober 2014 Voorafgaand aan (en ook gedurende) de plenaire sessie gaf Abraham voor de liefhebbers een demonstratie van de Tetrominopuzzel-oplossingen op zijn LED-display. In overleg met Gerard werd besloten het daadwerkelijke filmen van de oplossingen uit te stellen totdat de display van een wat mooiere contrastverhogende afdekplaat is voorzien.Verder is er natuurlijk de afgelopen maand weer lustig voortgeborduurd op eerder aangepakte projecten, en de plenaire sessie bestond grotendeels uit voortgangsverslagen. Er was een nieuw gezicht in onze groep, Jan, en op ons verzoek vertelde hij wat over zichzelf en zijn interesses. Hij wist van ons bestaan via de HCC!Robotica interessegroep, waarvan hij al enige tijd aktief lid is, en had besloten om ook eens bij AI te komen kijken. Zijn belangstelling gaat vooral uit naar transputers, een (helaas uit de productie genomen) type microprocessor met een architectuur die hem zeer geschikt maakt voor parallelle verwerking en het bouwen van netwerken van processoren. De ermee geassocieerde programmeertaal is Occam. Jan onderhoudt een eigen webpagina, http://conapp.org, waarop hij verslag doet van zijn interesses en vorderingen. Titus was nog niet veel verder gekomen met zijn genetisch programma om de halfwaardetijd van isotopen te voorspellen. Hij had een bug in het cross-over-algoritme opgelost, maar ontdekte dat er ook nog iets fout ging met de mutaties. Toch kon hij iets leuks demonstreren: hij had zijn Lego® Mindstorms® EV3 robot meegenomen, en liet zien hoe dit rijdende robotje zich gedraagt onder invloed van een "dans"-programma. Henk had twee verbeteringen in zijn QBASIC schuifpuzzel-programma aangebracht: Als eindstand wordt niet meer de eerste de beste stand met het grote vierkant boven geaccepteerd; er wordt doorgeschoven totdat er een symmetrische eindstand is bereikt. Er zit meer interactie in het programma. In plaats van alleen maar het "pad" naar de oplossing af te drukken, biedt het programma de gebruiker nu ook de mogelijkheid om zelf zetten te doen. De computer geeft aan welke zetten mogelijk zijn, en (met een kleurcodering) welke daarvan naar het doel toe leiden, en welke ervan af. De uitvoering van de zetten is "geanimeerd", d.w.z. je ziet het blokje daadwerkelijk verschuiven. Natuurlijk kan het programma de puzzel desgewenst nog steeds geheel automatisch oplossen; maar ook dat wordt nu in animatie weergegeven! Daarvan is door Abraham een mooi filmpje gemaakt, dat te zien is op YouTube. Henk heeft ook nog wat nadere uitleg gegeven over de werking van zijn programma. Hij maakt gebruik van een array, waarin hij van alle mogelijke bordstanden het niveau in de boomstructuur opslaat. Zo kan hij snel terugzoeken welke standen uit elkaar afleidbaar zijn, en of een zet naar de oplossing toe voert of er van af.Gerard had een ander soort schuifpuzzel bij zich: het kippenspel, dat 48 verschillende opgaven kent. Bij iedere opgave liggen er een aantal eieren op de grond, die door verschuifbare kippen moeten worden "bebroed". Misschien dat hier in de toekomst ook nog eens een programma voor geschreven kan worden … Tenslotte vertelde Gerard nog 't een en ander over polyomino-puzzels. Met de houten versie van de tetrominopuzzel als aanknopingspunt, werd al snel overgestapt op pentominopuzzels. Gerard legde uit hoe die als een exact-coverprobleem kan worden gedefinieerd, en vertelde dat er voor zulke problemen een standaard oplossingsmethode bestond, het dancing-linksalgoritme. In zijn eigen backtrack-aanpak, die op een iets andere manier werkt, had hij een simpele maar effectieve verbetering aangebracht. In elke gedeeltelijke (mogelijke) oplossing, waarbij nog niet alle stukjes zijn gelegd, komen namelijk één of meer lege ruimtes voor. Wil zo'n tussenstadium perspectief bieden, dan moet de oppervlakte van elk van die lege ruimtes een vijfvoud zijn. Met dat criterium blijken zeer veel doodlopende wegen al in een vroeg stadium vermeden te kunnen worden; de looptijd van het programma werd spectaculair verkort van 6 etmalen naar zo'n 5 minuten!Ook ging hij nader in op de samenhang van de oplossingen. Het was al bekend dat oplossingen uit elkaar kunnen worden afgeleid door slechts enkele stukjes uit het doosje te nemen en er op een andere manier weer in te leggen. Volgens Gerard kan het minimale aantal stukjes dat moet worden "omgelegd", gezien worden als een afstandsmaat. Dat doet ons natuurlijk automatisch denken aan het Traveling Salesman probleem, dat in deze context de volgende interpretatie heeft: In welke volgorde moeten we de oplossingen in het filmpje (op Abrahams LED-display) zetten, om te bewerkstelligen dat er zo weinig mogelijk omschakelingen (van "uit" naar "aan", of omgekeerd) nodig zijn? Ook kan de structuur die blijkbaar in de oplossingsruimte bestaat, ons misschien de weg wijzen naar een nòg efficiëntere manier om alle oplossingen te produceren. En misschien ligt daar ergens ook een antwoord verscholen op de vraag waar het mee begon: hoe moeten we de kandidaatoplossingen coderen, en welke fitnessfunctie hebben we nodig, om zulke puzzels met een genetisch algoritme op te lossen? (GV 7 oktober 2014) HCC!AI op de MegaCompuFair van 27 september 2014 Evenals voorgaande jaren waren we weer aanwezig op de MegaCompuFair van de HCC CompUsers interessegroep, dit jaar het enige platform voor de diverse HCC!interessegroepen om zich "live" naar buiten toe te presenteren. Hoewel we natuurlijk open stonden voor vragen en discussies over een brede verscheidenheid van AI-onderwerpen, hadden we zelf ook iets in te brengen: de tetromino-puzzel. Gerard was er inmiddels in geslaagd om alle 783 unieke oplossingen door een C-programma te laten genereren en in een tekstbestand vast te leggen. Nu moest ter plekke een Python-scriptje worden geschreven om deze oplossingen op het LED-displaybord van Abraham te voorschijn te toveren. Dat lukte wonderwel! Wel hadden we nog even ruzie met de regeleinden ("returns"), die in Linux anders worden opgeslagen dan Microsoft pleegt te doen, maar dat werd snel opgelost. Uiteindelijk hadden we, met 1 oplossing per seconde, een "filmpje" van iets meer dan 13 minuten op de display. De onderstaande foto laat zien hoe de 783ste (en laatste) oplossing er op de display (rechtsboven op de foto) uit ziet. De rode transparante stukken plastic die over de display zijn gelegd, dienen om de zichtbaarheid (d.w.z., het contrast) te verbeteren. Maar omdat het passief kijken naar al die oplossingen ook al gauw gaat vervelen, had Gerard met wat huisvlijt een houten versie van de puzzel vervaardigd. Met deze "real-life"-versie, op de bovenstaande foto linksonder naast de display, konden de bezoekers zelf hun krachten op de puzzel beproeven, en zo hun intelligentie meten met die van de computer. Hoewel niet iedereen die uitdaging aanging, waren er toch genoeg sportievelingen die het wel aandurfden, zoals op onderstaande foto. En soms vormde dat ook nog eens de aanleiding voor een filosofische discussie over de vraag wat deze puzzel nu precies met AI te maken heeft. Al met al was het dus weer een welbestede dag. (GV 29 september 2014) Kort verslag van de bijeenkomst op 6 september 2014 We zijn er in geslaagd om de hele bijeenkomst aangenaam en zinvol te vullen met slechts drie onderwerpen: Henk had uit zijn archief een voor de EXIDY geschreven programma opgediept, dat een schuifpuzzel oplost. De puzzel maakt gebruik van een rechthoekig bord van 4×5 lengte-eenheden, dat als volgt gevuld is met vierkante en rechthoekige blokjes van verschillende grootte:Het doel van het spelletje is om het grote vierkante blok (aangegeven met het cijfer "1") midden boven te krijgen. Gerard merkte wat wijsneuzig op dat je daarvoor slechts het bord 180° hoefde te draaien, maar dat is natuurlijk vals spelen: het doel moet worden bereikt door stukjes horizontaal of vertikaal naar lege plekken (grijs) te schuiven, waardoor er weer nieuwe plekken leeg komen voor andere stukjes, enzovoort.Het programma van Henk vond in ca. 1¼ minuut een oplossing waarbij in 116 stappen de volgende eindstand wordt bereikt:Hoe werkt dat programma dan? Henk legde uit dat er in het geheugen een boomstructuur wordt opgeslagen van alle standen die door (reeksen van) mogelijke schuifzetten kunnen worden verkregen. Standen die al eerder gevonden zijn, en spiegelbeelden daarvan, worden genegeerd. Zodra er in de boomstructuur een stand ontstaat die voldoet aan de voorwaarde voor een oplossing (grote vierkant midden boven), wordt in de boomstructuur teruggezocht hoe die oplossing is bereikt, en worden deze "zetten" afgedrukt.Henk vroeg zich af of er voor dit soort problemen een algemeen (universeel) programma kan worden geschreven. Als aanzet liet hij zien hoe de beginstand van bovenstaande puzzel zou kunnen worden ingevoerd m.b.v. letters:A B C D E F G H E I   I  H J K  K L J K  K L Hiervoor is een invoerroutine te gebruiken die Henk ooit heeft geschreven voor K-doku puzzels.Gerard zag in het schuiven van stukken naar lege vakken een analogie met checkers (Amerikaans dammen), en discussieerde kort met Kees over de mogelijkheid en wenselijkheid om de standen en zetten van een schuifpuzzel te coderen m.b.v. bitboards. Kees kwam met een interessant geval aanzetten: hij was tegen een probleem opgelopen bij het bieden op eBay via zijn smartphone en had een transcript (verslag) van zijn online chatsessie met de helpdesk uitgeprint. Deze sessie deed hem sterk denken aan het verslag van een Turing test, waarbij een computer in een chatsessie wordt ondervraagd om te beoordelen of hij "menselijke" (d.w.z. "intelligente") antwoorden geeft. Mogelijk handelde de helpdeskmedewerker volgens een in zijn computer opgeslagen "script" zoals ook telemarketeers moeten gebruiken. Bovendien is het niet onwaarschijnlijk dat diverse onderdelen van dit script, zoals de begroeting en de afscheidsformule, al in "ingeblikte" vorm op de helpdeskcomputer voorradig zijn en met een muisklik op de betreffende windows-knop worden doorgezonden. Zo'n procedure zou goed tot gevolg kunnen hebben dat je soms niet weet of je met een computer of met een mens van vlees en bloed zit te chatten... Gerard vertelde dat zijn programma nu inderdaad de 783 unieke oplossingen van de 5×8 tetrominopuzzel voortbracht, zonder spiegelingen en rotaties. Tevens had hij het programma aangepast om het data driven te maken, waardoor het overigens wel een stuk langzamer werd. Op het scherm heeft Gerard de opbouw van beide programmaversies laten zien, alsmede de functie die elke nieuw gevonden oplossing vergeleek met de opgeslagen reeds gevonden unieke oplossingen. Met een kleine wijziging vond het programma ook alle 449 oplossingen van de 4×10 tetrominopuzzel. Hierdoor aangemoedigd besloot Gerard om het programma zo te wijzigen, dat de 6×10 pentomino-puzzel kan worden aangepakt. Dit bleek een wel erg ambitieuze klus: er moeten 2339 oplossingen zijn, en het programma had er na 6 dagen stampen 2335 uitgeprint. Helaas schakelde Gerard toen in zijn haast om op tijd op de bijeenkomst te komen, gedachteloos de computer uit … (GV 24 september 2014) Kort verslag van de bijeenkomst op 5 juli 2014 De meeste onderwerpen die in de plenaire sessie te sprake kwamen waren al eerder aan bod geweest, maar er werden interessante nieuwe gezichtspunten naar voren gebracht: Henk vestigde de aandacht op het boek In Einsteins achtertuin, geschreven door Amanda Gefter. Hij had dit boek aangeschaft n.a.v. een bespreking in De Volkskrant, en vond er een bevestiging in van het uitgangspunt dat hij ook in zijn artikel over de vrije wil hanteert: We leven in een illusie; er is niets, alleen atomen. Titus is met een gedurfd experiment begonnen: hij wil m.b.v. genetisch programmeren de halfwaardetijden van isotopen voorspellen, d.w.z. hij wil aan de hand van de samenstelling van de atoomkernen voorspellen hoe lang het gemiddeld duurt voordat deze als gevolg van radioactiviteit uit elkaar vallen. Natuurkundigen denken dat hele zware atomen, die in de Natuur nog niet gevonden zijn en in het laboratorium nog niet kunstmatig vervaardigd, misschien net zo stabiel zijn als de "gewone" materie om ons heen. Titus wil nu dus kijken of de computer tot dezelfde conclusie komt.Hiervoor heeft hij een tabel nodig met de samenstelling van alle (radioactieve en niet radioactieve) atoomkernen en hun halfwaardetijd. Hij was bezig die handmatig over te tikken, maar de aanwezigen waren van mening dat die gegevens wel min of meer automatisch van het Internet af te lezen zouden moeten zijn. Daar zou nu naar worden gezocht. Abraham had op twee 8×8 LED-displays twee oogjes geprogrammeerd, met expressieve uitdrukkingen. Mogelijk kunnen deze een rol gaan spelen in het project met de webcam, die bewegende objecten moet gaan volgen: enerzijds zijn deze "geanimeerde" oogjes misschien meer geschikt om de aandacht van het publiek te trekken dan een "gewone" webcam; en anderzijds kunnen we een tussenstadium invoegen, waarbij de camera gewoon stilstaat en de oogjes de beweging volgen. Dat zou zeker makkelijker te programmeren zijn dan het volgen van bewegende voorwerpen met een webcam die zelf ook beweegt! Daarnaast liet Abraham zien dat hij ook een grotere display had van 16×32 LEDs, die hij o.a. gebruikte als "reclamebord" voor de HCC Newbrain interessegroep. Gerard had het werk aan de tetromino-puzzel hervat. (Zie het bijeenkomstverslag van 06-02-2010.) Hij had zijn Java-programma vertaald in zowel Python als C. Waar de Java-versie ruim 10 minuten over deed, had de Python-versie een half uur voor nodig, en de C-versie bereikte hetzelfde resultaat in minder dan 5 minuten. Deze programma's produceren nog niet uitsluitend de gezochte 783 unieke oplossingen, maar daarbij ook alle oplossingen die hieruit verkregen worden door spiegeling, rotatie, en/of verwisseling van identieke stukken: 99392 in totaal. Gerard gaat nu proberen zijn programma zo aan te passen dat al deze "afgeleide" oplossingen er uit worden gefilterd. Een soortgelijk programma dat Henk voor dit probleem had geschreven in QBASIC haalde al wel alle verwisselingen van identieke stukken er uit, en kwam dus op 99392 ÷ 25 = 3106 oplossingen. Het tetromino-programma van Henk maakt van de oplossingen fraaie plaatjes waarin elk stukje een andere kleur krijgt. Gerards programma drukt de oplossingen wat ongepolijster af als een matrix van cijfers:           32244448           32291188           39991180           37756660           77555600 Maar "handmatig" gevonden oplossingen legt Gerard vast in een tekstbestand als een "afbeelding" in ASCII-karakters. Dezelfde oplossing die hierboven als cijfer-matrix staat, ziet er als ASCII-afbeelding als volgt uit: Dat bracht Abraham en Gerard op het idee om alle oplossingen van de tetromino-puzzel te tonen op het grote LED-display. Als er één oplossing per seconde wordt afgebeeld — een behoorlijk hoog tempo — dan levert dat een "filmpje" op van maar liefst 13 minuten! Er werd afgesproken dat Gerard één zo'n zelfgevonden oplossing naar Abraham zou mailen om mee te experimenteren. Daarnaast gaat hij aan de slag om te bewerkstelligen dat zijn programma de oplossingen ook op deze manier afdrukt. (GV 10 september 2014) Kort verslag van de bijeenkomst op 7 juni 2014 Het was zoals gewoonlijk weer een gevarieerde en boeiende bijeenkomst, waarop de volgende onderwerpen ter sprake kwamen: Pedro deelde mee dat hij is begonnen met een blog over AI en simulaties. Op deze website, nog in aanbouw m.b.v. WordPress, staan al twee interessante onderwerpen: Het "spookgeldprobleem". Zoals vorige maand door Titus is gedemonstreerd, kunnen er minieme verschillen optreden bij een zelfgeschreven programma voor de berekening van wisselgeld. Pedro laat zien dat het probleem niet specifiek is voor BASIC: ook in zijn JavaScript-programma (decimale versie, waarin gerekend wordt met floating point getallen) doet het verschijnsel zich voor. Daarnaast toont hij aan (in de "integer versie" van zijn programma) dat het probleem inderdaad kan worden opgelost door in eurocenten te rekenen i.p.v. in euro's. De "Party Planner". Pedro is er in geslaagd om het betreffende nummer van Scientific American in digitale vorm na te bestellen. Op zijn website vertelt hij in eigen woorden wat de bedoeling van het programma is, en hoe het programmeren kan worden aangepakt. Gerard suggereerde dat voor een feestje dat zich afspeelt op een soort schaakbord (dus met geheeltallige coördinaten, zoals de oorspronkelijke versie die is geschreven voor een karakter-georiënteerde display), de Chebyshev-afstand misschien meer geschikt is dan de Euclidische afstand. Het zou zeker interessant zijn om het gedrag van de gasten bij de beide afstandsmaten te vergelijken! Verder heeft Pedro links opgenomen naar sites vanwaar gratis e-boeken over programmeren zijn te downloaden. Henk kwam met een programmeer-technisch punt: als je in BASIC m.b.v. een GOTO-opdracht uit een FOR-lus springt, kan dat problemen geven omdat bij het opzetten van FOR-lussen vaak dingen op de stack worden gezet — die er dan bij het uitgaan van de lus niet meer van worden afgehaald. Sommige BASIC-dialecten hebben dit opgelost door het invoeren van een speciale EXIT FOR-opdracht. Henk merkte op dat je het probleem vóór kunt zijn door de FOR-lus zelf m.b.v. een GOTO te programmeren. N.a.v. de opmerking dat C geen problemen heeft met het wegspringen uit FOR-lussen ontspon zich een discussie over wat er dan precies op de stack wordt gezet, en of er in deze verschil is tussen gecompileerde en geïnterpreteerde BASIC. Theo merkte n.a.v. het vorige punt op dat GOTOs niet alleen weinig populair zijn omdat ze makkelijk tot spaghettii-code kunnen leiden, maar ook omdat de integriteit, correctheid, en vooral veiligheid van programma's niet meer machinaal te controleren zijn. Als voorbeeld wees hij op de Apple SSL "goto fail" bug. Daarnaast vroeg Theo onze aandacht voor twee interessante Python-ontwikkelingen: Brython. Hiermee kunnen Python-programma's worden gecompileerd naar JavaScript, en dus uitgevoerd in browsers. De snelheid en debugging-mogelijkheden zijn wel duidelijk minder dan in JavaScript. VPython, dat een module bevat voor het uitvoeren van 3-D plaatjes en animaties. Gerard dacht dat hier misschien een mogelijkheid ligt om zijn TetraBot-simulatie naar Python te porten. De programmeeromgeving GlowScript heeft een soortgelijke functionaliteit, maar is gebaseerd op JavaScript en kan dus applicaties maken die geschikt zijn om in browsers te worden uitgevoerd. Titus liet zien dat zijn genetisch programmeren nu goed werkt in Liberty-BASIC (en Just BASIC) en in Python. Titus werkt met string-expressies, omdat hij het werken met boomstructuren nog wat te complex vindt. Het berekenen van pi onder Liberty-BASIC gaf een indrukwekkend goede benadering. Abraham liet zien wat hij op verzoek van Gerard in elkaar geknutseld had: een web-cam op een servo-mechanisme, waardoor hij 180° draaibaar is. Het motortje is met simpele commando's aanstuurbaar via de USB-poort van een computer. De onderstaande foto illustreert hoe het er uit ziet.Het geheel werkte prima onder Windows-XP, maar het kostte wel wat moeite om het onder Windows 98 aan de praat te krijgen. De USB-aansturing via de COM-poort leverde problemen op. Uiteindelijk is het met hulp van Theo gelukt: eerst werd de motor bestuurd met een terminal-programma, en daarna zijn ze er ook in geslaagd om dit vanuit Python voor elkaar te boksen. Helaas werkte de meegeleverde camerasoftware ook niet goed onder Windows 98: er kon geen beeld op het scherm worden getoverd. En dit beeld is helaas zeer essentieel voor het einddoel van het project: het met de camera volgen van bewegende objecten, zoals langslopende mensen of dieren. Gerard gaat de komende maand onderzoeken hoe het camerabeeld alsnog kan worden uitgelezen, en wel bij voorkeur vanuit Python, zodat beeldverwerving, beeldanalyse, en motorbesturing vanuit één programma kunnen worden gedaan. Terwijl Abraham, Theo en Gerard met deze communicatieproblemen worstelden, vond er ook een gesprek plaats tussen Henk en Kees over o.a. computer-checkers. Er kwam niets concreets uit, maar we kunnen concluderen dat het onderwerp blijkbaar nog steeds springlevend is! (GV 9 juni 2014) Kort verslag van de bijeenkomst op 3 mei 2014 De plenaire sessie werd ditmaal gevuld met de volgende onderwerpen, die zoals gewoonlijk weer door de aanwezigen werden aangedragen: Pedro vestigde onze aandacht op Processing, een op Java gebouwde programmeertaal en -omgeving die speciaal is ontwikkeld voor grafische toepassingen. Een interessant stuk computergereedschap voor kunstenaars en ontwerpers dus, maar het zou ook geschikt zijn om er spelletjes en simulaties mee te maken. Voor voorbeelden verwees Pedro naar de Processing exhibition. Er is ook een naar JavaScript "vertaalde" versie, Processing.js, waarmee toepassingen kunnen worden gemaakt voor webbrowsers zonder gebruik te maken van een Java-plug-in (die niet altijd optimaal beveiligd schijnen te zijn). Ook vroeg Pedro naar een referentie voor het programma Party-Planner, dat vorig jaar ter sprake kwam. Zoekopdrachten op het Internet leveren schermpagina's vol met mensen die deze (tamelijk nieuwe) functie vervullen of willen vervullen, of die gezocht worden om die functie te vervullen. Het programma waarin wij belang in stellen is echter niet zozeer van praktisch nut voor het opzetten van concrete feestjes, maar veeleer een ruimtelijke simulatie van sociale interacties (of het vermijden ervan), gebaseerd op een soort potentiaalfunctie. Dit programmeeridee staat uitvoerig beschreven in de rubriek Computer Recreations in het september(1987)-nummer van het tijdschrift Scientific American. Kees meldde dat hij het verhaal over bitboards in een checkers-programma, dat hij op de afgelopen maart-bijeenkomst hield, op verzoek van Gerard in de vorm van een artikel heeft gegoten. Gerard zal dit artikel "HTML-iseren" en op deze website plaatsen. Titus had een programmaatje geschreven dat het wisselgeld bij kassa-betalingen berekent — niet alleen het bedrag, maar ook de samenstelling, uitgaande van een minimum aantal biljetten en munten. (Dus één biljet van €20 i.p.v. twee van €10 of zelfs vier van €5.) Hij hield echter "spookgeld" over: kleine restbedragen zoals 0.11365908e-13, en wilde weten waar die vandaan kwamen en wat hij er aan kon doen. De aanwezigen waren het er over eens dat het afrondingsfouten moesten zijn. Gerard rekende voor hoe 1/5 in binaire notatie een repeterende breuk opleverde; en omdat 1/10 (dubbeltje) = 1/2 * 1/5 verschijnt er een repeterende breuk in alle bedragen onder €1 (behalve €0.25, €0.50, en €0.75). Doordat een computer dergelijke oneindige reeksen moet afkappen, ontstaan dergelijke kleine verschillen.De oplossing die Titus zelf had bedacht (restbedragen onder een bepaalde grenswaarde negeren) werkte prima, maar uit de groep kwam de opmerking dat het probleem uit de wereld kon worden geholpen door te rekenen in centen, in plaats van hele euro's. Ook kon Titus nu iets demonstreren van zijn experimenten met <a.href="http: en.wikipedia.org="" wiki="" genetic_programming"="">genetisch programmeren. Zijn Python-versie werkte nog niet naar behoren, maar in Liberty BASIC was hij zover dat hij een proof of concept kon leveren. Hij liet zien hoe zijn programma (met wisselend succes) een berekening van π zocht; het beste resultaat was 8391684/2097921, wat neerkomt op een waarde van (met de zakrekenmachine) 3.141592629. Er is nog wat over dit programma doorgepraat en Titus heeft enkele suggesties gekregen voor een betere presentatie van de uitvoer. Voorafgaand aan de plenaire sessie hadden Gerard en Abraham een vruchtbaar gesprek over een nieuw project met een webcam. Daar gaat de komende maand aan worden gewerkt om te kijken of het een haalbaar idee is. Houd dus deze website in de gaten voor updates! (GV 19 mei 2014) Kort verslag van de bijeenkomst op 5 april 2014 Ondanks een wat magere opkomst toch weer een erg interessante bijeenkomst, met in de plenaire sessie o.a. Henk heeft nu ook een zettengenerator voor schaken geschreven (in BASIC, natuurlijk!), en heeft daar iets van laten zien. Dat onze beamer niet echt met de tegenwoordige breedbeeld-schermen overweg kan was daarbij wel hinderlijk. Toch was goed te zien dat Henk voor de weergave van de stukken geen karakters gebruikte, maar plaatjes, die hij had "geleend" van een oud Sargon schaakprogramma voor de Z-80. Henks zettengenerator kan ook goed overweg met moeilijker schaakzetten zoals de rochade en het en passant slaan. Titus had zijn activiteit op het gebied van genetisch programmeren hervat. Hij was bezig met een versie in Python, maar die deed het nog niet naar behoren. De versie in Visual Basic werkte volgens Titus beter, maar die kon hij niet demonstreren omdat hij de nieuwste versie van Visual Basic nog niet op zijn laptop had geïnstalleerd. We zien hier ongetwijfeld op één van de volgende bijeenkomsten meer van… Geruime tijd werd besteed aan logiquiz. Gerard had thuis ontdekt dat er de vorige maand iets niet goed was gegaan, maar niet precies wat. Het probleem "Computertijd" (uit een puzzelboekje) werd dus nogmaals helemaal in het programma van Henk ingevoerd. Daarbij werd ontdekt dat er de vorige keer een fout was gemaakt met de codering van de gegevens. Overigens werd er nu weer een andere invoerfout gemaakt (een tikfout), maar deze werd gelukkig bijtijds door Henk zelf ontdekt. Het programma vond nu een unieke oplossing — zoals het hoort! Het is nu aan Gerard om de oplossing ook met "menselijke intelligentie" te vinden! Verder is vastgesteld dat het (BASIC-)programma van Henk 397 regels telt, met daarin 114 GOTO-statements en 49 FOR-lussen. Omdat Henk graag meerdere statements op één regel zet, hadden we graag ook het totale aantal statements willen weten. Dit is natuurlijk te bepalen als het aantal regels plus het aantal dubbele punten (":", voor zover ze niet in strings staan), maar dit laatste aantal was helaas niet op eenvoudige wijze te bepalen. Gerard was in een oude Kijk (januari 1984, voor de liefhebber) een leuk BASIC-programma tegengekomen met de naam "Wereldbouwer". Het programma (oorspronkelijk geschreven door Stephen Kimmel voor de TRS-80) stelt de gebruiker een aantal vragen over een planeet en de ster waar die omheen draait, en doet dan een educated guess ("beredeneerde gok") of er leven mogelijk is, en hoe dat er dan uit zou zien. Functioneel gezien is het programma in feite een speciaal geschreven expertsysteem, en Gerard wou er een Pythonversie van maken: enerzijds om de syntax van Python beter in zijn vingers te krijgen, anderzijds om het programma zelf eventueel later te gaan uitbreiden. Die vertaalslag vormde nog een aardige uitdaging, omdat "Wereldbouwer" (zoals dat een goed BASIC-programma betaamt) rijkelijk voorzien was van GOTO's, terwijl Python die opdracht niet kent. Maar met een simpele truc is Gerard er in geslaagd om het programma over te zetten zonder uitvoerig aan de wat springerige structuur te gaan sleutelen. (GV 7 april 2014) Kort verslag van de bijeenkomst op 8 maart 2014 Omdat De Dissel op de eerste zaterdag van maart geheel in het teken van carnaval stond, werd onze bijeenkomst een week later gehouden. We hebben ons met o.a. de volgende onderwerpen vermaakt: Het eerste onderwerp van de plenaire sessie was de jaarlijkse algemene ledenvergadering (A.L.V.). Een formele verplichting die weinig met AI te maken had, en waar we ons zo goed mogelijk doorheen geslagen hebben. Wie er meer van wil weten, wordt van harte uitgenodigd om op de volgende A.L.V. de (concept-)notulen in ontvangst te komen nemen... Vervolgens konden we over onze echte interesses praten. Kees had een interessante bijdrage: hij deed m.b.v. handouts met stukken programmacode (in Java) uit de doeken hoe zijn checkers-programma werkte. De aanwezigen werden ingewijd in het werken met bitboards, een zeer compacte representatie van stellingen (spelposities) in checkers, waarmee het elegant rekenen is — mits je natuurlijk iets weet van binaire logica. Daarnaast legde Kees een vernuftige truc uit die hij in zijn evaluatiefunctie had verwerkt, en die ervoor zorgt dat het programma liever eerder een steen tot king ("dam") promoveert dan later. Hopelijk worden anderen in de groep door het verhaal van Kees geïnspireerd om ook weer wat aan hun checkers-programma's te doen! Theo vertelde dat hij zich aan het verdiepen was in de nieuwste versie (3.4) van Python. Zijn interesse ging vooral uit naar pathlib, waarin paden (d.w.z. locaties van bestanden) op een object-georiënteerde manier zijn geïmplementeerd; en naar asyncio, waarmee functies in de achtergrond kunen worden benaderd, zodat een programmeur gebruik kan maken van coroutines i.p.v. multiple threads / processes. Titus liet twee dingen zien waar hij mee bezig was: Een programma om sprites mee te tekenen. Sprites zijn plaatjes van figuurtjes of bewegende voorwerpen in videospelletjes. Het programma van Titus lijkt wel wat op MS-Paint (inclusief het z.g. rubber-bandtekenen, waardoor lijnen of cirkels van elastiek lijken totdat je ze met de muisknop "vast klikt"), maar slaat de tekening meteen in sprite-vorm op (inclusief mask). Een spelletje over "Sparkie, de electricien", die vonkjes moet zien te vangen. Het scherm laat al zien hoe Sparkie en zijn "wereld" met heuvels en wolken er uit zien, maar er moet nog wel wat programmeerarbeid worden verzet voordat het ook allemaal goed werkt. Het laatste deel van de bijeenkomst werd gewijd aan het BASIC-programma dat Henk had gemaakt om logiquiz-puzzels op te lossen. Gerard had een niet te moeilijk (niveau 2-3) boekje met zulke puzzels gekocht, en er zijn eigen intelligentie op losgelaten. Eerst werd het programma van Henk beproefd met een puzzel die Gerard handmatig had opgelost, en dat leverde geen problemen of verrassingen op. Daarna werd er een logiquiz geprobeerd waar Gerard zelf niet uitgekomen was; en daar vond het programma dan ook twee oplossingen — die echter geen van beiden overeen kwamen met de oplossing die achter in het boekje stond! Mogelijk was er dus iets mis met de opgave... Overigens heeft deze aanpak wel veel duidelijker gemaakt hoe de codering werkt, die Henk gebruikt om de gegevens uit de puzzel in zijn programma in te voeren. Op een van de volgende bijeenkomsten zal waarschijnlijk wel nader worden ingegaan op de werking van het programma zelf. Wordt vervolgd, dus. (GV 15 maart 2014) Kort verslag van de bijeenkomst op 1 februari 2014 De bijeenkomst werd vooral gevuld met gedachtenwisselingen over activiteiten die al eerder begonnen waren, en die vermoedelijk ook in de toekomst nog terug zullen komen: Abraham had een vraag over de Scratch-muis: waar ligt de detectie van de botsingen met de muur en met de planten? Gerard legde uit dat die botsingen in de simulatie eigenlijk gewoon een "natuurkundig" verschijnsel vormen, inclusief de wet "hoek van inval = hoek van terugkaatsing". Voor de terugkaatsing van de muur heeft Scratch zelf standaardfuncties beschikbaar. Voor de (ronde) planten is de berekening van de terugkaatsrichting echter ingewikkelder dan bij (vlakke) muren, en is er ook geen standaardfunctie beschikbaar. Gerard heeft in de Scratch-simulatie (waarbij alles een "levend" object is) de planten dan ook een actieve rol in die berekening laten spelen.Voor de hardwareversie van de lerende muis was de (voorlopige) conclusie dat de muis regelmatig, bijv. elke halve seconde, zijn bumperdetectie uit moet vragen. Ook bracht Abraham een kort voortgangsrapport uit over TetraBot: één poot is nu voorzien van motoren + besturingsbordje + kabels + sensoren. De onderstaande foto toont hoe een en ander er uit ziet: Henk liet iets zien van zijn programma dat kan helpen om logiquiz-puzzels op te lossen. Twee aspecten kwamen duidelijk naar voren: Het programma werkt volgens de backtracking-methode: je probeert telkens iets geldigs in te vullen, en gaat daarmee door totdat je vastloopt. In dat geval volg je je eigen sporen terug (vandaar de naam backtracking) om alle acties ongedaan te maken, tot aan de laatste stap waarop je nog een vrije keuzemogelijkheid had: daar markeer je de gedane keuze als "onjuist" en kiest een andere mogelijkheid. Vervolgens ga je weer voorwaarts totdat je vastloopt, enzovoort. Uiteindelijk heb je alles ingevuld (en dus 'n oplossing gevonden), of je bent weer aan het begin (als er geen oplossing bestaat).Er was enig meningsverschil over de keuze voor deze methode. In wezen behelst dit namelijk een systematische vorm van trial & error ("gissen en missen"). Gerard was van mening dat backtracken eigenlijk, net als bij een goede sudoku, niet nodig zou moeten zijn, en dat je er met puur redeneren uit moet kunnen komen; Henk zei dat je bij logiquiz meestal wèl zou moeten backtracken. Een essentieel aspect van Henks aanpak is de codering: het vertalen van omschrijvingen in de puzzel naar iets waar je programma wat mee kan. Henk heeft een notatie in symbolen ontworpen, die op een volgende bijeenkomst misschien wat duidelijker en systematischer kan worden uitgelegd. Wel is duidelijk dat in de aanpak van Henk deze codering door mensen moet worden gedaan — terwijl hier juist een mooie (maar moeilijke) uitdaging ligt voor het kunstmatige-intelligentie-onderzoek! Misschien dat we op een volgende bijeenkomst een concreet voorbeeld van het begin af kunnen doorlopen; dit zou verhelderend moeten werken. Gerard sprak over de aap met de dobbelsteen, die vorige bijeenkomst door Titus was geïntroduceerd: Allereerst werd het probleem nog eens uiteengezet. Daarna demonstreerde Gerard de door hemzelf geschreven Python-versie enkele malen. Vervolgens liet hij de aanwezigen raden wat het gemiddelde aantal acties was, dat de aap (met zijn random werkwijze) nodig had om de banaan te pakken. De antwoorden varieerden van 10 tot 25. Daarna liet hij een versie van zijn programma zien waarin de aap 10.000 keer mocht proberen de banaan te pakken. Het gemiddeld benodigde aantal handelingen bleek tot verrassing van de aanwezigen ruim 45 te bedragen! Om de zaak theoretisch uit te werken, tekende Gerard een toestands-overgangsdiagram van de aap op het whiteboard. Vervolgens keek hij nauwkeuriger naar de door Titus geprogrammeerde "dobbelsteenmethode" om de overgangen tussen de verschillende toestanden van numerieke kansen te voorzien. Enkele van deze kansen kon hij weer met een 10.000-keer-probeerprogrammaatje simulatief verifiëren. Met die kansen berekende hij de kans dat de aap met slechts 4 handelingen (de kortste weg) de banaan te pakken kreeg op ongeveer één op 75. Tenslotte zette hij uiteen hoe de gemiddelde weglengte naar het doel kon worden berekend door 12 lineaire vergelijkingen met 12 onbekenden op te stellen en op te lossen. Gelukkig was er een website die daarbij kon helpen. De uitkomst bleek 136/3, dus inderdaad ruim 45! Ook hadden Peter en Gerard nog wat literatuur-suggesties, die zijn toegevoegd aan de leesplank (zie hieronder). (GV 7 februari 2014) Kort verslag van de bijeenkomst op 4 januari 2014 Het was weer een levendige en interessante bijeenkomst, getuige de volgende twee door Abraham gemaakte foto's.Zoals gewoonlijk werden er weer diverse onderwerpen aangeroerd: Peter was geïnteresseerd in onze mening over het nieuwe "clubblad" PC-active. Peter was zelf al abonnee vóór de "overname", en het was hem opgevallen dat het blad nu meer "human interest"-artikelen bevatte, zoals Het digitale leven van … Hij vond het geen verbetering. Theo vond de inhoud wat te eenvoudig voor zijn interesse. Abraham zag graag wat meer ruimte gevuld door de HCC-groeperingen met informatie over bijeenkomsten en bezigheden, zoals destijds in het "gele katern" van Computer!Totaal. Gerard wees er op dat er al wel een overzichtje instond, waarbij de interessegroepen in een korte algemene omschrijving waren gekenschetst. Misschien dat er t.z.t. ook gelegenheid komt om regelmatig wat meer actuele informatie te spuien? Gerard vond vooral de rubriek Denkwerk interessant. De informatie hierin (over de Burrows-Wheelertransformatie) riep veel vragen bij hem op, maar vormde wel een goed uitgangspunt om zelf een programmaatje te schrijven. Hij speelde met de gedachte om een reactie op dit artikel in te sturen. Drie aanwezigen konden zich niet herinneren dat ze het blad hadden ingezien, en wisten zelfs niet zeker of ze het wel ontvangen hadden. Peter vestigde de aandacht op Kano, een zelfbouwcomputertje voor $119 op basis van het Raspberry Pi-bordje. Een terugkeer naar de jaren '70, toen de eerste "home-computers" als zelfbouwpakketten op de markt kwamen? Dat valt wel mee (of tegen!): je hoeft niet meer zelf te solderen, en de bijgeleverde programmeertaal is niet BASIC, maar een variant van Scratch. Dit initiatief geeft in ieder geval een nieuwe generatie computergebruikers de kans om "onder de motorkap" de kijken. Ook had Peter nog een interessante persoonlijke belevenis te melden: hij heeft de filosoof en cognitiewetenschapper Daniel Dennet persoonlijk ontmoet en (kort) met hem gesproken. Dennett heeft zijn visie op het fenomeen "bewustzijn" uiteengezet in het boek Consciousness Explained, dat ook in de bibliotheek van onze interessegroep aanwezig is. Henk vroeg aan Gerard of er nog steeds geen reacties waren op zijn artikel De computer en 'de vrije wil'. (Het antwoord was: "Nee".) Er werd vastgesteld dat de Leidse bijbelvertaling, waar Henk in zijn artikel naar refereert, ook op het web is te vinden — maar helaas zonder de verhelderende inleidingen en toelichtingen. Ook had Henk nog een opmerking over zijn pogingen om een logiquiz-programma te maken. In een gekocht boekje vol met dergelijke puzzels vond hij er een die zijn programma nog niet aankon. Er waren dus aanpassingen in het programma nodig. Theo heeft onderzoek gedaan naar het maken van executable (.exe) bestanden van Python-programma's. Dit is nuttig, omdat programma's geschreven in Python worden vertaald naar zgn. bytecode, die alleen kan worden uitgevoerd als je Python op je computer hebt geïnstalleerd. Een executable bestand kan ook zonder Python worden uitgevoerd. Theo heeft zijn bevindingen samengevat in een stukje dat elders op deze website is te vinden. Abraham heeft accu's en houders voor TetraBot gekocht. Hij wil de motoren (die veel vermogen vergen) met 12 tot 15 volt voeden, maar dit is te veel voor het propeller-bordje dat hij voor de besturing wil gebruiken. Hij heeft dus ook een kleine schakeling gekocht om het elektrische vermogen goed te verdelen. Ook meldde Abraham dat hij een Taos TCS230 kleurensensor heeft gekocht voor zijn hardware-muis. Hij liet ter plaatse zien hoe de sensor de de kleuren van beide lichtbakens (lees: planten) waarnam. Het signaal voor het rode baken was ongeveer 2× zo sterk als voor het blauwe. Gerard dacht dat dit makkelijk kon worden gecompenseerd door aanpassing van de vaste gewichten in de niet-lerende laag van het neurale netwerk. Titus deelde mee dat hij de script-capaciteit van zijn TetraBot-simulatieprogramma heeft vergroot: er is nu ruimte voor 10 initialisatieregels, en 990 regels in de lus die daarna voortdurend wordt doorlopen. Abraham heeft een kopietje van deze nieuwe versie meegenomen. Ook kwam Titus met een leuk klein programma over een aap die een kist onder een hangende banaan moet schuiven, op de kist moet klimmen, en dan met een sprong de banaan kan pakken. De acties van de aap worden "met een dobbelsteen" gekozen. Gerard wil hiervan een Python-versie maken. Hij wil ook kijken of hij er wat aan kan rekenen, omdat het programma hem deed denken aan zijn eigen Koningszet-projectje waarvoor hij soortgelijke berekeningen heeft gemaakt. (GV 16 januari 2014)

20 april 2020

...

Bijeenkomsten gehouden in 2015

Kort verslag van de bijeenkomst op 5 december 2015 De volgende onderwerpen kwamen aan bod: Theo had wat mededelingen: HCC!programmeren gaat op zijn bijeenkomsten ook een plenaire sessie invoeren. Zie voor verdere informatie de website van HCC!programmeren. Daarnaast zijn er plannen voor een samengaan van HCC!basic met HCC!programmeren (dat zelf al ontstaan is uit een fusie van HCC!pascal en HCC!c). Dit is weer een belangrijke stap in de richting van één interessegroep voor HCC'ers die geïnteresseerd zijn in het zelf schrijven van software. Hopelijk komt er hiermee een interessante uitwisseling van ideeën tussen de gebruikers van de verschillende talen op gang. Om toch de nodige structuur aan te brengen worden er mogelijk verschillende werkgroepen in het leven geroepen. Daarbij wordt momenteel gedacht aan taalgeoriënteerde werkgroepen, om het eigen karakter van de diverse programmeertalen tot uiting te laten komen; maar waarom zouden er in de toekomst ook geen toepassingsgeoriënteerde werkgroepen kunnen ontstaan, zoals computer graphics of misschien zelfs artificial intelligence? Er is nu een "uitgeklede versie" van de Raspberry Pi, zonder netwerkmogelijkheden: de Raspberry Pi Zero. Het goede nieuws is dat de verkoopprijs slechts 5 dollar is. Het slechte nieuws is dat hij momenteel moeilijk te krijgen is, bijna overal is hij al uitverkocht. Tenslotte maakte Theo ons attent op twee lezingen die onlangs door Hans Verbeek (van HCC!opensource en hobbynet) zijn gehouden: een lezing voor de regiobijeenkomst in Amersfoort over het inrichten van de Raspberry Pi als media center; en een lezing op HCC!opensource bijeenkomst over het gebruik van een (Android) smartphone als barcodescanner, waarbij een Arduino microcontrollerbordje de communicatie met de computer mogelijk maakt. Abraham vertelde dat hij weer een belangrijke stap heeft gezet bij zijn poging om de Intel 4004 nieuw leven in te blazen. Dit was in 1971 de allereerste (4-bit!) microprocessor op één chip. In april had hij al gerapporteerd dat hij een minimaal programmaatje had kunnen draaien; maar om iets echt interessants te kunnen doen moet de 4004-chip van inputkanalen worden voorzien. Nu is het zo, dat elke ROM-chip (Read-Only Memory) uit die tijd 4 i/o-pinnetjes had, die bij het branden van de chip elk afzonderlijk hard (d.w.z., definitief) werden geconfigureerd als hetzij input, hetzij output. Abraham had een lieve som geïnvesteerd in een tiental van die ROM-chips, en zowaar: er zat er één bij waar alle vier pinnetjes als ingang waren geconfigureerd. Abraham liet zien dat het systeem werkte: door handmatig op elk van die vier pinnetjes achtereenvolgens een draadje te zetten, werd in een rijtje van 4 LEDjes telkens een andere LED uitgeschakeld. Abraham hoopt, op deze manier voortgaand, uiteindelijk met die 4004-chip een rijdend robotje te kunnen besturen. Wij zijn dan ook zeer benieuwd naar de verdere ontwikkelingen. Jan kwam met een interessante en goed voorbereide uitleg van het robotkarretje MOOF ("Moving Object On Floor"), waarmee hij vorige maand aan de Roboramawedstrijden had deelgenomen. Eerst kwam de hardware aan de orde; gedeeltelijk een recapitulatie van de informatie die Jan op eerdere plenaire sessies (6 december 2014 en 7 maart 2015) verstrekte. MOOF is gemaakt van LEGO Technics®, dat in Jans eigen woorden "mooier dan het Meccano uit zijn jeugd" is. Het betreft een schroefloos systeem, met structurele onderdelen (balken en tussenstukken), motoren met ingebouwde vertraging, en een besturingskastje. Dit laatste bevat een ARM-processor voor het rekenwerk en een Admel microcontroller voor de in- en uitvoer. Met dit "robotbrein" kunnen drie motoren worden aangestuurd en 4 transduceringangen (sensoren) worden uitgelezen.Een schroefloos systeem heeft het voordeel dat je makkelijk prototypes in elkaar kunt knutselen en aanpassingen maken, maar erg robuust is het natuurlijk niet. Daarom heeft Jan diverse aanpassingen aangebracht: grotere wielen, stalen assen in de motoren, en extra steunlagers. Bovendien is het geheel met schroeven verstevigd. Hierdoor is alles strak tegen elkaar gemonteerd; een mogelijk nadeel daarvan is natuurlijk dat de maatvoering niet meer klopt.Vanzelfsprekend vormen ook de sensoren een onmisbaar onderdeel van de hardware. Jan maakt gebruik van twee afstandssensoren; hij heeft deze heel slim gemonteerd op de grijparmen die MOOF nodig heeft om blikjes te verplaatsen. Hierdoor zijn ook de afstandssensoren beperkt "richtbaar" — beperkt, omdat de grijparmen niet onafhankelijk van elkaar, en bovendien slechts over een beperkte hoek kunnen bewegen. Behalve "afstandsgevoel" heeft MOOF ook richtinggevoel, door een "geweldige goede" kompas-chip van een externe fabrikant, die volgens Jan superieur is aan de door LEGO zelf geleverde richtingssensor. Daarna gaf Jan ons een inkijkje in de software van MOOF. Hij programmeert MOOF in LabView, een grafische programmeeromgeving waarmee het schrijven van programma's eerder een visuele dan een tekstuele creatieve aktiviteit is. LabView wordt in de industrie en wetenschap vooral voor procesbesturing gebruikt; Gerard vertelde dat hij er tijdens zijn natuurkundestudie in Utrecht mee had kennisgemaakt. Door ons stukken van zijn eigen programmering van MOOF te laten zien, gaf Jan ook een goed beeld van de mogelijkheden (en beperkingen) van LabView.Zowel de software om LEGO-robots te programmeren als het leerzame instructieboek The Art of LEGO MINDSTORMS NXT-G Programming zijn gewoon vanaf het Internet te downloaden; maar wie daadwerkelijk met dit speelgoed aan de gang wil zal toch moeten investeren in een doos met LEGO® hardware … Gerard vestigde de aandacht op een artikel in de NRC van 30 juli over het Figurative Tour Problem. In dit probleem moet een plaatje met grijswaarden zo goed mogelijk benaderd worden door een doorgaande lijn te tekenen langs een bepaald aantal roosterpunten. (Roosterpunten zijn de punten waar de lijnen van een vel ruitjespapier elkaar snijden; d.w.z. de hoekpunten van de vierkantjes.) Elk volgend roosterpunt dat door de lijn wordt bezocht moet hetzij een koningszet, hetzij een paardesprong verwijderd zijn van het vorige. Verdere voorwaarden zijn dat elk roosterpunt precies eenmaal moet worden bezocht, en dat de lijn uiteindelijk weer op zijn beginpunt moet uitkomen. Door deze laatste constraints doet het Figurative Tour Problem natuurlijk sterk denken aan het Traveling Salesman Problem, zodat Gerard zich afvroeg of ook het Figurative Tour Problem misschien een goede toepassing zou kunnen zijn voor een genetisch algoritme. Verder vertelde Gerard bezig te zijn met de programmeertechniek backtracking. Om zijn programma's te testen en te vergelijken gebruikte hij o.a. de volgende twee relatief simpele problemen: Een tromino-puzzeltje. Op onze bijeenkomsten is al vaak aandacht besteed aan problemen waarbij tetromino's (stukjes van 4 aan elkaar grenzende vierkantjes) of pentomino's (hetzelfde idee, maar dan met 5 vierkantjes) in een rechthoek moeten worden gelegd. Daarbij moet de rechthoek natuurlijk precies worden gevuld, d.w.z. de stukjes mogen elkaar niet overlappen en ze mogen niet buiten de rechthoek uitsteken. Deze puzzels zijn nog vrij complex: de pentominopuzzel bevat 12 stukjes, en de tetrominopuzzel 10 (elk van de 5 verschillende tetromino's tweemaal). De tromino (3 aan elkaar grenzende vierkantjes) kent slechts twee verschillende vormen; we gebruiken twee exemplaren van elk, dus vier stukjes, om een 3×4-rechthoek te vullen. Dit geval is goed met de hand uit te werken, maar toch nog complex genoeg om interessant te blijven: er zijn 5 unieke oplossingen; als je draaiingen en spiegelingen van een oplossing ook meetelt zijn het er 16; en wie vindt dat een verwisseling van twee identieke stukjes ook als een aparte oplossing geldt, zou er 64 moeten vinden. Het waterkruikenprobleem, een van de problemen die in het boek Artificial Intelligence (2nd ed.) van Elaine Rich en Kevin Knight worden gebruikt om de AI-aanpak te illustreren. Het luidt als volgt: je hebt twee kruiken, één met een inhoud van 4 liter en één van 3 liter. Verder is er een waterkraan en een putje om de kruiken in te legen. De kruiken hebben geen maatstreepjes. Hoe kun je precies twee liter water in de 4-literkruik krijgen? Gerard liet twee oplossingen zien, en meldde dat zijn programma er twaalf vond. Dit grote aantal verbaasde hem aanvankelijk, totdat hij er achter kwam dat de andere tien oplossingen "inefficiënte" versies waren van de twee die hij zelf had gevonden. Ook vermeldde hij nog zonder bewijs dat dit soort problemen in het algemeen een oplossing had als de volumes van de kruiken relatief priem zijn, dus als hun grootste gemene deler 1 is. Wegens het verwachte "heerlijk avondje" werd er wat vroeger begonnen met opruimen dan normaal. (GV 16 december 2015) Kort verslag van de bijeenkomst op 7 november 2015 Gelijktijdig met onze bijeenkomst in De Dissel waren in een andere zaal van het gebouw de Roborama-wedstrijden van de HCC Robotica interessegroep aan de gang. Natuurlijk moesten wij daar regelmatig een kijkje nemen, onder andere om te zien hoe Jan Blok het met zijn Lego®-karretje MOOF er van af bracht. Jan heeft zijn ervaringen, met de wijze lessen die er uit te leren zijn, op schrift gesteld; zijn verslag vindt u hieronder. In de tijd die overschoot voor onze eigen bijeenkomst kwamen nog de volgende onderwerpen aan bod: Peter houdt zich tussen de bijeenkomsten regelmatig bezig met het enthousiast naspeuren van interessante nieuwe informatie op AI- en roboticagebied op het Internet. Ditmaal maakte hij ons attent op een applet die de mogelijkheden van deep learning illustreert. Het gaat daarbij om een soort verre verwant van onze java-muis: een cirkelvormig beestje, dat zich rondbeweegt in een tweedimensionale rechthoekige ruimte met zowel voedsel als vergif — ook allebei voorgesteld door cirkeltjes. Maar "de evolutie" heeft duidelijk niet stilgestaan, er zijn vele belangrijke verschillen: De deep learning applet is geschreven in de scripttaal JavaScript, die nog voluit door de hedendaagse browsers wordt ondersteund; terwijl de programmeertaal Java algemeen wordt beschouwd als onveilig, zodat je ergens diep in je browser-instellingen moet duiken om permissie te geven voor het draaien van onze muis-applet. Onze muis had slechts twee (cirkelvormige) planten om uit te kiezen, terwijl het deep-learning beestje (dat op de betreffende webpagina met de neutrale, maar ook weinig tot de verbeelding sprekende naam agent wordt aangeduid) meerdere voedsel- en vergifbronnen in zijn omgeving heeft. Een mogelijk verwarrend verschil is de kleurcodering: voor onze muis betekent groen veilig (dus voedsel) en rood gevaar (dus vergif); voor de deep-learning agent is het voedsel (appeltjes) juist rood, en het vergif – inderdaad – gifgroen. De deep-learning agent eet zijn voedsel en vergif daadwerkelijk op (ze verdwijnen van het scherm), terwijl de planten van onze muis feitelijk onaangetast blijven — je zou kunnen zeggen dat hij er slechts aan knabbelt (of likt). De leefruimte van de deep-learning agent wordt dan ook regelmatig aangevuld met nieuwe voedsel- en vergifbronnen. Zijn omgeving is dus veel dynamischer. Onze muis heeft twee ogen, waarvan de blikvelden van 60° elkaar slechts gedeeltelijk overlappen. Dit geeft het visuele systeem zijn richtingsgevoeligheid. De deep-learning agent heeft negen ogen, die elk precies één zeer bepaalde richting uitkijken (d.w.z., elk oog heeft een infinitesimaal blikveld). Het totale blikveld van alle ogen samen beslaat zo'n 120°. Onze muis kan in principe oneindig ver kijken; de afstandsgevoeligheid van zijn visuele systeem ontstaat doordat een verre plant kleiner lijkt en dus minder groen of rood licht het oog in kaatst. De deep-learning agent heeft slechts een zeer beperkt gezichtsbereik: voorbij een bepaalde afstand wordt simpelweg niets waargenomen. Onze muis ziet alleen de planten, en stuitert dus ook lustig tegen de muren van zijn "wereld" aan. De deep-learning agent neemt alles waar dat zich binnen gezichtsafstand bevindt, ook de muren. Behalve voedsel zoeken en vergif vermijden, leert hij dus ook steeds beter om niet telkens zijn hoofd te stoten. Dit gedrag is duidelijk zichtbaar (en wordt ook sneller aangeleerd) doordat de muren niet alleen aanwezig zijn om zijn leefwereld af te bakenen; ook binnen die leefwereld bevinden zich obstakelmuren. En natuurlijk is het zenuwstelsel van de deep-learning agent een stuk complexer dan dat van onze javamuis. Het blijft echter reinforcement learning met behulp van een neuraal netwerk. Ben vroeg onze aandacht voor het Atmel ATmega328P Xplained Mini microcontrollerbordje, dat voor een zeer schappelijke prijs te koop is. Ben vond het voor €15,37; voor dat geld heb je programmer, debugger, board en chip, alles bij elkaar! De handleiding staat gewoon online; en er is ook een reeks van 28 instructiefilmpjes op YouTube te vinden. Mogelijke nadelen voor de absolute beginner zijn dat kennis van de programmeertaal C en microcontrollers wel een beetje aanwezig moet zijn. En alles gaat in het Engels. Als dat problemen geeft is het misschien nuttig om het boek Microcontrollers en de taal C in PDF-vorm te downloaden. In dit zeer helder geschreven boek, dat niet meer in de handel is, wordt alles vanaf het begin uitgelegd en opgebouwd. Het boek gaat wel over een iets andere microcontroller (de atmega32), en de leercurve is behoorlijk steil, maar Ben beveelt het van harte aan: "Pure klasse, dit boek!" Henk liet zien dat hij, door zijn Sudoku-programma te wijzigen, een programma had gemaakt waarmee hij Tectonic-puzzels (uit de gratis treinkrant "Metro") kan oplossen. Bij deze demonstratie bleek dat het programma niet alle eenduidig in te vullen vakjes vond voordat het aan het backtracken sloeg: Gerard wees op een redenering die blijkbaar niet in het programma verwerkt zit. Gelukkig is de backtrack-aanpak voldoende algemeen om (mits goed geïmplementeerd) alle mogelijke oplossingen te vinden — en zijn de Tectonic-puzzels klein genoeg om niet alle efficiency-winst uit de kast te hoeven trekken. Tot slot informeerde Ben nog bij Jan naar een formele definitie van de "transputer-taal" Occam, waarin hij hoopt terug te vinden hoe transputers precies samenwerken. Hij vermoedt namelijk dat deze principes misschien ook kunnen worden toegepast op microcontrollers. De onderstaande foto is gemaakt op de Roborama-wedstrijd: op de grond in het midden de "arena", begrensd door lage schotjes; daaromheen het publiek en de deelnemers. Helemaal vooraan een werktafel waarop de deelnemers hun robots kunnen stallen, en eventueel nog last-minute wijzigingen aanbrengen. De scheidsrechter staat enthousiast te gebaren; helemaal links is nog net de beamer te zien die allerlei relevante informatie op een scherm projecteerde.  (GV/BH 3 december 2015) Verslag Robot Rijden, door een deelnemer van deze groep. In het algemeen wordt autorijden als een intelligente bezigheid ervaren. Dit betekent dat, als een computer de besturing overneemt, dit ook als intelligent wordt ervaren. Meer dan dat zelfs; want wat kan men nu immers van een computer in dit geval verwachten? Nou, redelijk veel, want er zijn inmiddels nogal wat bedrijven die computergestuurde auto's op de weg hebben rijden. En voorzover ik heb kunnen vinden is er nog geen enkel ongeluk, zelfs in de stad, veroorzaakt. Dit mogen we dus wel kunstmatige intelligentie noemen. We houden ons in deze groep ook bezig met kunstmatige intelligentie en zelfs ook met zelfsturende rijdende constructies. Sommigen noemen dit robots. En hoe is de status hiervan? Worden al die fabrikanten al een beetje jaloers? Daar is helaas nog weinig reden voor. Dit is te begrijpen want die bedrijven beschikken over veel kennis, mensen en niet te vergeten, geld. Dit in tegenstelling tot het Artificiele Intelligentie groepje van de HCC. Nu is er recent een wedstrijd in het autonoom laten rijden van constructies geweest, uitgaande van de HCC Robotica interessegroep; en daar hebben we ook aan meegedaan. Dat wil zeggen, met een robot. En hoe ging dat? Kijk, je kunt alle schuld aan van alles geven maar de werkelijkheid is hard: alles is eigen schuld. Er is veel te weinig rekening gehouden met drie hoofdwetten van Murphy te weten: Alles wat fout kan gaan zal dat zeker doen; Alles is moeilijker dan je denkt; Alles duurt langer dan je denkt. Er is gereden met een robot die gebouwd is met LEGO Technics®. Wel flink aangepast hier en daar met stalen assen en boutjes en zelfs een strip lood. En nog wat dingetjes die de ware Lego fan doen gruwen. Aan de robot lag het niet dat er het een en ander fout ging. Aan andere dingen des te meer. Laten we de opgaven eens doorlopen. In de eerste plaats was er lijnvolgen. Dat doet het ding uitstekend maar er waren juist voor de rit nieuwe batterijen ingezet. Dan reageert de kar aanzienlijk feller dan wanneer de stroom uit reeds gebruikte maar zeker niet lege batterijen komt. Het resultaat was dat op de kruising de kar stopte. En nog iets, de scheidsrechter plaatste het blik waar de kar omheen moest, op de terugweg. Nog juist op tijd realiseerde ik me dat het programma gemaakt was voor obstakel op de heenweg. Snel het programma aangepast voor geen obstakel maar ja, de kar faalde al eerder, dus geen punten gehaald. Volgende was T rijden. Wat dit betekent, zie de reglementen. Dat dit mislukte was de schuld van de scheidsrechter. Ik kreeg niet de gelegenheid behoorlijk te meten waar de doorgang tussen de blikken zat. Resultaat: blik omvergereden. Weer mislukking dus. Maar wel een paar schamele punten gekregen. Volgende: Heen en weer. Gedaan in de op een na eenvoudigste moeilijkheidsgraad. En jawel, ging goed! En dan de grote uitdaging. Blikken vangen. Tijdens de voorbereiding bleek al snel dat de software niet kon doen wat ik wilde en een nieuwe strategie bedenken lukte niet. Dus er maar van afgezien hieraan mee te doen. Al met al dus weinig om trots op te zijn maar het was leerzaam en best leuk, ook om te zien hoe de andere deelnemers het eraf brachten. Denk niet dat het daar allemaal vlekkeloos ging. Wat nu: wel eerst zorgen voor meer tijd dus nu al beginnen voor de wedstrijd van volgend jaar. En hard werken want de wetten van Murphy zijn natuurwetten dus ook de komende tijd geldig. Erger nog, de wellicht belangrijkste wet is niet gememoreerd: "Als je denkt dat alles goed gaat heb je iets over het hoofd gezien wat helemaal fout ging". Dat is niet zo erg als je tegen de jaarwisseling dit ontdekt want dan is er nog gelegenheid genoeg om nog eens flink aan de slag te gaan. Volgend jaar weer een wedstrijd waarvoor geldt: "Meedoen is belangrijker dan winnen". Hoewel . . . . Jan Blok. (JB 3 december 2015) Kort verslag van de bijeenkomst op 3 oktober 2015 Zoals gewoonlijk was de bijeenkomst weer goed gevuld met activiteiten, verslagen en discussies: Jan was druk doende zijn Lego®-karretje MOOF klaar te stomen voor de Roborama-wedstrijden van volgende maand. Aansluitend op de afgelopen CompUfair had hij echter zijn Transputer-systeem klaargezet voor Gerard om er voorafgaand aan de plenaire bijeenkomst mee te spelen. Gerard heeft hiervan dankbaar gebruik gemaakt, en er nog wat verder mee geëxperimenteerd — voor zover zijn andere activiteiten hiervoor tijd overlieten. Gerard liet doorschemeren dat hij voldoende geboeid was door de Transputers om er voorlopig aandacht aan te blijven besteden; we zullen vanzelf merken of dit interessante resultaten gaat opleveren. Eveneens voorafgaand aan het plenaire gedeelte heeft Theo op verzoek van Gerard curses voor Python op de oude (Windows®98) Laptop geïnstalleerd. En ook al bleek dat nog niet feilloos te werken (met name het uitlezen van het toetsenbord leverde problemen op), toch ziet het er naar uit dat Gerard in de toekomst bij zijn presentaties hier veel plezier van zal gaan hebben. In het komend voorjaar (april tot juli 2016) zullen Robotica en AI het seizoensthema van de HCC gaan vormen. Peter kwam met een pertinente vraag: hoe gaat onze interessegroep daaraan bijdragen? We waren het er wel over eens dat onze invalshoek vooral is: "Hoe werkt het?", en dat we ons niet al te veel moeten laten meeslepen in discussies over de filosofische implicaties. Ben merkte op dat de ontwikkelingen al ver gevorderd zijn, bijv. in auto's en domotica ("huisautomatisering"). Interessante vragen zijn dan ook wat er op dit gebied momenteel allemaal gebeurt, en waar dat toe kan leiden. Peter noemde in dit verband de toepassing van gezichtsherkenning (op camerabeelden), en Ben voegde daaraan Internet-zoekmachines (zoals Google) toe, en vroeg zich af wat die allemaal terugkoppelen van ons zoekgedrag.Terug naar het seizoensthema: dit krijgt voor een belangrijk deel gestalte d.m.v. artikelen in PC-Active en lezingen op de regiobijeenkomsten. Gerard vermoedde dat onze mogelijkheid om (informatie voor) artikelen bij te dragen aan PC-Active waarschijnlijk beperkt is, omdat het redactiebeleid voor dit blad bepaalt hoeveel ruimte er beschikbaar is en wat de onderwerpen moeten zijn. Op de lezingen kunnen wij misschien wat meer invloed uitoefenen. Het seizoensthema en onze activiteiten daarvoor zullen op de komende bijeenkomsten een vast agendapunt worden; suggesties en opmerkingen over dit onderwerp zijn natuurlijk altijd welkom bij het bestuur van de AI interessegroep. Gerard deelde mee dat hij nu ook een exemplaar van het boek "Wij zijn ons brein" van Dick Swaab had weten te bemachtigen. Peter merkte op dat Swaab klaarblijkelijk onbekend was met het begrip embodied intelligence: het idee dat een brein, om een geest (mind) te kunnen "huisvesten", verbonden moet zijn met een lichaam. Henk liet zien dat zijn BASIC-programma de oplossingen van de tetrominopuzzel nu ook in de vorm van een "lijntekening" (wit op zwart) kon laten zien. Voorheen deed hij dat met kleuren: elk stuk kreeg een afzondelijke kleur, en de kleurovergangen markeerden de grenzen van de puzzelstukjes. De nieuwe weergave lijkt sterk op wat Gerard met ASCII-karakters deed (en Abraham op het LED-displaybord), maar ziet er nog wat gelikter uit. Henk stipte aan dat deze "lijntekening" natuurlijk ook weer in te kleuren was. Ook wilde Henk nog weer eens aandacht vestigen op het idee van de "opgebouwde wereld". Dat deed hij aan de hand van de omslagillustratie van Andrew Tanenbaums boek Gestructureerde computerarchitectuur (5e editie), waarin de computer wordt beschreven als "een hiërarchie van niveaus met duidelijk afgebakende functies". Het plaatje op de kaft beeldt dat idee op een toegankelijke en humoristische manier af, door een computer te vergelijken met een gebouw van 5 verdiepingen. Henk stelde dat er twee dingen aan konden worden toegevoegd: een penthouse dat recursie verbeeldt (in de speciale betekenis van een interpreter die zichzelf aanroept), met daarbovenop een vlag die de "vrije wil" symboliseert. Dit in overeenstemming met de gedachten die in Henks artikel over de vrije wil worden uiteengezet. Henk deelde tevens maar weer eens mee dat hij reacties op dit artikel nog steeds zeer op prijs zou stellen. Ben deelde mee dat hij erin geslaagd is zijn robotkarretje Madeleine via een seriële (RS-232) verbinding met een PC te laten communiceren. De communicatie blijkt goed genoeg om een LED-lichtje op de robot aan te zetten. Voor zo'n verbinding zijn twee programma's nodig, één op het besturingsbordje van Madeleine, en één op de PC. Die laatste bleek hij nog op de plank te hebben liggen: een terminalprogramma geschreven in Visual Prolog, met drivers die hij indertijd had geschreven voor het "balancerende bezemsteelproject" waar hij samen met Abraham aan gewerkt heeft. Deze software heeft enkele voordelen: de Windows-buffer kan worden geïnspecteerd, en het werkt met een sign-on: de robot moet zijn naam doorgeven. Dit laatste maakt het mogelijk meerdere robots tegelijk aan te sturen: het programma is object-georiënteerd, en elke ingelogde robot wordt dus een object. De volgende stap die Ben wil zetten is de communicatie draadloos te laten verlopen, via bluetooth. Verder meldde Ben dat hij nog bezig is met het maken van een webpagina over deze onderwerpen. Het laatste gedeelte van de bijeenkomst werd gevuld door Gerard. Hij vertelde dat hij onder Linux gebruik maakt van curses, een (in theorie) hardware-onafhankelijke reeks functies om een terminal(venster) aan te sturen. Dit biedt de mogelijkheid tot een karakterscherm-gebruikersinterface, die het midden houdt tussen een spartaanse command-line-interface en een bewerkelijke grafische user interface (GUI). Henk maakt in zijn QBasic-programma's ook gebruik van zo'n interface. Vervolgens vertelde Gerard dat hij er met behulp van curses in geslaagd is om diverse BASIC-programma's uit het boek "Kunstmatige Intelligentie op uw computer" van John Krutch redelijk getrouw naar Python te vertalen. Eén daarvan is het programma TF, dat zoekt naar een patroon in een reeks van ingetoetste T's en F's, en tracht daaruit de volgende ingave te voorspellen. Daarna probeerde Gerard duidelijk te maken dat er verbanden bestaan tussen TF en Steen-Schaar-Papier. Door het voorlezen van een stukje van E.A.Poe (geciteerd in een boekje over speltheorie) liet hij zien dat dit soort spelletjes, wanneer beide spelers mensen zijn, aardig wat dubbele bodems kan herbergen. En tenslotte legde hij uit dat wanneer we een TF-programma tegen zichzelf laten spelen, dit veel weg zal hebben van het taalexperiment, waar hij vroeger samen met Patrick aan begonnen was, maar dat nooit was afgemaakt. Met behulp van dit experiment wou hij onderzoeken of er een grammatica kan ontstaan in communicatie die nergens over gaat. Gerard stelde dat het voor deze activiteiten (en vele andere) handig zou zijn om te beschikken over een serverprogramma, dat computers in staat stelt om in contact te treden met elkaar en met mensen. Hij was er nog niet uit of het beter is om zoiets zelf te schrijven, of dat hij toch beter op het Internet op zoek kan gaan naar iets dat zijn behoeften zo dicht mogelijk benadert. Er is dus genoeg activiteit gaande om de volgende bijeenkomst weer met verwachting tegemoet te zien. (GV 11 oktober 2015) HCC!AI op de MegaCompuFair van 26 september 2015 Ook in 2015 waren we weer aanwezig om ons te presenteren aan de leden van HCC CompUsers en andere geïnteresseerden. Daarnaast hebben we ook onze contacten met "verwante" interessegroepen, zoals HCC Programmeren, HCC Forth, HCC Robotica en HCC Retro onderhouden en verstevigd. Op de onderstaande foto, gemaakt door Abraham, staat Gerard links aan een bezoeker te demonstreren dat de tetromino-puzzel ook met de hand kan worden opgelost, terwijl rechts Jan met een andere bezoeker verdiept is in de hard- en software van zijn transputer-systeem.  Ook Gerard heeft (met Jans hulp) wat zitten experimenteren met de bij het transputer-systeem meegeleverde standaardprogrammaatjes. Omdat Linux een communicatieprobleem had met de beamer, hebben we het spel "Steen-Schaar-Papier" helaas niet kunnen demonstreren. Bovendien was ook de speciale door Abraham vervaardigde gebruikersinterface voor dit spel niet aanwezig, zodat het twijfelachtig is of een demonstratie veel belangstelling zou hebben getrokken. Ondanks dit dompertje was het weer een goed bestede dag, waarop we zoals gewoonlijk het nuttige met het aangename hebben weten te verenigen. We willen dan ook de mensen van HCC CompUsers wederom van harte bedanken voor de genoten gastvrijheid, en complimenteren met de voortreffelijke organisatie! (GV 5 oktober 2015) Kort verslag van de bijeenkomst op 5 september 2015 Ook in de zomervakantie hebben de bezigheden niet stil gelegen: Ben vertelde de laatste maanden te hebben gewerkt aan een rijdend robotje; hij had het meegenomen. Een mooi stukje werk, vooral omdat hij aan het karwei was begonnen zonder enige kennis van mechanica, elektronica, en de programmeertaal C. Op de volgende foto toont hij de onderzijde van de robot (die hij Madeleine heeft gedoopt), met twee wielen, elk aangedreven door een eigen motor, en een draaibare kogel als derde steunpunt. Ben bekende dat deze kogel wat stroef liep door de wrijving die het gewicht van het karretje veroorzaakte. Op de onderstaande foto is de rest van de robot te zien, met op de "tussenverdieping" de elektrische voeding. Deze bestaat uit twee gedeelten: de motoren krijgen ongeveer 4.5 volt, en het Olimex besturingsbordje, dat zich helemaal bovenaan bevindt, 9.6 volt. Ben heeft veel tijd besteed om het bordje via een RS-232-poort met een computer te laten communiceren; naar het bleek een vooralsnog nutteloze bezigheid, want de microprocessor had weinig te vertellen zolang hij nog niet geprogrammeerd was... Er staat nu een C-programmaatje op dat de robot eerst een stukje vooruit laat rijden, en dan weer achteruit. Ben beraadt zich over de volgende stap. Hij dacht zelf aan de invoering van PWM (Pulse Width Modulation) om de motoren met verschillende snelheden te kunnen laten draaien. Abraham suggereerde een alternatief: als de robot via ZigBee met een laptop kan communiceren, zou Ben kunnen gaan programmeren in Visual Prolog, een taal die hij uitstekend beheerst. Jan meldde dat hij zijn webpagina over transputers geheel had herzien en inhoudelijk bijgewerkt. Daarbij was de informatie over zijn Lego®-karretje MOOF gesneuveld; Gerard merkte op dat daardoor een aantal links naar Jans website in oudere bijeenkomstverslagen betekenisloos waren geworden, en vroeg Jan om op zijn website toch weer plaats voor dat karretje in te ruimen. Titus was aan het werk geweest met OpenGL, een library voor 3D-Graphics, die hij aanroept vanuit FreeBasic. Op Theo's computer liet hij zien dat je met textures, een soort "behang" dat je op afgebeelde 3-dimensionale vormen kunt plakken, mooie en interessante effecten kunt bereiken. Het laatste onderdeel van de bijeenkomst was een uitgebreide discussie. Jan had in de krant een bespreking gelezen van het boek "Superintelligentie" van Nick Bostrom. Hierin bekijkt de schrijver waartoe de ontwikkelingen in Artificiële Intelligentie en robotica kunnen leiden; met name besteedt hij aandacht aan de vraag of en wanneer dit zou kunnen resulteren in een bovenmenselijke intelligentie, en of een zo ontstane intelligentie de mensheid kan overvleugelen, overheersen, of uitroeien.Jan vroeg zich af hoe de mens ooit overheerst zou kunnen worden door computers. Dat hoeven we toch niet toe te laten? We kunnen altijd de stekker er uit trekken. Ed merkte op dat "nee" zeggen op individueel niveau niet werkt: het zijn de bedrijven en de organisaties die de beslissingen nemen. Gerard zag de suprematie van computers wel als een reële mogelijkheid: eerst via mensen (denk aan het leger en de "veiligheids"-diensten), die computers en robots gebruiken om andere mensen te controleren, te beheersen, of te doden; waarna die mensen zelf ook de controle over deze hulpmiddelen verliezen.Deze discussie kwam natuurlijk niet tot een eensluidende slotsom; Jan gaf te kennen dat hij het boek van Bostrom in ieder geval zou kopen en lezen. We verwachten dus nog wel een vervolg van deze discussie. Door deze discussie kwam er één onderwerp niet aan bod: een voortgangsrapportage van het steen-schaar-papierproject van Gerard. Hij dacht op de MegaCompUfair wel met iets simpels te kunnen komen; en verdere ontwikkelingen komen ongetwijfeld op toekomstige AI-bijeenkomsten aan bod. (GV 19 maart 2015) Kort verslag van de bijeenkomst op 4 juli 2015 Op deze laatste bijeenkomst voor de vakantie passeerden nog enkele interessante onderwerpen de revue: In het kader van het begrip "de opgebouwde wereld", dat een belangrijke rol speelt in zijn artikel over de vrije wil, had Henk een belangwekkend boek meegebracht. Het betreft een mooie uitgave van "De Rerum Natura" ("Over de natuur van de dingen"), waarin telkens op de linkerbladzijde de oorspronkelijke Latijnse tekst, en op de rechterbladzijde de Nederlandse vertaling is afgedrukt. "De Rerum Natura" is een zgn. leerdicht van de Romein Lucretius, waarin in dichtvorm de filosofie van de Griek Epicurus wordt uiteengezet, die op zijn beurt voor zijn fysische onderbouwing weer teruggrijpt op de atoomtheorie van Democritos — vandaar het verband met "de opgebouwde wereld". Peter vestigde de aandacht op twee artikelen in het tijdschrift Scientific American Mind van april/mei 2015. In een van deze artikelen, geschreven door Nicholas Humphrey, wordt getracht om de bittere pil dat het bewustzijn een illusie zou kunnen zijn, te verzachten door het bewustzijn te vergelijken met kunst. En in het andere artikel, de vaste column van Christof Koch met de titel Consciousness Redux, wordt beschreven dat recent onderzoek m.b.v. hersenscans aan het licht heeft gebracht dat de intuïtie van experts, verkregen door jarenlange training, vermoedelijk gelegen is in een hersengebiedje dat de nucleus caudatus wordt genoemd. Verder gaf Peter een korte samenvatting van de bespreking die voorafgaand aan de plenaire sessie in de kantine had plaatsgevonden. Er is namelijk besloten dat in de maanden april t/m juli 2016 Robotica en AI het "seizoensthema" van de HCC zullen zijn. Dat betekent dat er in het aprilnummer van PC-Active een aantal artikelen over dit onderwerp zullen verschijnen, en dat er een presentatie zal worden samengesteld, die in die periode op bijeenkomsten in het hele land door vrijwilligers zal worden gegeven. In het overleg, waarbij naast bestuursleden van AI en Robotica ook Guido Hulscher van het HCC verenigingsbureau aanwezig was, werd bekeken hoe e.e.a. vorm gegeven kan worden, wat onze interessegroepen hieraan kunnen bijdragen, en wat we anderzijds kunnen doen om van "ons kwartiertje in het spotlicht" te profiteren (b.v. in de vorm van ledenaanwas). Evenals 4 jaar geleden (wat vliegt de tijd!) heeft Kees aandacht besteed aan de verkiezingen van de Eerste Kamer door de leden van de Provinciale Staten. Omdat er sinds 2011 geen lijstverbindingen meer mogelijk zijn, moest er meer aandacht worden besteed aan onderhandelingen. Kees heeft met zijn programma op basis van een genetisch algoritme de mogelijkheden voor de diverse partijen om door uitruil van stemmen restzetels te bemachtigen onderzocht. Daaruit kwam dat er geen kansen lagen voor Kees' eigen partij, maar dat met name de combinatie CU/SGP een zetel had kunnen winnen. In de feitelijke onderhandelingen bleek de uitruil die plaatsvond tussen deze partijen echter niet groot genoeg om die winst daadwerkelijk binnen te slepen. Gerard had voor het computergestuurde orgeltje van de Forth interessegroep een korte compositie (ca. 1'15") geschreven, die zich geheel afspeelt binnen de slechts 16 tonen die het orgeltje kan voortbrengen, maar elk van die tonen ook minstens éénmaal gebruikt. Omdat hij het stukje met enige moeite met één hand op de piano kan spelen, heeft hij het The One-armed Bandit genoemd. Daarnaast had hij een presentatie gemaakt om de ontstaansgeschiedenis en de opbouw van het stukje vóór de première (op 13 juni j.l.) uiteen te zetten. Deze presentatie heeft hij nu ook "voor eigen publiek" laten zien. Daarbij besteedde hij ook nog enige aandacht aan de vormgeving van de presentatie, in de programmeertaal Scratch. Daarna liet Gerard nog een tweede presentatie zien, waarin hij aan de hand van een simulatie (weer in Scratch!) een mier over het scherm liet bewegen. Hij liet eerst zien hoe alle bewegingen expliciet door commando's kunnen worden bestuurd — een methode die in de robotica veelvuldig wordt toegepast om specifieke taken te volvoeren. Deze aanpak contrasteerde hij met een methode waarin de bewegingen van de mier een random (willekeurige) component bevatten. Gerard betoogde dat de mier door de tweede werkwijze een veel natuurlijker overkomend gedrag vertoonde. De mier liep zich niet permanent vast in een hoek, scheen wat te twijfelen over zijn acties, en leek soms actief op zoek naar een uitweg uit het rechthoekige scherm waarin hij opgesloten zat. Gerard wees er op dat deze doelbewustheid (of zelfs intelligentie?) uitsluitend in de interpretatie van de toeschouwers was gelegen (het Eliza-effect); maar dat zou evengoed ook voor het gedrag van echte mieren kunnen gelden... Ook deze (korte) lezing was eerder voor de Forth i.g. gehouden. (GV 13 juli 2015) Kort verslag van de bijeenkomst op 6 juni 2015 Er werd op deze bijeenkomst veel tijd besteed aan discussie, en weinig aan het laten zien van de vorderingen die de aanwezigen met hun werkzaamheden hadden geboekt. Het eerste gespreksonderwerp was weer de poging om tot een verdergaande samenwerking met de Robotica interessegroep te komen. Peter had op het Internet flink wat researchwerk verricht, en aan diverse mensen een groot ZIP-bestand toegemaild, met daarin o.m.: Informatie over kant-en-klare Raspberry-Pi-robots met camera die momenteel te koop zijn. Een inter-aktief Python tutorial. Een artikel over computer vision geprogrammeerd in Python. Informatie over het programmeren van Lego® Mindstorms® in Python. Helaas konden niet alle ontvangers de ZIP-file lezen. Peter beloofde een nieuwe poging te wagen door er enkele grote bestanden uit te halen en te vervangen door www-links. Naar aanleiding van Peters input merkte Ed op dat een programmeertaal (in dit geval Python) voor hem slechts een "vehikel" was, geen doel op zich.Het vervolg van de discussie bracht nogmaals aan het licht dat we nog geen overeenstemming hebben over wat we nu eigenlijk willen. Ed benadrukte dat er geen specifieke vraag (naar een of meer onderwerpen) vanuit de leden van de Robotica-groep is; het is aan ons om met een idee te komen en dat in de vorm van een concreet aanbod te gieten. Op dit moment doet nog niemand binnen Robotica iets met AI, het is alles conventionele regeltechniek wat de klok slaat; terwijl juist in de robotica mogelijkheden moeten liggen voor het toepassen van AI-technieken. Een voorstel van Gerard om aan een humanoïde robot te gaan werken werd als te ambitieus van de hand gewezen. Uiteindelijk begon het idee om iets te gaan doen met de lerende muis enige vaste vorm aan te nemen. Ed had deze nog niet in werking gezien, maar het idee leek hem wel aan te spreken. Een poging om de muis nog even op het scherm te laten zien, strandde op dit moment, omdat de recente browser-versies Java-applets als een veiligheidsrisico zien, en het tonen daarvan dus zeer bemoeilijken. De Windows98®-laptop, waarop de applet nog wel zonder bijzondere ingrepen kan worden gedraaid, was helaas niet aanwezig. Gerard verklaarde zich wel bereid om de werking van het neurale netwerk van de muis aan de roboticagroep uit te leggen. Henk deed kort verslag van zijn vorderingen met schaakeindspelen. Hij demonstreerde daarbij de situatie waarin een koning en een toren het moeten opnemen tegen een koning zonder "manschappen". Deze (relatief eenvoudige) matvoering werkt nog niet goed. Henks uiteindelijke doel is het (notoir lastige) eindspel van een koning alleen tegen een koning met loper en paard. Daarbij kwam de vraag op, of in dit eindspel een "strategie" (systematische aanpak) kan worden gebruikt. Naar aanleiding hiervan ontspon zich een discussie over het verschil tussen de manieren waarop mensen en computers schaken. Leon vertelde ons dat de kracht van goede menselijke schakers niet zozeer ligt in heel diep (= veel zetten) vooruitdenken, maar vooral in het afkappen (= niet nader beschouwen) van slechte zetten, ten gunste van de veelbelovende voortzettingen. Jan vertelde dat hij zich tijdens zijn vakantie o.a. bezig had gehouden met het boek De ijzeren wil van Bas Haring. Hij vond het een leuk boek om te lezen; de schrijver bekijkt diverse aspekten van kunstmatige intelligentie vaak van een kant waar Jan zelf nog niet op gekomen was. Ook op transputergebied had Jan niet stil gezeten: hij had een artikel gelezen over het maken van netwerken met transputers, waarbij het er vooral om gaat om de signaalwegen kort te maken. Daarnaast is Jan op zoek naar een geschikt (AI?-)probleem om op een transputernetwerk te laten lopen. Verder is hij zijn website aan het reviseren. Intussen had Peter uitgevogeld hoe hij zijn browser kon overreden om toch een applet te laten zien; helaas was Ed al vertrokken. Omdat ook enkele andere aanwezigen de muis en het mierendoolhof nog niet kenden, heeft Gerard een korte uitleg van deze "gouwe ouwe" projecten gegeven. Daarmee was de tijd al weer vol. De oplettende lezer van het vorige verslag zal in het bovenstaande lijstje een tweetal onderwerpen missen. Het programmeren van het Lego®karretje MOOF in LabView is verschoven naar een volgende keer; Jan had nog niets voorbereid. En Gerard had wel een steen-schaar-papierprogrammaatje in Python geschreven, maar omdat dat gebruik maakt van curses, werkt het vooralsnog alleen onder Linux. Dus ook dat is vooruitgeschoven naar een latere bijeenkomst. (GV 9 juni 2015) Kort verslag van de bijeenkomst op 2 mei 2015 Er zijn op deze bijeenkomst weer verscheidene onderwerpen besproken: Er werd geruime tijd besteed aan het brainstormen over een verdergaande samenwerking tussen de interessegroepen Robotica, Artificiële Intelligentie, en eventueel groepen die zich speciaal met programmeren bezig houden. Daarbij kwamen enige concrete ideeën naar voren. Eén daarvan was beeldherkenning: er zijn bij de Robotica i.g. steeds meer leden die goedkope webcammetjes hebben en daar iets mee zouden willen doen. Een ander idee (van Gerard) was om een "moederrobot" een geluidssignaal te laten uitzenden, op basis waarvan diverse "kind-robots" haar kunnen opzoeken en haar blijven volgen. Dit idee sprak Jan wel aan, vanwege de mogelijkheden om robotjes "zwermgedrag" te laten vertonen. Een derde idee was een workshop waarin de deelnemers leren om zelf (in bijv. Python) diverse AI-technieken te programmeren — waaronder enkele typen neurale netwerken.Daarbij werd duidelijk dat de uitgangspunten van de deelnemers aan het gesprek soms nogal verschillen, en ook hierover werd gepraat: gaan we "shoppen" in de ongelooflijke hoeveelheid leuke apparaten en onderdelen die tegenwoordig (vaak tegen schappelijke prijzen) verkrijgbaar zijn, en kijken we wat voor leuke dingen we daarmee kunnen doen? (Deze aanpak werd door Gerard – niet heel origineel – gekarakteriseerd als "oplossingen op zoek naar een probleem".) Of stellen we ons eerst een doel, en kijken we dan hoe we dat gaan bereiken? En moet dit doel nieuw en origineel zijn (wat volgens Ed bijna onmogelijk is), of stellen we ons tevreden met het (na)maken van iets dat door anderen al eerder is gemaakt?Terloops werd ook nog even de aandacht gevestigd op het nogal genante feit dat het werk aan TetraBot al maandenlang stil ligt. Het werd duidelijk dat we er in één gespreksronde niet uit zouden komen. Er werd dus besloten om de besproken punten als stof tot nadenken mee naar huis te nemen, en de discussie een volgende bijeenkomst voort te zetten. Abraham had een exemplaar van zijn Internet-kerkradio meegenomen, en gaf een korte toelichting en demonstratie. Het apparaat is, opengeschroefd, op de onderstaande foto te zien.De omhullende kast is de oorspronkelijke behuizing van de kerkradio, waar de mensen aan gewend waren. Hieruit heeft Abraham zonder aarzelen alle elektronica weggeslepen (behalve het stukje dat de schakelaars aan de linkerkant uitleest) en vervangen door nieuwe onderdelen. Direct achter de LCD-display zit de Raspberry Pi computer. Hierop draait het Raspbian besturingssysteem, met daar bovenop de Music Player Daemon (MPD) en de bijhorende command-line interface MPC (music player command), aangestuurd door een Python-script. Het witte onderdeel rechts achter de Raspberry is de voeding. Het langwerpige bruingrijze geval links achter de Raspberry is een Huaweii-E173 3-G Dongel, die met behulp van een externe antenne via het GSM-netwerk de internetverbinding verzorgt. In de uiteindelijke uitvoering staat de zenderkeuze vast op de kerkradio, maar die zond op dit moment niet uit. Echter, voor testdoeleinden had Abraham de zender ViceFM ingesteld (zoals te zien op de LCD-display), zodat wij even konden genieten van Procul Harums A Whiter Shade of Pale. Maar succes heeft zijn prijs: nu bewezen is dat het werkt staat Abraham voor de schone maar tijdrovende taak om nóg zo'n 35 à 40 van die kastjes om te bouwen… Henk kondigde aan te gaan onderzoeken, of de methode die hij voor het oplossen van de schuifpuzzel heeft gebruikt, ook toepasbaar is voor de analyse van eindpelen in het schaakspel. Hopelijk horen we hier in de toekomst meer over. Ook wilde Henk graag de aandacht vestigen op de box Alles voor één meisje, waarop de sterrenkundige Vincent Icke in 12 hoorcolleges (op 8 DVD's) uiteenzet "hoe het heelal de mens voortbracht". Volgens Henk illustreert dit het begrip "de opgebouwde wereld", waar hij van uitgaat in zijn artikel De computer en de vrije wil. Jan vertelde de afgelopen maand op het Internet een en ander over kunstmatige intelligentie te hebben gelezen. Hij kreeg daarin bevestigd dat robotica en automatisering ook vormen van AI zijn. Omdat hij al lang in deze onderwerpen geïnteresseerd is, heeft hij zich voorgenomen om "besturing" (voorlopig) tot zijn kern-aktiviteit op AI-gebied te maken. Over het onderwerp transputers kon Jan melden dat zijn systeem, bestaande uit een computer en een daarmee via de ISA-bus verbonden transputerkaart, nu vlekkeloos lijkt te werken. Hij heeft dit getest door het onvermijdelijke "Hello World" in Occam te compileren en te laten draaien. De deur staat nu dus wagenwijd open om serieus met zijn ConApp aan de slag te gaan... Ook wat betreft het Legokarretje "MOOF" had Jan weer vorderingen gemaakt. Het karretje draaide door zijn massatraagheid verder door dan de bedoeling was; dit is natuurlijk erg lastig wanneer je nauwkeurig een aantal haakse bochten achter elkaar moet maken, zoals bij de Roborama-wedstrijden waar o.a. een slalom tussen een aantal blikjes door moet worden volbracht. Jan heeft dit opgelost door het karretje op maximaal vermogen te laten draaien totdat het bijna de gewenste richting heeft bereikt; de besturing wordt daarvan op de hoogte gebracht door de in het voertuig aanwezige kompassensor. Het laatste stukje wordt dan langzaam gedraaid, waardoor de gewenste stand met voldoende nauwkeurigheid wordt bereikt. Jan heeft toegezegd om de volgende bijeenkomst wat te laten zien van de programmering (in LabView). Tot slot heeft Gerard nog even gesproken over het spel Steen-Papier-Schaar. Bij dit spel moeten de beide spelers tegelijkertijd één van deze drie voorwerpen kiezen. Het aardige is dat geen van deze keuzes in alle gevallen de winnende is — dat hangt namelijk ook van de keuze van de tegenstander af. Gerard illustreerde dit door de spelmatrix op te stellen, en vertelde dat bij herhaald spelen de beste strategie is om telkens willekeurig je keuze te bepalen. Maar het is een bekend feit dat menselijke wezens niet zo goed zijn in willekeurig kiezen: er zit bijna altijd wel een of ander patroon in. Met een goed patroonherkennings-algoritme (en een voldoende grote dataset) kan de computer hier in theorie gebruik van maken om de meeste spelletjes te winnen. Gerard wil proberen om volgende keer met een dergelijk programma te komen. Abraham neemt dan zijn "gebruikers-interface" voor dit spel mee. (GV 7 mei 2015) Kort verslag van de bijeenkomst op 4 april 2015 Door de jaarlijkse Algemene Ledenvergadering (ALV) was er wat minder tijd om ons inhoudelijk met kunstmatige intelligentie bezig te houden; maar er kwamen toch weer genoeg interessante onderwerpen aan bod: Tijdens de A.L.V. kwam Ed Buzzi, kernlid van Robotica belast met "externe contacten", met het voorstel om de samenwerking nog wat te intensieveren. Gedacht werd o.a. aan een workshop. Er is besloten om op de mei-bijeenkomst met een groepje (dat niet uitsluitend uit bestuurs- en kernleden hoeft te bestaan) over dit voorstel te gaan brainstormen. Peter vestigde de aandacht op een tweetal krantenartikelen: Een artikel in de NRC van 2 maart 2015 over Guido van Rossum, de ontwerper van de programmeertaal Python. Peter merkte op dat je die programmeertaal steeds vaker in de media tegenkomt. Python heeft een aantal kenmerken die ook in LISP (de traditionele AI-taal in Amerika) voorkomen, wat het tot een geschikte taal voor AI-projecten zou kunnen maken. Een mogelijk nadeel daarbij is dat de taal niet heel snel is, doordat de opdrachten niet gecompileerd maar geïnterpreteerd worden. Ook in de NRC, ditmaal van 26 februari 2015, stond een artikel over een computerprogramma dat zelf leert om spelletjes te spelen. Dit algoritme, ontwikkeld door het bedrijfje Google DeepMind, leert zonder voor-ingeprogrammeerde kennis van enig spel, met behulp van o.a. een neuraal netwerk. Henk kon melden dat hij, geprikkeld door de paaspuzzel in de krant, op zijn systeem toch nog een programma gevonden heeft om 16×16 sudoku's (ook wel "hexadoku's" genoemd) op te lossen. Het stond hem bij voorgaande gesprekken over dit onderwerp niet niet meer bij dat hij deze variant ooit had geschreven. Ook vertelde Henk te hebben ontdekt dat op Wikipedia diverse varianten staan van de schuifpuzzel waarvoor hij een programma heeft geschreven. Abraham vertelde dat hij bezig was om met behulp van een Raspberry Pi een simpel te bedienen Internet-radio te bouwen, zodat mensen zonder Internet-ervaring naar de kerkradio kunnen blijven luisteren ook wanneer de kabelmaatschappij stopt met het doorgeven van die zender. Vervolgens lichtte hij ons in over zijn vorderingen met de "vintage" Intel 4004 microprocessor. Hij is er in geslaagd om een assemblerprogrammaatje te laten uitvoeren vanaf een SD-kaartje dat dienst doet als "ROM". Weliswaar doet het programma niets — het bestaat uit enkele instructies "NOP" ("No OPeration", oftewel letterlijk "Doe niets"), gevolgd door een sprong terug naar het begin van het programma — Maar het werkt!, dus de belangrijke en moeilijkste eerste stap is gezet. Op de onderstaande foto is de microprocessor het witte "torretje" op het hoge groene voetstuk. Tenslotte gaf Abraham een mooie "diavertoning" van een reisje naar Engeland dat hij met zijn dochter had ondernomen. Daarbij bracht hij o.a. een bezoek aan Bletchley Park, het Engelse landhuis waar tijdens de tweede wereldoorlog door Alan Turing en diverse anderen werd gewerkt aan het breken van de Duitse geheimschrift-codes. Daarbij werd ook de Colossus gebouwd, een van de eerste elektronische computers.Een ander hoogtepunt van zijn trip was het London Science Museum, waar o.a. aandacht wordt besteed aan de allereerste mobiele robots, gebouwd door W. Grey Walter, en aan Charles Babbage. Babbage ontwierp in de 19e eeuw mechanische computers: de Difference Engine en de Analytical Engine. Hij is er tijdens zijn leven nooit in geslaagd om zijn ontwerpen gebouwd te krijgen, maar later is aangetoond dat ze (ook met 19e-eeuwse technieken!) wel degelijk zouden hebben gewerkt. Jan meldde dat zijn LEGO®-karretje MOOF te ver doordraaide. Daarnaast bleek het bewegen van de armen met de sensors niet nodig voor het precies lokaliseren van een opening in een barrière van (frisdrank)blikjes: de ultrasone sensoren zijn goed genoeg en de doorgang is breed genoeg om het zonder die truc te kunnen stellen. Verder stelde Jan voor om MOOF bij de eerstvolgende Roborama-wedstrijd onder de vlag van onze AI interessegroep te laten deelnemen; een aanbod dat natuurlijk dankbaar werd aanvaard! Ook had Jan enkele transputerkaarten meegenomen, alsmede een computer met ISA-bus waarin die kaarten kunnen worden gestoken. Aan het schrijven van een interessant programma voor de transputer was hij echter nog niet toegekomen. Wel kwam ter sprake dat er op het Internet een goede (engelstalige) inleiding in Occam, de programmeertaal voor transputers, te vinden is. In dit kader kwamen ook de termen concurrency en parallellisme naar voren; voor het onderscheid tussen deze twee verwante begrippen werd ook naar het Internet verwezen: gebruik deze woorden als zoekterm, en je vindt een overvloed aan informatie. Naar verwachting zal hierover op toekomstige bijeenkomsten nog meermalen verder gepraat worden. Al met al weer een leuke en leerzame bijeenkomst, waarop we (vooral in het laatste uur) ook een aantal mensen van de Robotica interessegroep mochten verwelkomen. (GV 25 april 2015) Kort verslag van de bijeenkomst op 7 maart 2015 We werden, met en van elkaar, ook deze keer weer wat wijzer: Vóór de plenaire sessie vertelde Henk dat hij eigenlijk geen hele byte nodig had voor elke configuratie van de 2×2 Rubik's kubus; met twee bits zou het ook kunnen. Hij zag echter geen dringende reden om deze efficiëntieverbetering door te voeren. Gerard vroeg zich af of dat niet zou helpen ook de 3×3 kubus binnen het bereik van de computer te brengen, waarop Henk voorrekende dat daar nog wel wat meer voor nodig was dan een reductie van het benodigde geheugen met slechts een factor 4. Jan had zijn rijdende robotkarretje MOOF meegenomen. Het is te zien op nevenstaande, zelfs na uitbundig fotoshoppen niet al te scherpe foto. Zoals eerder door Jan uiteengezet is het een "gewoon" LEGO®-karretje, dat is verstevigd met metalen assen, bouten, enz. om hem stabieler te maken. De beide "vangarmen" met ultrasone sensoren, om t.z.t. frisdrankblikjes te kunnen verplaatsen, zitten er nog niet aan. Bovenop zit het nxt besturingskastje met ARM-processor. Het kastje kan 4 sensoren aan, maar Jan hoopt dat hij er door in het kastje "in te breken" misschien meer mee kan uitlezen. De besturing wordt geprogrammeerd in een gemodificeerde vorm van LABVIEW, waarvan nog vaag iets te zien is op de laptop op de achtergrond; dit besturingsprogramma wordt dan naar het karretje ge-upload. Jan gaf ook een demonstratie: met eigen ogen konden we zien, dat wanneer er eenmaal een richting in de sensor was vastgelegd, deze goed genoeg werd onthouden om het karretje een stuk netjes rechtuit te laten rijden en daarna een haakse bocht naar links te laten maken. Dit experiment werd enkele malen herhaald, waarbij het karretje telkens zo nauwkeurig mogelijk in zijn, met enkele tijdelijke plakbandjes op de vloer aangegeven, uitgangspositie werd teruggezet. Daarbij bleef de afwijking in eindpositie, gemarkeerd met een derde plakbandje, steeds binnen de 5 centimeter. We kunnen dus spreken van mooi stabiel gedrag! Kees had zijn Arduino-bord meegenomen, maar had er nog niet veel meer mee gedaan dan het standaard blink-programmaatje uitproberen, dat een LEDje op het bord laat knipperen. Op verzoek van Gerard wist hij echter het programmaatje zo te wijzigen, dat het LEDje in een onregelmatig tempo aan- en uitging. Henk wou weten of Gerard al geprobeerd had om sudoku's op te lossen met de programmeertaal Scratch. Gerard zei dat hij er wel even naar gekeken had, en dat hij nog steeds dacht dat het wel kon. Helaas had hij geen mogelijkheid kunnen vinden om te werken met arrays of geneste lijsten, zodat hij voor bijna alles een aparte variabele in het leven zou moeten roepen. Het maken van een sudoku-programma wordt op die manier dan wel heel erg bewerkelijk. Gerard overwoog om een simpele versie te bouwen voor 4×4 sudoku's. Verder wou Henk nog benadrukken dat het feit dat zijn eigen programma geen 16×16 sudoku's aan kan, niet aan het algoritme ligt: dat is algemeen genoeg om sudoku's van elk formaat, alsmede varianten zoals diagonaalsudoku's, op te lossen. Ook vroeg Henk zich af of, en hoe, een Turingmachine zou kunnen worden geconstrueerd die sudoku's oplost. Half schertsend merkte Gerard op, dat hij dan alleen maar een BASIC-interpreter voor een Turingmachine hoefde te schrijven, om daarna zijn eigen in BASIC geschreven sudokuprogramma te draaien. Gerard liet zien dat hij op de Forth-bijeenkomst een boek over Transputers had buitgemaakt, alsmede enkele 5.25" floppies met software. Jan zag er geen informatie bij waar hij niet al over beschikte, maar hoopte wel dat de bij Gerard in aanleg gewekte belangstelling zodanig zou gedijen dat ze ooit samen iets met Transputers zouden kunnen gaan doen. Aan het eind van de bijeenkomst vertelde Gerard, n.a.v. de vraag van Jan wat hij nu eigenlijk onder A.I. moest verstaan, iets over zijn eigen opvatting van wat intelligentie eigenlijk is — in mensen, dieren, machines, en zelfs (hypothetische) buitenaardse wezens. (GV 19 maart 2015) Kort verslag van de bijeenkomst op 7 februari 2015 De plenaire sessie begon wat eerder en was wat korter dan normaal; maar er kwamen toch weer interessante onderwerpen ter sprake: Peter deelde mee geïnteresseerd te zijn in elasticsearch, open source software om analyses op big data (grote hoeveelheden gegevens) te verrichten. Hij had de software gedownload, maar er nog niet naar kunnen kijken. Hij was vooral benieuwd welke algoritmen er aan ten grondslag liggen, en of dat iets met constraint satisfaction te maken had. Ook wist Peter te melden dat de nieuwe Scratch-versie (2.0), met meer blokfuncties, niet langer alleen via de Scratch-website, maar nu ook met een stand-alone editor te gebruiken is. Henk had voor de aanwezigen een opiniestukje uit de Volkskrant gekopieerd, waarin betoogd wordt dat "zingeving" bij mensen een motief voor hun daden kan vormen. Henk legde een verband met De computer en 'de vrije wil' door de interessante vraag of zoiets ook bij computers een rol zou kunnen (gaan) spelen. Daarnaast gooide Henk de vraag in de groep of de programmeertaal "Scratch" wel krachtig genoeg is om een Sudoku-oplosser in te schrijven. Peter dacht van wel, en Gerard zag zich uitgedaagd. Henk vond sudoku's "simpel"; Gerard bekende dat hij bezig was met een 16x16 sudoku die hem wel de nodige hoofdbrekens kostte. Helaas zijn sudoku's van deze grootte niet (of: nog niet) met Henks programma op te lossen, omdat dit niet berekend is op getallen van 2 cijfers. Leon gaf een korte beschrijving van Marvin Minsky's The society of Mind, dat hij uit de bibliotheek van onze interessegroep had geleend. Minsky beschrijft de menselijke geest als opgebouwd uit kleine bouwsteentjes; hetgeen natuurlijk snel associaties oproept met de methode van object-georiënteerd programmeren. Gerard lanceerde het idee om in de toekomst met een studiegroepje wat dieper in dit boek te duiken. Jan vertelde dat Abraham er in geslaagd is een werkend ontwikkelsysteem te bouwen met industriële besturingscomputer en één transputerbord. Helaas kon Abraham vandaag niet aanwezig zijn, zodat een demonstratie werd uitgesteld tot een volgende bijeenkomst. Wel vertelde Jan wat meer over de transputer-architectuur, aan de hand van een tweetal borden die hij had meegenomen. Hij kan nu serieus aan de slag met het leren van de programmeertaal Occam. Zijn eerste doel is het maken van een programma voor de Tetromino-puzzel; daarna hoopt hij met 5 transputers zijn ConApp-karretje te gaan besturen. Ook had Jan de afgelopen maand een ingeving gehad om een robotica-probleempje op te lossen: bij het onderdeel "T-rijden" van de jaarlijkse Roborama-wedstrijd van de HCC robotica interessegroep moeten de robots door een opening in een barrière van colablikjes manoeuvreren. Jans legokarretje (dat hij MOOF noemt, voor Moving Object On Floor), heeft twee armen uitgerust met ultrasone sensoren. De armen zijn beweegbaar (om bij een ander onderdeel ook blikjes te kunnen hanteren). Het idee is nu om het karretje de barrière met gespreide armen te laten naderen, en dan dichterbij de armen recht vooruit te houden om de locatie van de opening nauwkeurig te bepalen. Tot slot heeft Gerard nog kort uiteengezet hoe hij aan de hand van het boek Bouw zelf een expertsysteem in BASIC een simpel programmaatje heeft geschreven dat aan de hand van een eenvoudige tabel met voorwaardelijke kansen bepaalt of het gaat regenen. (GV 13 februari 2015) Kort verslag van de bijeenkomst op 3 januari 2015 Ondanks de voorbije feestdagen was er toch nog wel het één en ander te melden: Titus zou voor zijn Lego® EV3-robot graag de programmeeromgeving RobotC gebruiken, maar hikt een beetje aan tegen de kosten daarvan; dit mede, omdat hij diverse projecten waaraan hij ooit begonnen is (nog) niet tot een bevredigend einde heeft gebracht. Er ontspon zich een discussie, waarbij onder andere geopperd werd om er een project van te maken waar we met ons allen aan zouden kunnen werken. Wegens de wijd uiteenlopende belangstelling (en inzichten) van de groepsleden werd hiervan afgezien. Jan merkte wel op dat het leuk zou zijn als de AI-interessegroep de eerstvolgende Roboramawedstrijden met enkele robots zou meedoen — en dan hopelijk ook hoog eindigen! Bij de Roborama-competitie van de Robotica-interessegroep kregen àlle deelnemers een prijs, ook degenen die onderaan eindigden; een soort "aanmoedigingsprijs" dus. Zo had Titus een elektronicaprintje ontvangen, waar hij echter niet goed raad mee wist. Dus nam Abraham het vorige maand mee om er eens mee te stoeien. Het blijkt een RTC (een real-time clock): een schakeling die de tijd bijhoudt, ook (mits voorzien van een batterijtje) als de voedingsstroom is uitgeschakeld. Daarnaast zit er een EPROM van 32K op: een geheugen dat eveneens zijn inhoud niet kwijt raakt als de voedingsstroom wegvalt.Zo'n tijd-chip kan bijvoorbeeld worden gebruikt bij het zelf bouwen van een klokthermostaat of voor andere domotica-toepassingen. Gerard opperde dat een meer AI-gerichte toepassing gevonden zou kunnen worden in oriëntatie (van een robot of een drone) op een bewolkte dag aan de hand van de polarisatie van het (zon)licht, zoals dat bij sommige diersoorten schijnt te gebeuren; de richting van die polarisatie hangt namelijk af van het tijdstip op de dag.Abraham liet zien hoe hij het printje (op de onderstaande foto links) via een I2C-bus verbonden had met een Arduino nano-bord (op de foto rechts), en dat hij via een BASIC-programma de tijd kon instellen en uitlezen, en strings naar het EPROM kon wegschrijven en weer teruglezen. Ook vertelde Abraham kort dat hij in het kader van de "instandhouding van computer-historisch erfgoed" bezig is om een exemplaar van de allereerste microprocessor, de Intel 4004, aan de praat te krijgen. Hij benadert de chip vanuit een Propeller-bord, en volgt de datacommunicatie via een Logic Analyser; maar hij ziet daarbij vreemde, onverklaarbare dingen voorbij komen. Hij wil nu via Internet een Duitse expert benaderen, om te zien of die enige opheldering kan verschaffen. Henk was vanuit zijn interesse in "de vrije wil" en de "opgebouwde wereld" gestuit op de ideeën van de Romeinse dichter en filosoof Lucretius. Een discussie hierover werd verschoven naar een toekomstige bijeenkomst. Verder had Henk nog wat gesleuteld aan zijn programma voor de schuifpuzzel. Het programma stopt nu zodra het grote vierkante blok (dat in zijn programma groen is) de positie midden-boven inneemt; de eindstand hoeft dus niet meer symmetrisch te zijn. Daarnaast kan het programma nu ook vanuit een willekeurige (random) beginstand uitgaan. Henk merkte op dat van de 65880 denkbare beginstanden er 11926 niet oplosbaar zijn. Daarbij zijn verwisselingen van identieke blokken niet als aparte standen geteld. Enkele aanwezigen vonden het percentage (ongeveer 1 op 6 onoplosbaar) verrassend hoog. Tenslotte liet Henk op het whiteboard aan de hand van een voorbeeld zien hoe het algoritme werkt waarmee hij de permutaties van de blokjes van de 2×2 Rubik-kubus naar een geheel getal codeert. (Wiskundig is hier sprake van enumeratie, waarbij aan de permutaties een totale ordening wordt opgelegd.) Dit ingenieuze algoritme, dat een beetje doet denken aan de positionele notatie van gehele getallen, is helaas iets te ingewikkeld om hier in detail uiteen te zetten. Gerard had wat zitten nadenken over (Engels) solitaire: de puzzel met pennetjes in een kruisvormig bord, die elkaar "slaan" door over elkaar heen te springen, en waarvan er aan het eind één in het midden moet overblijven. Ook deze puzzel zou kunnen worden aangepakt met de methode die Henk al voor de schuifpuzzel en de 2×2 Rubik-kubus heeft gebruikt. Daarnaast had hij een opmerkelijke symmetrie ontdekt: de regels van het spel en de mogelijke zetten lijken hetzelfde te blijven als je het spel achterwaarts afspeelt in de tijd, mits je tegelijkertijd ook pennetjes vervangt door lege posities en vice versa. Daarnaast had Gerard nog wat tijd gevonden voor de "Brain Teaser"-puzzel. Hij had m.b.v. een Python-scriptje uitgezocht hoeveel zetten er nodig waren om vanuit elke beginpositie naar elke eindstand te komen. Daarnaast had hij een functie geschreven om de speler bij het spelen van hints te voorzien; maar een demonstratie hiervan viel helaas in het water. Dus dit onderwerp zal in de toekomst ook zeker weer aan bod komen; temeer daar Henk aangaf zich eveneens met deze puzzel bezig te zijn gaan houden. Jan is nog steeds bezig met transputers, maar is er nog altijd niet in geslaagd om de Occam-compiler aan de praat te krijgen. Hij verklaarde zich bereid om nog iets meer te vertellen van de voordelen van het werken met transputers; maar omdat hij daarbij daadwerkelijk iets wil kunnen laten zien, zal ook dat op een van de volgende bijeenkomsten gaan plaatsvinden. We hebben dus in 2015 wel het een en ander om naar uit te kijken! (GV 22 januari 2015)

20 april 2020

...

Bijeenkomsten gehouden in 2016

  Kort verslag van de bijeenkomst op 3 december 2016 Er waren op de laatste bijeenkomst van dit jaar weer diverse interessante bijdragen in de plenaire sessie: Naar aanleiding van eerdere gesprekken over willekeurige getallen en diverse soorten dobbelstenen liet Abraham ons kennis maken met de 120-zijdige dobbelsteen. De som van 2 tegenover elkaar liggende zijden is altijd 121 (zoals dat bij een gewone, 6-zijdige dobbelsteen altijd 7 is), en ondanks het grote aantal vlakjes is goed te zien welk getal boven ligt. Diverse aanwezigen zagen er een soort "verfijning" van een 12-zijdige dobbelsteen in (met regelmatige vijfhoeken als zijden); volgens Gerard was hij echter evengoed te zien als een "afgeleide" van een 20-zijdige dobbelsteen (met driehoeken als zijden). Verder deed Abraham kort verslag van zijn deelname aan de Roborama-wedstrijd van de HCC Robotica interessegroep. Hij deed mee met twee robots: de PLV ("Propeller LijnVolger", bestuurd door de Parallax Propeller microcontroller), en de Intel Inside, bestuurd door een Intel 4004 — de allereerste microprocessorchip! Beide robots hebben met succes 2 verschillende lijnvolg-trajecten afgelegd. Daarnaast heeft Intel Inside ook het onderdeel "heen-en_weer" correct volbracht; het onderdeel "T-rijden" is helaas niet gelukt.Interessant is nog dat de PLV is uitgerust met een cameraatje, waarvan hij slechts naar één beeldlijn kijkt. Abraham heeft ook al weer een nieuwe uitdaging op het oog: de lijn-doolhofbaan, die hij te lijf wil gaan door de PLV meer dan één beeldlijn te laten gebruiken, zodat hij "vooruit kan zien". Op deze foto (gemaakt door Albert), is goed te zien hoe Abraham achter zijn hand zijn robot nog even enkele laatste instructies en bemoedigende woorden toefluistert… In de laatste nieuwsbrief van onze interessegroep werd gewag gemaakt van plannen om een cursus neurale netwerken "in JavaScript met Processing" te gaan organiseren. Pedro merkte hierover op dat JavaScript en Processing twee behoorlijk verschillende talen zijn, dus dat het wat hem betreft "òf – òf" zou moeten worden. Verder vroeg hij zich af hoe groot de belangstelling was voor de "werkgroep in oprichting JavaScript met Processing", en wat precies de bedoeling was. Er werd hem aangeraden om zijn aktiviteiten in het kader van die werkgroep niet te laten afhangen van de belangstelling van anderen (of het gebrek daaraan!), maar zijn eigen gang te gaan. Ervaringen in het verleden wijzen uit dat er dan het meeste gebeurt. Jan vertelde steeds meer onder de indruk te zijn van neurale netwerken. Hij heeft bevonden dat het begin simpel is, zoals te zien is in The Nature of Code. Op het internet heeft hij iets gevonden over character recognition, en hij wil nu proberen om dat werkend te krijgen. Hij hoopt op de volgende bijeenkomst het eerste begin te kunnen demonstreren… Henk heeft gewerkt aan een programma dat het welbekende spel "4 op een rij" speelt. Hierbij moeten "rood" en "blauw" beurtelings een schijf plaatsen in een speelveld van 6 rijen en 7 kolommen; de kolommen moeten "van onder af" opgevuld worden. De winnaar is degene die het eerst vier schijven van zijn kleur aaneensluitend op één horizontale, vertikale of diagonale rij heeft. De strategie van zijn programma bestaat uit 3 regels: Maak 4 op een rij, indien mogelijk. Als de tegenstander 4 op een rij kan maken (ware hij aan zet), blokkeer dit dan. Doe niets wat de tegenstander de mogelijkheid geeft om 4 op een rij te maken. Als geen van deze regels van toepassing is, wordt een willekeurige zet gedaan. Gerard suggereerde dat iemand anders ook een 4-op-een-rijprogramma zou kunnen schrijven, en dat dit programma het zou kunnen opnemen tegen dat van Henk. Verder had Henk zitten lezen in het Volkskrant-boek Wat iedereen moet weten van de natuurwetenschappen, dat de zgn. bètacanon bevat. Hij beschouwt het als een ernstige omissie dat het idee dat de wereld was opgebouwd uit atomen, niet expliciet als onderwerp in dit boek was opgenomen. Volgens Henk was Democritus, die dit idee lanceerde, zijn tijd daarmee ver vooruit. Het idee van de opgebouwde wereld speelt ook een belangrijke rol in Henks artikel over De computer en 'de vrije wil'. Op Henks vraag hoe vaak dit artikel tot nu toe is geraadpleegd, moest Gerard helaas het antwoord schuldig blijven. Ronald kon eindelijk een demonstratie geven van zijn Kohonen-programma, dat een vierkant van 10×10 programmeerbare RGB-LEDjes gebruikt om de zelforganiserende werking van het door Kohonen bedachte leeralgoritme te demonstreren. De demonstratie zou volgens Gerard nog wat beter worden als de LEDjes wat minder helder zouden branden, waardoor de kleurverschillen waarschijnlijk beter waarneembaar zouden worden. Daarnaast bleek niet iedereen goed te weten wat een Kohonen self-organising feature map nu precies doet. Mogelijk gaan Ronald en Gerard de demonstratie in de toekomst nog eens tot een nette PowerPoint-presentatie en/of een (YouTube-)filmpje uitwerken. Ronald had ook zijn eerder getoonde 3-dimensionale LED-array weer meegenomen. Door er één laag van ongebruikt te laten, hield hij een 4×4×4 kubus over, waarmee hij liet zien dat een kleurenpatroon in allerlei richtingen kan worden gespiegeld en/of gedraaid. Daarna vertelde Ronald over zijn bezoek, eerder die dag, aan een tentoonstelling van het Cryptomuseum. Dit museum heeft geen permanente tentoonstellingsruimte tot zijn beschikking, maar organiseert regelmatig i.s.m. andere instellingen dagen waarop stukken uit de collectie, waaronder Enigma-machines uit de tweede wereldoorlog, daadwerkelijk te zien zijn. Tussen zulke evenementen door leidt het museum een virtueel bestaan. Tenslotte liet Ronald een door hemzelf in Visual Basic 6 geprogrammeerd 6-dimensionaal boter-kaas-en-eieren zien. Daarbij worden de zetten van beide spelers d.m.v. muisklikken aangegeven. De computer houdt dan de bordstand bij en bekijkt na elke zet of er een winnaar is — wat in 6 dimensies zeker geen sinecure is: als mens zie je al snel een rijtje over het hoofd! Dit bleek spoedig toen Ronald een spelletje speelde tegen de rest van de aanwezigen en dat glansrijk won, maar daar in eerste instantie ook zelf wel enigzins verbaasd over leek te zijn… Gerard had een brute-forceprogrammaatje geschreven om het handelsreizigersprobleem (Traveling Salesman Problem, TSP) aan te pakken. Het maakt gebruik van een zelfgeschreven functie die alle permutaties van een lijst genereert; deze functie roept op zijn beurt weer een backtrackfunctie aan. Het programma is niet echt op snelheid geschreven: een willekeurige configuratie van 12 steden wordt in ruim 22 minuten opgelost. Vanwege de lange draaitijd liet Gerard alleen de output (opgevangen in een tekstbestandje) zien. Gerard wil dit programma als vergelijkingsstandaard gaan gebruiken om de prestaties van enkele AI-technieken (zoals een genetisch algoritme) bij dit probleem beter te kunnen beoordelen. Het komende jaar zullen deze en andere aktiviteiten ongetwijfeld een vervolg krijgen. Houd deze webpagina dus in de gaten — of beter: kom zelf onze bijeenkomsten bezoeken. Tot in het nieuwe jaar! (GV 8 januari 2017) Kort verslag van de bijeenkomst op 5 november 2016 Hoewel we moesten "concurreren" met de tegelijkertijd plaats vindende Roborama-wedstrijden van de HCC Robotica interessegroep, waaraan ook enkele van onze vaste bezoekers deelnamen, hadden we toch tijd, aanwezigen en onderwerpen genoeg voor een interessante plenaire sessie: Theo maakte ons attent op het nrc-artikel Kunstmatige Intelligentie gaat regeren. Dit artikel gaat over de invloed die AI, gecombineerd met "big data", zal hebben op de economie, de machtsverhoudingen, en de maatschappij als geheel, en over hoe de politiek daarop zou kunnen of moeten inspelen. Peter heeft een cursus bijgewoond over de Joomla-template voor websites van groeperingen. Diverse interessegroepen maken hier al gebruik van, en Peter wou inventariseren wat de aanwezigen vonden van een eventuele overgang naar dit nieuwe "format". Men leek hier niet echt een mening over te hebben, en de interesse was gering: men had liever gesprekken over AI dan over organisatorische zaken. Jan gaf aan dat hij nog steeds geïnteresseerd is in het programmeren van transputers, en hoopt om binnen onze interessegroep een clubje van enthousiaste medestanders te vinden. Gerard suggereerde dat Jan daarbij zelf het voortouw zou kunnen nemen, bijvoorbeeld door de programmeertaal Occam te leren, en daarover iets in de groep te vertellen. Jan vertelde verder dat hij, mede geïnspireerd door het boek The Nature of Code van Daniel Shiffman, het liefst een neuraal netwerk op zijn transputers zou zetten, omdat de mogelijkheid tot gelijktijdige verwerking die door transputers wordt geboden bij uitstek geschikt lijkt voor het programmeren van een dergelijk systeem. Hij weet echter te weinig over zulke onderwerpen om hiermee aan de slag te gaan. Gerard meldde dat hij en Albert al plannen hebben voor een simpel projectje in die richting, en Peter gaf aan dat hij wel bereid was om een cursus neurale netwerken te gaan geven. Rob is begonnen zijn programma voor solitaire Yatze te refactoren door meer gebruik te gaan maken van functies. Daarnaast is hij bezig in een boek over C# voor Android, en overweegt zijn programma voor deze omgeving te gaan vertalen. Pedro had drie onderwerpen: Hij heeft een versie van ALife (Conway's Game of Life) geschreven in JavaScript, en een in Processing. Hij hoopt de snelheid van de Processing-versie te combineren met de betere mogelijkheden van Javascript voor het bouwen van grafische user interfaces (GUIs). In de Volkskrant-bijlage "Sir Edmund" van 15 oktober j.l. staat een artikel over de Nijmeegse natuurkundige Theo Rasing, die het energieverbruik van chips ziet als de belangrijkste barrière die voortschrijdende miniaturisatie in de weg staat. Tenslotte demonstreerde Pedro de Adafruit Circuit Playground, een elektronicabordje met dezelfde microcontroller als op de Arduino, maar speciaal geschikt voor mensen die (nog) weinig tot niets van elektronica weten. Hij hoopt de komende maand m.b.v. de LED-lichtjes, sensoren, en geluidsmogelijkheden van dit bordje een soort "intelligente kerstbal" te maken. Gerard liet de tromino-puzzel zien die Aloys op zijn verzoek met de 3D-printer had vervaardigd. Hoewel die iets te simpel is om als puzzel echt interessant te zijn, is hij wel goed geschikt om enkele problemen te illustreren die optreden bij het schrijven van een programma dat alle oplossingen van de tetromino-puzzel moet vinden. Daarnaast vertelde Gerard dat door het verband met robotica zijn interesse in de biomechanica is hernieuwd, en dat hij door het lezen van een hoofdstukje over computerschaak een idee had opgedaan om zijn checkersprogramma te verbeteren. Henk meldde bezig te zijn in een boek over chaostheorie, en hij zag in dat daarin een relatie schuilt met zijn opvattingen over de "vrije wil": een mechanistisch wereldbeeld houdt niet per se in dat alles dus ook gedetermineerd is. Mogelijk volgt er een aanvulling (voetnoot?) op zijn artikel. Op de eerstvolgende bijeenkomst komen ongetwijfeld verdere ontwikkelingen en nieuwe onderwerpen aan bod! (GV 20 november 2016) Kort verslag van de bijeenkomst op 1 oktober 2016 Omdat volgende maand de Roborama-wedstrijden plaatsvinden, waren enkele van onze vaste bezoekers druk bezig met het beproeven en perfectioneren van hun robots, en schoven pas laat aan bij onze plenaire sessie. Niettemin werd er ook dit keer werd weer een verscheidenheid aan tips en eigen aktiviteiten ingebracht: Peter liet weten dat hij erg ontevreden was over het stukje in PC-Active 290 ("Is AI eng of niet?"). Een discussie hierover moest helaas worden uitgesteld tot een van de volgende bijeenkomsten. Ed meldde dat er bij de Robotica interessegroep in januari een I2C workshop begint. In deze workshop, die gegeven wordt door Joep en Karel en 4 sessies zal omvatten, worden de deelnemers vertrouwd gemaakt met het gebruik van deze data-interface (vergelijkbaar met bijv. de RS-232), die vooral geschikt is voor sensorinformatie.Tijdens de bijdrage van Ed ontstond enige consternatie doordat de voedingskabel van een van de meegebrachte laptops begon te roken; adequaat ingrijpen voorkwam dat deze beginnende kortsluiting ernstige schade veroorzaakte. Abraham deed kort verslag van de MegaCompUfair. Tussen 10:00 en 14:00 was de belangstelling goed, daarna wat minder. Het was gezellig, mede door het contact met de andere interessegroepen. Erg leuk vond hij zelf de pogingen van diverse bezoekers om de patroonherkenning van het steen-schaar-papierprogramma op het verkeerde been te zetten. Naar aanleiding van een artikel in De Volkskrant van 24 september 2016 is Henk in Jij bent je brein van Dick Swaab gaan lezen. Dit boek bevat dezelfde inzichten als de pil Wij zijn ons brein, maar dan speciaal voor de jeugd vereenvoudigd uitgelegd. Henk kan zich goed vinden in Swaabs stelling dat de vrije wil een illusie is; maar hij voegde eraan toe dat het toch een handig begrip kan zijn, omdat we wel vrije wil ervaren. Verder herhaalde Henk nog maar weer eens zijn standpunt dat eigenlijk het hele leven illusie is, omdat we in een "opgebouwde wereld" leven. Met deze opvatting (zie zijn artikel) schaart hij zich in de traditie van Democritus, Epicurus en Lucretius. Ed vertelde dat Dick Swaab recentelijk een nieuw boek het licht heeft doen zien, getiteld Ons creatieve brein, en vroeg zich af of dit boek misschien de feitelijke aanleiding was voor het Volkskrant-artikel. Geïnspireerd door het boek Machine Learning Using C Sharp for Beginners (geschreven door Latasha Morgan) had Titus op basis van een zelfbedacht algoritme een programmaatje voor data-clustering geschreven, dat hij demonstreerde. Het verandert de waarde (= kleur) van punten in een matrix wanneer de gemiddelde afstand tot het zwaartepunt (van punten met die kleur) daardoor kleiner wordt. Dit leidt er toe dat punten met dezelfde kleur bij elkaar komen te liggen. Ook Pedro was weer aan het programmeren geslagen. Naar aanleiding van een column van Ionica Smeets (in De Volkskrant van 27 augustus 2016) had hij een wachtrijsimulatie gemaakt (één wachtrij voor 6 toiletten). Het programma is geschreven in processing, een op Java gebaseerde taal die bedoeld is om kunstenaars, ontwerpers e.d. in staat te stellen grafische applicaties te bouwen. Voor wie wil zien wat voor leuke dingen er in processing mogelijk zijn, wees Pedro op de website van Otoro, met o.a. een fraaie simulatie van creatures (wezentjes) die hebben geleerd om planken te ontwijken. De demonstratie van Pedro lokte diverse reacties uit. Gerard was geïnteresseerd in wat er gebeurt als de parameters van de simulatie worden veranderd. Zo wordt is er elke tijdseenheid een kans van 60% dat zich iemand bij de wachtrij aansluit; wat gebeurt er met de lengte van die rij als die kans 80% of 100% wordt? Ben werd herinnerd aan een programma dat hij (als docent) schreef om computerlessen in een lokaal met beperkte capaciteit (er waren maar 6 computers) te roosteren; en Peter aan het verdelen van stageplaatsen onder studenten, een probleem waar hijzelf vroeger bij betrokken was. Rob liet een zelfgeschreven programma zien waarmee je solitaire Yatze kunt spelen. Hij is ruim twee jaar met dit programma bezig geweest en heeft zich daarmee uit een ernstige burn-out gewerkt. Als nieuw project denkt hij aan het programmeren van een aan-/afwezigbord met daaraan gekoppelde database. De resterende tijd werd door Gerard besteed aan een inventarisatie van onderwerpen die de aanwezigen zouden kunnen bijdragen aan de promotievideo. Hij was daarbij vooral op zoek naar voorbeelden van hoe een hobbyist zelf met AI aan de slag kan gaan. Dat leverde voorlopig het volgende op: Henk: 2×2 Rubik-kubus, schuifpuzzel, sudoku-oplosser, DO-statement Ben: Prolog als AI-taal Pedro: Party Planner als voorbeeld van een Artificial-Life-simulatie Peter: het zoeken naar (en vinden van) AI-informatie op het internet Jan: de transputer, in het kader van conapp en besturing als AI-aktiviteit Titus: perceptron met GA, dataclustering, ijsbeerprogramma Gerard: lamprei-projectje Verder suggereerde Albert dat Gerard het geheel van een introductie zou kunnen voorzien (en eventueel de onderwerpen aan elkaar kan praten). Dit idee wordt serieus in overweging genomen. Al met al weer een aangename en nuttige bijeenkomst. Aan het eind werd nog het idee geopperd om voortaan na de plenaire sessie wat tijd te reserveren voor napraten en informele contacten; temeer daar het laatste onderwerp door een efficiëntere afhandeling misschien wat minder tijd in beslag had kunnen nemen… (GV 5 oktober 2016) HCC!AI op de MegaCompUfair van 24 september 2016 Gewoontegetrouw hebben we ons weer gepresenteerd op de MegaCompUfair van HCC!CompUsers. We konden geen spectaculaire nieuwe maaksels laten zien; maar het eenvoudige steen-schaar-papier-programma van Gerard dat patronen in de speelwijze van de menselijke tegenstanders probeerde uit te buiten was voor diverse mensen toch een leuke uitdaging. De toegankelijke "gebruikersinvoer-interface" van Abraham vormde daarbij zeker een verrijking; een volgende stap is het visueel aantrekkelijk maken van de resultaten, die nu nog op een eenvoudig karakter-georiënteerd scherm werden gepresenteerd. Ook de reeds eerder gedemonstreerde tetromino-puzzel en de transputer van Jan konden weer rekenen op de belangstelling van een aantal bezoekers. Daarnaast werd er natuurlijk weer enthousiast gepraat met andere interessegroepen uit de "cluster techniek". Op de bovenstaande foto is te zien hoe iemand haar ruimtelijk inzicht beproeft met de tetromino-puzzel; rechts op tafel liggen de steen-schaar-papier-"toetsen" van Abraham. (GV 5 oktober 2016) Kort verslag van de bijeenkomst op 3 september 2016 De eerste paar uur had het bestuur het druk met diverse bestuurswerkzaamheden, zodat de bezoekers de tijd doorbrachten met zelfwerkzaamheid en informele contacten. Om 13:00 begon de presentatie looprobots door Willem Ouwerkerk van de HCC Forth interessegroep. Hij heeft zelf een tweetal lopende robotjes gebouwd: één met twee benen, die hij heel toepasselijk Biped heeft genoemd, en één met zes poten, Hexapod geheten. De robotjes zijn geprogrammeerd in de computertaal Forth, die speciaal voor besturingsdoeleinden is ontwikkeld. Biped Hexapod In de lezing kwamen de volgende onderwerpen aan bod: Na een korte introductie van de beide robots volgde een demonstratie van Biped. Daarbij werd duidelijk hoe de robotjes worden aangestuurd met korte, zelf-ontwikkelde Forth-opdrachten (woorden), die zelf weer uit andere eenvoudige Forth-opdrachten bestaan. De voordelen van Forth voor dit soort taken kwamen aan bod: het is interactief en bottom-up, zodat alle opdrachten, zowel op laag als op hoog niveau, gemakkelijk kunnen worden uitgeprobeerd en gecombineerd. De verschillen en gelijkenissen tussen de beide looprobots werden op een rijtje gezet. Vervolgens legde Willem uit hoe hij de diverse loopjes heeft bedacht en ontwikkeld. Omdat hij ontevreden was over de mechanische stevigheid en balans van het Hexapod-bouwpakket, is Willem begonnen met het zelf ontwerpen en bouwen van een verbeterde versie. Hij vertelde over de constructie daarvan en de gebruikte materialen. Daarna werd er gekeken naar de sensoren waarmee de robots zijn uitgerust, en vooral de sensoren die nog kunnen worden toegevoegd. De robots hebben niet direct "nuttige" toepassingen; ze zijn vooral geschikt om te experimenteren met allerlei bewegingen en te kijken welk gedrag er uit voorkomt. Tot slot werd Hexapod gedemonstreerd. Interessant was dat Hexapod ook het algoritme kon uitvoeren van de mier die door Gerard in Scratch was geprogrammeerd. Het gedrag was herkenbaar, maar kwam nog niet volledig uit de verf door de mechanische beperkingen van Hexapod. We kijken dan ook vol verwachting uit naar Hexapod 2.0 ! Willem bleek een enthousiaste spreker met een passie voor techniek en veel kennis van zaken. Het publiek, bestaande uit leden van de HCC-interessegroepen Robotica, Artificiële Intelligentie en Forth, was zeer geïnteresseerd. Willem was na afloop nog ruim een uur bezig met het te woord staan van diverse aanwezigen! Hij heeft de informatie uit zijn presentatie als PDF ter beschikking gesteld. Helaas bleken de opnames van de videowerkgroep te zijn mislukt; maar Willem heeft dezelfde lezing in oktober gegeven voor de HCC interessegroep programmeren, en daarbij is een nieuwe, en geslaagde, poging gedaan om alles vast te leggen. Na de presentatie van Willem werd er nog een korte plenaire sessie gehouden, waarin de volgende onderwerpen ter sprake kwamen: Ed vroeg hoe het stond met de samenwerking tussen HCC Robotica en HCC AI. Er bleek tijdens de maanden van zijn afwezigheid weinig tot niets te zijn gebeurd. Ook informeerde Ed naar het eerder door Gerard geopperde idee om een humanoïde robot te bouwen, dat destijds was afgewezen. Gerard vertelde dat hij een soort wiki-project voor ogen had: terwijl één persoon of groep bijvoorbeeld aan de voortbeweging werkt, kan een andere tamelijk onafhankelijk daarvan een camera monteren en de beeldverwerking programmeren, terwijl nog een andere misschien iets doet aan de armen. Daarbij kan eerst voor een relatief simpele oplossing worden gekozen, en als iemand daartoe de lust voelt opkomen kan een onderdeel (iets / veel) geavanceerder worden gemaakt. Zo zouden we bijvoorbeeld kunnen beginnen met een soort rijdende pop, die later misschien kan worden voorzien van een loopbeweging. Voor dit project zou Gerard de naam Frankenbot willen gebruiken, omdat ook het "monster van Frankenstein" uit allerlei afzonderlijke, aan elkaar gelapte onderdelen was samengesteld. Peter deelde mee bezig te zijn in het boek The Master Algorithm van Pedro Domingos. Dit boek, waarvan de ondertitel luidt How the Quest for the Ultimate Learning Machine Will Remake Our World ("Hoe de zoektocht naar de ultieme leermachine onze wereld zal herscheppen"), gaat over Artificial General Intelligence, d.w.z. een machine die niet slechts op één specifiek gebied de mens evenaart of overtreft (zoals Deep Blue, Watson, of AlphaGo), maar die zich met de mens kan meten op alle terreinen waarop de menselijke geest werkzaam is. Dit boek bevat geen formules of wiskunde; volgens Peter is het hierdoor enerzijds interessant voor de algemene lezer, maar anderzijds ook nogal "breedsprakig". Vermeldenswaard is verder nog dat dit één van de twee boeken over AI is die zijn aanbevolen door Bill Gates; het andere is Superintelligence van Nick Bostrom, dat al eerder door Jan op onze plenaire sessies ter sprake werd gebracht. Ook Henk was iets interessants aan het lezen: een Aula-pocket uit 1965, Mens en computer. In een twaalftal artikelen, geschreven door diverse bekende Nederlandse academici uit die tijd, wordt gekeken naar de (toenmalige) stand van zaken en de (eveneens toenmalige) verwachtingen m.b.t. het overnemen van menselijke werkzaamheden door computers en robots (AI, dus eigenlijk). Henk vestigde vooral de aandacht op de beschouwingen over de geheugencapaciteit van computers, die met de achteraf‐kennis van nu leuk zijn om nog eens na te lezen. Maar hij kwam in het boekje ook filosofische inzichten tegen die nu nog steeds van belang kunnen zijn. Ben had de afgelopen maand verder gesleuteld aan de software van zijn rijdende robot Madeleine. De heen-en-weer-opdracht (voor de Roboramawedstrijden van de HCC Robotica interessegroep) is nu geprogrammeerd in één wiskundige functie, met de toestanden van de 3 sensors als inputs en de motoropdracht als output.Daarnaast had hij veel hinder van Windows-systeemfouten. Als zo'n storing optrad, kon hij alleen nog maar het programma afsluiten, de robotgegevens waren niet meer toegankelijk. Dat maakt debuggen natuurlijk erg moeilijk! In samenspraak met zijn contacten bij Visual Prolog bleek dat het probleem in die software zat en nu waarschijnlijk is opgelost. Daarbij kreeg Ben wel de indruk dat het programmeren van robots een tamelijk ongebruikelijke toepassing van Prolog was… Ronald kon het Kohonennetwerk op zijn kleuren-LEDjes helaas nog niet demonstreren wegens een defect aan de elektronica. Maar hij had wel iets nieuws meegebracht: een 3-dimensionaal blokje met 4×4×5 gekleurde LEDs. De weg lijkt dus open te liggen voor Kohonen-3D! (GV 18 september 2016) Kort verslag van de bijeenkomst op 2 juli 2016 Vóór de plenaire sessie waren er weer verscheidene nuttige en interessante activiteiten. Zo hadden Peter en Gerard wat informeel bestuursoverleg; Gerard en Albert gingen verder met het doorgronden van de programmeertaal Occam; en Jan, Ben en Abraham waren druk in de weer bij Robotica. Tijdens de plenaire sessie zelf kwamen de volgende onderwerpen aan de orde: Gerard vroeg de aanwezigen om mee te denken over de opzet van een presentatievideo, die HCC over onze interessegroep wil maken. Het idee om de actieve leden iets te laten vertellen over waar ze mee bezig zijn, of wat ze gedaan hebben, en dat te illustreren met screenshots en filmpjes van programma's en robot-bouwsels, kreeg bijval: men vond dit een goede opzet. Na de zomervakantie gaan we dit idee nader gestalte geven. Natuurlijk blijft er ruimte voor ideeën over de precieze invulling, en staat het bestuur open voor eventuele aanvullende plannen, of desnoods zelfs voor een goed idee over een andere aanpak. De ethische implicaties van kunstmatige intelligentie kwamen op de vorige paar bijeenkomsten niet aan bod; maar vandaag was er eindelijk de gelegenheid om dit onderwerp aan te pakken. Peter had nogal wat tot nadenken stemmende stukjes informatie van het Internet opgeduikeld, en het onderwerp leent zich ook wel voor diepgaande (om niet te zeggen: eindeloze) discussie. Daarom was de bespreking van vandaag waarschijnlijk slechts een eerste aanzet, en zal het vraagstuk ook in de toekomst nog op diverse bijeenkomsten ter sprake komen. Ditmaal kwamen o.a. aan de orde: Google werkt aan een kill switch voor autonome systemen. Dat wil zeggen dat robots en andere systemen die hun eigen gang gaan, altijd kunnen worden uitgeschakeld als ze iets onwelgevalligs (dreigen te) doen. De vraag doet zich natuurlijk onmiddellijk voor: wie bedient dan die "uit"-knop? Gerard merkte op dat problemen met apparaten meestal bij mensen liggen: zo zal de kill-switch van een militaire drone vermoedelijk wel bediend worden door degene die 'm heeft uitgezonden, en dus hoogstwaarschijnlijk nooit gebruikt worden! Een chat-bot van Microsoft is "gekaapt" door "trollen", die hem hebben "geleerd" om ultrarechtse propaganda te spuien. Het merkwaardige is dat deze mogelijkheid door Microsoft blijkbaar niet is voorzien; de chatbot is dan ook spoorslags van het Internet gehaald. Het lijkt er op dat Microsoft hier "een beetje naief" is geweest. Immers, ook mensen kunnen, ondanks alle opvoedingspogingen, geïndoctrineerd worden met allerlei extreme ideologieën… Hierna liet Peter een filmpje zien van een robot die had "geleerd" om "nee!" te zeggen. Dit gaf aanleiding tot de vraag of geleerd gedrag is "geprogrammeerd". Jan en Teun dachten van wel; als technici meenden zij dat er toch ergens in het systeem bitjes moeten zijn die dit gedrag veroorzaken. Peter daarentegen dacht dat er, mede door de toenemende complexiteit van autonome systemen, onvoorspelbare effecten kunnen optreden. Hij gaf het voorbeeld van AlphaGo, waar de regels van het Go-spel niet expliciet ingeprogrammeerd waren; maar doordat alle voorbeelden waarvan het systeem geleerd heeft, geldige partijen waren, leerde hij zelf ook alleen maar geldige zetten doen. IBM's intelligente systeem Watson, dat de twee beste menselijke spelers versloeg in de quiz-show Jeopardy, leert momenteel medische diagnoses en behandelingen. En vanwege de enorme, en nog steeds groeiende, jurisprudentie worden menselijke assistenten van aanklagers, advocaten en rechters steeds vaker bijgestaan of zelfs vervangen door computersystemen. Wat voor consequenties hebben deze ontwikkelingen? Tot slot liet Peter een illustratie zien waaruit bleek dat zelfrijdende voertuigen met moeilijke morele dilemma's te maken kunnen krijgen: situaties waarbij geheid slachtoffers vallen, en het systeem moet kiezen tussen bijv. de inzittenden van het voertuig of passerende voetgangers. Henk had een filosofisch artikeltje meegebracht over de relatie mens — machine. Er werd een pauze ingelast zodat iedereen hiervan kennis kon nemen. Helaas is het niet meer tot een discussie over dit onderwerp gekomen. Abraham had een lijnvolgende robot meegebracht waaraan hij werkt. Dit onderwerp was aangemeld voor de plenaire sessie, maar de nieuwsgierigheid van de aanwezigen was zo groot dat Abraham de werkingsprincipes al in de pauze had uitgelegd. Jammer genoeg was daardoor niet iedereen hierbij aanwezig; maar dit onderwerp komt ongetwijfeld ook op volgende bijeenkomsten weer naar voren. Theo had weer een drietal interessante stukjes informatie te delen: Het juli(2016)-nummer van het computertijdschrift C'T bevat enkele artikelen over smartbikes: rijwielen uitgerust met sensoren en andere gadgets om het fietsen interessanter, makkelijker, aangenamer, en veiliger (maar niet goedkoper…) te maken. Het "gouwe ouwe" programmeersysteem Turbo C is ook voor Windows 7, 8, 8.1 en 10 beschikbaar. Op de wiki van de Python-gemeenschap staat een pagina met informatie en links m.b.t. AI en machine learning in Python. Ben had de afgelopen maand weer stevig gesleuteld aan Madeleine. Ze had al één recht naar voren gerichte infrarood-afstandssensor; nu de uitlezing daarvan goed blijkt te werken, is ze uitgerust met nog twee van die sensoren, die onder een hoek van (voorlopig?) 45° schuin naar links- en rechtsvoor kijken. Verder hebben haar wielen nu een onafhankelijke snelheidsregeling, zodat ze kan keren en bochtjes draaien. Ben heeft ervoor gekozen om Madeleines bewegingen te besturen in Visual Prolog op de PC (in plaats van in C op de microprocessor). De laptop verzendt iedere seconde één of meer opdrachten naar de robot; de uitvoeringscode voor die opdrachten staat dan wel weer op de robot zelf. Ben is nu begonnen om Madeleine klaar te stomen voor het onderdeel "heen-en-weer" van de Roborama-wedstrijden van HCC!Robotica. Hij koos daarbij voor de volgende aanpak: Heen: volg de wand aan je rechterkant. Stop en keer: als je de eindmuur ontwaart. Terug: volg de wand aan je linkerkant. Dit vroeg natuurlijk om een demonstratie, en Madeleine gaf een uitstekende show weg; zelfs Bens verwachtingen werden overtroffen! De verrichtingen van Madeleine zijn door Abraham vastgelegd op een filmpje. Ben merkte ook nog op dat de Bluetooth-dataverbinding tussen Madeleine en de computer soms wegvalt. Madeleine blijft dan voortdurend de laatst ontvangen opdracht herhalen — een euvel dat Ben binnenkort nog hoopt te verhelpen. Gerard vertelde dat Ronald erin was geslaagd om met zijn 8×8-matrix van regelbare LEDjes de inwendige toestand van een Kohonen-netwerk weer te geven. Op de onderstaande foto de situatie na leerstap 1076: het schermpje rechts geeft de situatie zoals die door Gerards programma al werd afgebeeld, terwijl links dezelfde toestand van het neurale netwerk met de LEDs wordt uitgebeeld. Omdat niet iedereen vertrouwd was met het Kohonen-netwerk heeft Gerard nog kort uiteengezet wat het netwerk verondersteld wordt te doen; maar de tijd ontbrak om het hoe en waarom volledig te bespreken. Wegens andere verplichtingen kon Ronald vandaag niet aanwezig zijn om het geheel te demonstreren, dus een volledige presentatie van dit project (desgewenst met uitvoerige uitleg van het neurale netwerk door Gerard) volgt later nog. Tot slot meldde Gerard nog dat het juli-nummer van Scientific American een interessant artikel bevat over het lopen van tweebenige robots. Na de zomervakantie pakken we de draad weer op! (GV 6 juli 2016) Kort verslag van de bijeenkomst op 4 juni 2016 In de plenaire sessie kwamen de volgende onderwerpen aan bod: Gewoontegetrouw praatte Ben ons weer bij over het wel en wee van zijn robotkarretje Madeleine. De infrarood-afstandssensor zit er nu op en werkt goed. Om de 0.5 seconde wordt er een meting verricht, en Madeleine stopt netjes als ze op een afstand tussen 10 en 80 centimeter een obstakel ontwaart. Ben heeft hiervan een korte demonstratie gegeven; daarbij gaf hij (via de beamer) ook een goede indruk van de datacommunicatie tussen Madeleine en de computer.De volgende stap is nu om de motoren van de beide aandrijfwielen, die worden aangestuurd door middel van pulscodemodulatie (PCM), met verschillende snelheden te laten draaien, zodat Madeleine allerlei bochtjes kan gaan beschrijven. Titus was nog steeds bezig met natuurkundige simulaties, waarvan hij er twee demonstreerde. Er was vooral aandacht voor de verbeterde "ballenbak", waarin nu ballen van verschillende formaten rondstuiterden. De eerder waargenomen, onbedoelde "plakkerigheid" van de ballen was nu verholpen. Wat nog wel vragen opriep, was dat alle ballen zich steeds meer verzamelden onderin de bak, alsof ze langzamerhand energie verloren; hoewel Titus verklaarde dat hij er geen wrijving of zo had ingeprogrammeerd. Dit blijft dus nog een punt van aandacht. Ook vertelde Titus zich weer te hebben geworpen op het oude Commodore64-spel "geen-drie-op-een-rij", een soort omgekeerd boter-kaas-en-eieren dus. Er waren 5 speelkeuzes: mens vs. random, random vs. mens, random vs. random, mens vs. AI, en AI vs. mens. (De eerstgenoemde heeft telkens de beginzet.) We zijn er echter niet toe gekomen dit interessante programma tot in detail te bekijken. Ronald kwam met twee interessante onderwerpen uit de geek pages van het tijdschrift "LINUX magazine": Onder een berichtje over de recente overwinningen van het deep learning computersysteem AlphaGo staat een gegeven dat deze prestatie nog eens extra in perspectief zet: het exacte aantal toegestane go-posities. Dit is een getal van 171 cijfers! — helaas te groot om het netjes op een HTML-webpagina te krijgen… Doordat computers gewoonlijk rekenen in het binaire talstelsel (of afgeleiden daarvan, zoals hexadecimaal), is de uitkomst van 0.1 + 0.2 niet 0.3, maar meestal 0.30000000000000004. Dit soort onnauwkeurigheden kan je grote problemen bezorgen bij bepaalde numerieke berekeningen, omdat kleine fouten zich kunnen voortplanten en opeenstapelen, zoals bijvoorbeeld bij het doorrekenen van differentiaalvergelijkingen. Denk bijv. ook aan de chaostheorie, waarin kleine verschillen in beginwaarden hemelsbrede verschillen in uitkomsten kunnen geven: de spreekwoordelijke vlinder die met zijn gefladder een orkaan veroorzaakt! Theo vroeg de aandacht voor het juni(2016)nummer van het tijdschrift C'T (Nederlandstalige versie), waarin maar liefst 5 artikelen over kunstmatige intelligentie zijn te vinden. Het gaat vooral over zelflerende neurale netwerken, waarin ook aandacht wordt besteed aan "zelf doen". Nuttige lectuur voor hobbyisten, dus! Gerard verklaarde een digitale versie van het Nature-artikel over AlphaGo te hebben bemachtigd; hij hoopt ergens in de komende maanden de tijd te vinden om deze zware kost te bestuderen. Omdat niet iedereen de regels van Go kent, heeft Gerard in het kort iets uitgelegd over vrijheden, slaan, en gebiedsbezetting. Ook vertelde Gerard dat Willem Ouwerkerk van de HCC!Forth interessegroep bereid is gevonden om voor de Robotica- en AI-interessegroepen een lezing (met demonstratie) te geven over een tweetal robotjes die hij heeft gebouwd. Daarbij zullen zowel de hardware als de software aan bod komen. Deze presentatie zal waarschijnlijk in september plaatsvinden. Door afwezigheid van Peter moest de discussie over de ethische implicaties van AI, die als gevolg van het succes van deep learning weer zeer actueel worden, wederom uitgesteld worden. We hebben, naast het vervolg van alle lopende en bekende activiteiten en projecten, dus nog steeds iets om naar uit te kijken! (GV 29 juni 2016) Kort verslag van de bijeenkomst op 7 mei 2016 Vóór het gezamenlijke gedeelte zijn Albert en Gerard bezig geweest met het verder verkennen van de programmeertaal Occam. Ze hebben hun programmaatje zodanig aangepast dat de beide op te tellen getallen nu door de gebruiker moeten worden ingevoerd. Via het Internet is dit getest op de transputer die bij Jan thuis stond aangesloten, en het bleek allemaal prima te werken! Tijdens de plenaire sessie werden er weer diverse onderwerpen aangedragen: Twee nieuwe bezoekers stelden zich voor: Arthur verklaarde ervaring met ICT te hebben vanuit zijn achtergrond in de financiële dienstverlening (m.n. verzekering); zijn belangstelling gaat vooral uit naar datagebruik en zelflerende systemen. Teun heeft een achtergrond in elektronica en automatisering (m.n. datacom), en hij is vooral geïnteresserd in de combinatie van mechanica en elektronica en de toepassingen daarvan in de robotica. Jan had op een eerdere bijeenkomst gezegd dat hij bij het programmeren van zijn Lego-robotkarretje MOOF in LabView, problemen had ondervonden met het doorgeven van variabelen tussen de diverse "programmablokken". Hij deelde mee dat hij dat probleem nu onder de knie heeft, en dat het prima werkt. Het klaarstomen van MOOF voor de Roborama-wedstrijden gaat dus gewoon door. Verder vertelde Jan dat concurrency steeds meer zijn interesse heeft. Titus had een boek aangeschaft over "natuurkunde op de computer", met voorbeelden in JavaScript, en hij liet enkele natuurkundige simulaties zien, die hij n.a.v. dat boek in FreeBasic heeft geschreven: een stuitende bal, een bak met meerdere stuitende ballen, een bal die in het water valt, een planeet die om een zon draait. Daarnaast had hij er ook een paar die nog niet naar behoren werkten, zoals een simulatie van "flocking behaviour". Ook demonstreerde hij een "wereldbeeld" voor een nog te schrijven flight simulator. Ben deed zijn belofte, gedaan op een eerdere bijeenkomst, gestand door iets te vertellen over backtracking in de programmeertaal Prolog. Het blijkt dat Prolog voor elk programma een (onzichtbare) boomstructuur opbouwt, en daarin een depth-first zoekactie uitvoert — en depth-first zoeken is backtracken. Het backtrack-mechanisme zit dus gewoon in de programmeertaal ingebouwd. Ben wist dit treffend te illustreren met de debugger die in (de betaalde versie van) Visual Prolog zit ingebouwd, aan de hand van een (zelf bedacht) programmavoorbeeld over vrienden, en vrienden van vrienden (die, zoals de volkswijsheid luidt, ook weer vrienden zijn). Voor degenen die dit nog eens na willen lezen, heeft Ben alles nog eens duidelijk opgeschreven in een artikel op zijn eigen website. Aan het eind van die webpagina staat ook een link naar een YouTube-filmpje dat dezelfde materie behandelt, zij het in het Engels. Verder verwees Ben nog naar het stuk dat hij schreef over de oplossing van de roofoverval, ook te vinden op zijn website; en naar het boek Prolog Programming for Artificial Intelligence van Ivan Bratko, dat goed beschrijft hoe een van de standaard backtrackproblemen, het "8 koninginnenprobleem", in Prolog kan worden opgelost. Tot slot was Gerard aan de beurt, die demonstreerde dat hij het programma van Titus om een neuraal netwerk van één neuron, een zgn. perceptron, te "trainen" met behulp van een genetisch algoritme, min of meer aan de praat heeft gekregen. De wijzigingen in het voortplantingsmechanisme, die hij op de vorige bijeenkomst had aangekondigd, waren voldoende om het perceptron gaandeweg de generaties te verbeteren. Er ontstond niet altijd een foutloze versie, hetgeen ook niet te verwachten was, omdat toevalsprocessen een belangrijke rol spelen; maar er werd wel steeds een perceptron geproduceerd dat hooguit slechts een paar procent van de inputs verkeerd klassificeerde. Dat gold niet alleen voor de trainings-dataset, maar ook voor de apart gegenereerde testdata. Bovendien bleken de gewichten van het resulterende perceptron steeds te beantwoorden aan de door Gerard van te voren op theoretische gronden voorspelde waarden: de gewichten van de beide inputs vrijwel even groot, maar tegengesteld van teken; en het gewicht van de bias-input vrijwel nul. Helaas namen deze onderwerpen zoveel tijd in beslag, dat de door Peter voorbereide en aangekondigde discussie over de ethische aspecten van zelflerende systemen niet meer aan bod kwam. U kunt er dus op rekenen dat dit onderwerp voor de juni-bijeenkomst met maximale prioriteit op de lijst staat… (GV 1 juni 2016) Kort verslag van de bijeenkomst op 2 april 2016 De eerste drie kwartier van het plenaire gedeelte werden besteed aan de traditionele jaarlijkse Algemene Ledenvergadering (ALV). Daarna kwamen er weer diverse onderwerpen aan bod: Ben had weer nieuws over zijn rijdende robotkarretje Madeleine. Hij vertelde dat ze uit logeren was bij Abraham. Nadat pogingen om haar afstandssensor aan de praat te krijgen zonder resultaat waren gebleven, werd vermoed dat de oorzaak lag in een hardwareprobleempje — en inderdaad, Madeleine bleek te lijden aan een ondeugdelijke soldeerverbinding. Momenteel wordt ze nagekeken op verdere gebreken, en wordt het sensorgedrag nagemeten.De communicatie van Madeleine met de computer loopt goed en, met 115200 bits/sec, snel. Haar huidige mobiliteit beperkt zich tot voor- en achteruit rijden, keren-op-de plaats, en stoppen; bochtjes maken heeft ze nog niet geleerd. Ben hoopt haar op tijd klaar te kunnen stomen voor het onderdeel heen-en-weer-rijden van de Roboramawestrijden die de HCC Robotica interessegroep tegen het eind van dit jaar weer zal organiseren. We zijn benieuwd… Theo was wat aan het grasduinen gegaan op het internet, en vertelde dat de technologie achter de Transputer-taal Occam nog lang niet dood is: er bestaat een Python-module python-csp, waarin CSP staat voor Communicating Sequential Processes, de formele taal ontworpen door C.A.R. Hoare waarop ook Occam is gebaseerd. (Tony Hoare ontving in 1980 de ACM A.M.Turing award).Vervolgens ontspon zich een discussie, waarbij Jan zich afvroeg of python-csp ook snel (d.w.z. zonder boekhouding) tussen taken kon switchen, en zei geen performanceverbetering te verwachten omdat Python ook op gewone PC's draait. Gerard vond dat je onderscheid moest maken tussen het abstracte idee en de implementatie: CSP is een methode om diverse systemen te laten samenwerken, en kan op diverse platformen worden geïmplementeerd; maar alleen als het werkt op meerdere processoren is een performanceverbetering te verwachten. Gerard dacht overigens dat die verwerkingssnelheid slechts lineair (= evenredig) of hooguit polynoom (bijv. kwadratisch, of volgens een hogere macht) toeneemt met het aantal processoren. Hij verwacht dan ook niet dat concurrency (gelijktijdigheid) een oplossing vormt voor de echt weerspannige problemen, waarbij de benodigde verwerkingstijd meer dan polynoom (d.w.z. exponentieel, of zelfs nog sneller) toeneemt met de omvang van het probleem. Titus vertelde dat hij zich weer had gebogen over Cartesiaans genetisch programmeren. Daarbij is het de bedoeling om "een virtuele chip te bakken", bestaande uit "poorten" die rekenkundige bewerkingen uitvoeren. Hij kon nog geen resultaat laten zien; het programma verbetert de fitness van het netwerkje wel, maar slaagt er nog niet in om de stelling van Pythagoras (a2 + b2 = c2) te leren.Voor verdere informatie over Cartesiaans genetisch programmeren verwees Titus naar het internet (m.n. YouTube), waar hij zelf ook zijn informatie vandaan had gehaald. Gerard kwam terug op de bijdrage van Ronald over "intelligente" LEDjes, enkele maanden geleden. Op de bijeenkomst van HCC!programmeren had hij aan Ronald voorgesteld om er een Kohonen self-organizing feature map onder te zetten, en Ronald vond dat een leuke toepassing. Ter verduidelijking demonstreerde Gerard het Kohonen-simulatieprogrammaatje, dat hij jaren geleden zelf in Borland C had geschreven. Verder had Gerard de afgelopen maand gekeken naar het perceptron-programma van Titus. Hij had een kleine wijziging aangebracht in de codering van de chromosomen, hetgeen leidde tot een vereenvoudiging van de kruisings- en mutatieroutines. Het programma vindt nu al in de eerste generatie een goede fitness, maar daarna blijven verdere verbeteringen gewoonlijk uit — Gerard dacht doordat Titus' voortplantingsselectiemethode de variatie te snel uit de populatie haalt. Hij hoopt hier nog iets op te bedenken. Verder wilde hij ook de dataset aanpassen (floating-pointgetallen i.p.v. gehele getallen), en het uiteindelijke perceptron laten testen op andere data dan voor de training is gebruikt. Peter wilde graag van gedachten wisselen over AlphaGo, het computerprogramma dat in een tweekamp van 5 partijen de op-één-na beste go-speler van de wereld overtuigend versloeg. Deze mijlpaal in de AI-geschiedenis was vóór de planaire sessie in Peters afwezigheid ook al enigzins ter sprake gekomen. AlphaGo werkt met deep learning, een aanpak die de laatste tijd sterk aan kracht heeft gewonnen door snellere hardware (m.n. het gebruik van grafische processors), tweaks in het algoritme, en de beschikbaarheid van allerlei reusachtige dataverzamelingen. De basis, gelegen in recurrente neurale netwerken ("backpropagation in time") en Boltzmann machines, was echter al sinds de jaren '80 bekend. Nadere informatie is o.a. te vinden in een artikel in PC Active nr. 287 (april/mei 2016) en natuurlijk op de website van Google DeepMind. (GV 22 april 2016) Kort verslag van de bijeenkomst op 5 maart 2016 Voorafgaand aan de plenaire sessie waren er twee belangrijke aktiviteiten: Zoals afgesproken tijdens de laatste bijeenkomst van de HCC retro interessegroep had Jan een transputersysteem neergezet om mee te stoeien. Gerard en Albert zijn die uitdaging niet uit de weg gegaan, en slaagden er in om het in OCCAM geschreven "Hello World!"-programma om te bouwen tot een simpel rekenprogrammaatje dat de gebruiker vraagt om twee (gehele) getallen in te voeren, en vervolgens de som van die getallen afdrukt. Het begin is gemaakt! Cor van Rooij van het HCC hoofdbestuur kwam overleggen met de besturen van AI en Robotica. Er is besloten om "Robotica en AI" als seizoensthema voor de maanden april t/m juli te vervangen door een ander thema, dat volgens de programmaraad op een bredere belangstelling binnen de HCC kan rekenen. Maar Cor vertelde ons dat we toch onze interesses en aktiviteiten onder de aandacht van andere HCC-leden kunnen brengen door samen met één van de HCC videoteams een video te maken. Dat kan live zijn, b.v. een als stream uitgezonden presentatie, of een webinar, waarbij mensen vragen kunnen stellen; maar de gedachten gaan vooral uit naar een opgenomen en zorgvuldig gemonteerde "documentaire" over een of meer onderwerpen of projecten, die via de HCC-portal te zien zal zijn. U hoort hier in de toekomst waarschijnlijk meer van. Daarnaast kwamen in de plenaire sessie nog de volgende onderwerpen aan bod: Titus had een steen-schaar-papier-programmaatje geschreven in JustBasic. Het werkt ongeveer hetzelfde als het eerder door Gerard geschreven programma: het onthoudt een aantal (in dit geval 3) zetten van de tegenstander en bepaalt aan de hand daarvan zijn volgende zet. Als er in de taktiek van de menselijke opponent een patroon zit, dan profiteert de computer daarvan en wint meer dan de 33,3 procent die bij optimaal tegenspel maximaal haalbaar is. Om het programma te testen hebben we een sessie van 100 spelletjes gespeeld. Gerard hoopte de computer te slim af te zijn door alle negen aanwezigen bij toerbeurt een keuze te laten maken, en daarbij ook nog eens halverwege de richting om te draaien. Helaas mocht dat niet baten: de computer won 45%, de mensen 22%, en 29% eindigde in gelijkspel.Het is niet duidelijk waarom deze getallen samen geen 100% zijn. (Misschien is de uitslag niet geheel correct overgenomen?) Ook is van de aanwezigen niet per persoon vastgelegd hoeveel spelletjes ieder afzonderlijk heeft gewonnen, verloren en gelijk gespeeld. Wat in ieder geval wel duidelijk is, is dat een groep mensen niet duidelijk beter is in het genereren van een willekeurige keuze dan één persoon afzonderlijk — in ieder geval niet, wanneer ze kunnen horen wat er door de vorige persoon is gekozen. Dat vráágt natuurlijk om een experiment waarbij mensen vanuit verschillende locaties (bijv. via het Internet) samen tegen een computer spelen! Ook het idee om Gerards programma tegen dat van Titus te laten spelen kwam nog even ter sprake … Behalve met dit programma heeft Titus zich de afgelopen weken ook met OpenGL bezig gehouden: hij is begonnen om diverse met het pakket meegeleverde voorbeelden om te bouwen. In het kader van het aanwezige Transputersysteem en de programmeeractiviteit voorafgaand aan de plenaire sessie, verklaarde Jan zich bereid om op een toekomstige bijeeenkomst nogmaals iets te vertellen over concurrent programmeren en de werkingsprincipes van de Transputer. De programmeertechniek backtracking is een regelmatig terugkerend onderwerp in onze plenaire sessies. Op een vraag van Henk vertelde Ben dat backtracken in de AI-taal Prolog niet alleen mogelijk is, het is er zelfs gewoon ingebouwd. Oftewel: je krijgt het cadeau, je hoeft het niet zelf te schrijven. Ben zei dat hij op een van de volgende bijeenkomsten wel een simpele demonstratie wou geven. Terugkomend op een eerdere discussie vertelde Jan tijdens zijn vakantie het boek Superintelligentie. Kansen, gevaren, strategieën van Nick Bostrom te hebben gelezen. Hij heeft daarbij ook op het Internet nog interessante informatie over dit onderwerp gevonden. Er lijkt weinig twijfel te bestaan dat zo'n superintelligentie er ooit zal komen, hoewel de meningen verschillen over de termijn waarop dat gaat gebeuren. Er zijn zelfs al claims dat er m.b.v. genetisch programmeren vorderingen zijn gemaakt in de richting van een superintelligentie. Jan zag in genetisch programmeren een goede toepassing van concurrency. Daarna ging het nog even over besturing, ook een onderdeel van AI. Jan merkte op dat er op dat gebied nog wel het een en ander te doen is, getuige het feit dat de Google-auto onlangs zèlf een aanrijding heeft veroorzaakt. In dit kader kwam ook het besturen van apparaten door menselijke "hersengolven" of spierspanningen ter tafel; over dit onderwerp bleken de interpretaties en meningen van de aanwezigen nogal uiteen te lopen. Gerard kwam in een artikel van Donald E. Knuth over het "dancing links"-algoritme een merkwaardige instructie tegen: kies een rij (van een matrix) niet-deterministisch. Knuth legt dit uit: "De niet-deterministische keuze betekent dat het algoritme zichzelf in feite kloont in onafhankelijke subalgoritmes". Gerard heeft dit geprogrammeerd met een herhalingslus, waarin het algoritme zichzelf recursief aanroept. Maar hij denkt dat deze beschrijving ook kan worden uitgevoerd door het werk te verdelen over de verschillende concurrente processoren van een transputer, of miscchien zelfs door een "superpositie van toestanden" in een kwantumcomputer. Tot slot kwam Gerard nog even terug op het (nog niet werkende) programmaatje dat Titus de vorige keer presenteerde. Volgens Gerard komt Titus vaak met interessante kleine AI-projecten op de proppen, doordat hij relatief simpele ideeën op een leuke manier weet te combineren en toe te passen. In dit geval wil Titus een perceptron laten aangeven welke van zijn twee inputs de grootste is; de gewichten moeten m.b.v. een genetisch algoritme worden bepaald. Gerard beredeneerde dat het perceptron in dat geval geen bias-ingang nodig heeft, en dat de gewichten van de beide inputs ongeveer even groot en tegengesteld van teken moeten zijn. (GV 14 maart 2016) Kort verslag van de bijeenkomst op 13 februari 2016 Ook deze maand weer veel verschillende onderwerpen: Ben praatte ons bij over zijn robotkarretje Madeleine. Ze is weer bij bewustzijn, en nu ook voorzien van een real-time clock (RTC), zodat ze ook bij de tijd is. Deze hardwareklok kan timersignalen afgeven, die nu worden gebruikt om Madeleine haar "dansje" (4 seconden vooruit, 4 seconden achteruit, en dan stoppen) te laten uitvoeren. Daarnaast is Madeleine uitgerust met Bluetooth, zodat ze draadloos kan communiceren met Bens laptop; dat is handig bij het debuggen, en voorkomt dat Ben voortdurend achter haar aan moet hollen. Momenteel is Ben bezig ook een infrarood-afstandssensor aan te brengen. (Volgens Pedro zijn afstandssensoren op basis van geluid nauwkeuriger.) De sensor kan obstakels waarnemen die tussen 10 en 80 cm verwijderd zijn; maar op dit moment werkt de data-overdracht van de sensor naar het processorbordje nog niet goed, waarschijnlijk wegens een te instabiele voedingsspanning. We houden U op de hoogte. Gerard kondigde aan om zich op de bijeenkomsten voortaan vooral op de echte AI-onderwerpen te richten, en zijn programmeeractiviteiten voor zover die wat meer mainstream zijn (zoals programmaatjes ter illustratie bij onderwerpen uit de theoretische informatica en voor het oplossen van puzzels) te presenteren op de bijeenkomsten van de HCC interessegroep programmeren, waar ze nu ook een plenaire sessie houden. Overigens zondigde Gerard tegen het einde van de bijeenkomst meteen al tegen dit voornemen door de aandacht te vestigen op het werk van Donald E. Knuth. Diens meerdelige The Art Of Computer Programming is hèt standaardwerk over algoritmen. Momenteel werkt Knuth aan hoofdstuk 7, over combinatorische algoritmen. Om zijn werk zo volledig en foutloos mogelijk te maken, publiceert hij zijn boeken in gedeelten voor, eerst op het internet en daarna nog in de vorm van relatief dunne paperbacks die hij fascicles noemt, zodat experts verbeteringen en aanvullingen kunnen suggereren. De meest recente voorpublicatie op het internet gaat over backtracking, een programmeertechniek die ook op onze bijeenkomsten al de aanleiding tot menige discussie is geweest. Peter kwam met enige bijzonderheden uit de ledenstatistiek van onze interessegroep. We hebben momenteel nog 255 leden. Van 33 leden is geen e-mailadres bekend; bent U daar één van, en wilt U graag onze nieuwsbrief ontvangen, dan kunt U uw e-mailadres doorgeven aan HCC. Het totale aantal geabonneerden op onze nieuwsbrief is bijna tweemaal zo groot als het aantal leden.Ook kregen we de verdeling van onze leden over de regio's te zien. Als u onze bijeenkomsten te ver weg vindt, of de dag komt nooit gelegen, maar U wilt toch wel eens spreken met andere in AI geïnteresseerde hobbyisten, dan is het misschien een interessant idee om namens onze interessegroep naar regiobijeenkomsten te gaan. Wie hier wel wat in ziet, kan natuurlijk altijd contact opnemen met het bestuur van deze interessegroep.Tenslotte kregen we de overlap met andere interessegroepen te zien. Opvallend was o.a. het aantal AI-leden dat ook lid is van HCC!beleggen. Volgens Jan van den Broek is dat wel begrijpelijk; immers, voor beleggen is snel beslissen vaak van cruciaal belang, en AI-technieken kunnen hierbij zeker een rol spelen. Hij dacht dat het misschien nuttig zou zijn als beide interessegroepen op bestuursniveau contact zouden leggen. Nu hij het boek Kunstmatige Intelligentie op uw Computer, geschreven door John Krutch, zo'n beetje doorgewerkt heeft, en de daarin opgenomen BASIC-programma's naar Python heeft "vertaald", wil Gerard wil zich de komende maanden wijden aan het bestuderen van AI for Game Developers van David M. Bourg en Glenn Seemann. Uit het eerste hoofdstuk blijkt dat bij game AI sommige karakters met opzet juist tamelijk "dom" gedrag vertonen; enerzijds omdat het er vooral om gaat het gedrag van de tegenstanders zo realistisch mogelijk te maken, en anderzijds omdat de speler waarschijnlijk zijn belangstelling verliest als hij het idee heeft dat het spel onmogelijk te winnen is. Het boek bevat geen complete programma's, maar de diverse technieken worden wel geïllustreerd met codevoorbeelden in C(++). Gerard is van plan om deze ideeën toe te gaan passen in JS Robots en eventueel ook in Scratch-programma's, en stelde voor om dat op de bijeenkomsten voorafgaande aan de plenaire sessie te gaan doen. Verschillende anderen leken daarin geïnteresseerd, mits ze zelf ook een exemplaar van het boek kunnen bemachtigen. Peter wees erop dat er momenteel een versnelling van de ontwikkelingen op het gebied van AI en Robotica gaande lijkt te zijn, en illustreerde dat met twee voorbeelden. Het eerste was een artikel over het World Economic Forum in Davos, waaruit blijkt dat ook veel belangrijke politici en topmanagers zich zorgen beginnen te maken over de maatschappelijke gevolgen van de ontwikkelingen op deze gebieden. Het tweede was een artikel over AlphaGo, het eerste computerprogramma dat er in slaagde een professionele go-speler te verslaan. Dit succes kwam jaren eerder dan experts verwachtten, en was mede te danken aan deep learning in een neuraal netwerk. Tevens werd door Peter en Gerard aandacht besteed aan het overlijden van Marvin Minsky, een van de belangrijke onderzoekers op het gebied van de AI. In een krantenartikel werden de bijdragen van Minsky aan het vakgebied uiteengezet. Een eerdere versie van dit artikel, waarin nog geen verband werd gelegd tussen Minsky en de zege van AlphaGo, bevat enkele interessante internetlinks. Hierna kwam het gesprek weer eens op de Rubik-kubus. Op YouTube staat een filmpje over een gespecialiseerde robot die de kubus oplost. Op een ander filmpje is te zien hoe deze robot het wereldrecord (voor robots) bemachtigt. Overigens zijn ook de wereldrecords voor mensen (zo te zien allemaal tieners) zeer indrukwekkend! Gerard had bij de kringloopwinkel een puzzel gevonden die wel wat aan Rubik's kubus doet denken: Planets van Recent Toys. Het gaat daarbij om 4 bollen (de planeten), ingesloten in een tetraeder (viervlak). Elke bol heeft instulpingen (kraters) die het een naastgelegen bol mogelijk maken te draaien. De bedoeling is om door draaiing van de bollen elke zijde van het viervlak één kleur te geven. Gerards belangstelling ging verder dan alleen het oplossen van de puzzel op zich: omdat de draaiingsassen van Planets onderling net zulke (niet loodrechte!) hoeken hebben als de takken van TetraBot, hoopt hij door het spelen met de puzzel zijn intuïtie m.b.t. de bewegingsmogelijkheden van TetraBot te verbeteren. Titus is bezig met het programmeren van een perceptron. Hij werkt aan twee versies: één in Just BASIC, en één in FreeBASIC. Die in FreeBASIC is sneller, maar geen van beide versies doet vooralsnog wat van ze wordt verwacht, namelijk m.b.v. een genetisch algoritme leren beslissen welk van twee inputs (gehele getallen) groter is. Peter maakte ons attent op Blockly, een "bibliotheek voor het bouwen van visuele programma-editors". Het gaat hierbij om programmeren in Scratch-achtige blokken, met twee belangrijke verschillen: enerzijds wordt het blokkenprogramma omgezet naar programmacode in een tekstgeoriënteerde programmeertaal (JavaScript, Python, PHP, of Dart), en anderzijds is het mogelijk om bijv. in JavaScript zelf nieuwe blokken te definiëren. De presentatie van Peter leidde uiteraard tot een discussie over de relatieve sterktes en zwaktes van diverse programmeertalen; Gerard merkte hierbij op dat hij steeds probeert een programmeertaal te kiezen die geschikt is voor de klus, zoals een timmerman een zaag ter hand neemt wanneer er moet worden gezaagd, en een hamer als er spijkers moeten worden ingeslagen. Aan het eind van de bijeenkomst opperde Gerard nog om naast Artificiële Intelligentie en Artificial Life ook Artificiële Creativiteit in het officiële "mission statement" van onze interessegroep op te nemen. Onder artificial creativity, ook wel computational creativity, mechanical creativity of creative computation genoemd, valt volgens hem het voortbrengen van kunst door de computer, maar niet door mensen met behulp van de computer. De reacties waren verdeeld: met name Peter was mordicus tegen, vooral vanwege de eeuwigdurende meningsverschillen over wat kunst nu eigenlijk is, terwijl de meeste anderen er het nut niet zo van inzagen, hetzij omdat deze activiteit toch al onder kunstmatige intelligentie valt, hetzij omdat onze bijeenkomsten altijd wel gelegenheid bieden om allerlei al dan niet direct aan AI gerelateerde onderwerpen te berde te brengen. Het ziet er dus naar uit dat dit idee een zachte dood sterft. (GV 15 februari 2016) Kort verslag van de bijeenkomst op 2 januari 2016 Op deze eerste bijeenkomst van het nieuwe jaar kwamen veel verschillende onderwerpen aan bod, voornamelijk in de vorm van mededelingen en tips: Gerard presenteerde de onderstaande 4×4 mini-sudoku, die hij ontworpen had om er zijn sudoku-oplossende programma mee te testen.Albert gaf een korte introductie van de HCC Retro interessegroep. Deze groep is ontstaan door een fusie van de NewBrain interessegroep en de Amstrad interessegroep, maar beperkt zich niet tot deze twee vintage computermerken: iedereen die het leuk vindt om allerlei oude hardware en/of software weer aan de praat te krijgen of aan het werk te zien, is welkom. Theo meldde dat HCC!programmeren inmiddels zijn eerste plenaire sessie achter de rug heeft. Een kort verslag hiervan is op de website van deze interessegroep te vinden. Ook vestigde Theo onze aandacht op Codecombat, een programmeercursus binnen een spelomgeving, die met name voor jongeren erg aantrekkelijk zou kunnen zijn. Zowel Javascript als Python worden aangeboden. Er zijn ook de nodige filmpjes over Codecombat te vinden op YouTube. Abraham maakte ons opmerkzaam op VoiceNote, een plug-in voor de Google Chrome webbrowser die gesproken woorden omzet in tekst. Je moet daarbij opgeven in welke taal er wordt gesproken; het programma herkent dus niet alleen Engels. Abraham heeft 'm uitgeprobeerd voor een dove kennis, en was zeer te spreken over de kwaliteit ervan. Titus vroeg zich af hoe deze software het zou doen op het Nationaal Dictee … Titus deelde mee dat hij zijn poging om m.b.v. genetisch programmeren de halfwaardetijd van isotopen te voorspellen, en zo het door theoretische natuurkundigen voorspelde "eiland van stabiliteit" te vinden, heeft opgegeven. De methode zal waarschijnlijk te langzaam zijn: waar een genetisch programma binnen 1 seconde een benadering voor pi geeft, heeft hij voor de stelling van Pythagoras (100 datapunten) al 20 seconden per generatie nodig — en het isotopenprobleem heeft zo'n 10000 datapunten! Ronald gaf ons een gecomprimeerde versie van het verhaal over "intelligente LEDs" dat hij voor HCC!programmeren had gehouden; bij ons bezigde hij echter voorzichtigheidshalve de term "LEDs met ingebouwde controllers". Voor de technische details verwijs ik naar het uitstekende verslag op de website van HCC!programmeren. Interessant is dat in een achter elkaar geschakelde reeks elke LED een aantal bits van de data afhaalt, en de rest doorstuurt naar zijn buurman. Dit doet sterk denken aan de manier waarop bijv. in LISP een recursieve functie iets doet met het eerste element van een lijst, en de rest ter afhandeling doorgeeft aan een kopie van zichzelf …Gerard dacht dat een bordje met 10×10 LEDs, zoals Ronald ter demonstratie had meegebracht, misschien bruikbaar zou zijn om (bijv. op een rijdend robotkarretje) de inwendige toestand van een neuraal netwerk weer te geven. Ben deelde ons mee dat zijn rijdend robotkarretje Madeleine wegens een verkeerd geprogrammeerd bitje helaas tijdelijk buiten bewustzijn was. Hij was bezig geweest met het programma dat de communicatie met de PC verzorgde: de door hem gebruikte programmeertaal Visual Prolog kan namelijk uit diverse objectgeoriënteerde klassen het gemeenschappelijke halen, wat natuurlijk een geweldig hulpmiddel is om een stuk software te stroomlijnen en/of te herstructureren. Peter kwam met een interessant artikel in American Scientist van november/december 2015 (vol.103, nr.6): Computer Vision and Computer Hallucinations. Dit gaat over de interessante resultaten die naar voren komen bij het gebruik van deep learning neural networks bij beeldherkenning (computer vision). Een ander onderwerp dat door Peter naar voren werd gebracht is JSRobots, een omgeving waarin gesimuleerde rijdende gevechtsrobots elkaar te lijf gaan. Je kunt daarin je eigen robot programmeren, en Peter dacht dat het misschien leuk was om in het kader van het komende Robotica/AI seizoensthema een programmeerwedstrijd te organiseren m.b.v. deze omgeving. De algemene stemming was dat de hiervoor benodigde voorbereidingstijd helaas de beschikbare tijd te boven ging. Wat natuurlijk niet uitsluit dat JS Robots in de toekomst nog wel een rol in onze aktiviteiten zou kunnen gaam spelen. Henk kwam nog even terug op zijn programma om de 2×2×2 Rubik's kubus op te lossen. Hij bouwt daarvoor een array op met daarin voor elke toestand van de kubus het niveau van de "oplossingsboomstructuur". Omdat die boom 11 niveaus heeft, zijn er 4 bits opslagruimte per kubusconfiguratie nodig; voor alle 7!×36 = 3.674.160 standen dus 1.837.080 bytes. Henks oplossingsmethode hoeft echter niet het absolute boomniveau te weten, maar slechts twee boomniveau's te vergelijken (hoger of lager); daarom kan hij volstaan met een codering m.b.v. één ternair cijfer (0, 1, of 2). Omdat 35 = 243, terwijl er 256 waarden in een byte gaan, kunnen we 5 standen in één byte kwijt; er zouden dus nog maar 734.832 bytes nodig zijn om de hele zoekboom van die kubuspuzzel op te slaan. Jan was weer op de programmeertaal Occam gedoken. Hij vond deze taal bij eerdere pogingen lastig te leren. Nu is hij opnieuw begonnen, en het doel dat hij zich hierbij heeft gesteld om ieder woordje te begrijpen, werpt zijn vruchten af: hij voelt dat er nu een goede bodem is gelegd. Tot slot vroeg Jan onze aandacht voor opgave 2(a) in de AIVD kerstpuzzel. Niemand kon daar in de korte nog beschikbare tijd enig licht op werpen, hoewel Titus nog wel in de muzieknoten van opgave 2(b) brailleschrift herkende. Overigens staan de uitwerkingen inmiddels ook online. (GV 3 februari 2016)

20 april 2020

...

Bijeenkomsten gehouden in 2017

  Kort verslag van de bijeenkomst op 2 december 2017 Voorafgaand aan de plenaire sessie hield de studiegroep "neurale netwerken" een bespreking. Deze discussie ging voor een belangrijk deel over het gebruik van fleep. Ook werd er besloten om niet te veel de breedte of de diepte in te gaan, maar zich vooral tot het boek te beperken. Verder passeerden op deze laatste bijeenkomst van het jaar o.a. de volgende onderwerpen de revue: Theo vestigde de aandacht op een artikel in de nederlandstalige editie van het computertijdschrift c't van december 2017, over Lang korte-termijngeheugen (Long Short-Term Memory, afgekort tot LSTM). Dit is een neuraal-netwerkarchitectuur behorend tot de recurrente netwerken, die worden gebruikt wanneer de volgorde van de input een belangrijke rol speelt. Belangrijke toepassingsgebieden zijn bijv. spraakherkenning en automatisch vertalen. Het artikel in c't (pagina 113-117) vertelt hoe zo'n netwerk in elkaar zit en werkt, en geeft aanwijzingen (met een web-link naar de software) om zelf met TensorFlow een LSTM te maken dat kan leren om websites te taggen (d.w.z. omschrijven met één of meer steekwoorden). Interessant is ook nog dat het programma daarbij gebruik maakt van de grafische kaart van de computer, Jan deelde mee dat Abraham, die vandaag zelf helaas niet aanwezig kon zijn, de transputersimulator (voor 1 transputer) goed werkend heeft gekregen op Windows-systemen. (Theoretisch op Windows XP t/m Windows 10, maar dat is niet allemaal getest.) Het is dus niet meer nodig om het fysieke transputersysteem naar elke bijeenkomst mee te nemen; we kunnen nu immers ook Occam-programma's schrijven en testen op het gesimuleerde systeem. Jan heeft het werkboek voor de transputer-insteekkaart nu ook gedigitaliseerd; de INMOS-handleiding van Dick Pountain sluit daar goed op aan. Jan zal deze bestanden aan de geïnteresseerden, met name Albert en Gerard, toemailen zodat er nu in ernst voor de transputer kan worden geprogrammeerd. Ben merkte op dat het idee achter transputers (concurrency) tegenwoordig wordt uitgevoerd met grafische kaarten; Jan betwijfelt echter of dit wel op precies dezelfde manier gebeurt. Arjan vertelde ons over enkele boeiende onderwerpen die naar voren kwamen op de ITNext conferentie: Een lezing over het inzetten van Watson, het kunstmatig intelligente computersysteem van IBM, bij de beveiliging van datanetwerken. Dit gebeurt door Watson artikelen over dit onderwerp te laten lezen die voor mensen zijn geschreven, waarna het systeem er vragen over kan beantwoorden. Ook was er een presentatie over het klassificeren van kledingstukken op foto's voor het samenstellen van een verkoopcatalogus. Uit een lezing door een medewerker van de online supermarkt Picnic werd duidelijk dat dit bedrijf er nog niet in slaagt om heel nauwkeurig iemands boodschappen te voorspellen. Een mogelijke oorzaak is dat het neurale netwerk getraind is op de bestellingen van alle klanten samen i.p.v. individuele klanten. Ook kwam Arjan weer met een aantal interessante weblinks: De beide websites moleculenet en deepchem bevatten nuttige hulpmiddelen als je m.b.v. AI wilt onderzoeken of bepaalde chemische substanties mogelijk bruikbaar zijn als geneesmiddel. Een beschrijving van hoe je de C++-softwarebibliotheek TensorRT van NVidia, een hardwarefabrikant van o.a. grafische processoren, kunt gebruiken voor het construeren en optimaliseren van neurale netwerken. Een website met een gegevensbestand dat kan worden gebruikt om een AI te leren herkennen wat er te zien is op (foto- of video-)beelden die in de stad zijn gemaakt: mensen, voertuigen, verkeersborden, gebouwen, obstakels, enzovoort. De dia's (in PDF-vorm) van een lezing met als titel How Will Linux Handle Quantum Computing? De lezing behandelt in een notedop het nut van quantumcomputers, de problemen, de huidige stand van zaken, mogelijke toepassingen, en de manier waarop Linux kan samenwerken met, of gebruik maken van, quantumcomputerhardware. Titus merkte naar aanleiding van dit punt nog op dat je door te googlen op "IBM Q" informatie kunt vinden over het zelf via "de cloud" uitvoeren van algoritmen en experimenten op de quantumcomputer van IBM. Titus kwam met drie onderwerpen. Als eerste liet hij zien hoe ver hij was met genetisch programmeren in Python. Hij had twee problemen geprobeerd: Het benaderen van π uit één of meer constanten m.b.v. de bewerkingen × (maal), / (gedeeld door), + (plus), - (min) en √ (wortel). Dit programma bleek niet goed te leren; toch kwam het met een ruwe benadering, namelijk √10, die ook in de natuurkunde wel regelmatig gebruikt wordt. De stelling van Pythagoras, oftewel het "ontdekken" van de formule √(a2+b2). Ook aan deze variant moet nog wel wat tijd worden besteed voordat hij helemaal naar wens werkt. Als tweede bracht Titus een spelletje onder onze aandacht dat hij not 3 noemt. Dit spel, dat verwant is met boter, kaas en eieren, staat beschreven in 2 artikelen in het wiskundetijdschrift Pythagoras. Het eerste artikel, van maart 1981 (p.118-119) zet de regels van het spel uiteen; en het tweede artikel september 1981 (p.14-17) kijkt of er een winnende strategie voor een van beide spelers bestaat. Titus had een BASIC-programma gemaakt om dit spel tegen de computer te spelen, waarbij de computer niet "nadenkt" maar gewoon willekeurige zetten doet. Als derde vertelde Titus een anecdote over een auto die op de vluchtstrook stond en 30 keer werd "geflitst" omdat langsrijdende auto's te snel reden. Hij wilde hiermee illustreren dat automatische systemen nog niet helemaal toe zijn aan het juridisch afwerken van verkeersovertredingen. Tenslotte praatte Gerard de aanwezigen bij over zijn vorderingen op het gebied van Self-Organized Criticality. Hij had zijn "dominostenenprogramma" aangepast zodat er voortdurend automatisch rijtjes werden neergezet en "omgegooid". Het lijkt er inderdaad op dat het systeem na enige tijd een semi-stabiele toestand bereikt; de vraag is nu of de kenmerken die theoretisch voor een zelforganiserend kritiek systeem worden voorspeld hier ook inderdaad in terug te vinden zijn. Dat zal nog wel de nodige programmeerarbeid en statistische analyse vergen… In het nieuwe jaar gaan we weer met frisse moed aan de slag, waarbij we niet alleen reeds bekende onderwerpen gaan uitdiepen en oude projecten uitbouwen of nieuw leven inblazen, maar ongetwijfeld ook nieuwe onderwerpen zullen verkennen en nieuwe initiatieven ondernemen! (GV 5 januari 2018) Kort verslag van de bijeenkomst op 4 november 2017 Traditiegetrouw is november de maand waarin de jaarlijkse Roborama-wedstrijden, georganiseerd door HCC-Robotica, worden uitgevochten. Dit jaar was Jan de enige die daar de kleuren van onze AI interessegroep verdedigde. Bij de spaarzame gelegenheden die we hadden om daarbij de toeschouwer uit te hangen, leek het erop dat zijn robotkarretje (MOOF geheten) naar verwachting presteerde; we zijn in elk geval geen getuige geweest van flagrante robot-blunders of technische katastrofes. Maar we kunnen voor een definitieve eindevaluatie beter het verslag van Jan zelf afwachten… En terwijl Jan en zijn robot zich inspanden, hebben wij toch maar een plenaire sessie gehouden: Het overleg van de studiegroep neurale netwerken ging vooral over de organisatorische kant. Er bestaat namelijk in het gebruikte communicatiemiddel fleep de mogelijkheid om taken toe te kennen aan personen of groepen, en die taken na uitvoering als "gedaan" te markeren; maar dit "afvinken" is taakgericht (i.p.v. "persoonlijk"), zodat wanneer één persoon aangeeft een bepaalde passage uit het boek bestudeerd te hebben, dat onderdeel in fleep bij iedereen als "klaar" te boek staat. Dat maakt het lastig voor de deelnemers om bij te houden hoe ver ze zijn; en de studiegroepcoördinator, Peter, krijgt zo natuurlijk geen overzicht over de vorderingen van elke deelnemer afzonderlijk.Er is geruime tijd gesproken over mogelijke alternatieven, zoals slack, GitLab, en Google documenten (eventueel in combinatie met Google Groups). Gerard en Ben dachten dat de communicatie ook gewoon via een e-maillijst kon plaatsvinden, maar Peter vond de toenemende lengte van de e-mails (als gevolg van het toevoegen van alle voorgaande berichten) een groot bezwaar. Een echte oplossing is nog niet gevonden; voorlopig gaat de groep verder met fleep. Een nieuwe bezoeker stelde zich kort voor: Dimitri. Hij is programmeur geweest en heeft belangstelling voor AI; hij hoopt op onze bijeenkomsten het nodige op te kunnen steken van de andere aanwezigen. Op de Roborama vorig jaar was Bens Madeleine onder de deelnemende robotkarretjes tamelijk uniek: enerzijds omdat haar "hogere" besturingsfuncties "op afstand" werden vervuld door een programma op een laptop-computer, en anderzijds omdat dit programma is geschreven in de logische AI-taal Visual Prolog in plaats van de meer gangbare talen BASIC of C. Ben deed welwillend nogmaals uit de doeken waarom Madeleine dit jaar niet deelnam. Ondanks een perfecte uitvoering op de tests waaraan Ben haar vooraf onderwierp bleek Madeleine, toen het er vorig jaar op aankwam, het keren (een 180° richtingsverandering) toch niet echt onder de knie te hebben. Mogelijk speelde de andere ondergrond daarbij een ontregelende rol. Ben overweegt op dit moment twee mogelijke oplossingen. Één aanpak is om Madeleine uit te rusten met een kompas-sensor, naast de drie afstandssensoren (vooruit, links, en rechts, met een bereik tot 80 cm.) waarover ze nu beschikt. Maar, geïnspireerd door het tot stand komen van de bovengenoemde studiegroep, is zijn huidige "plan A" om Madeleine te gaan besturen met een neuraal netwerk. Peter vestigde de aandacht op de campagne Nederland leest, met dit jaar robotica als thema. Tijdens deze actie krijg je bij deelnemende bibliotheken, in ruil voor je mening over robots, een speciale Nederlandstalige uitgave van Isaac Asimovs beroemde verhalenbundel "Ik, Robot". In deze uitgave is een extra verhaal toegevoegd, geschreven door Ronald Giphart met behulp van (of: "in samenwerking met"?) de "literaire robot" Asibot. Gerard vertelde dat hij op 1 november de start van de campagne, die dit jaar in Amersfoort werd verricht, had bijgewoond; het helaas wat wazige kiekje hieronder, met links Ronald Giphart, geeft daarvan een indruk. Diederik vroeg of iemand van de aanwezigen ervaringen had met de programmeertaal R in verband met kunstmatige intelligentie. Zelf had hij in deze taal, die vooral voor statistische toepassingen wordt gebruikt, GIS-kaartjes voor zijn zoon vervaardigd. Helaas had niemand enige ervaring op dit gebied; wel wist men te melden dat R een zeer populaire taal is, die toch wel duidelijk verschilt van Python. Volgens Peter geeft googlen op "r vs python for AI" een schat aan waardevolle informatie en adviezen. Henk had voor de aanwezigen wat informatie meegenomen, uit het Filosofen lexicon, over de door hem bewonderde wijsgeer Democritus. Volgens Henk was dat de eerste die inzag dat de wereld was "opgebouwd" (uit atomen), een idee dat een belangrijke rol speelt in Henks eigen ideeën over De computer en de vrije wil. Ook werd er enige tijd gediscussieerd over Henks opvatting dat je eigenlijk moet weten hoe microprocessors werken om te kunnen programmeren. Albert merkte op dat er tegenwoordig juist diverse softwarelagen tussen de processor en het programma zitten om programmeren zonder gedetailleerde hardwarekennis mogelijk te maken. Aan de andere kant, zo werd opgemerkt, leiden de tussenliggende lagen wel tot programma's die abstracter, en dus misschien moeilijker te begrijpen zijn. Diederik merkte op dat kennis van binaire logica wel echt nodig is om iets van schaakcomputers en -programma's te snappen. Arjan kwam met twee interessante weblinks. Als eerste de 14th European Conference on Computer Vision (ECCV), die in oktober vorig jaar in Amsterdam gehouden is, met een enorme hoeveelheid informatie over beeldherkenning, waaronder een poster met aanvullende informatie over het geven van verbale uitleg bij herkenning van vogels op foto's. En als tweede een blog en paper over het voorspellen van golfhoogtes in een baai aan de Stille Oceaan, dat een deep learning neuraal netwerk veel sneller kan dan een traditioneel natuurkundig model. Als laatste was Gerard aan de beurt, die weer een oud projectje aan het reanimeren was: zijn dominostenen-programma. In een artikel over self-organized criticality in het tijdschrift Scientific American van januari 1991 werd de kritieke toestand van een systeem verduidelijkt aan de hand van een ruitvormig patroon van rijtjes dominostenen. Gerard had dit destijds met een zelfgemaakt Turbo-C-programmaatje onder Windows 95 onderzocht. Hij heeft het programma nu geport naar Linux (met gebruikmaking van de karakterterminal-besturingsfuncties van de softwarebibliotheek curses), en demonstreerde daarmee dat het systeem bij de kritieke dichtheid (of daaromtrent) inderdaad, zoals de theorie stelt, "interessant" (want: meer gevarieerd) gedrag gaat vertonen. Met alle activiteiten die momenteel gaande zijn verwachten we ook volgende maand weer een boeiende plenaire sessie! (GV 16 november 2017) Kort verslag van de bijeenkomst op 7 oktober 2017 Het verhaal van Arjan, dat vorige keer noodgedwongen werd onderbroken, kreeg vandaag een vervolg in de vorm van een heuse lezing, die natuurlijk als eerste aan bod kwam op het plenaire gedeelte van de bijeenkomst: De lezing van Arjan ging over convolutionele neurale netwerken. Dergelijke deep learning netwerken worden o.a. succesvol aangewend voor beeldherkenning. Belangrijk in dit verband is de Large Scale Visual Recognition Challenge, een jaarlijkse wedstrijd waarbij deelnemers de prestaties van hun computerprogramma's kunnen vergelijken door ze los te laten op ImageNet, een database van afbeeldingen met bijbehorende beschrijvingen,. Een van de winnaars was ZF-Net, en Arjan had zich ten doel gesteld om dit na te bouwen in Python. Door daarbij gebruik te maken van de open source software library TensorFlow kon hij zich het zelf schrijven van veel programmalussen besparen. Als toepassing heeft hij gekozen voor het herkennen van handgeschreven cijfers uit de MNIST-dataset. Alle details van dit project kunt u uitpluizen met behulp van de PowerPoint pagina's van Arjans lezing en het Jupyter notebook van zijn programma, die zijn terug te vinden bij de eigen maaksels op deze website. Na de lezing werd er overleg gevoerd door en over de studiegroep neurale netwerken, die door Peter geleid (dan wel gecoördineerd) zal worden. De groep telt momenteel naast Peter zelf (die wel voldoende weet van neurale netwerken, maar in deze groep Python hoopt te leren) nog 10 anderen, plus één waarnemer (Gerard). Eerder was al besloten dat ze aan de slag gaan met het boek Make Your Own Neural Network van Tariq Rashid, waarvan het eerste deel in gewone taal en wat middelbare-schoolwiskunde – maar zonder programmeercode – uitlegt hoe een standaard "backpropagation" neuraal netwerk werkt, en het tweede deel je vertelt hoe je zoiets dan zelf programmeert in Python. Vandaag is besloten om te gaan werken met het groupware-communicatieprogramma fleep, ondanks wat opstartproblemen en een algemene onbekendheid met deze software. De deelnemers gaan de komende maand beginnen met het lezen van deel 1 van het boek, en zullen de vragen die bij hen opkomen aan de anderen voorleggen via fleep. We zullen volgende maand zien hoe dit werkt… Theo kwam met een goede leestip: het oktober/novembernummer (editie 296) van ons HCC-verenigingsblad PC-Active gaat met een viertal artikelen uitvoerig in op het HCC-seizoensthema de "slimme auto". In hetzelfde nummer staat ook nog een interessant artikel over deep learning. Uiteraard is dit nummer voor leden "achter de inlog" ook digitaal te raadplegen op de HCC-website, via de rode menubalk bovenaan. Op verzoek van Gerard deed Theo ook kort verslag van de themabijeenkomst over programmeertalen die HCC-programmeren op 15 september j.l. had georganiseerd op hun nieuwe locatie in De Bilt. Daarbij werd over een (ruime) handvol programmeertalen in meer of minder kort bestek wat informatie gegeven over ontstaan, voor- en nadelen, en mogelijke toepassingsgebieden, vergezeld van een kort voorbeeldprogrammaatje. Een geschreven verslag, de Powerpoint-slides en aanvullende pdf-bestanden zijn te vinden op de website van HCC-programmeren. De besproken talen zijn PHP, Perl, Scratch, Python, Forth, en C. Een overweging voor de keuze van juist deze talen (en het afvallen van andere) was o.a. "geschiktheid voor beginners". Verder kondigde Theo nog aan dat er op de eerstvolgende bijeenkomst van HCC-programmeren, in oktober, een lezing zal worden gehouden over cryptografie. Ben had slechts twee korte mededelingen. Hij vertelde, voor degenen die het nog niet wisten, dat er een handtekeningenactie gaande is om een referendum aan te vragen over de zogenaamde sleepwet, die inlichtingendiensten machtigt om ook (digitale) data te verzamelen over en uit de communicatie van personen waartegen geen concrete verdenking bestaat. Inmiddels is bekend dat er voldoende handtekeningen zijn verzameld, en dat het referendum dus inderdaad gehouden zal worden. En verder meldde Ben dat hij nog altijd aan het overwegen is hoe hij het gaat aanleggen om Madeleine met een neuraal netwerk uit te rusten. Arjan maakte ons attent op het boek Bayesian Methods for Hackers. Daarin wordt de Bayesiaanse kansrekening, ook veel gebruikt in machine learning, uitgelegd en toegepast in Python m.b.v. de PyMC softwarebibliotheek. Volgens Arjan is het duidelijk geschreven – in het Engels, weliswaar –, maar bevat het pittige wiskunde die niet echt wordt uitgelegd. Een goede informatiebron dus, maar niet voor de terloops geïnteresseerde! Het boek schijnt ook online te lezen te zijn. De geplande drie bijdragen van Titus konden helaas niet aan bod komen omdat zijn computer op het cruciale moment onverwacht kuren vertoonde. Omdat er bovendien nog maar weinig tijd over was, is besloten om dit onderdeel naar een volgende bijeenkomst te verschuiven. (GV 13 november 2017) Kort verslag van de bijeenkomst op 2 september 2017 Ook dit keer weer een keur aan onderwerpen die direct of indirect iets met kunstmatige intelligentie te maken hebben: Henk vestigde de aandacht op een artikel over computerhackers in De Volkskrant van 8 juli j.l. Hierover ontspon zich enige discussie, waarbij werd opgemerkt dat virusscanners veel achterdeurtjes met opzet niet afsluiten. Arjan vertelde n.a.v. dit onderwerp dat de VPRO (NPO televisie) op 23 augustus de documentaire Zero Days over de computer"worm" Stuxnet heeft uitgezonden. Albert had onlangs op BNR Nieuwsradio een interessante aflevering van de serie "De Nieuwe Wereld" gehoord. Het is al langer bekend dat bedrijven computerprogramma's gebruiken om een eerste filtering van sollicitanten te maken op basis van hun cv's. De uitzending op BNR, die nog steeds als podcast te beluisteren is, bekeek de andere kant van de medaille: men is ook bezig om computerprogramma's ("robots") te bouwen die jouw sollicitatie kunnen verzorgen. Het zou in de toekomst dus zo kunnen zijn dat robots onderling uitmaken wie waar komt te werken… Een nieuwe bezoeker stelde zich voor: Diederik. Hij programmeert in Pascal, en is bovendien hobbyschaker. Naar aanleiding hiervan ontstond er een korte discussie over computerschaak en schaakprogramma's, waarbij Gerard de stelling verkondigde dat, ondanks het feit dat Deep Blue de toenmalige menselijke wereldkampioen Kasparov heeft verslagen, dit nog lang geen uitgekauwd onderwerp is; er liggen nog behoorlijk wat mogelijkheden voor onderzoek dat het inzicht in intelligentie en in het schaakspel kan vergroten. Ed maakte ons attent op het boek De quantumcomputer. Een digitale revolutie op het punt van uitbreken. Dit boek geeft de huidige stand van zaken op dit gebied, en besteedt ook aandacht aan de verschillen tussen quantum- en klassieke computers. Bens robotkarretje "Madeleine" heeft moeite met keren (een belangrijke component in het Roborama-onderdeel "Heen en weer"), en hij is begonnen om dit probleem aan te pakken. Omdat het bij de demonstratie op onze bijeenkomst wèl goed ging, vermoedt Ben dat het op de Roborama-wedstrijd fout ging door een andere (stroevere?) vloer; hij wil proberen om het keren minder afhankelijk van de ondergrond te maken door het inzetten van extra sensoren. Verder wil Ben graag Madeleine uitrusten met een backpropagation neuraal netwerk voor de besturing. Daarnaast had Ben een relaas over zijn avonturen met zijn favoriete programmeertaal Visual Prolog. Daarvan was onlangs Versie 8 verschenen, en natuurlijk moesten al zijn programma's onder deze nieuwe versie worden uitgetest. Dat ging allemaal goed, met één uitzondering: zijn personal-informationprogramma "Gregorius", waarbij Prolog liet weten last te hebben van een "internal error". Dus contact gelegd met de helpdesk, in Rusland, die hem vroeg om de code op te sturen. Vreemd genoeg werkte het in Rusland probleemloos. In plaats van het hele probleem van tafel te vegen, stuurden ze Ben een aangepaste compiler, met uitgebreidere foutmeldingen, om het opnieuw te proberen. Afijn, uiteindelijk wist Ben een testprogrammaatje te maken om het probleem te isoleren, waarna de compilerfout kon worden verholpen. Het hele verhaal, dat zowel van de programmeerkwaliteiten van Ben als ook van de uitstekende service van de helpdesk van Visual Prolog getuigt, was erg interessant! Peter was erg enthousiast over het boek Make Your Own Neural Network van Tariq Rashid. Dit boek, dat te begrijpen zou moeten zijn met voorkennis op VWO-niveau, bestaat uit twee gedeelten: een inleiding waarin wordt uitgelegd hoe een backpropagation neuraal netwerk werkt, en daarna een doe-het-zelf-gedeelte waarin zo'n netwerk daadwerkelijk wordt geprogrammeerd in Python. Er is besloten om een studiegroep op te zetten die met dit boek aan de slag gaat; van de aanwezigen wilden er zes zeker meedoen, en nog zes overwogen om deel te nemen. Er wordt nog overlegd of we ook andere interessegroepen bij deze activiteit gaan betrekken. Jan gaf ruiterlijk toe dat zijn voorbereiding op de vorige Roborama-wedstrijd niet optimaal was; om dit jaar een beter resultaat te behalen is hij zo'n 3 weken geleden opnieuw begonnen voor de volgende editie, in november. Daarbij stuitte hij meteen al op problemen met een controlelusje in zijn programma. Ook doen de lichtjes van zijn lijnvolger het niet; misschien een hardwaredefect in de robot? Kortom, ook dit jaar gaat het niet van een leien dakje. Als alles weer werkt, is er hooguit nog maar één zaterdag, in oktober, om te oefenen. Als dat maar goed gaat… Door het werk aan zijn robotkarretje heeft Jan maar weinig aan zijn andere interesse, de transputer, kunnen doen. Hij ontkende overigens met klem dat de transputers "retro" zijn: de technieken die daarin gebruikt zijn, zoals message passing, worden tegenwoordig nog overal toegepast! Abraham had daarentegen wel aardig wat tijd aan de transputer besteed: hij is nu, samen met Ronald, bezig om de transputers aan te sturen via een USB-bus. Ze kunnen al een bericht ontvangen van 23 bytes, met daarin een code voor het processortype (AA of AA AA). Ook demonstreerde Abraham een programma dat de Mandelbrot-fractal op een EGA- of VGA-scherm zichtbaar maakt, met de mogelijkheid om herhaald in te zoomen op een bepaald gebiedje. (Zie de foto hieronder.) Van het programma was geen sourcecode beschikbaar; volgens Jan bestond het uit 5 of 6 processen, ook al draaide het nu op maar één processor. Hierop ontspon zich een discussie over de vraag of hercompilatie nodig is als je de hardwareconfiguratie verandert door extra transputers toe te voegen. Gerard veronderstelde van niet; diverse anderen dachten van wel. Ook kwam er nog een interessant stukje transputerinfo langs: er is voor transputers ooit een operating system geschreven, namelijk "HeliOS". Tot slot had Arjan nog drie tips: de tentoonstelling Meet Baby in het Museum of Science and Industry in Manchester (Engeland), met een replica van de eerste computer die in zijn geheugen niet alleen de te bewerken gegevens, maar ook het programma opsloeg. het Handboek Python van Robert Smallshire en Austin Bingham, volgens Arjan een "aanrader". het boek Getting Started with TensorFlow, door Giancarlo Zaccone. TensorFlow is een Python software library van Google voor het zelf samenstellen en gebruiken van neurale netwerken. Helaas moest de uiteenzetting over dit laatste onderwerp worden afgebroken omdat het al weer tijd was om naar huis te gaan. Wordt volgende maand vervolgd… (GV 29 oktober 2017) Kort verslag van de bijeenkomst op 1 juli 2017 Ook ditmaal kwam weer een grote verscheidenheid aan onderwerpen aan bod: Ronald had zijn 16×16-matrix van gekleurde LEDs meegenomen om het Kohonen-netwerk op te demonstreren. Omdat niet iedereen de eerdere demonstratie op een 10×10 LED-array en de bijbehorende uitleg had bijgewoond, heeft Gerard nogmaals uiteengezet wat een Kohonen-netwerk doet — zonder op de details van het "hoe" in te gaan. Maar, zoals iedereen kon zien en al eerder bij Ronald thuis was gebleken, werkte de 16×16-versie niet naar behoren: de kleuren rangschikten zich niet netjes van rand tot rand op de display. Gerard legde uit dat dit een bekend verschijnsel was, dat misschien te verhelpen was door te sleutelen aan de leerfactor van het netwerk. In het begin, als de gewichten van de neuronen nog een grote warboel zijn, krijgt deze leerfactor een relatief hoge waarde, zodat het netwerk door de invoerdata sterk in de goede richting wordt gedwongen. Naarmate het leren vordert en de gewichten dichter bij hun uiteindelijke gewenste waarde komen, neemt de leerfactor af en nadert asymptotisch tot een minimumwaarde. Hierdoor kunnen de (willekeurige) invoergegevens alleen nog maar kleine aanpassingen teweeg brengen, en geen grote verstoringen meer veroorzaken in het netwerk. Wanneer het netwerk, zoals in dit geval, niet tot een goede rangschikking van de inputs komt, dan komt dat doordat de leerfactor op zeker moment te klein wordt om de benodigde gewichtsaanpassingen te bewerkstelligen. Dit kan worden verholpen door drie mogelijke ingrepen, die natuurlijk elk ook weer een nadeel hebben: De beginwaarde van de leerfactor verhogen. De minimumwaarde (asymptotische eindwaarde) van de leerfactor verhogen. De snelheid verminderen waarmee de leerfactor afneemt. Een kant-en-klaar recept is hierbij echter niet te geven; Gerard adviseerde Ronald dan ook om zelf met de drie parameters te experimenteren. Ed had twee mededelingen: Ed heeft samen met Abraham het plan opgevat om een robotje te bouwen dat gebruik maakt van kunstmatige intelligentie. De bedoeling is dat de robot zelf een route gaat vinden door te kijken naar wegwijzerbordjes die hij tegenkomt. De letters op die bordjes zouden herkend (d.w.z., ontcijferd) moeten worden door een neuraal netwerk; bij het programmeren van dit netwerk hopen ze de nodige informatie op te doen uit het boek Make Your Own Neural Network van Tariq Rashid. Daarnaast deelde Ed mee dat de Robotica-interessegroep op de regiobijeenkomst in Haarlem op 11 november a.s. een presentatie van zo'n 30 à 45 minuten over zichzelf en hun activiteiten gaan geven. Hij vroeg zich af of het een goed idee zou zijn als AI zich daar ook zou presenteren, hetzij samen met Robotica, hetzij op een andere dag. Het AI-bestuur gaat er over in beraad. In ieder geval hopen we dat de robotici op onze december-bijeenkomst kort verslag willen doen van deze expeditie. Ook Titus kwam met twee onderwerpen: Hij had een grafisch simulatieprogramma geschreven van OBB's: Oriented Building Blocks. Titus' OBB's waren kubussen opgebouwd uit 5 viervlakken die door de ruimte zweefden; het moeilijke gedeelte bestond in het detecteren van botsingen en de resulterende verandering in bewegingsrichting en -snelheid. De simulatie zag er goed uit! Ook demonstreerde Titus "AI voor beginners": een programmaatje van slechts 17 regels dat achterhaalt welk getal iemand in gedachten heeft. Dat gebeurt door het stellen van vragen ("groter dan ...?", of "kleiner dan ...?"); het programma zou dus gezien kunnen worden als een soort expertsysteempje. De methode om het getal te bepalen staat bekend als binair zoeken; hetzelfde idee vinden we ook in de "binaire zeef", die achter een bekend "goocheltruukje" voor kinderen zit. Abraham had hard gewerkt aan de transputer-hardware. Om de transputers aan te sturen gebruikten we altijd een computer met Windows 98 en een ISA-slot voor insteekkaarten. Helaas is Windows 98 aardig in onbruik geraakt; en PC's met ISA-slot zijn al helemaal zeldzaam geworden. Abraham heeft nu een eigen interface gebouwd, zodat d.m.v. "peek"- en "poke"-opdrachten via een USB-bus met de transputer kan worden gecommuniceerd, en de ISA interfacekaart niet meer nodig zou zijn. Theo maakte ons attent op het juli/augustus-nummer van het tijdschrift c't Magazine voor computertechniek, waarin een vijftal voor ons interessante artikelen staat, o.m. een artikel over beeldbewerking met AI en een artikel over het werken met Google TensorFlow. Arjan had een programma geschreven om sudokupuzzels op te lossen met behulp van het dancing-linksalgoritme. Dit is een door Donald E. Knuth beschreven methode om zgn. exact-coverproblemen, waartoe sudoku's behoren, efficiënt in een computergeheugen te coderen en op te lossen. Arjan gaf een interessante demonstratie met goede uitleg. Ronald vroeg welke programmeertalen goed kunnen omgaan met grote getallen (d.w.z. getallen met veel cijfers, hetzij "voor" hetzij "achter de komma"); hij was namelijk door het lezen in het boek De geheimen van PI geïnteresseerd geraakt in het benaderen van de wiskundige constante π. Gerard kwam met een mogelijke benaderingsmethode: neem een vierkant, met daarin een kwartcirkel waarvan de straal gelijk is aan de zijden van het vierkant en het middelpunt op een van de hoekpunten van het vierkant ligt. Door van een groot aantal willekeurige punten in het vierkant te bepalen welke fractie ervan in de kwartcirkel ligt, krijg je een benadering van π/4. Gerard kwam op die methode door het eerder vandaag besproken Kohonenprogramma, dat eveneens wordt "gevoed" door random punten in een vierkant. Diverse andere aanwezigen wisten nog verbeteringen in deze methode te bedenken. We hebben ons dus weer prima vermaakt, deze zaterdag… (GV 5 oktober 2017) Kort verslag van de bijeenkomst op 3 juni 2017 Op deze bijeenkomst kwamen o.a. de volgende onderwerpen voorbij: Arjan hield een goed voorbereide, vrij uitvoerige en zeer interessante lezing over het boek How to Create a Mind van de Amerikaanse auteur, uitvinder en zakenman Ray Kurzweil. Op basis van gedachtenexperimenten en bevindingen uit de (neuro)biologie beschouwt Kurzweil het menselijk brein als een systeem van miljoenen "patroonherkenners". Opmerkelijk is dat Kurzweils ideeën over het creëren van een "kunstmatig brein" het menselijk brein als voorbeeld en inspiratiebron hebben genomen, maar dat hij voor de implementatie ervan niets ziet in neurale netwerken; in plaats daarvan denkt hij zijn doel te bereiken met Hidden Markov Models. Het boek behandelt niet alleen de biologische en "technische" aspecten van de menselijke geest en eventuele kunstmatige intelligenties, maar beschouwt tevens diverse bekende filosofische kwesties (zoals "vrije wil", bewustzijn, en de aard van creativiteit) die daarmee in verband staan, waarbij ook oudere ideeën worden meegenomen. Al met al lijkt dit boek een echte aanrader voor wie in kunstmatige intelligentie is geïnteresseerd! Titus liet ons drie voorbeelden zien van draaiende 3D-bomen, die hij zelf had geprogrammeerd in FreeBasic met OpenGL. De bomen zijn geprogrammeerd met behulp van L-systems, waarmee een soort van Turtle Graphics-commando's worden gegenereerd. Peter vertelde dat hij The Information: A History, a Theory, a Flood van de Amerikaanse schrijver en wetenschapshistoricus James Gleick aan het lezen was. Zoals de titel al aangeeft gaat dit boek, dat ook in het Nederlands vertaald is, over de geschiedenis van het begrip "informatie", over de informatietheorie, en over het omgaan met de huidige "tsunami" van informatie. Peter beval het boek van harte aan. Ronald maakte ons attent op een leerzame webpagina over floating-pointgetallen. Deze pagina laat op een interactieve manier zien hoe decimale breuken volgens de IEEE Standard for Floating-Point Arithmetic (IEEE 754) binair (en hexadecimaal) in de computer worden opgeslagen, en welke afrondingsfouten daarbij optreden. Helaas beperkt de pagina zich tot single-precision-getallen (32 bits); Ronald zou hiervan graag ook een double-precision-versie (64 bits) willen zien. Ook Theo had een zeer interessante webpagina gevonden: een uitgebreide uitleg, met animaties, van het A*-algoritme. Het A*-algoritme is een methode om te zoeken naar de kortste weg tussen twee punten op een graaf (dat is: een verzameling punten verbonden door een netwerk van lijnen). Dit is bijvoorbeeld erg nuttig om wegen door doolhoven te vinden, en wordt dan ook regelmatig gebruikt in de kunstmatige intelligentie, de robotica, en bij het programmeren van games. Deze pagina is onderdeel van een interessante website over computer-games; de auteur heeft ook een goed leesbare beschrijving van de theoretische achtergrond van het A*-algoritme gemaakt. Jan is zich nog steeds aan het bezinnen op zijn toekomstige activiteiten. Zijn eerder geuite idee over het bouwen van een simulatie van schepen op zee (als transputer-project) heeft een laag AI-gehalte. Zijn interesse in neurale netwerken is wat bekoeld toen hij informatie die hij op een website had gevonden probeerde na te rekenen: hij kwam op een andere uitkomst… Één uitgangspunt blijft voor hem recht overeind, namelijk zijn interesse in hardware: draadjes, chips, databoeken, enzovoort. Dat zijn immers dingen waar hij al zeer veel van af weet, en die hij begrijpt. Deze belangstelling kan hij volledig kwijt bij zijn Transputersysteem, en dat zal dan ook wel het centrale punt blijven van zijn bezigheden. Hij heeft nu de grote lijn in een 2-stappenplan gevat. De eerste stap is het (goed) leren programmeren in Occam, de "voertaal" van de Transputer. De tweede stap is om iets met die taal te gaan doen. Wat precies staat nog niet vast; gezien zijn interesse in (klassieke) muziek zou het iets in die richting kunnen worden. Er zijn alles bij elkaar tijdens deze "plenaire sessie" genoeg ideeën en tips uitgewisseld om weer een maandje mee aan de slag te kunnen. Wordt vervolgd, dus… (GV 14 september 2017) Kort verslag van de bijeenkomst op 6 mei 2017 Op deze vrij rustige bijeenkomst kwamen onder andere de volgende onderwerpen aan de orde: Als eerste werd een per e-mail door Jan ingediend voorstel besproken om de bijeenkomsten wat "gerichter" te maken. Dit voorstel was gebaseerd op twee uitgangspunten. Ten eerste was Jan zeer geïntrigeerd geraakt door neurale netwerken, maar zijn pogingen om iets van dat onderwerp te begrijpen hadden vooralsnog niets opgeleverd. En ten tweede vond hij dat hardware en verslagen van programmeeraktiviteiten, onderwerpen waaraan de meeste bijeenkomsttijd werd besteed, eigenlijk geen AI waren. Hij stelde dan ook voor om met de gehele groep een project over neurale netwerken te beginnen, en de plenaire sessie voor dat doel te gaan gebruiken.Tegen dit voorstel waren een aantal tegenwerpingen te maken: Ook al valt niet alle denkbare programmeeraktiviteit onder het kopje "AI", en ook al kun je prima zinvol bezig zijn met AI zonder zelf te programmeren, toch is programmeren binnen het vakgebied AI wel degelijk een "kernaktiviteit". AI is ruimer dan alleen "neurale netwerken". Wij hebben in het verleden altijd ruimte geboden aan andere richtingen, zoals fuzzy logic, genetische algoritmen, en ook "Good Old-Fashioned AI" op basis van symboolmanipulatie. Dit willen we blijven doen, opdat mensen met interesse in deze "takken van sport" niet teleurgesteld afhaken. Veel van de door ons besproken programmeerproblemen, met name die waarbij "combinatorische explosie" optreedt, vormen een dankbaar toepassingsgebied voor AI-technieken. Ook sterk verwante vakgebieden, zoals artificial life en robotica, kunnen vanwege hun sterke verwevenheid met AI niet zomaar terzijde worden geschoven. Natuurlijk werd Jans voorstel niet zomaar "afgebrand" zonder een alternatief te suggereren, want ook binnen het huidige "format" kan Jan zijn AI-gerelateerde interesses prima volgen: Hij kan onder de bezoekers van de bijeenkomsten, of via een oproep op deze webpagina, op zoek gaan naar mensen met dezelfde of soortgelijke interesses. Met deze "medestanders" (of desnoods alleen) kan Jan een werkgroep of studiegroep vormen, en zich tijdens het informele gedeelte van de bijeenkomsten, en/of d.m.v. persoonlijk of e-mailcontact tussen de bijeenkomsten in, verdiepen in de onderwerpen waar zij belang in stellen en waar ze meer over willen weten. Natuurlijk kunnen werkgroepen en individuele bezoekers tijdens de plenaire sessie altijd gerichte vragen stellen over dingen waar ze niet uitkomen, of waarover ze meer willen weten. Vaak levert dat nuttige suggesties of stukken informatie op, doordat anderen meer of simpelweg andere literatuur hebben geraadpleegd, of zelfs persoonlijke programmeer- of toepassingservaring hebben opgedaan. Aan de andere kant is er op de plenaire sessie ook gelegenheid om te vertellen wat je hebt opgestoken of uitgeprobeerd; dergelijke voortgangsrapporten kunnen gewoonlijk rekenen op een warme belangstelling van de overige bezoekers. Kortom, het voorstel van Jan om de werkwijze van onze interessegroep grondig op de schop te nemen kreeg weinig bijval, en besloten werd om alles (voorlopig?) bij het oude te laten. Arjan vond het boek How to Create a Mind van Ray Kurzweil erg interessant, en was bereid hierover op een van de volgende bijeenkomsten wat meer te vertellen. Rudolf maakte ons attent op Darknet, een open source neuraal netwerk geschreven in C. Een interessante toepassing daarvan is Yolo (You Only Look Once), een real-time systeem om objecten op foto's te herkennen. Rudolf wil zelf neurale netwerken gaan toepassen voor het bepalen van grondsoorten op basis van sonderingsdata, waarbij de trainings( en test- )data afkomstig zijn van locaties waarvoor behalve sonderingen ook boringen zijn verricht. Titus had, geïnspireerd door het boek The Computational Beauty of Nature van G.W.Flake, een simulatie van nestbouwende mieren geprogrammeerd, maar die werkte nog niet naar verwachting. Het bleek dat mieren regelmatig heel snel gingen lopen, alsof ze een pepmiddel hadden geslikt; en ook brachten ze het nestmateriaal vooral naar de rand van het scherm, in plaats van er over het hele gebied structuren van te bouwen. Ter ondersteuning van zijn visie op de "opgebouwde wereld" en de vrije wil, had Henk wat passages uit het boek De Bètacanon gekopieerd. Dit deelde hij uit aan de aanwezigen. Op de achterkant stond zijn eigen artikel De computer en de vrije wil, dat ook op deze website na te lezen is. Reacties op dit artikel zijn nog steeds welkom. Ondanks het besluit om de activiteiten van onze interessegroep niet volledig op neurale netwerken te richten, speelt deze techniek wel een hele grote, om niet te zeggen overheersende, rol in de hedendaagse AI-aktiviteiten van de "grote spelers" — multinationals, onderzoeksinstituten, enz. Ter illustratie daarvan werd gewezen op het door Google gebruikte TensorFlow-systeem voor machinaal leren. Voor dit systeem is nu ook speciale hardware ontwikkeld. In het voorbijgaan werd ook Apple's "intelligente" personal assistant Siri genoemd, en het idee kwam op om de intelligentie daarvan eens te gaan testen. Helaas bleek niemand van de aanwezigen een iPhone te gebruiken… Als voorbeeld van combinatorische explosie werd nog de 16×16 sudoku genoemd die met Pasen in de Volkskrant stond. Henk had daar zijn backtrack-programma op losgelaten, en aan Gerard verteld dat dit zo'n 7 uur aan het werk was geweest. Daarbij moet wel worden aangetekend dat het programma erg veel naar het beeldscherm schrijft (alle probeersels worden weergegeven), wat behoorlijk wat extra tijd kost, en dat het programma na het vinden van een oplossing blijft doorzoeken om te kijken of er meer oplossingen zijn. Voor een "gewone" 9×9 sudoku heeft het programma hooguit slechts enkele minuten nodig. En als een sprong van 9 naar 16 al zo'n toename in verwerkingstijd tot resultaat heeft, kan men zich voorstellen dat nog grotere sudoku's (bijv. 100×100) al gauw praktisch onoplosbaar worden. Bedenk daarbij dat voor problemen in het "echte leven" 100 nog maar een heel klein getal is…Er is echter een hoop te winnen met betere algoritmen: Henks had ook een programma geschreven dat eliminatie van mogelijkheden toepast (dus ongeveer zoals mensen sudoku's oplossen), en dat gaf voor de 16×16-paassudoku een oplossing in een veel kortere tijd. En zelfs backtracking kan slimmer: Gerard's exact-coverprogramma loste de paassudoku op in enkele minuten. Er waren dus weer genoeg onderwerpen ingebracht om op voort te borduren; we wachten af wat dit gaat opleveren! (GV 10 juli 2017) Kort verslag van de bijeenkomst op 1 april 2017 Op deze bijeenkomst, die goed bezocht werd, werd eerst de verplichte jaarlijkse ALV (Algemene LedenVergadering) gehouden. Daarvan worden door de secretaris afzonderlijke notulen gemaakt, zodat dit verslag beperkt kan blijven tot de inhoudelijke punten die op de plenaire sessie aan de orde kwamen: Jan deelde mee dat hij het transputersysteem voortaan weer (in principe maandelijks) mee zal nemen naar onze bijeenkomsten. Dat heeft twee duidelijke voordelen: voor ons is het veel inspirerender en handiger om direct op het systeem zelf te werken in plaats van via een internetverbinding; en bij hem thuis hoeft er dan niet elke maand een kabel dwars door de woonkamer te worden getrokken! Op de vorige bijeenkomst is door Gerard de zeeslagpuzzel weer onder de aandacht gebracht. In een ver verleden, toen we onze bijeenkomsten nog in Gouda hadden, had Henk een backtrack-programma geschreven om dergelijke puzzels op te lossen. Vandaag had hij het meegenomen, en hij gaf een duidelijke demonstratie van hoe het werkt. Omdat backtracking het depth-first doorlopen van een boomstructuur is, ontspon zich enige discussie over waar die boom dan in Henks programma was terug te vinden. Gerard heeft uitgelegd dat de boomstructuur die wordt doorlopen wel conceptueel achter het algoritme zit, maar nooit volledig in het geheugen of de voortgangsdisplay van het programma is terug te vinden, omdat de boom als het ware steeds naar behoefte wordt opgebouwd en weer afgebroken. Er wordt in onze interessegroep de laatste tijd regelmatig gesproken over het organiseren van een workshop neurale netwerken, en over de programmeertaal waarin die workshop zou moeten worden gegeven. Daarbij zijn talen als JavaScript en Processing genoemd, waarmee grafisch oogstrelende dingen te bouwen zijn; maar als we die workshop bijvoorbeeld ook voor leden van de HCC Robotica interessegroep aantrekkelijk willen maken, zouden talen als C of Python misschien interessanter zijn. Gerard kwam met een nieuw idee op de proppen. Volgens hem heb je twee dingen nodig om een neuraal netwerk te programmeren: ten eerste moet je kunnen programmeren; en ten tweede moet je snappen hoe een neuraal netwerk werkt. Naar zijn mening moeten de deelnemers aan de workshop de programmeervaardigheid zelf meebrengen; onze rol kan dan "beperkt blijven" tot het uitleggen van neurale netwerken en het geven van een reeks programmeeropgaven van toenemende complexiteit. Het voordeel van deze aanpak zou zijn dat elke deelnemer in zijn of haar eigen favoriete taal aan de workshop kan deelnemen. Diverse aanwezigen zouden het een goed idee vinden als de workshop voorbeelden in pseudo-code zou aanbieden, omdat "dat de manier is waarop mensen leren"; maar volgens Gerard stuurt pseudocode het denken wel erg sterk in de richting van een imperatieve (procedurele) programmeerwijze, terwijl hij andere programmeerparadigma's niet bij voorbaat wil uitsluiten. Abraham had wat rondgekeken naar hardware-bordjes voor robotbesturing waarvoor in Python kan worden geprogrammeerd. Hij kwam met drie mogelijkheden: de Arduino Zero, met een Atmel SAMD21 ARM processor, waarop programma's in MicroPython kunnen worden geschreven; het ESP8266 Wifi-controllerbordje dat ook in MicroPython kan worden geprogrammeerd; en, voor het geval MicroPython onvoldoende is en er een "volledige" Pythonversie vereist is, de Raspberri Pi Zero — waarbij het onderliggende besturingssysteem Raspbian wel een vertragende factor zal vormen. Voor dit laatste platform was Abraham bij zijn speurtocht ook nog een interessant boek tegengekomen: Make Your Own Neural Network, door Tariq Rashid. Ben praatte ons nog even bij over de verrichtingen van zijn robotkarretje Madeleine op de Roborama-wedstrijden van afgelopen november. Ze was ingeschreven voor het onderdeel "heen-en-weer" en, zoals Ben dat treffend formuleerde, "het ging bijna goed". Het probleem was dat de vloer bij de wedstrijden blijkbaar stroever was dan die waarop Madeleine geoefend had, zodat ze niet ver genoeg keerde. (De bedoeling was 180° in twee draaien van 90°.) Toch was haar prestatie nog goed voor een vierde plaats in de beginnersklasse, met 5 deelnemers. Theo was op het internet op een tweetal interessante dingen gestuit. Ten eerste zijn er blijkbaar websites die .ai als hoofdniveau (TLD, het laatste stukje) in hun domeinnaam hebben. De lettercombinatie duidt op Anguilla, een Brits overzees gebiedsdeel in de Caribische zee. Als tweede vond hij een neuraal netwerk in 11 regels Python-code. Een speurtocht via Google met de zoektermen "neural network", "Python" en "lines" levert meer van zulke voorbeelden op. Pedro wees ons er op dat Daniel Shiffman is begonnen met de colleges over het tweede deel van The Nature Of Code, dat over machine learning gaat. Tot slot vertelde Gerard nog iets over zijn eigen zeeslag-programma, waarin hij een expertsysteem-achtige rule-based methode gebruikt. Door zelf een aantal puzzels handmatig op te lossen, en te kijken welke redeneringen hij daarbij volgt, kwam hij met een 9-tal oplossingsregels op de proppen. Deze regels heeft hij, voorlopig tamelijk quick and dirty, in Python gecodeerd, samen met een programmalus die telkens kijkt of er één van deze regels kan worden toegepast. Als er in een situatie geen bruikbare regels meer zijn, kan dat verschillende dingen betekenen. Ten eerste kan de puzzel opgelost zijn; het programma controleert dit door alle gevonden scheepsdelen te tellen. Ten tweede is het mogelijk dat het programma nog een oplossingsregel (of meerdere) mist; deze moet(en) dan alsnog worden toegevoegd. Ten derde kan het eventueel voorkomen dat een puzzel meerdere oplossingen heeft. Henk wees er op dat dan alsnog backtracking zal moeten worden toegepast; maar volgens Gerard zou dit geval zich bij goed geconstrueerde puzzels eigenlijk niet mogen voordoen.De huidige regelverzameling voldoet voor de eerste 12 puzzels die Gerard uit de Metro heeft verzameld. Hij demonstreerde het programma dan ook door het los te laten op één van deze testvoorbeelden en de uitvoer daarvan, bestaande uit telkens een vermelding van de toegepaste regel gevolgd door het resulterende diagram, stapsgewijs te doorlopen. Het was dus gewoontegetrouw weer een interessante bijeenkomst, en we kijken nu al weer uit naar de volgende! (GV 3 april 2017) Kort verslag van de bijeenkomst op 4 maart 2017 Gedurende het informele gedeelte, dat door de meeste bezoekers werd benut om geanimeerde gesprekken te voeren, kwamen Albert en Gerard er achter dat de transputer bij Jan thuis niet meer met hen leek te willen praten, en dat hun kennis van het Occam compileer- en linkproces nogal te kort schoot. Tijdens de plenaire sessie werd o.a. het volgende besproken: Twee nieuwe bezoekers stelden zich voor: Andries en Arjan. Hun interesses lijken goed te passen bij de activiteiten van onze groep, waaraan ze hopelijk met hun specifieke kennis en vaardigheden in de toekomst ook het nodige zullen kunnen bijdragen! Jan deelde mee dat hij, mede door onze bijeenkomsten, zeer geïnteresseerd was geraakt in AI, maar dat hij bij zijn pogingen om er meer van te weten te komen een beetje was stukgelopen op de hoeveelheid wiskundige kennis die daarvoor nodig was. Hij heeft besloten zijn werkzaamheden gedeeltelijk te verleggen naar een andere interesse van hem: de simulatie van scheepsbewegingen. Hij wil daarvoor nog steeds wel zijn transputers en de bijbehorende programmeertaal Occam blijven gebruiken. Volgens Gerard had dit (voor ons) nieuwe onderwerp zoveel raakvlakken met artificial life — bijvoorbeeld botsingsvermijding en flocking behaviour (zwermgedrag) — dat Jan ook met deze belangstelling uitstekend bij onze groepering op zijn plaats is. Daarnaast is Jan van plan om ook dit jaar weer met zijn karretje MOOF deel te nemen aan de Roborama-wedstrijden, en zijn ook zijn ambities voor Conapp nog altijd springlevend. Titus demonstreerde een door hemzelf geschreven FreeBasic-programma dat met zichzelf het spel Angels and Devils speelt, dat hij had leren kennen door de gelijknamige aflevering van de televisieserie Numb3rs. In dit spel, dat zich afspeelt op een "willekeurig groot vel ruitjespapier", moet een Engel, met een bepaalde gegeven maximale spronggrootte, zien te ontsnappen naar de oneindigheid, terwijl een Duivel dat probeert te verhinderen door posities voor de Engel ontoegankelijk te maken. In de demonstratie van Titus verscheen een patroon dat Gerard en Peter sterk aan het spel Go deed denken. Ook had Titus een poging gedaan om in Python iets met Genetisch Programmeren te doen. Eerst liet hij zien hoe (gedeelten van) twee rekenkundige expressies werden gecombineerd tot een nieuwe expressie, en daarna hoe er in een rekenkundige expressie een mutatie kan worden aangebracht. Tenslotte liet hij zien dat het programma er nog niet in slaagde om m.b.v. deze bewerkingen een goede benadering van π te vinden, ook al zat er wel verbetering in de uitkomsten van de verschillende opeenvolgende generaties. Arjan had aan de hand van het boek C++ Neural Networks and Fuzzy Logic, geschreven door Valluru B. Rao en Hayagriva V. Rao, een backpropagation neuraal netwerk geprogrammeerd. Hij legde eerst op het whiteboard uit hoe een dergelijk netwerk in elkaar zit en hoe het functioneert, en demonstreerde daarna dat zijn programma onderscheid kon leren maken tussen de letters A, X, H, B, en I, wanneer deze in de vorm van 6×5 bitmaps werden aangeboden. Naar aanleiding hiervan ontspon zich enige discussie over beeldherkenning vanaf (digitale) foto's, waarop al dan niet bepaalde voorbewerkingen waren uitgevoerd. Gerard kwam met het nieuws dat de zeeslagpuzzels, die vroeger regelmatig in het gratis treinkrantje Sp!ts stonden, nu regelmatig in het eveneens gratis treinkrantje Metro te vinden zijn. Destijds hebben diverse mensen van onze interessegroep geprobeerd deze puzzels met de computer op te lossen; enerzijds met een genetisch algoritme, wat niet zo goed werkte, en anderzijds m.b.v. backtracking, waarmee altijd een oplossing werd gevonden (of meer, als er meerdere mogelijk waren). Gerard had hieruit geconcludeerd dat genetische algoritmen minder geschikt zijn voor dergelijke constraint statisfaction problemen, maar een eerdere opmerking van Arjan dat deze er in was geslaagd om met die methode magische vierkanten te maken stemde hem tot nadenken.Daarnaast liet Gerard nog enkele soortgelijke puzzels de revue passeren, met name de tectonic en de tentje-boompje-puzzel, die ook in de Metro te vinden zijn. Volgens hem waren dergelijke puzzels een goede "proeftuin" om de kracht en beperkingen van diverse AI-technieken te bepalen. Hij overwoog om te gaan onderzoeken of de zeeslagpuzzels goed kunnen worden opgelost met een op regels gebaseerd systeem, d.w.z. met een expertsysteem-achtige aanpak. Tenslotte deelde Gerard mee bezig te zijn met het bestuderen van het algoritme van Bresenham: een efficiënte methode om lijnen te tekenen op het computerscherm. Het algoritme kan echter ook gebruikt worden om stappen te plannen in een discrete ruimte, bijv. een schaakbord of een vel ruitjespapier; het vormt dan ook een aanvulling op de zes benaderingen van het "Koningszet"-probleem die Gerard zelf in zijn lezing over dit probleem op een rijtje had gezet. Het was Theo die Gerard destijds het eerst op deze mogelijkheid wees. Al met al dus weer een gezellige en leerzame bijeenkomst! (GV 6 maart 2017) Kort verslag van de bijeenkomst op 4 februari 2017 De volgende onderwerpen kwamen langs: Gerard rakelde een oude activiteit op: het "lamprei-project". (Een lamprei is een primitieve, palingachtige vis.) Aan de hand van een artikel uit Scientific American werd een event-driven BASIC-programma geschreven om het neurale netwerk van één segment uit het ruggemerg van een lamprei te simuleren. Behalve dit programma, dat door Gerard werd gedemonstreerd, leverde het project ook een drietal artikelen voor ons toenmalige tijdschrift "Kennisgeving" op. Volgens Gerard was dit dan ook een van de beter geslaagde projecten waaraan hij heeft (mee)gewerkt. Abraham meldde dat hij een Occam-simulator aan de praat heeft gekregen onder Windows XP en Windows 10. Dit zal het schrijven en testen van programma's voor de transputers van Jan zeker eenvoudiger maken! Een nieuwe bezoeker stelde zich voor: Hens. Hij is geïnteresseerd in "zo slim mogelijk programmeren", vooral van programma's die veel rekenen. Hij zal weinig zaterdagen in de gelegenheid zijn onze bijeenkomsten te bezoeken, en hoopt daarom kennis uit te kunnen wisselen per e-mail tussen de bijeenkomsten door. Henk kwam met wat interessant "leesvoer": Het boek Basics of Digital Computers van John S. Murphy uit 1958, dat vooral historisch interessant is. Het boek Microprocessor Programming for Computer Hobbyists van Neill Graham uit 1977, dat nog steeds nuttig kan zijn, vooral voor mensen die in assembleertaal (willen gaan) programmeren. Het boek De droom der rede. Een geschiedenis van de filosofie van de Grieken tot de Renaissance van Anthony Gottlieb. Een artikel uit De Volkskrant over de Leidse criminoloog Buikhuisen, wiens belangstelling voor het verband tussen hersenen en crimineel gedrag destijds (eind jaren '70) verketterd werd, maar nu weerklank begint te vinden. De column van Herbert Blankestein in PC-Active 292 (feb/maart 2017) over Linux, waarin Henk zelf veel herkenbaars vindt. Titus heeft zich geworpen op beeldherkenning: hij is begonnen met het ombouwen van een programma dat de wortelfunctie leert, tot iets dat een vierkant van een cirkel kan onderscheiden in een zwart-witafbeelding van 63 bij 63 pixels. Hij heeft daarmee, zoals we van hem gewend zijn, een ingewikkeld probleem teruggebracht tot een sterk vereenvoudigde (en dus in principe behapbare), maar toch niet triviale opgave. Helaas werkt het programma nog niet helemaal naar behoren… Pedro vestigde nogmaals onze aandacht op Processing, een softwarepakket om grafisch te programmeren. De huidige versie, 3.2.3, omvat een IDE en veel libraries, o.a. voor natuurkundige simulaties. Zelf werkt Pedro met p5js, dat dezelfde doelstellingen nastreeft, maar dan in JavaScript. Hij doet veel inspiratie op uit de video's van Daniel Shiffman: korte presentaties over alle hoofdstukken van zijn boek The Nature Of Code, behalve – op dit moment – de hoofdstukken over neurale netwerken.Pedro liet twee voorbeelden zien die hij zelf in p5js had geprogrammeerd: Een simulatie van de bewegingspatronen van roofdieren (zoals katachtigen of haaien) op zoek naar een prooi. Een programma dat het Traveling Salesman Problem met 10 steden aanpakt d.m.v. random search: telkens worden 2 punten in de route verwisseld. Pedro "deed" de versie waarbij de handelsreiziger wel alle steden moet bezoeken, maar niet terug hoeft naar zijn uitgangspunt; deze versie geeft meestal een andere oplossing dan de standaardversie waarbij wel in de startplaats moet worden geëindigd. Peter liet ons kennis maken met de digicortex-software, een neurobiologische hersensimulator die hij op het Internet had aangetroffen. Hij demonstreerde hoe je ergens een hersengebiedje kon stimuleren, en hoe dit signaal zich dan verspreidde naar andere gebieden van de hersenen. Heel indrukwekkend programmeerwerk, maar je hebt waarschijnlijk nogal wat kennis van de neuro-anatomie nodig om er zinvol mee te kunnen experimenteren. Wat natuurlijk wel weer een goede aanleiding is om ook eens dieper in dàt onderwerp te duiken! Op de valreep kwam Ronald, na de I2C-workshop van Robotica, nog even melden dat hij het Kohonen-programma had aangepast voor zijn 16×16 array van bestuurbare gekeurde LEDjes. We hopen hier op een van de volgende bijeenkomsten nader op in te kunnen gaan. (GV 5 maart 2017) Kort verslag van de bijeenkomst op 7 januari 2017 De weg-omstandigheden waren bar en boos: wegens sneeuw en ijzel gold een waarschuwing code oranje. Toch waren er van heinde en verre nog 6 mensen naar onze bijeenkomst gekomen, waar op de plenaire sessie de volgende onderwerpen aan bod kwamen: Henk liet op de beamer zien hoe zijn 4-op-een-rij-programma tegen zichzelf speelde. "Net een screensaver", vond hij zelf — temeer daar hij de animatie-effecten heeft uitgebreid: na het beëindigen van een spel stijgt het hele speelbord langzaam ten hemel. Dat oogt erg leuk, maar voegt verder functioneel weinig toe (aldus Henk). Belangrijker is dan ook, dat hij is begonnen met het bedenken van een systeem om alle bordstanden op te slaan. Gebruik makend van het feit dat de kolommen van de onderkant af worden "opgebouwd", heeft Henk een vernuftig systeem bedacht dat slechts 7 bytes per stand vergt. Dit systeem werd door hem met behulp van zijn programma en het whiteboard duidelijk uitgelegd. Er blijft zelfs nog wat ruimte over, die desgewenst gevuld kan worden met signaalbits ("vlaggen") om het programma "slimmer" te laten spelen. Henks uiteindelijke doel is om, met een vergelijkbare methode als door hem toegepast bij de schuifpuzzel en de 2×2×2 Rubik's kubus, vanuit een willekeurige bordstand voor de computer een weg naar de overwinning te vinden. Helaas is het aantal verschillende standen, zelfs als we links-rechtsspiegelingen eruit halen, heel erg groot: voor het aantal bordstanden na 15 zetten (dus met exact 15 vakjes gevuld) blijkt meer dan 1 gigabyte nodig! Het is dus nog maar de vraag of dit doel wel bereikbaar is… Behalve het ruimtegebruik, is ook de volgorde waarin alle bordstanden worden opgeslagen van belang. Die standen moeten dus niet alleen uitputtend worden opgesomd, maar ook nog gesorteerd! Henk gebruikt hiervoor een merge sort, die enige discussie uitlokte. Het ging daarbij vooral over de manier waarop (= de volgorde waarin) de gesorteerde deelrijtjes door Henk werden gerecombineerd. Tijdens het gesprek over de sortering had Ronald een relevante wikipediapagina op de beamer gezet, waarin een animatie van de odd-even sort was opgenomen. Gerard merkte op dat hij een sterke neiging had om vooral in het begin van deze animatie een rotatie te zien, een indruk die door diverse aanwezigen werd gedeeld. Dat is des te merkwaardiger omdat het plaatje zuiver 2-dimensionaal bedoeld moet zijn (horizontaal: rangnummer van het te sorteren item in de reeks, vertikaal: grootte van het item). Waarschijnlijk zijn hieruit interessante lessen over het menselijke visuele waarnemingssysteem te leren… Henk had ook nog het boek De bétacanon. Wat iedereen moet weten van de natuurwetenschappen, dat op de vorige bijeenkomst ter sprake kwam, meegenomen, zodat alle aanwezigen zich er zelf van konden overtuigen dat Democritus en zijn atoomtheorie hierin geen eigen hoofdstuk hebben gekregen. Ronald vestigde de aandacht op het boek Computerschaak, schaakwereld en kunstmatige intelligentie van Jaap van den Herik. Hij heeft het zelf als PDF. Verder meldde Ronald dat het tijdschrift Elektor een zogenaamde "kattendoku", dat is een hexadoku (16-cijferige sudoku) in de vorm van een kattekop, heeft gepubliceerd. Het was niet helemaal duidelijk wat de beperkende voorwaarde (constraint) is bij het invullen, omdat niet alle rijen, kolommen en (onregelmatig gevormde) vakjes precies 16 hokjes tellen. Ook had Ronald weer een nieuwe 2-dimensionale array van "intelligente" (d.w.z. programmeerbare) LEDjes bij zich; ditmaal 16 × 16. Een complicatie is dat de LEDs op de opeenvolgende rijen niet steeds in dezelfde richting zijn doorverbonden, maar a.h.w. "heen-en-weer"; dat vergt natuurlijk extra slimme programmeertrucs als je er bijvoorbeeld een lichtkrant of zo van wil maken. Als laatste bijdrage liet Ronald weten dat de door Henk gebruikte programmeertaal en IDE QBasic ook voor nieuwere Windows-versies (zoals Windows 7) beschikbaar was, onder de naam qb64.exe. Natuurlijk zit de "recursie", d.w.z. de mogelijkheid om een in een programma gebouwde instructiestring meteen weer ter evaluatie aan de interpreter aan te bieden, er dan niet in; deze nuttige faciliteit is door Henk zelf in zijn BASIC-interpreter "gehackt". Abraham had op de winkel- en veilingsite ebay een stropdas van de Association for the Advancement of Artificial Intelligence (AAAI) op de kop getikt. Natuurlijk moest dit worden vastgelegd: onderstaande collage, gebaseerd op een door Kees gemaakte foto, geeft een goede indruk van de das en enkele saillante details. Abraham had ook nog iets te vertellen over zijn lijnvolgrobot PLV, die hij dit jaar wil gaan inzetten op het Roborama-onderdeel "doolhof". Bij dit onderdeel wordt de robot door de scheidsrechter tweemaal op dezelfde willekeurige plek in het lijndoolhof gedropt. De eerste keer mag hij het doolhof gaan verkennen om de weg van de neerzetplaats naar de uitgang te bepalen; de tweede keer moet hij die weg zo snel mogelijk afleggen. Bij de verkenningsfase denkt Abraham het feit te benutten dat weliswaar de neerzetplaats niet van te voren bekend is, maar de plattegrond van het doolhof wel! Hij hoopt dat zijn robot daar gebruik van kan maken om er na een stukje rijden achter te komen waar hij is neergezet. Gerard dacht dat het misschien voordelig kon zijn om de robot tijdens de verkenningsfase gewoon kris-kras over het doolhof te laten rijden i.p.v. strikt de lijn te volgen, maar het was niet bekend of dat wel is toegestaan; en bovendien valt daar weinig mee te winnen, omdat het eerste onderdeel niet op tijd wordt beoordeeld. Abraham had ook nog een technisch probleempje op te lossen: als er zich een heldere lichtbron boven de robot bevindt, kan de schaduw van de arm waarop de camera is gemonteerd door de robot worden aangezien voor een lijn! Hiervoor zijn twee oplossingen mogelijk. Abraham voelt er het meeste voor om de schaduw te laten wegvallen door de grond extra te verlichten met op de robot gemonteerde LEDs. Maar het is natuurlijk ook mogelijk om eventuele storende lichtbronnen af te schermen door een plaatje materiaal als een soort horizontaal lichtscherm boven de camera te monteren. Op zo'n plaatje zou dan tevens een displayschermpje of iets dergelijks gemonteerd kunnen worden. De tijd zal leren welke oplossing het beste werkt. Peter M. was afgekomen op de I2C workshop van Robotica, omdat hij graag wilde weten hoe hij multisensor fusion kan realiseren. Hij heeft namelijk een MPU-6050 sensor, die versnellingen en rotaties in 3 richtingen kan meten. Deze sensor wordt door een Arduino microcontrollerbordje uitgelezen via de I2C-bus. Peter had een mooi programma geschreven dat de veranderingen in de stand (kantelingen) van het Arduino-bordje (met sensor) duidelijk zichtbaar maakte op het scherm van zijn computer. Tot zover geen probleem; maar Peter wil graag ook nog andere sensoren via de Arduino uitlezen, en had gehoopt daar bij Robotica meer over te leren. Helaas, door de sneeuw en ijzel was de workshop afgelast — feitelijk bleek zelfs de hele Roboticabijeenkomst niet door te gaan. Gelukkig zijn Abraham en Ronald ook ervaren hardwareknutselaars. Zij wisten te vertellen dat elke sensor zijn eigen I2C-adres heeft; en mochten die toevallig eens samenvallen, dan kan via een (programmeerbare) switch een extra I2C-poort worden toegevoegd. Al met al vormde deze bijeenkomst toch weer de geslaagde aftrap van een heel nieuw jaar gevuld met interessante AI- en robotica-activiteiten! (GV 23 januari 2017)

20 april 2020

...

Bijeenkomsten gehouden in 2018

  Kort verslag van de bijeenkomst op 8 december 2018 Tijdens het informele gedeelte van de bijeenkomst heeft Pieter Frans de nieuwe laptop en beamer uitgepakt en in gebruik genomen. Alles bleek naar behoren te werken, tot en met de draadloze verbinding van computer naar beamer. (Hiervoor moet wel extra software op de computer worden geïnstalleerd.) In de plenaire sessie kwamen de volgende onderwerpen voorbij: Het hexapawn-project, dat vorige maand door Gerard werd afgesloten, kreeg toch nog een staartje: Thijs gaf een interessante presentatie over de experimenten die hij zelf met hexapawn had uitgevoerd, en de resultaten daarvan. Om te beginnen had hij met depth-first search een game-tree gegenereerd, en hiervan m.b.v. het programma graphviz een tekening (graaf) gemaakt. Uit dat diagram blijkt dat zwart, na het leren van een perfecte strategie, nog maar 10 verschillende bordstanden tegen kan komen. Daarna liet hij diverse programma's het tegen zichzelf en elkaar opnemen: een random-speler, die volkomen willekeurige zetten doet; HER, de luciferdoosjesspeler die het studie-object van de projectgroep vormde; en een programma dat het spel onder de knie probeert te krijgen d.m.v. Q-learning. Enkele interessante resultaten waren: Wanneer twee random-spelers het tegen elkaar opnemen, wint wit in ±60% van de gevallen — opmerkelijk, omdat zwart bij perfect spel altijd wint! De meeste routes door de spelboom leiden dus tot verlies voor zwart, maar door de goede zetten te doen kan hij ze allemaal vermijden. Als HER een optimaal spel leert spelen, zijn daar gemiddeld 31 spellen voor nodig. Bij Thijs had HER die perfecte strategie in slechts ±40% van de gevallen onder de knie gekregen, hetgeen Gerard nogal verbaasde; het bleek dat Thijs het leeralgoritme van HER niet helemaal goed had geïnterpreteerd. Q-learning vond in 99.8% het optimale beleid, na gemiddeld 11 spellen. Ook heeft Thijs nog een MINIMAX-speler geprogrammeerd, die telkens de beste zet kiest door de spelboom te analyseren, en dus geen tegenspeler nodig heeft om het spel te leren. Daarna heeft hij al deze benaderingen ook nog eens toegepast op twee andere spelen: octapawn en boter-kaas-en-eieren. Hiervan deed hij geen verslag, maar misschien komt dat in een latere bijeenkomst nog eens aan de orde. Als vervolg hierop liet Aad aan de hand van een wiskundige formule uit het boek van Barto en Sutton over reinforcement learning zien dat de door HER (de luciferdoosjesspeler) toegepaste leermethode feitelijk een speciaal, simpel geval van Q-learning is. Arjan sloot daar weer naadloos op aan door te vertellen wat er in het eerste gedeelte van het boek van Barto en Sutton zoal te lezen staat. Daarbij verduidelijkte hij o.a. wat jargon (bijvoorbeeld: de value van een actie is de kans dat je wint, en de policy is wat je doet om die kans zo groot mogelijk te maken), en besprak enkele toepassingsvoorbeelden (de keus tussen een driver en een putter bij het golfspel, en het computerspelletje Gridworld). Theo kwam met een aantal nuttige web-adressen van sites waar gratis digitale en e-books zijn te vinden: De home page van Richard. S. Sutton, incompleteideas.net, waar ook het hierboven genoemde boek Reinforcement Learning: An Introduction te downloaden is, dat Sutton samen met Andrew G. Barto schreef; De site bookboon.com, met meest engelstalige boeken over allerlei onderwerpen, waaronder IT & Programmeren, wiskunde, en biologie; goalkicker.com, waar boeken uit de serie Programming Notes for Professionals over diverse programmeertalen en -omgevingen te vinden zijn; Packt met boeken over o.a. machine learning; op deze site moet je wel een account aanmaken. Theo vertelde ook dat de HCC in het kader van het tweede seizoensthema van 2019 iets wil doen met Drones, Robots, en programmeren. Omdat er weinig of geen aandacht zal zijn voor actuele ontwikkelingen in Kunstmatige Intelligentie — het gaat vooral over het zelf programmeren van apparaatbesturingen in bijvoorbeeld Scratch —, zal het bestuur van onze interessegroep dit initiatief belangstellend, maar met enige distantie volgen. Jan wist nog niet op welke plaats hij tijdens de laatste Roborama-wedstrijd met zijn Lego®-karretje was geëindigd, maar was wel op een belangrijke beperking gestuit: hij kon de ultrasone sensoren niet naar wens programmeren, omdat hij geen toegang had tot de ruwe data. Hij wil zich dus meer gaan concentreren op een nieuwe robotwagen, gebouwd uit afvalmateriaal en uitgerust met een aandrijfsysteem met tachogeneratoren. Jan vroeg ons mee te denken over het implementeren van AI-onderwerpen in deze robot. Één idee is om iets te gaan doen met een cameraatje, waarvan de beelden met een Raspberry Pi zouden kunnen worden verwerkt. Zo'n AI-beeldverwerkingssysteem zou bijvoorbeeld goede diensten kunnen bewijzen bij het Roborama-onderdeel blikjes verzamelen. Een suggestie uit de groep is om een neuraal netwerk in te bouwen dat kan worden getraind door activiteiten eerst met handbesturing uit te voeren. (GV 23 januari 2019) Kort verslag van de bijeenkomst op 3 november 2018 Gelijktijdig met onze bijeenkomst vonden ook weer de Roborama-wedstrijden van HCC-robotica plaats, zodat enkele vaste klanten vandaag afwezig waren. In de plenaire sessie kwamen de volgende onderwerpen aan de orde: Zoals aangekondigd op de vorige bijeenkomst hebben Aad, Arjan en Gerard op 10 en 11 oktober de World AI Summit 2018 in Amsterdam bezocht. Arjan gaf een korte, met enkele zelfgemaakte foto's geïllustreerde impressie van dit evenement. Twee onderwerpen noemde hij met name: de unicorn story van het bedrijf Darktrace, dat cyberaanvallen wil pareren met een soort immuunsysteem voor computers en netwerken; en de presentatie van autofabrikant Nissan over het streven om auto's te laten gedachtenlezen door het oppikken van de hersenactiviteiten van hun bestuurder. Aad merkte op dat AI-conferenties tegenwoordig minder over theoretische vorderingen gaan, maar vooral over toepassingen — met alle problemen die daarbij komen kijken. Een kort stukje over de AI Summit, geschreven door Aad, verscheen in PC-Active 303 (december 2018 / januari 2019, pag. 81). Roel maakte ons attent op de aflevering Mens in de machine van het VPRO-programma Tegenlicht, uitgezonden op 21 oktober, waarin wordt gesproken over de vraag hoe we richting moeten en kunnen geven aan de toepassing van AI in de wereld. Kunnen we potentieel superintelligente systemen nog wel beheersen, en hun normen en waarden in overeenstemming brengen met die van de mensheid? Roel legde verband met het sprookje van Lilith, die volgens hem de overgang van matriarchaat naar patriarchaat symboliseerde, en liet merken dat hij zelf ook wel twijfels en vraagtekens had. Thijs dacht dat een oplossing misschien kon worden gevonden in het begrenzen van de actiemogelijkheden van artificiële intelligenties, en Ed stelde dat we ons niet specifiek zorgen moeten maken over bewegende robots, maar over intelligente algoritmen in het algemeen. Peter bracht ons op de hoogte van de voortgang m.b.t. de Introductiecursus Neurale Netwerken. Er hebben zich tot nu toe twee mensen opgegeven. Om een kritische massa te bereiken is besloten de cursus ook open te stellen voor belangstellenden uit de HCC-interessegroepen robotica, programmeren en forth. Leden van onze AI interessegroep die zich al in het kader van de studiegroep neurale netwerken in het gebruikte boek van Tariq Rashid hebben verdiept, kunnen zich desgewenst melden als waarnemer, om van de ontwikkelingen op de hoogte te blijven en eventueel vragen van cursisten te helpen beantwoorden. Peter kwam ook nog met een idee voor een mogelijk project. Hij was op het Internet enkele zeer korte programma's tegengekomen om een neuraal netwerk te implementeren, waaronder één in 11-regels Python en een daarvan afgeleid programma in 11 regels JavaScript. Die 11 regels zijn overigens wat geflatteerd: de python-versie maakt gebruik van de wiskundige programmabibliotheek numpy — waarvan je dus in ieder geval de in dit programma gebruikte functies zult moeten snappen — en ook in de JavaScript-versie zijn de definities van de matrixbewerkingen en de sigmoide activeringsfunctie niet meegeteld. Het leek Peter interessant om deze programmaatjes in een projectgroep te analyseren en onderling te vergelijken. Wanneer hij zijn bedoelingen nog wat meer heeft kunnen concretiseren, horen we hier ongetwijfeld meer over. De rest van de plenaire sessie werd gevuld door leden van de projectgroep hexapawn, die gedurende een maand (in dit geval: 5 weken) aan de slag waren gegaan met een artikel van Martin Gardner in Scientific American van maart 1962. Hierin wordt beschreven hoe je met luciferdoosjes en gekleurde kralen een zelflerend systeem kunt construeren om een eenvoudig spelletje te spelen. Voor dit doel heeft Gardner zelf het spel Hexapawn bedacht, dat gespeeld wordt met 6 schaakpionnen op een 3×3-bordje en waarvoor slechts 19 luciferdoosjes nodig zijn. Ter vergelijking: Tic-Tac-Toe (boter-kaas-en-eieren) vereist zo'n 300 luciferdoosjes! Gerard, die het initiatief tot het project had genomen, legde eerst de spelregels van hexapawn en het doel van het project uit. De opzet was niet om het luciferdoosjessysteem daadwerkelijk te bouwen, maar om het in een zelfgekozen programmeertaal te simuleren, en zo de achterliggende leermethode (een vorm van reinforcement learning) beter te begrijpen. Omdat een hardware-versie echter erg nuttig kan zijn voor demonstratiedoeleinden, had Gerard toch 19 luciferdoosjes opgescharreld en van de benodigde etiketten voorzien; gevuld met M&M's kan dit op diverse evenementen als een leuke aandachttrekker dienen. Daarna demonstreerde Theo zijn versie: een Python-programma dat alle mogelijke bordstanden van hexapawn genereert en vastlegt in een HTML-met-CSS-bestand. Met een browser kan de gebruiker deze game tree doorlopen; programmacode in JavaScript zorgt ervoor dat het systeem zijn tegenzet kiest en slechte zetten afleert. Het resultaat ziet er fraai uit en is (met mogelijke enkele aanpassingen) zeer geschikt om op onze website te worden geplaatst. Otto had een mooi zelflerend hexapawn-programma in Microsoft Excel gemaakt, waarin de gebruiker zetten kan invoeren door de hokjes van herkomst en bestemming aan te geven. Helaas was hij door ziekte verhinderd het zelf te komen demonstreren, en Gerard kon het onder LibreOffice onder Linux niet aan de praat krijgen; maar dankzij de Windows-computer van Rudolf konden we Otto's versie toch in actie zien. Gerards eigen versie was geschreven in C en had een simpele command-line interface. Hij had nog diverse ideeën om zijn eigen programma te verbeteren, en om met alternatieve leerregels te experimenteren, en ook om het spel hexapawn zelf nader te analyseren, waarover we in de toekomst misschien nog wel meer zullen horen. Het huidige project werd door hem echter officieel voor beëindigd verklaard. Twee onderwerpen kwamen vandaag niet aan bod. Titus had zelfgeschreven BASIC-programma's over neurale netten en duiven en haviken op een USB-stick, maar helaas geen computer bij zich; en Aad wilde iets vertellen over hexapawn i.v.m. het boek van Sutton en Barto over reinforcement learning, maar moest helaas eerder weg. Hopelijk komen deze interessante bijdragen op een volgende bijeenkomst alsnog aan de beurt. (GV 6 december 2018) Kort verslag van de bijeenkomst op 6 oktober 2018 Ook deze maand kwamen er in de plenaire sessie weer verscheidene interessante onderwerpen aan bod: Gerard begon met twee korte mededelingen. Ten eerste: hij gaat op 10 en 11 oktober met Aad en Arjan naar de World Summit AI 2018 in Amsterdam. En ten tweede: Enno Diekema, die in het verleden voorzitter van onze AI interessegroep was, hoopt (en verwacht) in november bij de Faculteit der Natuurwetenschappen, Wiskunde en Informatica van de Universiteit van Amsterdam tot doctor gepromoveerd te worden. Daarna nam Gerard het initiatief tot de oprichting van een nieuwe projectgroep. Hij was een oud artikel van Martin Gardner tegengekomen, oorspronkelijk verschenen in Scientific American van maart 1962, en enkele jaren later gebundeld in het boekje Further Mathematical Diversions (dat ook verschenen is onder de titel The Unexpected Hanging). In dit artikel beschrijft Gardner de constructie van een machine, gemaakt van luciferdoosjes en kralen, die leert hexapawn te spelen, een uiterst simpel van het schaakspel afgeleid 2-persoonsspelletje. Gerard heeft geconstateerd dat deze constructie leert d.m.v. reinforcement learning en hoopt dat de projectgroepleden door bestudering van het artikel, programmering van de Hexapawn Educable Robot (HER), en raadpleging van informatie over reinforcement learning (bijv. de Wikipedia-pagina over dit onderwerp) meer van deze leermethode zullen gaan begrijpen. Als deelnemers hebben (naast Gerard zelf) Otto, Roel, Ronald en Theo zich aangemeld; Aad, Ed, Peter en Pieter Frans wilden graag als waarnemer op de hoogte gehouden worden van de vorderingen van de projectgroep. De geplande projectduur is één maand — in dit geval vier weken. Peter vroeg nogmaals of hij het Trello-bord "Introductie Neurale Netwerken" als Massive Open Online Course aan de buitenwereld kon aanbieden. Cursisten zijn daarbij zelf verantwoordelijk voor hun eigen leerproces a.d.h.v. het boek Make Your Own Neural Network van Tariq Rashid; het bord biedt echter enige aanvullende en verdiepende informatie, en moet vooral gaan fungeren als middel om met medeleerlingen en cursusleiding te communiceren. Er is momenteel al wel een online cursus op educative.io op basis van het boek van Rashid, maar daar is weinig inhoudelijke feedback bij. Het plan is om de cursus op Trello voorlopig alleen binnen de HCC aan te bieden en het initiatief na een half jaar te evalueren; tien of meer deelnemers zou een leuk resultaat zijn. Ruim de helft van de aanwezigen betuigde steun aan het plan, niemand uitte er ernstige bezwaren tegen. Roel lichtte nogmaals beknopt zijn ambities toe: kinderen bezig krijgen met techniek in het algemeen, en robotica en AI in het bijzonder, door ze iets moois te laten zien, en vervolgens te laten zien wat de eerste stap is om dat te bereiken. Hij zou daar nog steeds graag onze interessegroep bij willen betrekken. Henk had een BASIC-programma geschreven om rikudo-puzzels op te lossen. Bij zulke puzzels is de opdracht om op een zeshoekig vakjespatroon, waarin sommige vakjes al van een getal zijn voorzien, een doorlopende route van aangrenzende hokjes te construeren waarbij op elke achtereenvolgende stap het getal in het hokje één hoger wordt. De puzzelaar wordt daarbij geholpen (en beperkt!) door een zwart balletje op sommige grenzen tussen twee hokjes, dat aangeeft dat die hokjes opeenvolgende getallen moeten krijgen.Henks programma maakt gebruik van backtracking; het afbreken van een probeersel wanneer er een groepje van één of meer vakjes geïsoleerd raakt, werkt daarbij sterk versnellend. Wel vroeg Henk zich af of het programma niet intelligenter kon: alle intelligentie in het programma komt nu van de programmeur, en bovendien is backtracken meestal een tijdrovende methode. Ben suggereerde dat genetisch programmeren of best-first search misschien mogelijkheden bieden, en Ronald vermoedde dat het efficiënter zou kunnen zijn om ergens in het midden van de gezochte keten te beginnen. Theo kwam met een kijktip: het actualiteitenprogramma Nieuwsuur heeft recent enkele reportages over kunstmatige intelligentie uitgezonden. A Bright New World: de impact van Artificial Intelligence, een serie van 5 korte (±6 min.) videofilmpjes, waarin experts worden geïnterviewd over diverse maatschappelijke gevolgen van AI; AI-special: het spanningsvlak tussen mens en machine, een gesprek met twee Nederlandse deskundigen over bovenstaande filmpjes; Op de NPO-site staat ook een tot nadenken stemmend internet-artikel, geïllustreerd met enkele korte video's en een wat langer audiofragment, over de risico's van autonome wapensystemen, ook wel Killer Robots genoemd. Otto, een nieuwe bezoeker, stelde zich voor. Hij was al langer HCC-lid, maar deed niets meer met zijn oude interesse (videobewerking); en omdat zijn zoon AI studeert wil hij zich, nu hij gestopt is met werken, zelf ook in dat onderwerp verdiepen. Zoals eerder gemeld, heeft Ben zich gestort op Transputer-prolog. Omdat documentatie daarvan ontbrak is hij begonnen zich in te lezen in concurrent programming. In een geschikt (d.w.z. niet te theoretisch) boek hoopt hij binnenkort toe te komen aan de timingsaspecten; deze kennis denkt hij ook te kunnen gebruiken voor Madeleine (zijn robotwagentje), die helaas niet op tijd klaar zal zijn voor de Roborama-wedstrijden volgende maand. Bens verhaal gaf aanleiding tot een discussie over wat deadlock precies is; ook werd de relevante vraag gesteld — maar (nog) niet beantwoord — wat dit alles met AI te maken heeft. Tot slot vertelde Aad waarmee hij momenteel bezig is. Eerst demonstreerde hij zijn lerende muis, die hij naar de Java-programmeeromgeving NetBeans had overgezet. Vervolgens liet hij zien hoe het neurale netwerk van de muis, in de oorspronkelijke versie door hemzelf ontworpen, nu werd geconstrueerd op basis van een bouwplan dat uit genen van 11 bytes bestaat. Het aantal genen en de precieze inhoud ervan zijn het product van een genetisch algoritme (evolutie in de computer), dat probeert m.b.v. crossover en een mutatiekans van 10% de beste netwerkarchitecturen te vinden vanuit een beginpopulatie van 200 random individuen. Interessant was dat er ook netwerken ontstonden die vals spelen door bij de groene (lekkere) plant rondjes te gaan draaien! Naar aanleiding hiervan wees Thijs ons nog op een artikel van Kenneth O. Stanley en Risto Miikulainen over Neuroevolution of Augmenting Topologies (NEAT), waarin ook het (laten) evolueren van neurale netwerken in de computer wordt besproken. Er werden vandaag dus vooral veel lopende activiteiten gepresenteerd, en hopelijk gaan we daar in de nabije toekomst meer over horen. (GV 28 oktober 2018) Kort verslag van de bijeenkomst op 1 september 2018 Voorafgaand aan de plenaire sessie kwam de projectgroep JavaScript voor het laatst bijeen. Er was gedurende de vakantiemaanden nauwelijks per e-mail gecommuniceerd, en Gerard ontbond de groep omdat de houdbaarheidsduur van dit project naar zijn mening was verstreken. De projectdoelstellingen waren niet gehaald, en Gerard moest dan ook bekennen dat die misschien iets te ambitieus waren geweest. Toch is het geen verspilde tijd en moeite geweest: Niek, voor wie dit project de eerste kennismaking met programmeren was, wil zich met hulp van Gerard graag verder in JavaScript bekwamen; Peter had op het Internet veel gezocht naar informatie over JavaScript en JavaScriptprogramma's; en Pieter Frans verwacht bij het programmeren in Processing (dat gebaseerd is op JavaScript) profijt te hebben van de opgedane basiskennis. Gerard liet zien hoever hij gekomen was met de JavaScript-woordenlijst (die niet in de oorspronkelijke projectopzet zat) en het programma (n-grambenaderingen van een Nederlandse tekst). Hoewel onvoltooid, waren deze maaksels toch erg leuk om te zien, en Gerard is vast van plan om ze in de toekomst nog eens af te maken. In de plenaire sessie kwam verder nog het volgende naar voren: Roel, die in de jaren '90 aktief was in de toenmalige werkgroep neurale netwerken (niet te verwarren met de huidige studiegroep!), las een zelfgeschreven stukje voor als inleiding op een belangrijke vraag die hij aan de groep wou voorleggen: Hoe dragen we onze kennis, met name op AI-gebied, over op de jeugd (en eventuele andere belangstellenden)? Roels vraag had een dubbele achtergrond: de wens om bij zijn kleinkinderen belangstelling voor techniek te wekken en ze daarover van informatie te voorzien; en de gedachte dat de AI interessegroep in zijn 30-jarige bestaan toch wel een schat aan expertise moet hebben verzameld. De uitgebreide discussie die hierop volgde had geen duidelijke slotsom. Niemand bood zich aan om cursussen en/of studieboeken samen te stellen. Daarnaast werd de opvatting geuit dat de jeugd tòch liever zelf op Internet op zoek gaat naar informatie — als ze überhaupt al geïnteresseerd zijn in techniek; veel jongeren kiezen liever rijke en beroemde voetballers, zangeressen of filmsterren als rolmodel. En vermoedelijk is onze deskundigheid veel minder groot dan Roel ons toedicht: 30 jaar lijkt wel lang, maar door het verloop onder de aktieve leden heeft er ook kennisverlies plaatsgevonden; en bovendien is het hobby, vrijetijdsbesteding, en dus veel minder intensief en doelgericht dan een echte studie of beroepsmatige aktiviteit. Pieter Frans demonstreerde een tweetal Processing-programma's die hij had gemaakt naar aanleiding van het YouTube-kanaal The Coding Train van Daniel Shiffman: Het eerste programma toont een soort beestjes in een wereld met spontaan her en der verschijnende voedzame en giftige planten. Omdat de energievoorraad van de beestjes lineair afneemt met de tijd, moeten ze voedzame planten verorberen om op te laden; nuttigen ze echter een giftige plant, dan neemt hun energie ineens nog een stuk verder af. Doordat het langstlevende beestje zichzelf kopieert (met een mutatie), vormen de afstanden waarop ze resp. voedsel en gif bespeuren een selectiecriterium dat hun evolutie stuurt. Dit gaf aanleiding tot enkele reacties: Thijs merkte op dat genetische algoritmen ook wel worden gebruikt om de structuur van een neuraal netwerk te laten evolueren; Ben meldde dat genetic programming bij classificatieproblemen soms beter werkt dan een neuraal netwerk; en Peter vroeg zich af of je een neuraal netwerk ook een programma kunt laten schrijven. Het tweede programma toont een ander soort beestjes, die enkele muren moeten omzeilen om een doel te bereiken. Ze hebben een chromosoom bestaande uit 800 verplaatsingsvectoren. Met een populatiegrootte van 1000 was er een duidelijke vooruitgang zichtbaar: uiteindelijk werd het doel bijna bereikt. Peter vroeg wie er op 29 september namens onze interessegroep aanwezig wilde zijn op de MegaCompUfair die jaarlijks door de HCC-interessegroep CompUsers wordt georganiseerd; Aad bood zich aan om samen met Gerard de stand te bemannen. Peter wilde graag het Trellobord over het boek Make Your Own Neural Network van Tariq Rashid openstellen voor belangstellenden uit andere HCC-interessegroepen. Het bord bevat communicatie van de studiegroep neurale netwerken, en Peter wil het aanbieden als een soort massive open online course. De bedoeling is dat cursisten het boek gebruiken voor zelfstudie, en dat ze over de leerstof vragen kunnen stellen en discussies kunnen voeren via Trello. Gerard vond dat het bord vooralsnog te weinig extra informatie en structuur bevat om als cursus of workshop aangeboden te worden, en Ben vroeg zich af waarom de vraagbaak- en discussiemogelijkheid, die dus blijkbaar de hoofdmoot van het aanbod uitmaakt, dan niet via een forum in bijv. Google Groups kan worden gerealiseerd. Ed stelde voor dat Peter een concept gaat maken van de aankondiging waarmee hij dit bord wil openstellen, en Peter zegde dat toe. Ben memoreerde nogmaals de stand van zaken met Transputer-Prolog, waarvan de voortgang wegens omstandigheden al geruime tijd stagneert. Abraham had Brain Aid Prolog op een Transputersysteem geïnstalleerd. Nu wil Ben hierop de Torens van Hanoi, in Prolog een populaire programmeeropgave, aan de praat krijgen om te kijken of parallel processing een snellere verwerking oplevert. Dit is nog niet zeker, omdat de standaardoplossing gebruik maakt van recursie en de voortzetting best wel eens zou kunnen moeten wachten op de afhandeling van de recursieve aanroep. Ben benadrukte nog dat er verschil is tussen parallel en distributed (zoals server/client) computing. Niek vestigde de aandacht op de interview-reeks Kijken in de ziel, waarin dit seizoen geestelijke leiders aan het woord kwamen. Daarbij kwam natuurlijk ook het geest-lichaamprobleem aan de orde. Hij liet het boek The Animal Spirit Doctrine and the Origins of Neurophysiology rondgaan, dat beschrijft hoe filosofische opvattingen over de werking van de geest na vele eeuwen uiteindelijk plaats maakten voor wetenschappelijke. Roel vroeg zich af of er onderscheid gemaakt moet worden tussen geest en ziel, naar analogie met wijn, waar de ziel bij de fles hoort — de ruimte onder de holle bodem — en de geest (dat is: de alcohol) bij de wijn. Er werd opgemerkt dat de bekende Nederlandse neurobioloog Dick Swaab dit onderscheid niet schijnt te maken. Tenslotte was het woord aan Arjan, die geïllustreerd met wat beelden kort vertelde over zijn vakantiebezoek aan Bletchley Park in Engeland, waar hij in het National Museum of Computing o.a. de gereconstrueerde Bombe en de Harwell Dekatron Computer heeft gezien. (GV 1 oktober 2018) Kort verslag van de bijeenkomst op 7 juli 2018 Op deze bijeenkomst werd o.a. het volgende besproken: Een nieuwe bezoeker stelde zich voor: Aad was in de jaren '90 een zeer actief lid van de toenmalige werkgroep Neurale Netwerken, kwam sindsdien niet meer naar onze bijeenkomsten, maar wil deze interesse weer oppakken nu hij daarvoor weer wat meer gelegenheid heeft. Hij is de schrijver van een Pascalprogramma over een lerende muis en het bijbehorende toelichtende artikel (Reinforcement Learning, de moeite van het lezen nog steeds dubbel en dwars waard!), en in onze bibliotheek zijn ook de leesmappen over neurale netwerken nog aanwezig die hij destijds heeft samengesteld. Gerard vertelde dat de projectgroep JavaScript, die hij op de vorige bijeenkomst had opgestart en die een geplande looptijd van één maand zou hebben, niet alle voorgenomen werkzaamheden had kunnen afronden. Omdat dit mede werd veroorzaakt door onvoorziene omstandigheden (waaronder zijn medewerking aan het artikel over onze interessegroep in PC-Active 301), wil hij het project tijdens de vakantiemaanden voortzetten. Arjan heeft Demystifying Deep Reinforcement Learning" van Tambet Matiisen, dat vorige keer door Thijs werd aanbevolen, gelezen en vond het een verhelderend artikel. Hij heeft geprobeerd om het Deep Q netwerk, dat in het artikel wordt uitgelegd, toe te passen op tectonic-puzzels (m.b.v. Keras, NumPy en TensorFlow), maar vooralsnog zonder succes. Dat kan komen door de reward die hij het netwerk bij iedere poging geeft: het aantal toegestane (maar niet per se correcte) cijferplaatsingen. Gerard merkte op, dat naarmate het ingevulde diagram meer toegestane cijfers bevatte, er waarschijnlijk ook een hoger percentage correct is; dus correctheid zou misschien kunnen worden meegenomen door de reward sterker dan lineair te laten toenemen met het aantal toegestane cijfers. Diederik suggereerde om ook naastgelegenheid op een of andere manier in de reward op te nemen. Ed bracht het boek Homo Deus van de Israelische historicus Harari onder onze aandacht. Harari schreef eerder het boek Sapiens, waarin hij het succes van de menselijke soort beschrijft en tracht te verklaren. In Homo Deus (de titel is een variatie op een uitspraak van Spinoza, Natura deus: God, dat is de natuur) borduurt hij hier op voort, en probeert daarbij ook naar de toekomst te kijken. Dat leidt tot vele vragen, van min of meer filosofische aard: De mens streeft naar eeuwig leven en eeuwig geluk; waar zal dat toe leiden? In de Industriële Revolutie is handwerk vervangen door denkwerk; wat komt er binnenkort voor het denkwerk in de plaats? Welk recht hebben wij om door superieure intelligenties beter behandeld te worden dan wij met bijv. varkens en kippen doen? Als mensen algoritmen zijn, waar blijft dan de vrije wil? Is bewustzijn meer dan alleen het verhalende ik? En hoe hard is het nodig, met name voor intelligentie? Henk had QBasic-programma's geschreven voor twee puzzeltypes die regelmatig in de Metro verschijnen: Tentje-boompje, waarin op een vierkant van ruitjespapier een aantal bomen zijn geplaatst. Naast elke boom (horizontaal of vertikaal) moet precies één tentje worden geplaatst, maar tentjes mogen elkaar niet raken, ook niet diagonaal. (Bomen kunnen elkaar wel raken, en doen dat ook dikwijls.) Kamertje verhuur, ook op een ruitjesvierkant, waarbij een gesloten polygonale lijn moet worden getrokken tussen de ruitjes door. De lijn mag zichzelf niet raken of snijden, en diverse vakjes bevatten een cijfer (van 0 tot 3) dat aangeeft hoeveel zijden (van de vier) deel uitmaken van de lijn. Ook kunnen sommige segmenten van de polygonale lijn gegeven zijn. Henks maakt hierbij geen gebruik van backtracking, maar van logische gevolgtrekkingsregels die specifiek zijn voor het probleem, en die in zijn BASIC-programma zitten ingebakken. Daardoor vormen die programma's dus een soort expertsystemen. Gerard memoreerde dat Titus al eens, voorlopig zonder succes, geprobeerd heeft om kamertje verhuur aan te pakken met een genetisch algoritme. Zelf vroeg hij zich af of het met een cellulaire automaat zou kunnen; hij had ooit een artikel gelezen waarin cellulaire automaten werden gebruikt om doolhoven op te lossen. Ronald heeft op zijn Arduino-bordje een potentiometer aangesloten: een draaiknop, waarvan de stand door het bordje kan worden uitgelezen. Hij wil deze voorziening, op advies van Gerard, gaan gebruiken om de leerfactor van zijn Kohonennetwerk handmatig te controleren. Dat helpt om een intuïtief gevoel te krijgen voor het effect van die leerfactor, en zodoende te achterhalen welk verloop deze moet hebben om het netwerk in een gewenste toestand tot rust te laten komen. Titus liet weer een interessant programmaatje-in-aanbouw van eigen hand zien: vortaro.bas. Vortaro betekent woordenboek in het Esperanto, een taal die niet is geëvolueerd maar ontworpen, en daardoor meer consistentie en logica vertoont dan andere talen. Dit is ook goed te zien bij de woordvorming, waar ingewikkelde begrippen kunnen worden uitgedrukt met behulp van voor- en achtervoegsels die rondom een stamwoord zijn gegroepeerd. Een voorbeeld is malsanulejo, bestaande uit mal- (niet), san- (gezond, stamwoord), -ul (persoon), -ej (plaats) en de uitgang -o die alle zelfstandige naamwoorden krijgen. De betekenis is dus plaats waar ongezonde mensen zijn: ziekenhuis. En samideano, van sam- (zelfde), ide- (idee, stamwoord), -an (volgeling, aanhanger), en -o, betekent geestverwant. Het programma van Titus moet dergelijke woorden gaan uiteenrafelen in hun samenstellende delen, en die vertalen naar het Nederlands en het Engels. We zullen in september zien hoe het verder gaat met al deze activiteiten, en welke nieuwe bezigheden er zoal in de vakantie zijn verzonnen. (GV 24 september 2018) Kort verslag van de bijeenkomst op 2 juni 2018 Gewoontegetrouw was er voorafgaand aan de plenaire sessie weer een overleg van de studiegroep neurale netwerken. Peter gaf een wat uitgebreidere toelichting op Trello, de website die nu door de studiegroep wordt gebruikt om de activiteiten te plannen en coördineren. In Trello wordt een project of activiteit georganiseerd op een board, de digitale versie van een planningsbord uit de "echte wereld". Op zo'n bord vind je een aantal lijsten, analoog aan de kolommen op een echt planningsbord. Die lijsten kunnen voor van alles gebruikt worden: deeltaken, tijdsperioden, stadia waarin (deel)activiteiten verkeren, enz. In elke lijst kunnen dan weer kaarten worden aangemaakt, met informatie, vragen, opmerkingen, aantekeningen, enz. Een behoorlijk flexibele opzet dus, die door de gebruikers op veel verschillende manieren kan worden ingevuld om vorm te geven aan diverse vormen van samenwerking op allerlei gebieden. Tijdens dit overleg kwam ook nog een interessante web-link langs: een (Engelstalige) algemene inleiding in de AI. Geen programmacode en nauwelijks wiskunde, maar wel verklaringen van termen, schema's, en lijstjes over zo ongeveer alle deel- en toepassingsgebieden van Kunstmatige Intelligentie — dit alles samengevoegd tot een samenhangend overzicht, zij het in soms wat krom Engels. Een waardevolle informatiebron voor beginners en gevorderden! Op de website waar dit staat, tutorialspoint, kunnen overigens nog veel meer tutorials worden gevonden, ook over AI-onderwerpen en programmeren. In de plenaire sessie kwamen de volgende onderwerpen ter sprake: Gerard wilde een projectgroep Javascript opstarten. De bedoeling was om de basisbeginselen van deze programmeertaal onder de knie te krijgen aan de hand van een drietal artikelen uit het computertijdschrift c't (november en december 2014, jan/feb 2015). De geplande projectduur was 1 maand (in dit geval 5 weken): één week voor elk artikel, één voor het schrijven van een eigen programmaatje (wat dat moet doen was nog nader te bepalen), en de laatste week als uitloopmogelijkheid (reservetijd). Gerard had naast zichzelf plaats voor drie andere deelnemers; Pieter Frans, Niek en Peter meldden zich aan. Diederik kwam terug op de open source deep learning chess engine Leela Chess. Mensen kunnen m.b.v. hun computer schaakpartijen aanleveren als trainingsdata, hetzij door zelf tegen Leela Chess te spelen, hetzij door via een interface als Arena Chess een (ander) schaakprogramma tegen Leela Chess in te zetten. Ook vestigde Diederik de aandacht op het forum, waarop interessante discussies en informatie te vinden zijn. Niek vertelde zelf een exemplaar van Gödel, Escher, Bach te hebben aangeschaft. Het aantal geïnteresseerden in dit boeiende boek lijkt dus te groeien; misschien zit er in de toekomst een project- of studiegroepje in…? Thijs hield een zeer leerzame presentatie over reinforcement learning, waarbij het systeem niet getraind wordt met een verzameling juiste antwoorden, maar op basis van goed/fout-signalen zelf moet uitzoeken hoe het moet. Daarbij kwamen begrippen aan bod als discounted rewards (je moet acties die verder in het verleden liggen minder zwaar meewegen dan recentere handelingen), exploration (voor een optimaal leereffect moet je af en toe iets anders doen dan de aanbevolen actie), en de Bellman-vergelijking, die een rol speelt bij dit soort optimalisatieproblemen. Wie het naadje van de kous wil weten kan het nalezen in het artikel Demystifying Deep Reinforcement Learning dat door Thijs is geraadpleegd. Verder liet Thijs ons kennismaken met de website OpenAI Gym (ook te vinden op GitHub), met allerlei omgevingen om programma's voor reinforcement learning uit te proberen en te trainen. Zelf was hij bezig om met behulp van een SELU (Scaled Exponential Linear Unit) activatiefunctie en TensorFlow de maanlander een zachte landing te laten maken, maar dat was nog niet gelukt. Pieter Frans vertelde dat hij bezig was geweest met een systeem dat Tic-Tac-Toe (boter, kaas en eieren) leerde spelen m.b.v. reinforcement learning, maar had daar (nog) geen echt verhaal over te vertellen. Op Quick-Draw ging hij wel wat uitgebreider in. Dat is een online AI-experiment van Google, waarbij de gebruiker een zestal meestal concrete begrippen krijgt voorgeschoteld, en van elk begrip binnen 20 seconden — en dat is niet erg lang, probeer het maar! — een tekeningetje moet maken. Het achterliggende neurale netwerk probeert dan te achterhalen wat jouw krabbeltjes voorstellen. Wanneer QuickDraw één of meer tekeningetjes goed heeft geïnterpreteerd — dat hangt natuurlijk sterk van jouw tekenkunsten af, en die komen waarschijnlijk een stuk beter uit de verf als je een touchscreen hebt dan wanneer je het met een computermuis moet doen —, wordt de eer geheel aan de tekenaar gegeven: Well drawn, krijg je te lezen. Alleen wanneer geen van de zes probeersels wordt herkend, reageert het systeem met oops. Je kunt ook kijken in de database met tekeningetjes waarmee jouw krabbels worden vergeleken. De tekeningen worden dynamisch opgeslagen, d.w.z. de volgorde waarin de lijntjes, cirkeltjes, enz. op het scherm zijn gezet wordt ook geregistreerd. Behalve als experiment in AI (waarvan Google er nog meer heeft), kan een systeem als dit omgekeerd ook gebruikt worden om te leren tekenen of schrijven… Ben heeft door omstandigheden niets met Prolog voor de Transputer kunnen doen. Theo vroeg de aandacht voor ROS (Robot Operating System), dat het aansturen van robots voor programmeurs moet vereenvoudigen zoals een gewoon Operating System het gebruik van de computer vergemakkelijkt. In tegenstelling tot wat de naam suggereert, is ROS, evenals andere, soortgelijke systemen, echter geen besturingssysteem in de geijkte betekenis van het woord, maar een verzameling middleware. Theo kwam hiermee omdat bij HCC Robotica een studiegroepje is gevormd om zich in dit onderwerp te verdiepen. Arjan is bezig met het boek Deep Learning with Python van Francois Chollet. De eerste vier hoofdstukken vormen een algemene inleiding, het vijfde gaat over convolutionele netwerken voor computer-visie. Een interessant punt is dat de NN-programmabibliotheek keras een image data generator bevat, die de hoeveelheid trainingsdata kan vergroten door van gegeven voorbeelden varianten te verzinnen. Klaas had proefondervindelijk ervaren dat de prestaties van een cijfer-herkennend neuraal netwerk verslechteren als je de trainingsdata op cijfer sorteert. Volgens Peter was dit effect uit de literatuur al wel bekend. (GV 13 september 2018) Kort verslag van de bijeenkomst op 5 mei 2018 Voorafgaand aan de plenaire sessie vond weer een overleg van de studiegroep "Neurale Netwerken" plaats. Peter gaf een korte demonstratie van Trello, een website die kan worden gebruikt om de activiteiten binnen (werk)groepen te coördineren. Hij stelde voor om van fleep af te stappen en de communicatie voortaan via Trello te laten verlopen. Er leken geen grote bezwaren tegen deze stap te bestaan; Klaas vond Trello "overzichtelijker dan fleep".Arjan stelde voor om verder te gaan met Deep Learning with Python van François Chollet na afronding van Tariq Rashids Make Your Own Neural Network. Er was wel belangstelling voor dit boek, maar de meeste deelnemers zijn nog niet zo ver, dus er is nog tijd om ook alternatieven te bekijken.Tenslotte werd er nog gesproken over de vraag wat we deelnemers aan de studiegroep aanbieden, wat we willen aanbieden, en wat we kunnen aanbieden. Dit onderwerp komt vermoedelijk in de toekomst nog wel vaker ter sprake. In de plenaire sessie kwamen nog de volgende onderwerpen aan bod: Kees attendeerde ons op een on-line cursus Neural Networks for Machine Learning. De cursus wordt gegeven door Geoffrey Hinton, een grote naam op het gebied van neurale netwerken, en wordt aangeboden door de universiteit van Toronto in het kader van coursera. (Coursera is een samenwerkingsverband waarin universiteiten uit diverse landen on-line cursussen aanbieden.) De cusus start op 14 mei, bestaat uit 16 lessen van één week, en is gratis — tenzij je een certificaat wilt. Gerard zocht nog wat gegadigden om de stand van onze AI-interessegroep te bemannen op de HCC!Expo, te houden op zaterdag 12 mei. Arjan en Edwin waren bereid om namens de studiegroep Neurale Netwerken de bezoekers te woord te staan. Daarnaast zal Peter aanwezig zijn om het onderwerp "AI en ethiek" te belichten, Abraham voor het verband tussen AI en Robotica, en Gerard als "regelneef" (oftewel: coördinator). Arjan vestigde de aandacht op twee YouTube-kanalen: Op Arxiv Insights worden recente wetenschappelijke artikelen over machine learning uitgelegd in video's van ongeveer een kwartier. Arjan toonde een stuk van de uitleg van adversarial examples: datavoorbeelden (zoals afbeeldingen die herkend moeten worden) die speciaal geconstrueerd kunnen worden om een neuraal netwerk het bos in te sturen, terwijl op het oog niet daarvan te onderscheiden plaatjes wèl correct worden geklassificeerd. Een reeks van 18 colleges over machine learning, gegeven door Andrew Ng van Stanford University. Deze cursus is ook te vinden op Coursera. Klaas voegde daar nòg een interessante YouTube-tip aan toe: de MIT-OpenCourseWare lezingenreeks van Patrick Henry Winston over Artificial Intelligence. Ben vertelde dat hij en Abraham nu een werkende Prolog op de Transputer hebben. Het betreft een speciale Prolog-compiler voor concurrent programming uit 1994, gebaseerd op de versie van Clocksin & Mellish (die in de jaren '80 een standaard leerboek over Prolog schreven) met een aantal uitbreidingen. Ben demonstreerde een eenvoudig programmaatje waarbij Prolog een aantal uitspraken over genegenheid tussen personen kreeg voorgeschoteld, en daarover vragen (queries) beantwoordde. Het volgende doel is de Torens van Hanoi in Prolog, waarbij misschien te zien zal zijn of het toevoegen van extra Transputers aan het systeem de oplossing versnelt… Edwin was bezig in het boek Machine Learning for Hackers, van Drew Conway en John Myles White. Er worden technieken als classificatie, rangschikking, regressie, clustering en optimalisatie behandeld, met leuke toepassingen als spam-filtering, het breken van een simpel geheimschrift, en het analyseren van het stemgedrag van Amerikaanse senatoren. Edwin vindt het een leesbaar boek, al wordt er wel een stevig beroep gedaan op kennis van de in het boek gebezigde programmeertaal R. Tot slot demonstreerde Titus zijn droids-programma, geschreven in Liberty BASIC; het werkt ook in het (gratis verkrijgbare) JustBasic 2.0. Droids zijn abstracte wezentjes op het computerscherm — bij Titus beeldt dat scherm een donutvormige torusruimte af —, die zich voortbewegen op grond van enkele eenvoudige regeltjes: vermijd botsingen met je buren probeer naar het centrum van de zwerm te komen beweeg je in dezelfde (gemiddelde) richting als je buren voeg een eigen willekeurige component toe aan je beweging vlucht voor een eventueel roofdier Doordat deze regels elkaar in sommige situaties versterken, maar in andere gevallen elkaar tegenwerken, kan er een complex zwermgedrag ontstaan, zoals van een school vissen of een vlucht spreeuwen. Genoeg ideeën en tips dus om ons weer een maandje bezig te houden! (GV 20 augustus 2018) Kort verslag van de bijeenkomst op 7 april 2018 De bijeenkomst begon vandaag met het overleg van de studiegroep "Neurale Netwerken". Besloten werd tot de oprichting van een nieuwe beginnersgroep, voor deelnemers die de aansluiting met de "eerste lichting" kwijt zijn, en ook voor degenen die pas na de oprichting van die studiegroep onze bijeenkomsten zijn gaan bijwonen. Op aandringen van Ed zal de beginnersgroep waarschijnlijk met Skype gaan communiceren. Daarna stond de Algemene Ledenvergadering (ALV) op het programma. Dit verplichte jaarlijks terugkerende ritueel, voor een belangrijk deel gevuld met formaliteiten, werd in vrij korte tijd afgehandeld. In de plenaire sessie werden de volgende onderwerpen besproken: Ben en Abraham waren bezig om te kijken of de Transputer ook in de AI-taal Prolog kan worden geprogrammeerd. Voorlopig zonder duidelijk succes; maar ze werkten tijdens de bijeenkomst nog stug door, en boekten daarbij ook wel enige vorderingen. Diederik was er (in het kader van de studiegroep NN) nog niet in geslaagd om een backpropagation neural network, geprogrammeerd in Pascal, goed te laten leren, ook niet met een klein aantal neuronen en lagen. Gerard kwam met het idee om het met een XOR-netwerkje te proberen; niet alleen vanwege het geringe formaat (2 inputneuronen, 2 hidden neuronen, en 1 uitgangsneuron), maar ook omdat de gewichten voor dat probleem goed "met de hand" kunnen worden vastgesteld (en dus gecontroleerd). Verder had Diederik twee web-tips: Op de ontwikkelsite GitHub staat een project dat een open source equivalent voor het schakende neurale netwerk AlphaZero wil bieden, onder de naam Leela-Chess In een interessant opinieartikel op de website van de Britse krant wordt betoogd dat de menselijke geest geen "diepere" lagen en motivaties kent. Dit heeft natuurlijk ook implicaties voor de discussies over de "vrije wil"… Peter wilde graag weten of de web-links, die hij regelmatig in de nieuwsbrief opneemt, ook worden gelezen en op prijs gesteld. Dat bleek inderdaad het geval, waaruit Peter concludeerde dat het zinvol is om deze informatie op deze manier te blijven verstrekken. Ook Arjan had een paar web-tips: Een artikel over een neuraal netwerk dat een auto bestuurt. Het netwerk wordt gevoed met camerabeelden (30 per seconde), en heeft 1 ingangslaag, 5 convolutielagen, en daarna nog 3 lagen om de uiteindelijke uitvoer te produceren. In verband hiermee wilde Arjan tevens de aandacht vestigen op een website over een zelf-sturende boot. Tenslotte wees Arjan op een podcast waarin Jelle Brandt Corstius een bijna 3 uur durend marathon-interview met Max Welling houdt over deep learning en de gevolgen daarvan. Max Welling is professor in Machine Learning aan de Universiteit van Amsterdam. Titus had weer iets geweldigs meegenomen: een door hem jaren geleden uit hout en scharnieren opgebouwd model van een menselijke hand. De bedoeling is dat dit project uiteindelijk een robothand gaat opleveren. Hoewel er in dit model geen motoren zitten, voelt de hand door zijn gewicht en "gewrichten" al opvallend levensecht aan! Momenteel is Titus bezig met een tweede, digitale versie (in POV-Ray), die echter ook nog niet beweegt.   Verder droeg Titus een nieuw puzzeltje aan: "Kamertje verhuur", af en toe te vinden in de gratis krant Metro (o.a. verkrijgbaar op de grotere treinstations). Hij had geprobeerd dat op te lossen met een genetisch algoritme, voorlopig nog zonder succes. Bovendien had Titus zijn "lijnvolger" meegenomen. Het betreft een standaard LEGO-Mindstorms©-robot, die hij had uitgerust met een extra, schuin naar beneden gerichte afstandssensor om te voorkomen dat hij van de tafel af rijdt. De robot is geprogrammeerd in de EV3-taal, waarin je (net als bijv. in LabVIEW) blokken van parameters voorziet en met elkaar verbindt. Henk had een programmakrant van de ISVW (Internationale School voor Wijsbegeerte) meegenomen, met daarin een lijstje van "Grote Denkers". Hij constateerde teleurgesteld dat Democritus daar niet in voorkwam. Een andere filosoof, Descartes, met specifieke opvattingen over het mind-body-problem, stond er overigens wel bij. Daarna liet Henk de backtrack-programma's zien, die hij had gemaakt om de sudoku mix en de calcudoku's uit de zaterdagbijlage van De Volkskrant op te lossen. Aanvankelijk leek het niet helemaal te werken, door een tikfoutje — in een 4×4 calcudoku kan het getal 95 als rekenkundig product nu eenmaal niet voorkomen, omdat het cijfer 5 er niet in voorkomt —, maar toen dat hersteld was kwam de oplossing er vlot uitrollen! Tot slot kwam Gerard nog met twee recente artikelen uit het tijdschrift Scientific American: In een artikel in het april(2018)-nummer wordt de theorie besproken dat zenuwcellen niet zozeer op elektrische, maar vooral op mechanische wijze pulsen aan elkaar doorgeven, dus door elkaar a.h.w. "aan te stoten". In het maart(2018-)nummer staat een artikel over de poging om robots te laten leren als kinderen, dus door ze de wereld te laten verkennen om te kijken of hun "model" over hoe de wereld in elkaar zit, klopt. Gerard had het idee dat dit zou kunnen worden verwezenlijkt door twee neurale netwerken van elkaar te laten leren. Er is dus weer ruim voldoende informatie uitgewisseld om een maandje thuis over na te denken en er de volgende bijeenkomst op voort te borduren. (GV 28 mei 2018) Kort verslag van de bijeenkomst op 3 maart 2018 In het informele gedeelte van de bijeenkomst waren Albert en Gerard bij elkaar gaan zitten om weer eens naar de programmeertaal occam te kijken. Gerard wou voor het oplossen van logische puzzels alle mogelijke waar/onwaar-combinaties voor een aantal uitspraken genereren. Dit is een tamelijk simpel probleem, dat neerkomt op "binair tellen" en een mogelijkheid biedt om wat te experimenteren met verschillende processen die onderling moeten communiceren. Gerard gaf aan dat je in eerste instantie heel eenvoudig kunt beginnen met twee uitspraken, die elk door één proces worden gerepresenteerd. Dit idee werd enthousiast begroet door Abraham, die er bij was komen zitten. Het bleek dat Abraham op het Internet de ontwikkelomgeving met bijbehorende documentatie van een occam-versie voor de Arduino had gevonden. De LEDjes op de Arduino kunnen natuurlijk prima worden gebruikt om waarheid (LED "aan") of onwaarheid ("uit") van een uitspraak aan te geven; Abraham zou gaan proberen om een 2-bits versie van Gerards idee in occam te programmeren. Op de onderstaande foto's, gemaakt door Abraham, zijn links Albert en Gerard aan het beraadslagen; vóór hen op de tafel ligt de occam-Arduino van Abraham, die op de rechterfoto nog wat beter te zien is.       In de plenaire sessie passeerden onder meer de volgende onderwerpen de revue: Als eerste kreeg een nieuwe bezoeker, Frans, de gelegenheid zichzelf voor te stellen. Hij vertelde o.a. dat hij werkzaam is in de procesindustrie, belangstelling heeft gekregen voor AI door het boek Gödel, Escher, Bach van Douglas Hofstadter, en dat hij wat meer tijd aan die interesse kan besteden nu zijn kinderen ouder zijn. Theo had een nuttige internet-tip: de nieuws-site Reddit, die ook een speciale sectie over AI heeft. Diederik voegde daar een goede tip aan toe: voor nieuws op technisch en wetenschappelijk gebied gaat hij regelmatig naar de site ScienceDaily, ook met een speciale AI-pagina. Wie dagelijks deze beide sites bezoekt, blijft vast en zeker uitstekend op de hoogte van alle actuele ontwikkelingen op het gebied van kunstmatige intelligentie! Zoals ook uit vorige bijeenkomstverslagen blijkt, is Henk o.a. geïnteresseerd in filosofie, en vooral in Democritus, de "geestelijke vader" van de atoomtheorie. Op zoek naar meer informatie over deze onderwerpen las hij De droom der rede van Anthony Gottlieb. Hij kan het boek aanbevelen als een goed overzicht over de vroege westerse filosofie. Wel viel hem op dat filosofie bij Democritus nog simpel was, maar dat het bij Plato en Aristoteles aanzienlijk ingewikkelder werd. Hij vergeleek dit met programmeren: Henk zelf vindt assembly simpel, omdat je het contact met de processor nog hebt; dit i.t.t. een taal als bijv. Scratch, die geen direct verband meer houdt met hoe een computer eigenlijk werkt. Ook had Henk zitten lezen in "Het mysterie van de tijd", geschreven door Carlo Rovelli. (Rovelli schreef eerder het boek "Zeven korte beschouwingen over natuurkunde".) Henk bekende dat hij het boek niet helemaal had uitgelezen, en dat hij er ook weinig wijzer van was geworden. De "studiegroep neurale netwerken" had vandaag veel te bespreken: "Waar zijn we mee bezig, en waar gaan we naartoe?". Wederom werd geconstateerd dat fleep als communicatie- en coördinatiemiddel niet aan de verwachtingen beantwoordt ("Fleep is flut!"); maar er werd ook, terecht, opgemerkt dat je er mee moet leren werken, en Gerard voegde er aan toe dat, of het nu via fleep of via e-mail is, een efficiënte communicatie meestal wel gebaat is bij een beetje zelfdiscipline van de deelnemers. De vorderingen van de deelnemers lopen nog steeds sterk uiteen, en lijken samen te hangen met de hoeveelheid tijd die ieder in het onderwerp wil c.q. kan steken. Albert, die ergens in het begin van het boek is blijven hangen, zei dat hij vooral wil weten wat een neuraal netwerk nu eigenlijk precies is, en dat het voor hem beter was geweest als de stof in kleine brokjes was bestudeerd – meer als een soort lesprogramma. Edwin vond het gebruikte boek — "An introduction to Neural Networks" van Tariq Rashid — overigens, voor amateurs/hobbyisten zoals wij, wel een goed boek om met het onderwerp "neurale netwerken" kennis te maken. Gerard vestigde nog eens de aandacht op het onderscheid dat hij maakt tussen werk- en projectgroepen. Volgens hem had de studiegroep het karakter van een werkgroep: een groep met een (min of meer) gemeenschappelijke interesse waarover regelmatig of bij vlagen van gedachten wordt gewisseld. Naar zijn ervaring leveren dergelijke groepen meestal niet zo veel op omdat ze nogal vrijblijvend van karakter zijn. Hij ziet meer in projectgroepen, met één of meer concrete doelstellingen, een beperkte, vooraf vastgelegde bestaansduur, en een tijdplanning. Toch worden er ook door leden van de studiegroep wel degelijk resultaten geboekt: Theo had Anaconda en Jupyter nu werkend; Diederik is druk bezig een klein backpropagation-netwerk in Pascal te programmeren en moet nu gaan debuggen — zijn neuronen geven een output groter dan één, wat theoretisch niet mag kunnen! —; en Edwin kondigde aan nu ook te gaan "bouwen". We zijn dus benieuwd naar de verdere ontwikkelingen. Tot slot verkondigde Gerard de stelling dat neurale netwerken feitelijk geen programma's of algoritmes zijn, maar computers (in de theoretische betekenis van het woord). Dat veroorzaakte nogal wat verwarring, dus deze opvatting zal waarschijnlijk ook in de toekomst nog wel onderwerp van discussie worden… (GV 1 april 2018) Kort verslag van de bijeenkomst op 3 februari 2018 Op de plenaire sessie kwamen de volgende onderwerpen aan de orde: Als eerste stelden drie nieuwe bezoekers zich voor: Niek, Thijs en André. Daarna was de studiegroep Neurale Netwerken aan bod; dit keer binnen de plenaire sessie omdat Ed de hele ochtend bij Robotica aanwezig moest zijn. Bij deze discussie werd duidelijk dat niet alleen de vorderingen nog steeds sterk uiteenlopen, maar ook de insteek van de deelnemers: sommigen zijn vooral geïnteresseerd in de theorie; anderen willen juist weten hoe je een neuraal netwerk programmeert zonder al te veel theoretische bagage; terwijl weer anderen uit zijn op toepassing (zoals karakterherkenning, waardoor een robot wegwijzers zou kunnen gaan lezen). Verder was gebleken dat de studiegroep vandaag tijdens het informele gedeelte, vóór de plenaire sessie, wel verhelderende discussies had gevoerd, en dat dit overleg "in real life" efficiënter is dan de berichtenuitwisseling via fleep. Het idee werd opgeworpen om de onderwerpen (vragen en problemen waarmee men zit) wèl van te voren via fleep te communiceren, zodat iedereen van te voren enigzins weet waarover het zal gaan. Jan wilde nog maar eens benadrukken dat de Transputer het enige concurrency-systeem is dat voor de hobbyist bereikbaar is. Daarnaast zijn er alleen maar hele grote, en vooral dure, professionele systemen. In de jaren '80 en '90 was de Transputer voor minder draagkrachtige onderzoeksgroepen dan ook een reëel alternatief voor de grote (Cray) supercomputers. De huidige multi-core processoren zijn niet echt vergelijkbaar, omdat die als één module fungeren, en niet zoals een transputersysteem stapsgewijs tot in het oneindige kunnen worden uitgebreid. En de grafische processoren (GPUs), die tegenwoordig ook veel worden gebruikt voor de matrixberekeningen in neurale netwerken, zijn een specialistische toevoeging aan een "gewone" CPU — ongeveer zoals in de jaren '80 een computer met een Intel-8086- of 8088 processor kon worden uitgebreid met een 8087 numerieke (floating point) coprocessor. Titus had een tweetal computeranimaties gemaakt, die hij graag op het Internet geplaatst wou zien. Hij had ze echter alleen als BASIC-programma beschikbaar; er moesten dus eerst met een screen-captureprogramma filmpjes van worden gemaakt, die dan vervolgens op YouTube konden worden geplaatst. Abraham verklaarde zich bereid om dat te doen, en heeft de beide animaties — één verhaaltje zonder woorden, met de titel Pilko, gebaseerd op een grap die door Titus zelf is bedacht; en één reeks van bewegende mensen, dieren, bomen en voorwerpen — inmiddels op zijn eigen YouTube-kanaal gezet. Op dit kanaal stond al enige tijd een filmpje gemaakt op een van onze vorige bijeenkomsten, waarin Titus al eens wat van zijn animaties presenteerde. Titus had ook nog wat doolhof-programma's geschreven. Als eerste een 3-dimensionaal doolhof van 3×3×3 (in een 6×6×6 ruimte), vanuit het perspectief van iemand die zich er in bevindt en de uitweg moet vinden. En als tweede een 2-dimensionaal doolhof, waarbij het programma niet alleen het doolhof maakt, maar ook de weg er doorheen berekent; dit doolhof werd van boven in beeld gebracht. Helaas kon Titus niet in detail uitleggen hoe zijn programma's werken, omdat hij de doolhofalgoritmen van het Internet had geplukt, maar ze niet in detail had geanalyseerd. Tot slot vertelde Gerard wat hem momenteel bezig hield. Hij had in deel 4 van The Art of Computer Programming van de "algoritme-goeroe" Donald Knuth een beschrijving gevonden van een uit logische poorten opgebouwde automaat die boter-kaas-en-eieren (tic-tac-toe) kan spelen. Zoals gebruikelijk laat Knuth, met zijn bondige wiskundige schrijfstijl, veel aan de lezer over om zelf uit te pluizen; hiermee had Gerard al menig uurtje aangenaam doorgebracht, en hij was er nog lang niet klaar mee — temeer daar Knuth zoals gewoonlijk bepaalde essentiële ontwerpdetails naar de opgaven delegeert. Niettemin had Gerard goede hoop er uiteindelijk uit te komen. Daarna zou het natuurlijk leuk zijn om de machine ook daadwerkelijk te gaan bouwen… Een demo die Thijs wilde laten zien over reinforcement learning kwam helaas niet meer aan bod; we hopen die op een van de komende bijeenkomsten alsnog te kunnen bekijken… (GV 22 februari 2018) Kort verslag van de bijeenkomst op 6 januari 2018 Doordat Peter er in geslaagd was de HCC-seizoensthemalezing naar Hooglanderveen te halen, was het programma wat anders dan gebruikelijk: Voorafgaand aan de lezing kwam de studiegroep neurale netwerken voor overleg bijeen. Wat vooral duidelijk werd is dat de vorderingen van de deelnemers hemelsbreed uiteenliepen: één persoon was nog niet met het boek begonnen, anderen hadden het theorie-gedeelte al doorgewerkt maar waren nog niet begonnen met het installeren van de software; weer anderen waren daar wel mee bezig maar stuitten op problemen — waarbij misschien ook het hardwareplatform (Raspberry Pi of PC) en het operating system (Raspbian, "gewoon" Linux, Windows) een rol speelde —, terwijl nog weer anderen de software wel hadden geïnstalleerd maar nog niet met programmeren waren begonnen. En één deelnemer (Arjan) was zelfs al helemaal klaar! Daarnaast was het gebrek aan vragen op fleep punt van discussie. Gerard suggereerde dat er ook oefenvragen kunnen worden geformuleerd waarmee leden van de studiegroep hun begrip van de stof kunnen testen; dit zou kunnen gebeuren door Peter of door Gerard zelf, in zijn rol als waarnemer. De lezing van Rob van Geuns, over het HCC seizoensthema "slimme auto's", werd gehouden voor 29 toehoorders, van de interessegroepen Robotica en AI samen. Er werd een goed inzicht gegeven in de stand van zaken en de huidige activiteiten en plannen van diverse autofabrikanten; tevens werd duidelijk hoe het toevoegen van sensoren aan auto's, en het reageren op die sensorgegevens, zou kunnen leiden tot een bijna naadloze overgang naar "zelfrijdende" auto's. ("Zelfbesturend" zou een betere term zijn, want het woord "auto-mobiel" betekent al "zelf-bewegend"…) Door de lezing was de plenaire sessie helaas wat korter en zonder beamer, maar daarom niet minder interessant: Jan heeft uitgelegd waarom hij zijn deelname aan de studiegroep neurale netwerken beëindigt. Hij vindt het onderwerp "uitzonderlijk interessant", maar heeft zich voorgenomen om nu echt aan de slag te gaan met transputers en besturingen. Arjan bracht het boek "Elegant SciPy" (van uitgeverij O'Reilly) onder onze aandacht. Dit boek, dat ook online te vinden is, behandelt onder andere beeldherkenning, fouriertransformatie, sparse matrices, en kruistabellen (contingency tables). Verder bood Arjan aan om op een latere bijeenkomst een recapitulatie te geven van zijn lezing over convolutionele neurale netwerken. Henk was bezig met een boek over computerschaak en hoopte daar volgende maand iets meer over te kunnen vertellen. Titus had een "algoritme" bedacht om een minderwaardigheidscomplex te overwinnen: Vind je talent. Ontwikkel dat. Let op je gevoel. Omdat het voorschrift niet aan alle strenge eisen van bijv. Knuth voldoet, kan het misschien beter een "recept" worden genoemd dan een "algoritme"; maar het zou zeker interessant zijn om het "therapieprogramma" Eliza uit te rusten met dit soort richtlijnen! Theo kwam met een tip die goed aansloot bij de lezing: in c't van januari/februari 2018 staat een vijftal artikelen over hoe de 3 grote visies, nl. elektrisch, connected en autonoom naar verwachting in de nabije toekomst een revolutie in het autovervoer teweeg gaan brengen, met speciale aandacht voor o.a. parkeren, tanken, auto-ontwerp, en autonoom rijden. Diederik had een artikel van bijna 20 pagina's gelezen over de overwinning van AlphaZero op de open source schaakengine "Stockfish" en wou daarover van gedachten wisselen. Hoewel nog niet alle details van deze match duidelijk zijn — van de 100 partijen zijn er maar 10 gepubliceerd — en er wel iets op af te dingen valt — Stockfish was niet geoptimaliseerd voor de hardware, en kreeg maar 1 minuut per zet bedenktijd toegewezen —, is het toch een interessant resultaat. Zo blijkt uit een analyse van de gepubliceerde partijen door een Amerikeense internationaal schaakmeester, dat AlphaZero eerder wordt gekenmerkt door een "romantische", aanvallende speelstijl dan door risicoloos geschuif dat tracht kleine voordeeltjes om te zetten in winst. Al met al was het intrigerend genoeg om bij Diederik een grotere belangstelling voor neurale netwerken op te wekken… Het was dus een geslaagde aftrap voor een nieuw jaar gevuld met AI-aktiviteiten! (GV 12 februari 2018)  

20 april 2020

...

Bijeenkomsten gehouden in 2019

  Kort verslag van de bijeenkomst op 8 december 2019 In de plenaire sessie werden de volgende onderwerpen besproken: Het HCC-forum heeft nu ook een afdeling voor discussies over Artificiële Intelligentie. Aad's verslag van de "World Summit AI 2019 (Europe)" is gepubliceerd in PC-Active 309 (dec 2019 / jan 2020, p.74). Ben heeft nu een eigen domein voor zijn website. Johan had het boek Make Your Own Neural Network van Tariq Rashid en wilde weten of daar bij onze interessegroep nog aan gewerkt werd. De Massive Open Online Course via Trello functioneerde niet goed en is beëindigd, maar problemen en vragen kunnen natuurlijk altijd op onze bijeenkomsten in de groep worden gegooid. Niek was halverwege blijven steken, en gaat het boek nu samen met Johan vanaf het begin doornemen. Arjan gaf een korte technische lezing over de Intel® Movidius™ Neural Compute Stick en de daarin opgenomen SHAVE processor core. Klaas kwam met twee internet-studietips: Een artikel getiteld Tackling Climate Change With Machine Learning. De Neural Network Zoo van het Asimov Institute, waarop een groot aantal architecturen van neurale netwerken te vinden zijn. Klaas stelde voor om er met een werkgroep maandelijks één te gaan bestuderen. Hoewel het volgens hem weinig met AI te maken heeft, vroeg Ed aandacht voor de HCC-interessegroep (in oprichting) die zich bezig gaat houden met domotica. Gerard merkte op dat je in domotica net zoveel AI kunt stoppen als je wilt. Vorige maand startte Gerard een projectgroep op om te proberen het puzzeltje "Kamertje Verhuur", dat regelmatig in de Metro staat, met een genetisch algoritme (GA) op te lossen. Als opwarmertje zou even een genetisch algoritme worden gemaakt voor het Handelsreizigersprobleem (Travelling Salesman Problem, TSP). Zowel aan het TSP als aan het GA bleek echter meer vast te zitten dan gedacht, zodat dat even 5 weken in beslag nam. Pieter Frans en Gerard lieten hun programma's zien (in resp. Python en JavaScript). Komende maand wordt de aandacht dan toch verplaatst naar Kamertje Verhuur. Daarmee werd de laatste bijeenkomst van dit jaar besloten. Ook volgend jaar zullen op onze bijeenkomsten ongetwijfeld weer veel interessante AI-onderwerpen de revue passeren. (GV 9 december 2019) Kort verslag van de bijeenkomst op 2 november 2019 Terwijl bij HCC-robotica de jaarlijkse Roborama-wedstrijden werden uitgevochten, kwamen bij ons de volgende onderwerpen aan bod: Een nieuwe bezoeker, Hans, stelde zich kort voor. Hij programmeert in Microsoft Excel. Roel legde de groep de vraag voor of, en hoe, AI kan worden ingezet bij de hulp aan dyslectische personen, mogelijk in combinatie met het Chinese karakterschrift. Hij deelde een korte hand-out uit (2 pagina's A4) met daarop wat ideeën n.a.v. zijn eigen ervaringen met dyslectici. Peter had het boek Reinforcement Learning van Sutton gelezen en kon hierover van gedachten wisselen met Aad en Arjan. Rudolf vertelde over de problemen sie hij ondervindt bij zijn pogingen om met deep learning en TensorFlow een programma te schrijven dat beurskoersen voorspelt. Aad was namens het HCC-verenigingsblad PC-Active naar de jaarlijkse World AI Summit in Zaandam geweest, en deed daar voortreffelijk verslag van. Het door hem geschreven artikel ligt bij de redactie van PC-Active te wachten op foto-illustraties. Gerard bracht enkele tijdschriftartikelen onder de aandacht; ze staan hieronder op de leesplank. Tenslotte kwam Gerard met het plan om met een projectgroep de Kamertje-verhuurpuzzel uit de Metro op te lossen m.b.v. een genetisch algoritme. Dit idee was afkomstig van Titus, die vandaag helaas niet aanwezig was, maar wel aan de projectgroep deel wou nemen. De overige deelnemers zijn Pieter-Frans, Theo en Diederik. (GV 3 november 2019) Kort verslag van de bijeenkomst op 5 oktober 2019 Er waren wat minder bezoekers dan normaal, maar de variatie en het niveau van de bijdragen was er niet minder om: De HCC vraagt moderatoren uit onze interessegroep voor het AI-gedeelte van het nieuwe forum op hun website. Peter en Aad waren namens onze interessegroep aanwezig op de CompUfair en deden daar kort verslag van. Aad gaf een interessante presentatie over het gebruik van een genetisch algoritme om de elementen van een relatiediagram overzichtelijk op een computerscherm te plaatsen. Diederik vertelde dat hij bij zijn onderzoek van spelletjes lerende AI-programma's bij de dam-variant draughts was beland. Ben liet wat interessante artikelen zien die op de website van de Duitse uitgever van het computertijdschrift c't staan. Daarbij kwam ook het vertaalprogramma deepl ter sprake. Gerard maakte in een kort verhaaltje duidelijk wat het Hopfield-netwerk nu eigenlijk precies doet. (GV 5 oktober 2019) Kort verslag van de bijeenkomst op 7 september 2019 De volgende onderwerpen kwamen aan bod: Peter kondigde aan dat de zelfstudiecursus neurale netwerken niet zal worden voortgezet. Gerard wil misschien alsnog een workshop over dit onderwerp gaan opzetten, maar geeft dit geen hoge prioriteit. De AI interessegroep zal aanwezig zijn op de MegaCompUfair van HCC-CompUsers in de Bilt, en op de HCC kennisdag in Houten. Roel deelde een A4'tje uit met daarop zijn nieuwste activiteiten en plannen om technische kennis (over computers, AI en robotica) over te dragen aan de schoolgaande jeugd. Ook liet hij een viertal interessante boeken die hij had aangeschaft, rondgaan ter inzage. Henk liet zien hoe de schuifpuzzel waarvoor hij een programma had geschreven, door het kiezen van primaire kleuren (rood, wit, blauw, geel en zwart) voor de stukjes, op een bewegend Mondriaanschilderij ging lijken. Aad vertelde over het onderzoek dat hij m.b.v. een zelfgeschreven Java-programma deed aan een speciale versie van het Hopfield-netwerk, en over enkele manieren waarop dit netwerk verband houdt met processen in kristalstructuren. Gerard demonstreerde de JavaScriptversie van de lerende muis, die hij voor deze website had geschreven, en gaf er een uitgebreide toelichting bij. (GV 7 september 2019) Kort verslag van de bijeenkomst op 5 januari 2019 In de plenaire sessie werd de beschikbare tijd geheel besteed aan slechts 4 onderwerpen: Om ook buiten onze interessegroep de bekendheid met Artificiële Intelligentie wat te vergroten, had Peter een presentatie over Autonomous Intelligent Agents gemaakt. Daarin legt hij uit hoe systemen zelfstandig beslissingen nemen en acties uitvoeren op grond van informatie uit hun omgeving. Natuurlijk kwamen de waarnemings- en beslissingsmogelijkheden van neurale netwerken daarbij aan de orde, maar ook morele en ethische aspecten. Dat gebeurde o.a. aan de hand van Moral Machine (een website van de Amerikaanse onderzoeksuniversiteit M.I.T. waarop wordt gepeild hoe mensen zelf nu eigenlijk over ethische dilemma's denken), en fragmenten uit de klassieke science-fictionfilm 2001: A Space Odyssey (waarin een intelligente computer uiteindelijk wordt uitgeschakeld omdat hij een gevaar vormt voor de astronauten van een interplanetair ruimtevaartuig). De presentatie gaf aanleiding tot verscheidene reacties en commentaren uit de groep, en Peters voorstel om hiermee namens onze interessegroep de boer op te gaan werd goedgekeurd. Als vervolg op zijn bijdrage op de vorige bijeenkomst vertelde Arjan wat er zoal in het tweede deel van het boek van Sutton en Barto over Reinforcement Learning te vinden is. Daarbij kwam het GridWorld-voorbeeld ook weer langs. Tevens vertelde Arjan hoe hij de theorie zelf had toegepast op hexapawn; de resultaten hiervan leken de bevindingen van Thijs, die hierover vorige maand uitgebreid had gerapporteerd, te bevestigen. Arjan maakte ons ook attent op een interessant stukje hardware, naar aanleiding van de vraag die Jan de vorige keer in de groep had gegooid: zijn er mensen met ideeën over AI-onderwerpen die Jan in zijn rijdende robot zou kunnen inbouwen? Arjan is onder meer geïnteresseerd in beeldherkenning met neurale netwerken, en had nu een MovidiusTM Neural Compute Stick van Intel® besteld. Deze bevat een Visual Processing Unit, een speciale neuraal-netwerkprocessor, en kan via een USB-poort op een Raspberry Pi of een PC met Ubuntu worden aangesloten. Omdat Arjan dit gadget nog niet in huis had, kon hij er nog niet veel over vertellen, laat staan demonstreren; maar we zullen er in de toekomst zeker meer over horen! Tot slot kwam Peter weer aan het woord, voor een uitgebreide uitleg van het Trello-bord dat hij heeft opgezet voor de MOOC (Massive Open Online Cursus) over Neurale Netwerken. Deze toelichting was vooral bedoeld voor nieuwe cursisten, die zich hebben aangemeld n.a.v. oproepen in de nieuwsbrieven van diverse interessegroepen. Volgens Peter waren er 10 aanmeldingen vanuit onze AI interessegroep, 6 vanuit HCC-robotica, en 6 vanuit HCC-programmeren. Er lijkt dus een kritieke massa te zijn bereikt, die nodig is om voldoende interactie tussen cursisten teweeg te brengen, zodat ze van elkaars problemen en ervaringen kunnen leren. We zijn in het nieuwe jaar dus weer goed van start gegaan! (GV 24 januari 2019)

20 april 2020

'Meld je aan voor de nieuwsbrief' van HCC!artificieleintelligentie

'Abonneer je nu op de nieuwsbrief en blijf op de hoogte van onze activiteiten!'

Aanmelden