...

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

Actueel

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

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

Aanmelden