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