• No results found

In de volgende sectie worden de specifieke componenten die gebruikt worden in de architectuur in nog meer detail besproken. Zo kunnen voor verschillende soorten data verschillende interpre- ters geïmplementeerd worden die allen dezelfde basisinterface gebruiken maar op verschillende manieren gegevens interpreteren. Zo wordt gamedata op een andere manier omgezet naar unifor- me objecten dan externe data zoals die van een hartslagmonitor. Daarboven wordt bij sommige componenten onderscheid gemaakt tussen onsite en offsite adaptatie. Als gegevens over het internet gezonden moeten worden, dienen de componenten echter extra functionaliteit te heb- ben zoals conversie en transmissie van gegevens. Omdat de generieke architectuur een circulair

4.4. COMPONENTEN 35 systeem is, wordt voor elke component besproken wat de input en de output ervan is. Zo kan gemakkelijk gevolgd worden hoe de gegevens doorheen het systeem veranderen. De componenten zullen daarboven in wijzerrichting verklaard worden startende bij de game-component.

4.4.1 De game

De serious game is logischerwijze de component die de gamedata produceert en de nieuwe op- drachten uitvoert. De data die de game produceert is sterk afhankelijk van de soort serious game. Daarboven kan, afhankelijk van de complexiteit van de adaptive engine, beslist worden hoeveel en hoe vaak verschillende soorten gegevens van de game doorgestuurd worden. De adaptive en- gine kiest welke gegevens gebruikt zullen worden voor adaptatie. Voor een eenvoudige adaptatie kan bijvoorbeeld enkel de score van de gebruiker op het einde van het spel gebruikt worden. Op basis van deze metrieken zal de adaptive engine vervolgens bepalen hoe het spel moet aangepast worden. Voor een complexere adaptive engine kan gekozen worden om specifiekere gegevens door te sturen. Zo kan de tijd die de gebruiker nodig had om een bepaalde opdracht uit te voeren gebruikt worden in combinatie met de score om een gedetailleerdere analyse uit te voeren. Een lange tijd voor een bepaalde opdracht kan zo een indicatie zijn dat het spel te moeilijk was, waarna de adaptive engine kan beslissen het spel eenvoudiger te maken.

Zoals in Sectie 4.3 vermeld werd, moeten gegevens geïnterpreteerd worden naar uniforme objec- ten die door de adaptive engine verwerkt kunnen worden. Dit interpreteren gebeurt in zo een interpreter component waar later dieper op ingegaan wordt. Uiteraard moeten de gegevens uit de game in deze interpreters geraken. Op welke manier deze gegevens doorgegeven worden, is afhankelijk van de plaats van adaptatie, zoals beschreven in Sectie 2.2.3. Bij offsite adaptatie beschikt de interpreter immers niet over de bestanden van de serious game omdat deze zich over het internet op een andere locatie bevinden. In de volgende paragrafen wordt besproken hoe gegevens van de game overgebracht kunnen worden naar de interpreters bij zowel onsite als offsite adaptatie.

36 HOOFDSTUK 4. GENERIEKE ARCHITECTUUR

Onsite adaptatie

Wanneer onsite adaptatie aan de orde is, kan de data van de game naar andere componenten gebracht worden door gebruik te maken van het eerder besproken observer pattern. Zo zal de interpreter zich registreren als observer bij bepaalde parameters van de game, waarna, als de waarde van zo een parameter verandert, de game dit aan de interpreter meldt. De enige aan- passing die bij de game moet gebeuren, zodat gegevens naar de interpreters gestuurd kunnen worden, is de implementatie van het observer pattern. Dit observer pattern zal zich dan bevinden in een subcomponent genaamd de sender, zoals te zien is op Figuur 4.3. Deze subcomponenten zullen, in de implementatie, voorgesteld worden als interfaces.

Figuur 4.3: Game-component met observer pattern bij onsite adaptatie

Offsite adaptatie

Wanneer offsite adaptatie gebruikt wordt, moeten een paar extra acties ondernomen worden om de gegevens goed bij de interpreter te brengen. De interpreter bevindt zich echter op dezelfde locatie als de adaptive engine omdat de interpreter moet beschikken over de objecten die de adaptive engine gebruikt. Hierdoor moeten de gegevens van de game over het internet naar de interpreter gestuurd worden. Ten gevolge hiervan werd één extra subcomponent bepaald, die de game kan implementeren om de gegevens op een goede manier over te brengen. Deze subcomponent heet de transformer en is te zien in Figuur 4.4. Deze transformer transformeert de gegevens naar een formaat dat geschikt is om over het internet te sturen. Een voorbeeld van

4.4. COMPONENTEN 37

Figuur 4.4: Game-component met transformer en sender bij offsite adaptatie

zo een formaat kan JSON zijn. De transformer zal er in dit geval voor zorgen dat het gegeven uit de game geserialiseerd wordt naar een JSON-String. Het encoderen van de gegevens om deze op een goede manier over het internet te sturen, kan ook een operatie zijn die in de transformer van de game dient ondergebracht te worden. De andere gebruikte subcomponent is opnieuw de sender. Deze zorgt ervoor dat de data daadwerkelijk over het internet gestuurd wordt. Ter vervanging van bij onsite adaptatie het observer pattern te implementeren, zorgt de sender er hier voor dat er een connectie geopend wordt en, wanneer de transformer van de game de nieuwe gegevens getransformeerd heeft, data doorgestuurd wordt. Het gebruik van een transformer en een sender zorgt ervoor dat er op veel verschillende manieren gegevens naar de interpreters gestuurd kunnen worden.

Input en Output

De serious game kan veel verschillende soorten gegevens genereren. Scores en tijden zijn nu- merieke waarden, maar de game kan evengoed tekstuele gegevens sturen, zoals antwoorden op vragen wanneer de serious game een quiz is. Hierdoor is het type data, aan de output van de game, niet vast bepaald. Het is de taak van de interpreter om ervoor te zorgen dat deze sterk variërende data geïnterpreteerd wordt naar een uniform object.

38 HOOFDSTUK 4. GENERIEKE ARCHITECTUUR Aan de input van de serious game liggen nieuwe opdrachten voor het spel. Deze opdrachten,

tasks genoemd in het systeem, bepalen hoe het spel kan aangepast worden en worden bepaald

door de adaptive engine die later in meer detail besproken wordt. Deze opdrachten zijn niet enkel nieuwe levels of nieuwe stukken verhaallijn van het spel maar kunnen ook instructies zijn om bepaalde parameters van het spel aan te passen. Zo kan met een opdracht bijvoorbeeld beslist worden om de snelheid van het spel te vertragen.

4.4.2 Interpreters

Volgende belangrijke componenten zijn de interpreters. Deze componenten kunnen gegevens van een bepaald type interpreteren en omzetten naar een ander type object dat vervolgens in een andere component gebruikt kan worden. Zo zijn er interpreters die verschillende soorten data interpreteren naar een uniform object, dat door de adaptive engine verwerkt kan worden. Hierdoor hoeft de adaptive engine niet in staat zijn om veel verschillende soorten data te inter- preteren en kan gewerkt worden met één enkel type data. Moest de adaptive engine niet werken met de uniforme objecten maar met specifieke data van de game of andere bronnen, zou de game of adaptive engine moeilijk aanpasbaar zijn, wat niet strookt met de niet-functionele vereisten uit Sectie 4.1.

Voor elke soort data wordt een interpreter voorzien. Alle interpreters gebruiken dezelfde subcom- ponenten maar interpreteren elk op een andere manier de verschillende gegevens naar uniforme objecten. Zo kan er een interpreter zijn voor de gegevens van de serious game zoals score en tij- den en een interpreter voor data van een hartslagmonitor. Elk ontvangen ze verschillende types gegevens, maar zullen ze deze gegevens interpreteren naar dezelfde uniforme objecten. Deze uni- forme objecten worden doorgespeeld naar de data integrator die later in meer detail besproken wordt.

Verder in the systeem gebeurt een omgekeerde operatie. Daar worden de uniforme objecten terug omgevormd naar de specifieke data. Deze omgekeerde operatie kan nog steeds verwezenlijkt worden door gebruik te maken van dezelfde subcomponenten van de interpreters. Zo zullen opdrachten en analytische gegevens, die verpakt zitten in de uniforme objecten, terug naar specifieke gegevens geïnterpreteerd worden.

4.4. COMPONENTEN 39

Onsite en offsite adaptatie

Zoals eerder besproken kan adaptatie zowel onsite als offsite plaatsvinden. Ook bij de inter- preters is er een verschil in het onsite en offsite verwerken van gegevens. Bij onsite adaptatie zal de informatie met behulp van het observer pattern kunnen ontvangen worden in de recei-

ver van de interpreters. Elke interpreter registreert zich bij de data waarin die geïnteresseerd

is en zal, wanneer nieuwe gegevens beschikbaar zijn, hiervan een melding krijgen. Het verschil bij offsite adaptatie is dat er mogelijks een transformatie nodig is vooraleer er geïnterpreteerd kan worden. Deze transformatie gebeurt, net als bij de game, in de transformer. Informatie die over het internet gestuurd werd, kan hier gedeserialiseerd of gedecodeerd worden. Wanneer de interpreter gegevens succesvol ontvangen heeft in de receiver en, in het geval van offsite adap- tatie, getransformeerd heeft, kan deze de gegevens daadwerkelijk interpreteren naar uniforme objecten die door de adaptive engine vervolgens gebruikt kunnen worden. De interpreters en hun subcomponenten voor zowel onsite als offsite adaptatie, zijn te zien op Figuur 4.5.

(a) Onsite adaptatie

(b) Offsite adaptatie

Figuur 4.5: Interpreter-componenten voor onsite (a) en offsite (b) adaptatie

Input en output

Aan de input van de interpreters liggen de verschillende types data van de verschillende gege- vensbronnen zoals bijvoorbeeld de serious game en de hartslagmonitor. Elke interpreter weet

40 HOOFDSTUK 4. GENERIEKE ARCHITECTUUR hoe die de data van de bron waarbij die zich registreert moet interpreteren en zal deze omzetten naar uniforme objecten. Aan de output van elke interpreter liggen dus de uniforme objecten die vervolgens doorgespeeld worden naar de data integrator.

Verder in de gegevenscyclus van de architectuur, wanneer de uniforme objecten terug naar specifieke objecten geïnterpreteerd moeten worden, zal aan de input van een interpreter een uniform object liggen. Deze zal de gegevens vervolgens moeten interpreteren naar specifieke objecten zoals opdrachten voor het spel of analytische gegevens.

4.4.3 Data Integrator

De component die nog tussen de interpreters van de gamegegevens en een adaptive engine staat, is de data integrator. Deze component zorgt ervoor dat de uniforme objecten, die door de interpreters geproduceerd worden, bij de juiste operatie van de adaptive engine terecht komen. De interpreters kunnen hiervoor de integrator gebruiken om hun uniforme objecten naar de in- tegrator door te sturen. De integrator zal analyseren welke soort data ontvangen werd en aan de hand hiervan de juiste operatie selecteren. Op zich zouden de interpreters zelf de data naar de juiste operatie van de adaptive engine kunnen sturen maar zouden hiervoor de mogelijke opera- ties van de adaptive engine moeten kennen. In het geval dat een deel van de adaptive engine zou veranderen of een volledig nieuwe adaptive engine gebruikt zou worden, zouden alle interpreters aangepast moeten worden. Er is immers geen garantie dat een andere adaptive engine dezelfde operaties als de vorige adaptive engine gebruikt. De data integrator weet welk soort uniform object bij welke operatie terecht komt. Een verandering in de adaptive engine leidt hierdoor enkel tot een verandering in de data integrator. Dankzij de data integrator kunnen er bovendien meerdere adaptive engine componenten gebruikt worden. De adaptive engines kunnen zich in dit geval registreren bij de integrator waarna de integrator een adaptive engine kan selecteren en hierop de operatie uitvoeren. Dit zorgt ervoor dat berichten van één of meer games verspreid kunnen worden over meerdere adaptive engines waardoor bijgevolg op een gemakkelijkere manier geschaald kan worden.

4.4. COMPONENTEN 41

Onsite en offsite adaptatie

Aangezien de data integrator zich op dezelfde locatie bevindt als de integratoren en de adaptive engine, zal geen communicatie over het internet nodig zijn. Hierdoor is er geen onderscheid in onsite en offsite adaptatie bij de data integrator. De integrator kan immers rechtstreeks aan de operaties van de adaptive engine. Voor het ontvangen van de gegevens kan de receiver-component gebruikt worden zoals zichtbaar is op Figuur 4.6.

Figuur 4.6: Overzicht van de integrator

Input en output

De integrator selecteert de juiste operatie van de adaptive engine aan de hand van het type uniform object. Vervolgens wordt deze operatie opgeroepen en wordt het uniforme object door- gegeven aan de adaptive engine. Aan de input van de integrator liggen de uniforme objecten die door de interpreters geïnterpreteerd werden. Sinds de integrator geen wijzigingen aanbrengt aan deze uniforme objecten, zal de output van de integrator bestaan uit dezelfde uniforme objecten.

4.4.4 Adaptive Engine

Als laatste is er nog de belangrijkste component van het systeem, de adaptive engine. Dankzij deze component zal de game daadwerkelijk aangepast worden, afhankelijk van de ontvangen gegevens. Zoals in Sectie 2.2.1 besproken werd, zijn er verschillende methodes voor adaptatie

42 HOOFDSTUK 4. GENERIEKE ARCHITECTUUR mogelijk. In de generieke architectuur moet het dus ook mogelijk zijn om elk van deze methodes te kunnen gebruiken voor adaptatie.

Modellen

Om de verschillende methodes voor adaptatie te ondersteunen, bevat de adaptive engine één of meerdere modellen. Elk model kan individueel verschillende methodes bevatten voor adaptatie van de serious game. De complexiteit van deze methode van adapteren is vrij te kiezen en kan bijgevolg sterk variëren. De operaties van de adaptive engine, die opgeroepen worden door de data integrator, besproken in Sectie 4.4.3, zorgen ervoor dat de modellen voorzien worden van data van de game of van andere externe bronnen. Aan de hand van deze data kunnen de modellen constant bijgewerkt worden. Wanneer zo een model nieuwe data, zoals opdrachten voor het spel, ter beschikking heeft, geeft deze een melding aan de adaptive engine, die vervolgens deze nieuwe data zal doorsturen naar de game of naar een systeem die analysegegevens verwerkt. Een model kan bijvoorbeeld een regelgebaseerde methode bevatten die, wanneer de hartslag van de gebruiker te hoog wordt, het spel gemakkelijker gaat maken. Een hartslagmonitor zal constant hartslagwaarden genereren die, dankzij de bijhorende interpreter en de integrator, als uniforme objecten via een operatie de adaptive engine binnenkomen. De operatie zal het uniforme object vervolgens doorgeven aan het regelgebaseerde model die de hartslaggegevens kan verwerken. Wanneer de hartslag te hoog wordt en de grenswaarde van de hartslag overschreden wordt, zal het model een melding naar de adaptive engine sturen met daarin een opdracht om het spel gemakkelijker te maken. Deze opdracht zal vervolgens naar de interpreter voor opdrachten van de game gestuurd worden waarna het spel de opdracht kan uitvoeren en het spel gemakkelijker kan gemaakt worden.

Dankzij de modellen zijn verschillende methodes voor adaptatie mogelijk voor verschillende soorten data van één game. Zo kan aan de adaptive engine zowel een eenvoudig regelgebaseerd model voor detectie van een te hoge hartslagwaarde, als een complexer model met bijvoorbeeld machinaal leren voor de analyse van het gedrag van de gebruiker toegevoegd worden.

De adaptive engine bevat bovenop de mogelijkheid voor modellen om berichten naar de adaptive engine te sturen, ook de mogelijkheid om modellen onderling met elkaar te laten communiceren.

4.4. COMPONENTEN 43 Stel dat een adaptive engine een model voor statistische gegevens heeft, dan kan dit gebruikt worden door andere modellen om statistieken van hun data te verkrijgen. Het ander model stuurt dan, wanneer deze nieuwe gegevens heeft, de gegevens naar het statistisch model. Het statistisch model op zich kan verschillende methodes bevatten om met de gegevens om te gaan. Zo kan ervoor gekozen worden om eenvoudigweg de gegevens te verzamelen om later op een grafiek te tekenen of er kan beslist worden om een complexe methode voor regressie te voorzien die eventuele voorspellingen kan maken aan de hand van eerder ontvangen gegevens.

Het principe dat meerdere modellen toegelaten zijn, die gebruikt worden door verschillende ope- raties en bovendien onderling met elkaar kunnen communiceren, laat toe om op veel verschillende manieren personalisatie en adaptiviteit in de serious game te brengen. Het idee van de meerdere modellen kan nog verder uitgewerkt worden. Zo kan de adaptive engine instaan voor de adap- tatie van meerdere games tegelijkertijd. Er kan voor elk spel een model voor adaptatie voorzien worden en één model voor de statistische gegevens van alle spellen. De interpreters weten van welke game welke gegevens komen, waardoor ook de integrator kan weten aan welke operatie welke soort data gelinkt is. Voor elke game kunnen er verschillende operaties voorzien worden die elk hun eigen model bijwerken. De modellen van de games kunnen communiceren met het statistisch model waardoor statistieken van de games samen gegenereerd kunnen worden. Dit principe laat toe om de adaptive engine sterk uit te breiden. Indien men een nieuwe game wil toevoegen dienen enkel nieuwe interpreters voor het spel gemaakt te worden alsook, wanneer een eerder geïmplementeerd model niet gebruikt kan worden, een nieuw model met bijhorende operaties.

Operaties

Operaties zorgen ervoor dat de uniforme gegevens, die ontvangen worden door de integrator, in de modellen van de adaptive engine terechtkomen. In de adaptive engine is het mogelijk om in één operatie meerdere modellen op te vragen. Dit betekent dat dezelfde data in meerdere modellen kan gebruikt worden voor analyse van de gegevens waardoor accurater geadapteerd kan worden. Wanneer meerdere modellen immers hetzelfde antwoord genereren, is de kans groter dat een bepaalde adaptatie een correcte beslissing is. Het is ook mogelijk om met één operatie zowel een model voor statistische gegevens als het model voor adaptatie aan te spreken. Hierdoor

44 HOOFDSTUK 4. GENERIEKE ARCHITECTUUR kan zowel voor adaptatie gezorgd worden alsook statistische gegevens gegenereerd worden.

Onsite en offsite adaptatie

Opnieuw is er een onderscheid mogelijk tussen onsite en offsite adaptatie, zoals te zien is in Figuur 4.7. Wanneer onsite adaptatie gebruikt wordt, zal in de sender-subcomponent van de adaptive engine het observer pattern gebruikt worden. Geïnteresseerde interpreters kunnen zich in dit geval registreren bij de adaptive engine en zullen, wanneer de adaptive engine nieuwe gegevens van één van de modellen ontvangt, de nieuwe gegevens ontvangen. In het geval van offsite adaptatie zal, net zoals bij de game en de externe bronnen, eventueel een transformer- subcomponent nodig zijn. De sender zal vervolgens de gegevens, over het internet, naar de juiste interpreter sturen.

(a) Onsite adaptatie

(b) Offsite adaptatie

Figuur 4.7: Adaptive engines voor onsite (a) en offsite (b) adaptatie

Input en output

Aan de input van de adaptive engine liggen de verschillende uniforme dataobjecten die binnen- gebracht worden door de integrator. Deze dataobjecten worden in de modellen van de adaptive engine verwerkt en geanalyseerd. Uit deze analyses kunnen nieuwe opdrachten voor het spel alsook statistische gegevens gegenereerd worden. Aan de output van de adaptive engine staan deze nieuwe gegevens verpakt als uniforme objecten die doorheen de adaptive engine gebruikt

4.5. UNIFORM OBJECT 45 worden. Deze uniforme objecten kunnen vervolgens, indien ze opdrachten voor het spel bevat- ten, naar de interpreter van de game gestuurd worden die op zijn beurt de uniforme objecten zal interpreteren naar opdrachten die in het spel uitgevoerd kunnen worden. Voor analytische gegevens wordt opnieuw een interpreter gebruikt, die in dit geval aan de slag kan met analytische