Bijeenkomsten gehouden in 2017

Deel dit artikel

,

geen foto beschikbaar

 
meeting

Kort verslag van de bijeenkomst op 2 december 2017

Voorafgaand aan de plenaire sessie hield de studiegroep "neurale netwerken" een bespreking. Deze discussie ging voor een belangrijk deel over het gebruik van fleep. Ook werd er besloten om niet te veel de breedte of de diepte in te gaan, maar zich vooral tot het boek te beperken.
Verder passeerden op deze laatste bijeenkomst van het jaar o.a. de volgende onderwerpen de revue:

  • Theo vestigde de aandacht op een artikel in de nederlandstalige editie van het computertijdschrift c't van december 2017, over Lang korte-termijngeheugen (Long Short-Term Memory, afgekort tot LSTM). Dit is een neuraal-netwerkarchitectuur behorend tot de recurrente netwerken, die worden gebruikt wanneer de volgorde van de input een belangrijke rol speelt. Belangrijke toepassingsgebieden zijn bijv. spraakherkenning en automatisch vertalen. Het artikel in c't (pagina 113-117) vertelt hoe zo'n netwerk in elkaar zit en werkt, en geeft aanwijzingen (met een web-link naar de software) om zelf met TensorFlow een LSTM te maken dat kan leren om websites te taggen (d.w.z. omschrijven met één of meer steekwoorden). Interessant is ook nog dat het programma daarbij gebruik maakt van de grafische kaart van de computer,
  • Jan deelde mee dat Abraham, die vandaag zelf helaas niet aanwezig kon zijn, de transputersimulator (voor 1 transputer) goed werkend heeft gekregen op Windows-systemen. (Theoretisch op Windows XP t/m Windows 10, maar dat is niet allemaal getest.) Het is dus niet meer nodig om het fysieke transputersysteem naar elke bijeenkomst mee te nemen; we kunnen nu immers ook Occam-programma's schrijven en testen op het gesimuleerde systeem. Jan heeft het werkboek voor de transputer-insteekkaart nu ook gedigitaliseerd; de INMOS-handleiding van Dick Pountain sluit daar goed op aan. Jan zal deze bestanden aan de geïnteresseerden, met name Albert en Gerard, toemailen zodat er nu in ernst voor de transputer kan worden geprogrammeerd.
    Ben merkte op dat het idee achter transputers (concurrency) tegenwoordig wordt uitgevoerd met grafische kaarten; Jan betwijfelt echter of dit wel op precies dezelfde manier gebeurt.
  • Arjan vertelde ons over enkele boeiende onderwerpen die naar voren kwamen op de ITNext conferentie:
    • Een lezing over het inzetten van Watson, het kunstmatig intelligente computersysteem van IBM, bij de beveiliging van datanetwerken. Dit gebeurt door Watson artikelen over dit onderwerp te laten lezen die voor mensen zijn geschreven, waarna het systeem er vragen over kan beantwoorden.
    • Ook was er een presentatie over het klassificeren van kledingstukken op foto's voor het samenstellen van een verkoopcatalogus.
    • Uit een lezing door een medewerker van de online supermarkt Picnic werd duidelijk dat dit bedrijf er nog niet in slaagt om heel nauwkeurig iemands boodschappen te voorspellen. Een mogelijke oorzaak is dat het neurale netwerk getraind is op de bestellingen van alle klanten samen i.p.v. individuele klanten.
  • Ook kwam Arjan weer met een aantal interessante weblinks:
    • De beide websites moleculenet en deepchem bevatten nuttige hulpmiddelen als je m.b.v. AI wilt onderzoeken of bepaalde chemische substanties mogelijk bruikbaar zijn als geneesmiddel.
    • Een beschrijving van hoe je de C++-softwarebibliotheek TensorRT van NVidia, een hardwarefabrikant van o.a. grafische processoren, kunt gebruiken voor het construeren en optimaliseren van neurale netwerken.
    • Een website met een gegevensbestand dat kan worden gebruikt om een AI te leren herkennen wat er te zien is op (foto- of video-)beelden die in de stad zijn gemaakt: mensen, voertuigen, verkeersborden, gebouwen, obstakels, enzovoort.
    • De dia's (in PDF-vorm) van een lezing met als titel How Will Linux Handle Quantum Computing? De lezing behandelt in een notedop het nut van quantumcomputers, de problemen, de huidige stand van zaken, mogelijke toepassingen, en de manier waarop Linux kan samenwerken met, of gebruik maken van, quantumcomputerhardware.
      Titus merkte naar aanleiding van dit punt nog op dat je door te googlen op "IBM Q" informatie kunt vinden over het zelf via "de cloud" uitvoeren van algoritmen en experimenten op de quantumcomputer van IBM.
  • Titus kwam met drie onderwerpen. Als eerste liet hij zien hoe ver hij was met genetisch programmeren in Python. Hij had twee problemen geprobeerd:
    • Het benaderen van π uit één of meer constanten m.b.v. de bewerkingen × (maal), / (gedeeld door), + (plus), - (min) en √ (wortel). Dit programma bleek niet goed te leren; toch kwam het met een ruwe benadering, namelijk √10, die ook in de natuurkunde wel regelmatig gebruikt wordt.
    • De stelling van Pythagoras, oftewel het "ontdekken" van de formule √(a2+b2). Ook aan deze variant moet nog wel wat tijd worden besteed voordat hij helemaal naar wens werkt.
  • Als tweede bracht Titus een spelletje onder onze aandacht dat hij not 3 noemt. Dit spel, dat verwant is met boter, kaas en eieren, staat beschreven in 2 artikelen in het wiskundetijdschrift Pythagoras. Het eerste artikel, van maart 1981 (p.118-119) zet de regels van het spel uiteen; en het tweede artikel september 1981 (p.14-17) kijkt of er een winnende strategie voor een van beide spelers bestaat. Titus had een BASIC-programma gemaakt om dit spel tegen de computer te spelen, waarbij de computer niet "nadenkt" maar gewoon willekeurige zetten doet.
  • Als derde vertelde Titus een anecdote over een auto die op de vluchtstrook stond en 30 keer werd "geflitst" omdat langsrijdende auto's te snel reden. Hij wilde hiermee illustreren dat automatische systemen nog niet helemaal toe zijn aan het juridisch afwerken van verkeersovertredingen.
  • Tenslotte praatte Gerard de aanwezigen bij over zijn vorderingen op het gebied van Self-Organized Criticality. Hij had zijn "dominostenenprogramma" aangepast zodat er voortdurend automatisch rijtjes werden neergezet en "omgegooid". Het lijkt er inderdaad op dat het systeem na enige tijd een semi-stabiele toestand bereikt; de vraag is nu of de kenmerken die theoretisch voor een zelforganiserend kritiek systeem worden voorspeld hier ook inderdaad in terug te vinden zijn. Dat zal nog wel de nodige programmeerarbeid en statistische analyse vergen…

In het nieuwe jaar gaan we weer met frisse moed aan de slag, waarbij we niet alleen reeds bekende onderwerpen gaan uitdiepen en oude projecten uitbouwen of nieuw leven inblazen, maar ongetwijfeld ook nieuwe onderwerpen zullen verkennen en nieuwe initiatieven ondernemen!
(GV 5 januari 2018)

Kort verslag van de bijeenkomst op 4 november 2017

Traditiegetrouw is november de maand waarin de jaarlijkse Roborama-wedstrijden, georganiseerd door HCC-Robotica, worden uitgevochten. Dit jaar was Jan de enige die daar de kleuren van onze AI interessegroep verdedigde. Bij de spaarzame gelegenheden die we hadden om daarbij de toeschouwer uit te hangen, leek het erop dat zijn robotkarretje (MOOF geheten) naar verwachting presteerde; we zijn in elk geval geen getuige geweest van flagrante robot-blunders of technische katastrofes. Maar we kunnen voor een definitieve eindevaluatie beter het verslag van Jan zelf afwachten… En terwijl Jan en zijn robot zich inspanden, hebben wij toch maar een plenaire sessie gehouden:

  • Het overleg van de studiegroep neurale netwerken ging vooral over de organisatorische kant. Er bestaat namelijk in het gebruikte communicatiemiddel fleep de mogelijkheid om taken toe te kennen aan personen of groepen, en die taken na uitvoering als "gedaan" te markeren; maar dit "afvinken" is taakgericht (i.p.v. "persoonlijk"), zodat wanneer één persoon aangeeft een bepaalde passage uit het boek bestudeerd te hebben, dat onderdeel in fleep bij iedereen als "klaar" te boek staat. Dat maakt het lastig voor de deelnemers om bij te houden hoe ver ze zijn; en de studiegroepcoördinator, Peter, krijgt zo natuurlijk geen overzicht over de vorderingen van elke deelnemer afzonderlijk.
    Er is geruime tijd gesproken over mogelijke alternatieven, zoals slack, GitLab, en Google documenten (eventueel in combinatie met Google Groups). Gerard en Ben dachten dat de communicatie ook gewoon via een e-maillijst kon plaatsvinden, maar Peter vond de toenemende lengte van de e-mails (als gevolg van het toevoegen van alle voorgaande berichten) een groot bezwaar. Een echte oplossing is nog niet gevonden; voorlopig gaat de groep verder met fleep.
  • Een nieuwe bezoeker stelde zich kort voor: Dimitri. Hij is programmeur geweest en heeft belangstelling voor AI; hij hoopt op onze bijeenkomsten het nodige op te kunnen steken van de andere aanwezigen.
  • Op de Roborama vorig jaar was Bens Madeleine onder de deelnemende robotkarretjes tamelijk uniek: enerzijds omdat haar "hogere" besturingsfuncties "op afstand" werden vervuld door een programma op een laptop-computer, en anderzijds omdat dit programma is geschreven in de logische AI-taal Visual Prolog in plaats van de meer gangbare talen BASIC of C. Ben deed welwillend nogmaals uit de doeken waarom Madeleine dit jaar niet deelnam. Ondanks een perfecte uitvoering op de tests waaraan Ben haar vooraf onderwierp bleek Madeleine, toen het er vorig jaar op aankwam, het keren (een 180° richtingsverandering) toch niet echt onder de knie te hebben. Mogelijk speelde de andere ondergrond daarbij een ontregelende rol. Ben overweegt op dit moment twee mogelijke oplossingen. Één aanpak is om Madeleine uit te rusten met een kompas-sensor, naast de drie afstandssensoren (vooruit, links, en rechts, met een bereik tot 80 cm.) waarover ze nu beschikt. Maar, geïnspireerd door het tot stand komen van de bovengenoemde studiegroep, is zijn huidige "plan A" om Madeleine te gaan besturen met een neuraal netwerk.
  • Peter vestigde de aandacht op de campagne Nederland leest, met dit jaar robotica als thema. Tijdens deze actie krijg je bij deelnemende bibliotheken, in ruil voor je mening over robots, een speciale Nederlandstalige uitgave van Isaac Asimovs beroemde verhalenbundel "Ik, Robot". In deze uitgave is een extra verhaal toegevoegd, geschreven door Ronald Giphart met behulp van (of: "in samenwerking met"?) de "literaire robot" Asibot.
    Gerard vertelde dat hij op 1 november de start van de campagne, die dit jaar in Amersfoort werd verricht, had bijgewoond; het helaas wat wazige kiekje hieronder, met links Ronald Giphart, geeft daarvan een indruk.
    20171101
  • Diederik vroeg of iemand van de aanwezigen ervaringen had met de programmeertaal R in verband met kunstmatige intelligentie. Zelf had hij in deze taal, die vooral voor statistische toepassingen wordt gebruikt, GIS-kaartjes voor zijn zoon vervaardigd. Helaas had niemand enige ervaring op dit gebied; wel wist men te melden dat R een zeer populaire taal is, die toch wel duidelijk verschilt van Python. Volgens Peter geeft googlen op "r vs python for AI" een schat aan waardevolle informatie en adviezen.
  • Henk had voor de aanwezigen wat informatie meegenomen, uit het Filosofen lexicon, over de door hem bewonderde wijsgeer Democritus. Volgens Henk was dat de eerste die inzag dat de wereld was "opgebouwd" (uit atomen), een idee dat een belangrijke rol speelt in Henks eigen ideeën over De computer en de vrije wil.
  • Ook werd er enige tijd gediscussieerd over Henks opvatting dat je eigenlijk moet weten hoe microprocessors werken om te kunnen programmeren. Albert merkte op dat er tegenwoordig juist diverse softwarelagen tussen de processor en het programma zitten om programmeren zonder gedetailleerde hardwarekennis mogelijk te maken. Aan de andere kant, zo werd opgemerkt, leiden de tussenliggende lagen wel tot programma's die abstracter, en dus misschien moeilijker te begrijpen zijn. Diederik merkte op dat kennis van binaire logica wel echt nodig is om iets van schaakcomputers en -programma's te snappen.
  • Arjan kwam met twee interessante weblinks. Als eerste de 14th European Conference on Computer Vision (ECCV), die in oktober vorig jaar in Amsterdam gehouden is, met een enorme hoeveelheid informatie over beeldherkenning, waaronder een poster met aanvullende informatie over het geven van verbale uitleg bij herkenning van vogels op foto's. En als tweede een blog en paper over het voorspellen van golfhoogtes in een baai aan de Stille Oceaan, dat een deep learning neuraal netwerk veel sneller kan dan een traditioneel natuurkundig model.
  • Als laatste was Gerard aan de beurt, die weer een oud projectje aan het reanimeren was: zijn dominostenen-programma. In een artikel over self-organized criticality in het tijdschrift Scientific American van januari 1991 werd de kritieke toestand van een systeem verduidelijkt aan de hand van een ruitvormig patroon van rijtjes dominostenen. Gerard had dit destijds met een zelfgemaakt Turbo-C-programmaatje onder Windows 95 onderzocht. Hij heeft het programma nu geport naar Linux (met gebruikmaking van de karakterterminal-besturingsfuncties van de softwarebibliotheek curses), en demonstreerde daarmee dat het systeem bij de kritieke dichtheid (of daaromtrent) inderdaad, zoals de theorie stelt, "interessant" (want: meer gevarieerd) gedrag gaat vertonen.

Met alle activiteiten die momenteel gaande zijn verwachten we ook volgende maand weer een boeiende plenaire sessie!
(GV 16 november 2017)

Kort verslag van de bijeenkomst op 7 oktober 2017

Het verhaal van Arjan, dat vorige keer noodgedwongen werd onderbroken, kreeg vandaag een vervolg in de vorm van een heuse lezing, die natuurlijk als eerste aan bod kwam op het plenaire gedeelte van de bijeenkomst:

  • De lezing van Arjan ging over convolutionele neurale netwerken. Dergelijke deep learning netwerken worden o.a. succesvol aangewend voor beeldherkenning. Belangrijk in dit verband is de Large Scale Visual Recognition Challenge, een jaarlijkse wedstrijd waarbij deelnemers de prestaties van hun computerprogramma's kunnen vergelijken door ze los te laten op ImageNet, een database van afbeeldingen met bijbehorende beschrijvingen,. Een van de winnaars was ZF-Net, en Arjan had zich ten doel gesteld om dit na te bouwen in Python. Door daarbij gebruik te maken van de open source software library TensorFlow kon hij zich het zelf schrijven van veel programmalussen besparen. Als toepassing heeft hij gekozen voor het herkennen van handgeschreven cijfers uit de MNIST-dataset. Alle details van dit project kunt u uitpluizen met behulp van de PowerPoint pagina's van Arjans lezing en het Jupyter notebook van zijn programma, die zijn terug te vinden bij de eigen maaksels op deze website.
  • Na de lezing werd er overleg gevoerd door en over de studiegroep neurale netwerken, die door Peter geleid (dan wel gecoördineerd) zal worden. De groep telt momenteel naast Peter zelf (die wel voldoende weet van neurale netwerken, maar in deze groep Python hoopt te leren) nog 10 anderen, plus één waarnemer (Gerard). Eerder was al besloten dat ze aan de slag gaan met het boek Make Your Own Neural Network van Tariq Rashid, waarvan het eerste deel in gewone taal en wat middelbare-schoolwiskunde – maar zonder programmeercode – uitlegt hoe een standaard "backpropagation" neuraal netwerk werkt, en het tweede deel je vertelt hoe je zoiets dan zelf programmeert in Python. Vandaag is besloten om te gaan werken met het groupware-communicatieprogramma fleep, ondanks wat opstartproblemen en een algemene onbekendheid met deze software. De deelnemers gaan de komende maand beginnen met het lezen van deel 1 van het boek, en zullen de vragen die bij hen opkomen aan de anderen voorleggen via fleep. We zullen volgende maand zien hoe dit werkt…
  • Theo kwam met een goede leestip: het oktober/novembernummer (editie 296) van ons HCC-verenigingsblad PC-Active gaat met een viertal artikelen uitvoerig in op het HCC-seizoensthema de "slimme auto". In hetzelfde nummer staat ook nog een interessant artikel over deep learning. Uiteraard is dit nummer voor leden "achter de inlog" ook digitaal te raadplegen op de HCC-website, via de rode menubalk bovenaan.
  • Op verzoek van Gerard deed Theo ook kort verslag van de themabijeenkomst over programmeertalen die HCC-programmeren op 15 september j.l. had georganiseerd op hun nieuwe locatie in De Bilt. Daarbij werd over een (ruime) handvol programmeertalen in meer of minder kort bestek wat informatie gegeven over ontstaan, voor- en nadelen, en mogelijke toepassingsgebieden, vergezeld van een kort voorbeeldprogrammaatje. Een geschreven verslag, de Powerpoint-slides en aanvullende pdf-bestanden zijn te vinden op de website van HCC-programmeren. De besproken talen zijn PHP, Perl, Scratch, Python, Forth, en C. Een overweging voor de keuze van juist deze talen (en het afvallen van andere) was o.a. "geschiktheid voor beginners". Verder kondigde Theo nog aan dat er op de eerstvolgende bijeenkomst van HCC-programmeren, in oktober, een lezing zal worden gehouden over cryptografie.
  • Ben had slechts twee korte mededelingen. Hij vertelde, voor degenen die het nog niet wisten, dat er een handtekeningenactie gaande is om een referendum aan te vragen over de zogenaamde sleepwet, die inlichtingendiensten machtigt om ook (digitale) data te verzamelen over en uit de communicatie van personen waartegen geen concrete verdenking bestaat. Inmiddels is bekend dat er voldoende handtekeningen zijn verzameld, en dat het referendum dus inderdaad gehouden zal worden. En verder meldde Ben dat hij nog altijd aan het overwegen is hoe hij het gaat aanleggen om Madeleine met een neuraal netwerk uit te rusten.
  • Arjan maakte ons attent op het boek Bayesian Methods for Hackers. Daarin wordt de Bayesiaanse kansrekening, ook veel gebruikt in machine learning, uitgelegd en toegepast in Python m.b.v. de PyMC softwarebibliotheek. Volgens Arjan is het duidelijk geschreven – in het Engels, weliswaar –, maar bevat het pittige wiskunde die niet echt wordt uitgelegd. Een goede informatiebron dus, maar niet voor de terloops geïnteresseerde! Het boek schijnt ook online te lezen te zijn.

De geplande drie bijdragen van Titus konden helaas niet aan bod komen omdat zijn computer op het cruciale moment onverwacht kuren vertoonde. Omdat er bovendien nog maar weinig tijd over was, is besloten om dit onderdeel naar een volgende bijeenkomst te verschuiven.
(GV 13 november 2017)

Kort verslag van de bijeenkomst op 2 september 2017

Ook dit keer weer een keur aan onderwerpen die direct of indirect iets met kunstmatige intelligentie te maken hebben:

  • Henk vestigde de aandacht op een artikel over computerhackers in De Volkskrant van 8 juli j.l. Hierover ontspon zich enige discussie, waarbij werd opgemerkt dat virusscanners veel achterdeurtjes met opzet niet afsluiten. Arjan vertelde n.a.v. dit onderwerp dat de VPRO (NPO televisie) op 23 augustus de documentaire Zero Days over de computer"worm" Stuxnet heeft uitgezonden.
  • Albert had onlangs op BNR Nieuwsradio een interessante aflevering van de serie "De Nieuwe Wereld" gehoord. Het is al langer bekend dat bedrijven computerprogramma's gebruiken om een eerste filtering van sollicitanten te maken op basis van hun cv's. De uitzending op BNR, die nog steeds als podcast te beluisteren is, bekeek de andere kant van de medaille: men is ook bezig om computerprogramma's ("robots") te bouwen die jouw sollicitatie kunnen verzorgen. Het zou in de toekomst dus zo kunnen zijn dat robots onderling uitmaken wie waar komt te werken…
  • Een nieuwe bezoeker stelde zich voor: Diederik. Hij programmeert in Pascal, en is bovendien hobbyschaker. Naar aanleiding hiervan ontstond er een korte discussie over computerschaak en schaakprogramma's, waarbij Gerard de stelling verkondigde dat, ondanks het feit dat Deep Blue de toenmalige menselijke wereldkampioen Kasparov heeft verslagen, dit nog lang geen uitgekauwd onderwerp is; er liggen nog behoorlijk wat mogelijkheden voor onderzoek dat het inzicht in intelligentie en in het schaakspel kan vergroten.
  • Ed maakte ons attent op het boek De quantumcomputer. Een digitale revolutie op het punt van uitbreken. Dit boek geeft de huidige stand van zaken op dit gebied, en besteedt ook aandacht aan de verschillen tussen quantum- en klassieke computers.
  • Bens robotkarretje "Madeleine" heeft moeite met keren (een belangrijke component in het Roborama-onderdeel "Heen en weer"), en hij is begonnen om dit probleem aan te pakken. Omdat het bij de demonstratie op onze bijeenkomst wèl goed ging, vermoedt Ben dat het op de Roborama-wedstrijd fout ging door een andere (stroevere?) vloer; hij wil proberen om het keren minder afhankelijk van de ondergrond te maken door het inzetten van extra sensoren. Verder wil Ben graag Madeleine uitrusten met een backpropagation neuraal netwerk voor de besturing.
  • Daarnaast had Ben een relaas over zijn avonturen met zijn favoriete programmeertaal Visual Prolog. Daarvan was onlangs Versie 8 verschenen, en natuurlijk moesten al zijn programma's onder deze nieuwe versie worden uitgetest. Dat ging allemaal goed, met één uitzondering: zijn personal-informationprogramma "Gregorius", waarbij Prolog liet weten last te hebben van een "internal error". Dus contact gelegd met de helpdesk, in Rusland, die hem vroeg om de code op te sturen. Vreemd genoeg werkte het in Rusland probleemloos. In plaats van het hele probleem van tafel te vegen, stuurden ze Ben een aangepaste compiler, met uitgebreidere foutmeldingen, om het opnieuw te proberen. Afijn, uiteindelijk wist Ben een testprogrammaatje te maken om het probleem te isoleren, waarna de compilerfout kon worden verholpen. Het hele verhaal, dat zowel van de programmeerkwaliteiten van Ben als ook van de uitstekende service van de helpdesk van Visual Prolog getuigt, was erg interessant!
  • Peter was erg enthousiast over het boek Make Your Own Neural Network van Tariq Rashid. Dit boek, dat te begrijpen zou moeten zijn met voorkennis op VWO-niveau, bestaat uit twee gedeelten: een inleiding waarin wordt uitgelegd hoe een backpropagation neuraal netwerk werkt, en daarna een doe-het-zelf-gedeelte waarin zo'n netwerk daadwerkelijk wordt geprogrammeerd in Python. Er is besloten om een studiegroep op te zetten die met dit boek aan de slag gaat; van de aanwezigen wilden er zes zeker meedoen, en nog zes overwogen om deel te nemen. Er wordt nog overlegd of we ook andere interessegroepen bij deze activiteit gaan betrekken.
  • Jan gaf ruiterlijk toe dat zijn voorbereiding op de vorige Roborama-wedstrijd niet optimaal was; om dit jaar een beter resultaat te behalen is hij zo'n 3 weken geleden opnieuw begonnen voor de volgende editie, in november. Daarbij stuitte hij meteen al op problemen met een controlelusje in zijn programma. Ook doen de lichtjes van zijn lijnvolger het niet; misschien een hardwaredefect in de robot? Kortom, ook dit jaar gaat het niet van een leien dakje. Als alles weer werkt, is er hooguit nog maar één zaterdag, in oktober, om te oefenen. Als dat maar goed gaat…
  • Door het werk aan zijn robotkarretje heeft Jan maar weinig aan zijn andere interesse, de transputer, kunnen doen. Hij ontkende overigens met klem dat de transputers "retro" zijn: de technieken die daarin gebruikt zijn, zoals message passing, worden tegenwoordig nog overal toegepast! Abraham had daarentegen wel aardig wat tijd aan de transputer besteed: hij is nu, samen met Ronald, bezig om de transputers aan te sturen via een USB-bus. Ze kunnen al een bericht ontvangen van 23 bytes, met daarin een code voor het processortype (AA of AA AA). Ook demonstreerde Abraham een programma dat de Mandelbrot-fractal op een EGA- of VGA-scherm zichtbaar maakt, met de mogelijkheid om herhaald in te zoomen op een bepaald gebiedje. (Zie de foto hieronder.) Van het programma was geen sourcecode beschikbaar; volgens Jan bestond het uit 5 of 6 processen, ook al draaide het nu op maar één processor. Hierop ontspon zich een discussie over de vraag of hercompilatie nodig is als je de hardwareconfiguratie verandert door extra transputers toe te voegen. Gerard veronderstelde van niet; diverse anderen dachten van wel. Ook kwam er nog een interessant stukje transputerinfo langs: er is voor transputers ooit een operating system geschreven, namelijk "HeliOS".
    20170902
  • Tot slot had Arjan nog drie tips:
    • de tentoonstelling Meet Baby in het Museum of Science and Industry in Manchester (Engeland), met een replica van de eerste computer die in zijn geheugen niet alleen de te bewerken gegevens, maar ook het programma opsloeg.
    • het Handboek Python van Robert Smallshire en Austin Bingham, volgens Arjan een "aanrader".
    • het boek Getting Started with TensorFlow, door Giancarlo Zaccone. TensorFlow is een Python software library van Google voor het zelf samenstellen en gebruiken van neurale netwerken.

Helaas moest de uiteenzetting over dit laatste onderwerp worden afgebroken omdat het al weer tijd was om naar huis te gaan. Wordt volgende maand vervolgd…
(GV 29 oktober 2017)

Kort verslag van de bijeenkomst op 1 juli 2017

Ook ditmaal kwam weer een grote verscheidenheid aan onderwerpen aan bod:

  • Ronald had zijn 16×16-matrix van gekleurde LEDs meegenomen om het Kohonen-netwerk op te demonstreren. Omdat niet iedereen de eerdere demonstratie op een 10×10 LED-array en de bijbehorende uitleg had bijgewoond, heeft Gerard nogmaals uiteengezet wat een Kohonen-netwerk doet — zonder op de details van het "hoe" in te gaan. Maar, zoals iedereen kon zien en al eerder bij Ronald thuis was gebleken, werkte de 16×16-versie niet naar behoren: de kleuren rangschikten zich niet netjes van rand tot rand op de display. Gerard legde uit dat dit een bekend verschijnsel was, dat misschien te verhelpen was door te sleutelen aan de leerfactor van het netwerk. In het begin, als de gewichten van de neuronen nog een grote warboel zijn, krijgt deze leerfactor een relatief hoge waarde, zodat het netwerk door de invoerdata sterk in de goede richting wordt gedwongen. Naarmate het leren vordert en de gewichten dichter bij hun uiteindelijke gewenste waarde komen, neemt de leerfactor af en nadert asymptotisch tot een minimumwaarde. Hierdoor kunnen de (willekeurige) invoergegevens alleen nog maar kleine aanpassingen teweeg brengen, en geen grote verstoringen meer veroorzaken in het netwerk. Wanneer het netwerk, zoals in dit geval, niet tot een goede rangschikking van de inputs komt, dan komt dat doordat de leerfactor op zeker moment te klein wordt om de benodigde gewichtsaanpassingen te bewerkstelligen. Dit kan worden verholpen door drie mogelijke ingrepen, die natuurlijk elk ook weer een nadeel hebben:
    • De beginwaarde van de leerfactor verhogen.
    • De minimumwaarde (asymptotische eindwaarde) van de leerfactor verhogen.
    • De snelheid verminderen waarmee de leerfactor afneemt.
    Een kant-en-klaar recept is hierbij echter niet te geven; Gerard adviseerde Ronald dan ook om zelf met de drie parameters te experimenteren.
  • Ed had twee mededelingen:
    • Ed heeft samen met Abraham het plan opgevat om een robotje te bouwen dat gebruik maakt van kunstmatige intelligentie. De bedoeling is dat de robot zelf een route gaat vinden door te kijken naar wegwijzerbordjes die hij tegenkomt. De letters op die bordjes zouden herkend (d.w.z., ontcijferd) moeten worden door een neuraal netwerk; bij het programmeren van dit netwerk hopen ze de nodige informatie op te doen uit het boek Make Your Own Neural Network van Tariq Rashid.
    • Daarnaast deelde Ed mee dat de Robotica-interessegroep op de regiobijeenkomst in Haarlem op 11 november a.s. een presentatie van zo'n 30 à 45 minuten over zichzelf en hun activiteiten gaan geven. Hij vroeg zich af of het een goed idee zou zijn als AI zich daar ook zou presenteren, hetzij samen met Robotica, hetzij op een andere dag. Het AI-bestuur gaat er over in beraad. In ieder geval hopen we dat de robotici op onze december-bijeenkomst kort verslag willen doen van deze expeditie.
  • Ook Titus kwam met twee onderwerpen:
    • Hij had een grafisch simulatieprogramma geschreven van OBB's: Oriented Building Blocks. Titus' OBB's waren kubussen opgebouwd uit 5 viervlakken die door de ruimte zweefden; het moeilijke gedeelte bestond in het detecteren van botsingen en de resulterende verandering in bewegingsrichting en -snelheid. De simulatie zag er goed uit!
    • Ook demonstreerde Titus "AI voor beginners": een programmaatje van slechts 17 regels dat achterhaalt welk getal iemand in gedachten heeft. Dat gebeurt door het stellen van vragen ("groter dan ...?", of "kleiner dan ...?"); het programma zou dus gezien kunnen worden als een soort expertsysteempje. De methode om het getal te bepalen staat bekend als binair zoeken; hetzelfde idee vinden we ook in de "binaire zeef", die achter een bekend "goocheltruukje" voor kinderen zit.
  • Abraham had hard gewerkt aan de transputer-hardware. Om de transputers aan te sturen gebruikten we altijd een computer met Windows 98 en een ISA-slot voor insteekkaarten. Helaas is Windows 98 aardig in onbruik geraakt; en PC's met ISA-slot zijn al helemaal zeldzaam geworden. Abraham heeft nu een eigen interface gebouwd, zodat d.m.v. "peek"- en "poke"-opdrachten via een USB-bus met de transputer kan worden gecommuniceerd, en de ISA interfacekaart niet meer nodig zou zijn.
  • Theo maakte ons attent op het juli/augustus-nummer van het tijdschrift c't Magazine voor computertechniek, waarin een vijftal voor ons interessante artikelen staat, o.m. een artikel over beeldbewerking met AI en een artikel over het werken met Google TensorFlow.
  • Arjan had een programma geschreven om sudokupuzzels op te lossen met behulp van het dancing-linksalgoritme. Dit is een door Donald E. Knuth beschreven methode om zgn. exact-coverproblemen, waartoe sudoku's behoren, efficiënt in een computergeheugen te coderen en op te lossen. Arjan gaf een interessante demonstratie met goede uitleg.
  • Ronald vroeg welke programmeertalen goed kunnen omgaan met grote getallen (d.w.z. getallen met veel cijfers, hetzij "voor" hetzij "achter de komma"); hij was namelijk door het lezen in het boek De geheimen van PI geïnteresseerd geraakt in het benaderen van de wiskundige constante π. Gerard kwam met een mogelijke benaderingsmethode: neem een vierkant, met daarin een kwartcirkel waarvan de straal gelijk is aan de zijden van het vierkant en het middelpunt op een van de hoekpunten van het vierkant ligt. Door van een groot aantal willekeurige punten in het vierkant te bepalen welke fractie ervan in de kwartcirkel ligt, krijg je een benadering van π/4. Gerard kwam op die methode door het eerder vandaag besproken Kohonenprogramma, dat eveneens wordt "gevoed" door random punten in een vierkant. Diverse andere aanwezigen wisten nog verbeteringen in deze methode te bedenken.

We hebben ons dus weer prima vermaakt, deze zaterdag…
(GV 5 oktober 2017)

Kort verslag van de bijeenkomst op 3 juni 2017

Op deze bijeenkomst kwamen o.a. de volgende onderwerpen voorbij:

  • Arjan hield een goed voorbereide, vrij uitvoerige en zeer interessante lezing over het boek How to Create a Mind van de Amerikaanse auteur, uitvinder en zakenman Ray Kurzweil. Op basis van gedachtenexperimenten en bevindingen uit de (neuro)biologie beschouwt Kurzweil het menselijk brein als een systeem van miljoenen "patroonherkenners". Opmerkelijk is dat Kurzweils ideeën over het creëren van een "kunstmatig brein" het menselijk brein als voorbeeld en inspiratiebron hebben genomen, maar dat hij voor de implementatie ervan niets ziet in neurale netwerken; in plaats daarvan denkt hij zijn doel te bereiken met Hidden Markov Models. Het boek behandelt niet alleen de biologische en "technische" aspecten van de menselijke geest en eventuele kunstmatige intelligenties, maar beschouwt tevens diverse bekende filosofische kwesties (zoals "vrije wil", bewustzijn, en de aard van creativiteit) die daarmee in verband staan, waarbij ook oudere ideeën worden meegenomen. Al met al lijkt dit boek een echte aanrader voor wie in kunstmatige intelligentie is geïnteresseerd!
  • Titus liet ons drie voorbeelden zien van draaiende 3D-bomen, die hij zelf had geprogrammeerd in FreeBasic met OpenGL. De bomen zijn geprogrammeerd met behulp van L-systems, waarmee een soort van Turtle Graphics-commando's worden gegenereerd.
  • Peter vertelde dat hij The Information: A History, a Theory, a Flood van de Amerikaanse schrijver en wetenschapshistoricus James Gleick aan het lezen was. Zoals de titel al aangeeft gaat dit boek, dat ook in het Nederlands vertaald is, over de geschiedenis van het begrip "informatie", over de informatietheorie, en over het omgaan met de huidige "tsunami" van informatie. Peter beval het boek van harte aan.
  • Ronald maakte ons attent op een leerzame webpagina over floating-pointgetallen. Deze pagina laat op een interactieve manier zien hoe decimale breuken volgens de IEEE Standard for Floating-Point Arithmetic (IEEE 754) binair (en hexadecimaal) in de computer worden opgeslagen, en welke afrondingsfouten daarbij optreden. Helaas beperkt de pagina zich tot single-precision-getallen (32 bits); Ronald zou hiervan graag ook een double-precision-versie (64 bits) willen zien.
  • Ook Theo had een zeer interessante webpagina gevonden: een uitgebreide uitleg, met animaties, van het A*-algoritme. Het A*-algoritme is een methode om te zoeken naar de kortste weg tussen twee punten op een graaf (dat is: een verzameling punten verbonden door een netwerk van lijnen). Dit is bijvoorbeeld erg nuttig om wegen door doolhoven te vinden, en wordt dan ook regelmatig gebruikt in de kunstmatige intelligentie, de robotica, en bij het programmeren van games. Deze pagina is onderdeel van een interessante website over computer-games; de auteur heeft ook een goed leesbare beschrijving van de theoretische achtergrond van het A*-algoritme gemaakt.
  • Jan is zich nog steeds aan het bezinnen op zijn toekomstige activiteiten. Zijn eerder geuite idee over het bouwen van een simulatie van schepen op zee (als transputer-project) heeft een laag AI-gehalte. Zijn interesse in neurale netwerken is wat bekoeld toen hij informatie die hij op een website had gevonden probeerde na te rekenen: hij kwam op een andere uitkomst… Één uitgangspunt blijft voor hem recht overeind, namelijk zijn interesse in hardware: draadjes, chips, databoeken, enzovoort. Dat zijn immers dingen waar hij al zeer veel van af weet, en die hij begrijpt. Deze belangstelling kan hij volledig kwijt bij zijn Transputersysteem, en dat zal dan ook wel het centrale punt blijven van zijn bezigheden. Hij heeft nu de grote lijn in een 2-stappenplan gevat. De eerste stap is het (goed) leren programmeren in Occam, de "voertaal" van de Transputer. De tweede stap is om iets met die taal te gaan doen. Wat precies staat nog niet vast; gezien zijn interesse in (klassieke) muziek zou het iets in die richting kunnen worden.

Er zijn alles bij elkaar tijdens deze "plenaire sessie" genoeg ideeën en tips uitgewisseld om weer een maandje mee aan de slag te kunnen. Wordt vervolgd, dus…
(GV 14 september 2017)

Kort verslag van de bijeenkomst op 6 mei 2017

Op deze vrij rustige bijeenkomst kwamen onder andere de volgende onderwerpen aan de orde:

  • Als eerste werd een per e-mail door Jan ingediend voorstel besproken om de bijeenkomsten wat "gerichter" te maken. Dit voorstel was gebaseerd op twee uitgangspunten. Ten eerste was Jan zeer geïntrigeerd geraakt door neurale netwerken, maar zijn pogingen om iets van dat onderwerp te begrijpen hadden vooralsnog niets opgeleverd. En ten tweede vond hij dat hardware en verslagen van programmeeraktiviteiten, onderwerpen waaraan de meeste bijeenkomsttijd werd besteed, eigenlijk geen AI waren. Hij stelde dan ook voor om met de gehele groep een project over neurale netwerken te beginnen, en de plenaire sessie voor dat doel te gaan gebruiken.
    Tegen dit voorstel waren een aantal tegenwerpingen te maken:
    • Ook al valt niet alle denkbare programmeeraktiviteit onder het kopje "AI", en ook al kun je prima zinvol bezig zijn met AI zonder zelf te programmeren, toch is programmeren binnen het vakgebied AI wel degelijk een "kernaktiviteit".
    • AI is ruimer dan alleen "neurale netwerken". Wij hebben in het verleden altijd ruimte geboden aan andere richtingen, zoals fuzzy logic, genetische algoritmen, en ook "Good Old-Fashioned AI" op basis van symboolmanipulatie. Dit willen we blijven doen, opdat mensen met interesse in deze "takken van sport" niet teleurgesteld afhaken.
    • Veel van de door ons besproken programmeerproblemen, met name die waarbij "combinatorische explosie" optreedt, vormen een dankbaar toepassingsgebied voor AI-technieken.
    • Ook sterk verwante vakgebieden, zoals artificial life en robotica, kunnen vanwege hun sterke verwevenheid met AI niet zomaar terzijde worden geschoven.
    Natuurlijk werd Jans voorstel niet zomaar "afgebrand" zonder een alternatief te suggereren, want ook binnen het huidige "format" kan Jan zijn AI-gerelateerde interesses prima volgen:
    • Hij kan onder de bezoekers van de bijeenkomsten, of via een oproep op deze webpagina, op zoek gaan naar mensen met dezelfde of soortgelijke interesses.
    • Met deze "medestanders" (of desnoods alleen) kan Jan een werkgroep of studiegroep vormen, en zich tijdens het informele gedeelte van de bijeenkomsten, en/of d.m.v. persoonlijk of e-mailcontact tussen de bijeenkomsten in, verdiepen in de onderwerpen waar zij belang in stellen en waar ze meer over willen weten.
    • Natuurlijk kunnen werkgroepen en individuele bezoekers tijdens de plenaire sessie altijd gerichte vragen stellen over dingen waar ze niet uitkomen, of waarover ze meer willen weten. Vaak levert dat nuttige suggesties of stukken informatie op, doordat anderen meer of simpelweg andere literatuur hebben geraadpleegd, of zelfs persoonlijke programmeer- of toepassingservaring hebben opgedaan.
    • Aan de andere kant is er op de plenaire sessie ook gelegenheid om te vertellen wat je hebt opgestoken of uitgeprobeerd; dergelijke voortgangsrapporten kunnen gewoonlijk rekenen op een warme belangstelling van de overige bezoekers.
    Kortom, het voorstel van Jan om de werkwijze van onze interessegroep grondig op de schop te nemen kreeg weinig bijval, en besloten werd om alles (voorlopig?) bij het oude te laten.
  • Arjan vond het boek How to Create a Mind van Ray Kurzweil erg interessant, en was bereid hierover op een van de volgende bijeenkomsten wat meer te vertellen.
  • Rudolf maakte ons attent op Darknet, een open source neuraal netwerk geschreven in C. Een interessante toepassing daarvan is Yolo (You Only Look Once), een real-time systeem om objecten op foto's te herkennen. Rudolf wil zelf neurale netwerken gaan toepassen voor het bepalen van grondsoorten op basis van sonderingsdata, waarbij de trainings( en test- )data afkomstig zijn van locaties waarvoor behalve sonderingen ook boringen zijn verricht.
  • Titus had, geïnspireerd door het boek The Computational Beauty of Nature van G.W.Flake, een simulatie van nestbouwende mieren geprogrammeerd, maar die werkte nog niet naar verwachting. Het bleek dat mieren regelmatig heel snel gingen lopen, alsof ze een pepmiddel hadden geslikt; en ook brachten ze het nestmateriaal vooral naar de rand van het scherm, in plaats van er over het hele gebied structuren van te bouwen.
  • Ter ondersteuning van zijn visie op de "opgebouwde wereld" en de vrije wil, had Henk wat passages uit het boek De Bètacanon gekopieerd. Dit deelde hij uit aan de aanwezigen. Op de achterkant stond zijn eigen artikel De computer en de vrije wil, dat ook op deze website na te lezen is. Reacties op dit artikel zijn nog steeds welkom.
  • Ondanks het besluit om de activiteiten van onze interessegroep niet volledig op neurale netwerken te richten, speelt deze techniek wel een hele grote, om niet te zeggen overheersende, rol in de hedendaagse AI-aktiviteiten van de "grote spelers" — multinationals, onderzoeksinstituten, enz. Ter illustratie daarvan werd gewezen op het door Google gebruikte TensorFlow-systeem voor machinaal leren. Voor dit systeem is nu ook speciale hardware ontwikkeld.
  • In het voorbijgaan werd ook Apple's "intelligente" personal assistant Siri genoemd, en het idee kwam op om de intelligentie daarvan eens te gaan testen. Helaas bleek niemand van de aanwezigen een iPhone te gebruiken…
  • Als voorbeeld van combinatorische explosie werd nog de 16×16 sudoku genoemd die met Pasen in de Volkskrant stond. Henk had daar zijn backtrack-programma op losgelaten, en aan Gerard verteld dat dit zo'n 7 uur aan het werk was geweest. Daarbij moet wel worden aangetekend dat het programma erg veel naar het beeldscherm schrijft (alle probeersels worden weergegeven), wat behoorlijk wat extra tijd kost, en dat het programma na het vinden van een oplossing blijft doorzoeken om te kijken of er meer oplossingen zijn. Voor een "gewone" 9×9 sudoku heeft het programma hooguit slechts enkele minuten nodig. En als een sprong van 9 naar 16 al zo'n toename in verwerkingstijd tot resultaat heeft, kan men zich voorstellen dat nog grotere sudoku's (bijv. 100×100) al gauw praktisch onoplosbaar worden. Bedenk daarbij dat voor problemen in het "echte leven" 100 nog maar een heel klein getal is…
    Er is echter een hoop te winnen met betere algoritmen: Henks had ook een programma geschreven dat eliminatie van mogelijkheden toepast (dus ongeveer zoals mensen sudoku's oplossen), en dat gaf voor de 16×16-paassudoku een oplossing in een veel kortere tijd. En zelfs backtracking kan slimmer: Gerard's exact-coverprogramma loste de paassudoku op in enkele minuten.

Er waren dus weer genoeg onderwerpen ingebracht om op voort te borduren; we wachten af wat dit gaat opleveren!
(GV 10 juli 2017)

Kort verslag van de bijeenkomst op 1 april 2017

Op deze bijeenkomst, die goed bezocht werd, werd eerst de verplichte jaarlijkse ALV (Algemene LedenVergadering) gehouden. Daarvan worden door de secretaris afzonderlijke notulen gemaakt, zodat dit verslag beperkt kan blijven tot de inhoudelijke punten die op de plenaire sessie aan de orde kwamen:

  • Jan deelde mee dat hij het transputersysteem voortaan weer (in principe maandelijks) mee zal nemen naar onze bijeenkomsten. Dat heeft twee duidelijke voordelen: voor ons is het veel inspirerender en handiger om direct op het systeem zelf te werken in plaats van via een internetverbinding; en bij hem thuis hoeft er dan niet elke maand een kabel dwars door de woonkamer te worden getrokken!
  • Op de vorige bijeenkomst is door Gerard de zeeslagpuzzel weer onder de aandacht gebracht. In een ver verleden, toen we onze bijeenkomsten nog in Gouda hadden, had Henk een backtrack-programma geschreven om dergelijke puzzels op te lossen. Vandaag had hij het meegenomen, en hij gaf een duidelijke demonstratie van hoe het werkt. Omdat backtracking het depth-first doorlopen van een boomstructuur is, ontspon zich enige discussie over waar die boom dan in Henks programma was terug te vinden. Gerard heeft uitgelegd dat de boomstructuur die wordt doorlopen wel conceptueel achter het algoritme zit, maar nooit volledig in het geheugen of de voortgangsdisplay van het programma is terug te vinden, omdat de boom als het ware steeds naar behoefte wordt opgebouwd en weer afgebroken.
  • Er wordt in onze interessegroep de laatste tijd regelmatig gesproken over het organiseren van een workshop neurale netwerken, en over de programmeertaal waarin die workshop zou moeten worden gegeven. Daarbij zijn talen als JavaScript en Processing genoemd, waarmee grafisch oogstrelende dingen te bouwen zijn; maar als we die workshop bijvoorbeeld ook voor leden van de HCC Robotica interessegroep aantrekkelijk willen maken, zouden talen als C of Python misschien interessanter zijn. Gerard kwam met een nieuw idee op de proppen. Volgens hem heb je twee dingen nodig om een neuraal netwerk te programmeren: ten eerste moet je kunnen programmeren; en ten tweede moet je snappen hoe een neuraal netwerk werkt. Naar zijn mening moeten de deelnemers aan de workshop de programmeervaardigheid zelf meebrengen; onze rol kan dan "beperkt blijven" tot het uitleggen van neurale netwerken en het geven van een reeks programmeeropgaven van toenemende complexiteit. Het voordeel van deze aanpak zou zijn dat elke deelnemer in zijn of haar eigen favoriete taal aan de workshop kan deelnemen. Diverse aanwezigen zouden het een goed idee vinden als de workshop voorbeelden in pseudo-code zou aanbieden, omdat "dat de manier is waarop mensen leren"; maar volgens Gerard stuurt pseudocode het denken wel erg sterk in de richting van een imperatieve (procedurele) programmeerwijze, terwijl hij andere programmeerparadigma's niet bij voorbaat wil uitsluiten.
  • Abraham had wat rondgekeken naar hardware-bordjes voor robotbesturing waarvoor in Python kan worden geprogrammeerd. Hij kwam met drie mogelijkheden: de Arduino Zero, met een Atmel SAMD21 ARM processor, waarop programma's in MicroPython kunnen worden geschreven; het ESP8266 Wifi-controllerbordje dat ook in MicroPython kan worden geprogrammeerd; en, voor het geval MicroPython onvoldoende is en er een "volledige" Pythonversie vereist is, de Raspberri Pi Zero — waarbij het onderliggende besturingssysteem Raspbian wel een vertragende factor zal vormen. Voor dit laatste platform was Abraham bij zijn speurtocht ook nog een interessant boek tegengekomen: Make Your Own Neural Network, door Tariq Rashid.
  • Ben praatte ons nog even bij over de verrichtingen van zijn robotkarretje Madeleine op de Roborama-wedstrijden van afgelopen november. Ze was ingeschreven voor het onderdeel "heen-en-weer" en, zoals Ben dat treffend formuleerde, "het ging bijna goed". Het probleem was dat de vloer bij de wedstrijden blijkbaar stroever was dan die waarop Madeleine geoefend had, zodat ze niet ver genoeg keerde. (De bedoeling was 180° in twee draaien van 90°.) Toch was haar prestatie nog goed voor een vierde plaats in de beginnersklasse, met 5 deelnemers.
  • Theo was op het internet op een tweetal interessante dingen gestuit. Ten eerste zijn er blijkbaar websites die .ai als hoofdniveau (TLD, het laatste stukje) in hun domeinnaam hebben. De lettercombinatie duidt op Anguilla, een Brits overzees gebiedsdeel in de Caribische zee. Als tweede vond hij een neuraal netwerk in 11 regels Python-code. Een speurtocht via Google met de zoektermen "neural network", "Python" en "lines" levert meer van zulke voorbeelden op.
  • Pedro wees ons er op dat Daniel Shiffman is begonnen met de colleges over het tweede deel van The Nature Of Code, dat over machine learning gaat.
  • Tot slot vertelde Gerard nog iets over zijn eigen zeeslag-programma, waarin hij een expertsysteem-achtige rule-based methode gebruikt. Door zelf een aantal puzzels handmatig op te lossen, en te kijken welke redeneringen hij daarbij volgt, kwam hij met een 9-tal oplossingsregels op de proppen. Deze regels heeft hij, voorlopig tamelijk quick and dirty, in Python gecodeerd, samen met een programmalus die telkens kijkt of er één van deze regels kan worden toegepast. Als er in een situatie geen bruikbare regels meer zijn, kan dat verschillende dingen betekenen. Ten eerste kan de puzzel opgelost zijn; het programma controleert dit door alle gevonden scheepsdelen te tellen. Ten tweede is het mogelijk dat het programma nog een oplossingsregel (of meerdere) mist; deze moet(en) dan alsnog worden toegevoegd. Ten derde kan het eventueel voorkomen dat een puzzel meerdere oplossingen heeft. Henk wees er op dat dan alsnog backtracking zal moeten worden toegepast; maar volgens Gerard zou dit geval zich bij goed geconstrueerde puzzels eigenlijk niet mogen voordoen.
    De huidige regelverzameling voldoet voor de eerste 12 puzzels die Gerard uit de Metro heeft verzameld. Hij demonstreerde het programma dan ook door het los te laten op één van deze testvoorbeelden en de uitvoer daarvan, bestaande uit telkens een vermelding van de toegepaste regel gevolgd door het resulterende diagram, stapsgewijs te doorlopen.

Het was dus gewoontegetrouw weer een interessante bijeenkomst, en we kijken nu al weer uit naar de volgende!
(GV 3 april 2017)

Kort verslag van de bijeenkomst op 4 maart 2017

Gedurende het informele gedeelte, dat door de meeste bezoekers werd benut om geanimeerde gesprekken te voeren, kwamen Albert en Gerard er achter dat de transputer bij Jan thuis niet meer met hen leek te willen praten, en dat hun kennis van het Occam compileer- en linkproces nogal te kort schoot. Tijdens de plenaire sessie werd o.a. het volgende besproken:

  • Twee nieuwe bezoekers stelden zich voor: Andries en Arjan. Hun interesses lijken goed te passen bij de activiteiten van onze groep, waaraan ze hopelijk met hun specifieke kennis en vaardigheden in de toekomst ook het nodige zullen kunnen bijdragen!
  • Jan deelde mee dat hij, mede door onze bijeenkomsten, zeer geïnteresseerd was geraakt in AI, maar dat hij bij zijn pogingen om er meer van te weten te komen een beetje was stukgelopen op de hoeveelheid wiskundige kennis die daarvoor nodig was. Hij heeft besloten zijn werkzaamheden gedeeltelijk te verleggen naar een andere interesse van hem: de simulatie van scheepsbewegingen. Hij wil daarvoor nog steeds wel zijn transputers en de bijbehorende programmeertaal Occam blijven gebruiken. Volgens Gerard had dit (voor ons) nieuwe onderwerp zoveel raakvlakken met artificial life — bijvoorbeeld botsingsvermijding en flocking behaviour (zwermgedrag) — dat Jan ook met deze belangstelling uitstekend bij onze groepering op zijn plaats is. Daarnaast is Jan van plan om ook dit jaar weer met zijn karretje MOOF deel te nemen aan de Roborama-wedstrijden, en zijn ook zijn ambities voor Conapp nog altijd springlevend.
  • Titus demonstreerde een door hemzelf geschreven FreeBasic-programma dat met zichzelf het spel Angels and Devils speelt, dat hij had leren kennen door de gelijknamige aflevering van de televisieserie Numb3rs. In dit spel, dat zich afspeelt op een "willekeurig groot vel ruitjespapier", moet een Engel, met een bepaalde gegeven maximale spronggrootte, zien te ontsnappen naar de oneindigheid, terwijl een Duivel dat probeert te verhinderen door posities voor de Engel ontoegankelijk te maken. In de demonstratie van Titus verscheen een patroon dat Gerard en Peter sterk aan het spel Go deed denken.
  • Ook had Titus een poging gedaan om in Python iets met Genetisch Programmeren te doen. Eerst liet hij zien hoe (gedeelten van) twee rekenkundige expressies werden gecombineerd tot een nieuwe expressie, en daarna hoe er in een rekenkundige expressie een mutatie kan worden aangebracht. Tenslotte liet hij zien dat het programma er nog niet in slaagde om m.b.v. deze bewerkingen een goede benadering van π te vinden, ook al zat er wel verbetering in de uitkomsten van de verschillende opeenvolgende generaties.
  • Arjan had aan de hand van het boek C++ Neural Networks and Fuzzy Logic, geschreven door Valluru B. Rao en Hayagriva V. Rao, een backpropagation neuraal netwerk geprogrammeerd. Hij legde eerst op het whiteboard uit hoe een dergelijk netwerk in elkaar zit en hoe het functioneert, en demonstreerde daarna dat zijn programma onderscheid kon leren maken tussen de letters A, X, H, B, en I, wanneer deze in de vorm van 6×5 bitmaps werden aangeboden. Naar aanleiding hiervan ontspon zich enige discussie over beeldherkenning vanaf (digitale) foto's, waarop al dan niet bepaalde voorbewerkingen waren uitgevoerd.
  • Gerard kwam met het nieuws dat de zeeslagpuzzels, die vroeger regelmatig in het gratis treinkrantje Sp!ts stonden, nu regelmatig in het eveneens gratis treinkrantje Metro te vinden zijn. Destijds hebben diverse mensen van onze interessegroep geprobeerd deze puzzels met de computer op te lossen; enerzijds met een genetisch algoritme, wat niet zo goed werkte, en anderzijds m.b.v. backtracking, waarmee altijd een oplossing werd gevonden (of meer, als er meerdere mogelijk waren). Gerard had hieruit geconcludeerd dat genetische algoritmen minder geschikt zijn voor dergelijke constraint statisfaction problemen, maar een eerdere opmerking van Arjan dat deze er in was geslaagd om met die methode magische vierkanten te maken stemde hem tot nadenken.
    Daarnaast liet Gerard nog enkele soortgelijke puzzels de revue passeren, met name de tectonic en de tentje-boompje-puzzel, die ook in de Metro te vinden zijn. Volgens hem waren dergelijke puzzels een goede "proeftuin" om de kracht en beperkingen van diverse AI-technieken te bepalen. Hij overwoog om te gaan onderzoeken of de zeeslagpuzzels goed kunnen worden opgelost met een op regels gebaseerd systeem, d.w.z. met een expertsysteem-achtige aanpak.
  • Tenslotte deelde Gerard mee bezig te zijn met het bestuderen van het algoritme van Bresenham: een efficiënte methode om lijnen te tekenen op het computerscherm. Het algoritme kan echter ook gebruikt worden om stappen te plannen in een discrete ruimte, bijv. een schaakbord of een vel ruitjespapier; het vormt dan ook een aanvulling op de zes benaderingen van het "Koningszet"-probleem die Gerard zelf in zijn lezing over dit probleem op een rijtje had gezet. Het was Theo die Gerard destijds het eerst op deze mogelijkheid wees.

Al met al dus weer een gezellige en leerzame bijeenkomst!
(GV 6 maart 2017)

Kort verslag van de bijeenkomst op 4 februari 2017

De volgende onderwerpen kwamen langs:

  • Gerard rakelde een oude activiteit op: het "lamprei-project". (Een lamprei is een primitieve, palingachtige vis.) Aan de hand van een artikel uit Scientific American werd een event-driven BASIC-programma geschreven om het neurale netwerk van één segment uit het ruggemerg van een lamprei te simuleren. Behalve dit programma, dat door Gerard werd gedemonstreerd, leverde het project ook een drietal artikelen voor ons toenmalige tijdschrift "Kennisgeving" op. Volgens Gerard was dit dan ook een van de beter geslaagde projecten waaraan hij heeft (mee)gewerkt.
  • Abraham meldde dat hij een Occam-simulator aan de praat heeft gekregen onder Windows XP en Windows 10. Dit zal het schrijven en testen van programma's voor de transputers van Jan zeker eenvoudiger maken!
  • Een nieuwe bezoeker stelde zich voor: Hens. Hij is geïnteresseerd in "zo slim mogelijk programmeren", vooral van programma's die veel rekenen. Hij zal weinig zaterdagen in de gelegenheid zijn onze bijeenkomsten te bezoeken, en hoopt daarom kennis uit te kunnen wisselen per e-mail tussen de bijeenkomsten door.
  • Henk kwam met wat interessant "leesvoer":
    • Het boek Basics of Digital Computers van John S. Murphy uit 1958, dat vooral historisch interessant is.
    • Het boek Microprocessor Programming for Computer Hobbyists van Neill Graham uit 1977, dat nog steeds nuttig kan zijn, vooral voor mensen die in assembleertaal (willen gaan) programmeren.
    • Het boek De droom der rede. Een geschiedenis van de filosofie van de Grieken tot de Renaissance van Anthony Gottlieb.
    • Een artikel uit De Volkskrant over de Leidse criminoloog Buikhuisen, wiens belangstelling voor het verband tussen hersenen en crimineel gedrag destijds (eind jaren '70) verketterd werd, maar nu weerklank begint te vinden.
    • De column van Herbert Blankestein in PC-Active 292 (feb/maart 2017) over Linux, waarin Henk zelf veel herkenbaars vindt.
  • Titus heeft zich geworpen op beeldherkenning: hij is begonnen met het ombouwen van een programma dat de wortelfunctie leert, tot iets dat een vierkant van een cirkel kan onderscheiden in een zwart-witafbeelding van 63 bij 63 pixels. Hij heeft daarmee, zoals we van hem gewend zijn, een ingewikkeld probleem teruggebracht tot een sterk vereenvoudigde (en dus in principe behapbare), maar toch niet triviale opgave. Helaas werkt het programma nog niet helemaal naar behoren…
  • Pedro vestigde nogmaals onze aandacht op Processing, een softwarepakket om grafisch te programmeren. De huidige versie, 3.2.3, omvat een IDE en veel libraries, o.a. voor natuurkundige simulaties. Zelf werkt Pedro met p5js, dat dezelfde doelstellingen nastreeft, maar dan in JavaScript. Hij doet veel inspiratie op uit de video's van Daniel Shiffman: korte presentaties over alle hoofdstukken van zijn boek The Nature Of Code, behalve – op dit moment – de hoofdstukken over neurale netwerken.
    Pedro liet twee voorbeelden zien die hij zelf in p5js had geprogrammeerd:
    • Een simulatie van de bewegingspatronen van roofdieren (zoals katachtigen of haaien) op zoek naar een prooi.
    • Een programma dat het Traveling Salesman Problem met 10 steden aanpakt d.m.v. random search: telkens worden 2 punten in de route verwisseld. Pedro "deed" de versie waarbij de handelsreiziger wel alle steden moet bezoeken, maar niet terug hoeft naar zijn uitgangspunt; deze versie geeft meestal een andere oplossing dan de standaardversie waarbij wel in de startplaats moet worden geëindigd.
  • Peter liet ons kennis maken met de digicortex-software, een neurobiologische hersensimulator die hij op het Internet had aangetroffen. Hij demonstreerde hoe je ergens een hersengebiedje kon stimuleren, en hoe dit signaal zich dan verspreidde naar andere gebieden van de hersenen. Heel indrukwekkend programmeerwerk, maar je hebt waarschijnlijk nogal wat kennis van de neuro-anatomie nodig om er zinvol mee te kunnen experimenteren. Wat natuurlijk wel weer een goede aanleiding is om ook eens dieper in dàt onderwerp te duiken!
  • Op de valreep kwam Ronald, na de I2C-workshop van Robotica, nog even melden dat hij het Kohonen-programma had aangepast voor zijn 16×16 array van bestuurbare gekeurde LEDjes. We hopen hier op een van de volgende bijeenkomsten nader op in te kunnen gaan.


(GV 5 maart 2017)

Kort verslag van de bijeenkomst op 7 januari 2017

De weg-omstandigheden waren bar en boos: wegens sneeuw en ijzel gold een waarschuwing code oranje. Toch waren er van heinde en verre nog 6 mensen naar onze bijeenkomst gekomen, waar op de plenaire sessie de volgende onderwerpen aan bod kwamen:

  • Henk liet op de beamer zien hoe zijn 4-op-een-rij-programma tegen zichzelf speelde. "Net een screensaver", vond hij zelf — temeer daar hij de animatie-effecten heeft uitgebreid: na het beëindigen van een spel stijgt het hele speelbord langzaam ten hemel. Dat oogt erg leuk, maar voegt verder functioneel weinig toe (aldus Henk).
  • Belangrijker is dan ook, dat hij is begonnen met het bedenken van een systeem om alle bordstanden op te slaan. Gebruik makend van het feit dat de kolommen van de onderkant af worden "opgebouwd", heeft Henk een vernuftig systeem bedacht dat slechts 7 bytes per stand vergt. Dit systeem werd door hem met behulp van zijn programma en het whiteboard duidelijk uitgelegd. Er blijft zelfs nog wat ruimte over, die desgewenst gevuld kan worden met signaalbits ("vlaggen") om het programma "slimmer" te laten spelen.
  • Henks uiteindelijke doel is om, met een vergelijkbare methode als door hem toegepast bij de schuifpuzzel en de 2×2×2 Rubik's kubus, vanuit een willekeurige bordstand voor de computer een weg naar de overwinning te vinden. Helaas is het aantal verschillende standen, zelfs als we links-rechtsspiegelingen eruit halen, heel erg groot: voor het aantal bordstanden na 15 zetten (dus met exact 15 vakjes gevuld) blijkt meer dan 1 gigabyte nodig! Het is dus nog maar de vraag of dit doel wel bereikbaar is…
  • Behalve het ruimtegebruik, is ook de volgorde waarin alle bordstanden worden opgeslagen van belang. Die standen moeten dus niet alleen uitputtend worden opgesomd, maar ook nog gesorteerd! Henk gebruikt hiervoor een merge sort, die enige discussie uitlokte. Het ging daarbij vooral over de manier waarop (= de volgorde waarin) de gesorteerde deelrijtjes door Henk werden gerecombineerd.
  • Tijdens het gesprek over de sortering had Ronald een relevante wikipediapagina op de beamer gezet, waarin een animatie van de odd-even sort was opgenomen. Gerard merkte op dat hij een sterke neiging had om vooral in het begin van deze animatie een rotatie te zien, een indruk die door diverse aanwezigen werd gedeeld. Dat is des te merkwaardiger omdat het plaatje zuiver 2-dimensionaal bedoeld moet zijn (horizontaal: rangnummer van het te sorteren item in de reeks, vertikaal: grootte van het item). Waarschijnlijk zijn hieruit interessante lessen over het menselijke visuele waarnemingssysteem te leren…
  • Henk had ook nog het boek De bétacanon. Wat iedereen moet weten van de natuurwetenschappen, dat op de vorige bijeenkomst ter sprake kwam, meegenomen, zodat alle aanwezigen zich er zelf van konden overtuigen dat Democritus en zijn atoomtheorie hierin geen eigen hoofdstuk hebben gekregen.
  • Ronald vestigde de aandacht op het boek Computerschaak, schaakwereld en kunstmatige intelligentie van Jaap van den Herik. Hij heeft het zelf als PDF.
  • Verder meldde Ronald dat het tijdschrift Elektor een zogenaamde "kattendoku", dat is een hexadoku (16-cijferige sudoku) in de vorm van een kattekop, heeft gepubliceerd. Het was niet helemaal duidelijk wat de beperkende voorwaarde (constraint) is bij het invullen, omdat niet alle rijen, kolommen en (onregelmatig gevormde) vakjes precies 16 hokjes tellen.
  • Ook had Ronald weer een nieuwe 2-dimensionale array van "intelligente" (d.w.z. programmeerbare) LEDjes bij zich; ditmaal 16 × 16. Een complicatie is dat de LEDs op de opeenvolgende rijen niet steeds in dezelfde richting zijn doorverbonden, maar a.h.w. "heen-en-weer"; dat vergt natuurlijk extra slimme programmeertrucs als je er bijvoorbeeld een lichtkrant of zo van wil maken.
  • Als laatste bijdrage liet Ronald weten dat de door Henk gebruikte programmeertaal en IDE QBasic ook voor nieuwere Windows-versies (zoals Windows 7) beschikbaar was, onder de naam qb64.exe. Natuurlijk zit de "recursie", d.w.z. de mogelijkheid om een in een programma gebouwde instructiestring meteen weer ter evaluatie aan de interpreter aan te bieden, er dan niet in; deze nuttige faciliteit is door Henk zelf in zijn BASIC-interpreter "gehackt".
  • Abraham had op de winkel- en veilingsite ebay een stropdas van de Association for the Advancement of Artificial Intelligence (AAAI) op de kop getikt. Natuurlijk moest dit worden vastgelegd: onderstaande collage, gebaseerd op een door Kees gemaakte foto, geeft een goede indruk van de das en enkele saillante details.
    20170107
  • Abraham had ook nog iets te vertellen over zijn lijnvolgrobot PLV, die hij dit jaar wil gaan inzetten op het Roborama-onderdeel "doolhof". Bij dit onderdeel wordt de robot door de scheidsrechter tweemaal op dezelfde willekeurige plek in het lijndoolhof gedropt. De eerste keer mag hij het doolhof gaan verkennen om de weg van de neerzetplaats naar de uitgang te bepalen; de tweede keer moet hij die weg zo snel mogelijk afleggen. Bij de verkenningsfase denkt Abraham het feit te benutten dat weliswaar de neerzetplaats niet van te voren bekend is, maar de plattegrond van het doolhof wel! Hij hoopt dat zijn robot daar gebruik van kan maken om er na een stukje rijden achter te komen waar hij is neergezet. Gerard dacht dat het misschien voordelig kon zijn om de robot tijdens de verkenningsfase gewoon kris-kras over het doolhof te laten rijden i.p.v. strikt de lijn te volgen, maar het was niet bekend of dat wel is toegestaan; en bovendien valt daar weinig mee te winnen, omdat het eerste onderdeel niet op tijd wordt beoordeeld.
  • Abraham had ook nog een technisch probleempje op te lossen: als er zich een heldere lichtbron boven de robot bevindt, kan de schaduw van de arm waarop de camera is gemonteerd door de robot worden aangezien voor een lijn! Hiervoor zijn twee oplossingen mogelijk. Abraham voelt er het meeste voor om de schaduw te laten wegvallen door de grond extra te verlichten met op de robot gemonteerde LEDs. Maar het is natuurlijk ook mogelijk om eventuele storende lichtbronnen af te schermen door een plaatje materiaal als een soort horizontaal lichtscherm boven de camera te monteren. Op zo'n plaatje zou dan tevens een displayschermpje of iets dergelijks gemonteerd kunnen worden. De tijd zal leren welke oplossing het beste werkt.
  • Peter M. was afgekomen op de I2C workshop van Robotica, omdat hij graag wilde weten hoe hij multisensor fusion kan realiseren. Hij heeft namelijk een MPU-6050 sensor, die versnellingen en rotaties in 3 richtingen kan meten. Deze sensor wordt door een Arduino microcontrollerbordje uitgelezen via de I2C-bus. Peter had een mooi programma geschreven dat de veranderingen in de stand (kantelingen) van het Arduino-bordje (met sensor) duidelijk zichtbaar maakte op het scherm van zijn computer. Tot zover geen probleem; maar Peter wil graag ook nog andere sensoren via de Arduino uitlezen, en had gehoopt daar bij Robotica meer over te leren. Helaas, door de sneeuw en ijzel was de workshop afgelast — feitelijk bleek zelfs de hele Roboticabijeenkomst niet door te gaan. Gelukkig zijn Abraham en Ronald ook ervaren hardwareknutselaars. Zij wisten te vertellen dat elke sensor zijn eigen I2C-adres heeft; en mochten die toevallig eens samenvallen, dan kan via een (programmeerbare) switch een extra I2C-poort worden toegevoegd.

Al met al vormde deze bijeenkomst toch weer de geslaagde aftrap van een heel nieuw jaar gevuld met interessante AI- en robotica-activiteiten!
(GV 23 januari 2017)

Actueel

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

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

Aanmelden