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