...

Bijeenkomsten gehouden in 2010

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

20 april 2020

...

Bijeenkomsten gehouden in 2011

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

20 april 2020

...

Bijeenkomsten gehouden in 2012

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

20 april 2020

...

Bijeenkomsten gehouden in 2013

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

20 april 2020

...

Bijeenkomsten gehouden in 2014

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

20 april 2020

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

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

Aanmelden