De algoritmen die eerder behandeld zijn, zoals het bepalen van de som van twee getallen, het sorteren van een rij getallen, of het bepalen van de kortste route tussen twee punten, hebben alle een eindige invoer, een eindige rekentijd, en een eindig resultaat.
In dit hoofdstuk behandelen we een andere klasse van algoritmen: algoritmen voor het meten of regelen van een systeem. Dit soort algoritmen kom je tegen in de besturing van een machine of apparaat, of bij het bewaken van een bepaalde situatie (monitoring).
Bij monitoring gaat het om het meten van een (meestal continu) signaal, met als doel het bepalen van relevante eigenschappen en eventueel het signaleren van relevante gebeurtenissen. Voorbeelden:
Monitoring heeft niet noodzakelijk betrekking op het signaleren van een alarmsituatie; het kan bijvoorbeeld ook gaan om meetgegevens die elders gebruikt worden, of om het signaleren van de noodzaak van onderhoud.
In het geval van besturing betreft het het bijsturen van een systeem in de richting van de gegeven doelstellingen, op grond van de doelstellingen en de gemeten waarden. Voorbeelden:
Bijgaande figuur beschrijft een systeem S dat geregeld wordt door een regelsysteem R. In dit geval bestuurt het regelsysteem de invoer van S op grond van een meting aan de uitvoer van S ("terugkoppeling"). Vaak is er sprake van een ingewikkelder vorm van besturing, en zijn er meerdere punten waarop het regelsysteem kan meten en ingrijpen.Tegenwoordig worden veel systemen bestuurd door een computersysteem met meerdere regelalgoritmen. Voorheen werden hiervoor vaak oplossingen op basis van analoge elektronica gebruikt, en daarvoor vaak mechanische systemen. Een klassiek voorbeeld van een mechanisch regelsysteem is de regulateur van James Watt, voor het limiteren van het toerental van zijn stoommachine; zie http://nl.wikipedia.org/wiki/Centrifugaalregelaar en http://en.wikipedia.org/wiki/Centrifugal_governor, of http://www.stoommachine.info/regulateur.html.) Dit is ook een voorbeeld van eenvoudige terugkoppeling.Het vakgebied van meet- en regeltechniek (control theory) heeft sinds die tijd een grote ontwikkeling doorgemaakt; zie bijvoorbeeld http://nl.wikipedia.org/wiki/Regeltechniek en http://en.wikipedia.org/wiki/Control_theory.
Enkele voorbeelden van regelalgoritmen uit de dagelijks leven, waarbij niet altijd computersystemen gebruikt worden:
Enkele voorbeelden van regelsystemen waar tegenwoordig meestal (embedded) computersystemen voor gebruikt worden:
Veel van dit soort regelsystemen zijn verborgen (embedded) in het apparaat dat bestuurd wordt, en daardoor vaak onzichtbaar voor de gebruiker van het apparaat.
Ook in biologische systemen komen dergelijke regelmechanismen veel voor, bijvoorbeeld:
Zie ook: http://nl.wikipedia.org/wiki/Bloedglucosespiegel; uit dit artikel:
Het hormoon insuline, geproduceerd door de eilandjes van Langerhans in de alvleesklier, stimuleert de opname van glucose in de cellen zodat de bloedglucosespiegel niet te hoog wordt. Verder zorgt insuline ervoor dat glucose dat teveel is in het bloed, in lever- en spiercellen omgezet wordt in glycogeen, zodat de bloedglucosespiegel zo weinig mogelijk schommelt. Het glycogeen wordt opgeslagen in die cellen, zodat het weer omgezet kan worden in glucose wanneer er een tekort is aan glucose in het bloed (glycogenolyse). Dat gebeurt onder andere onder invloed van de hormonen glucagon (ook geproduceerd door de eilandjes van Langerhans) en adrenaline. Ook kan het lichaam indien er te weinig glucose is, glucose maken via de gluconeogenese.
Het genoemde mechanisme voor het regelen van de bloedglucosespiegel kan misleid worden door bijvoorbeeld vlak voor een grote inspanning een grote hoeveelheid suiker in te nemen: het regelmechanisme reageert daarop door de bloedglucosespiegel te verlagen, wat in combinatie met de grote inspanning daarna, die ook bijdraagt aan een verlaging van de bloedglucosespiegel, tot een te laag niveau kan leiden.
Algoritmen voor monitoring en besturing met behulp van een computersysteem komen in de praktijk veel voor, maar meestal in een verborgen (embedded) vorm in een apparaat, zoals bijvoorbeeld een auto, een projectorlamp, een scheerapparaat, een televisie, een wasmachine, een magnetron, medische apparaten, enz.
Bij het monitoren of besturen van een fysisch, chemisch of biologisch systeem moeten waarden (signalen) gemeten
Het resultaat is dat we een analoog, continu signaal omgezet hebben in een rij getallen.
Voor geluid (muziek-CD) gebruiken we bijvoorbeeld een bemonsteringsfrequentie van 44,1kHz , en een (lineaire) nauwkeurigheid van 16 bits. Deze waarden zijn overigens ingegeven door de gevoeligheid van het menselijk oor, meer dan door de eigenschappen van het oorspronkelijke muzieksignaal.
Door discretisatie benaderen we het oorspronkelijke signaal, en introduceren we een afwijking (fout) ten opzichte van het oorspronkelijke signaal. Deze afwijking is groter naarmate de bemonsteringsfrequentie lager is, en de nauwkeurigheid in het waardenbereik kleiner. Om ervoor te zorgen dat we het oorspronkelike signaal voldoende nauwkeurig kunnen benaderen, moeten we een bemonsteringsfrequentie en nauwkeurigheid kiezen die bij het oorspronkelijke signaal past.
Zie ook: http://en.wikipedia.org/wiki/Sampling_(signal_processing) (Het overeenkomstige item in de Nederlands Wikipedia is erg beperkt.)
Voor het omzetten van een continu signaal in discrete waarden wordt een zogenaamde analoog-digitaal omzetter (A/D converter) gebruikt; om weer een continu signaal terug te krijgen, bijvoorbeeld om dit als muziek af te spelen, gebruiken we een digitaal-analoog omzetter (D/A converter).
Een ander voorbeeld van discretisatie zien we bij film en video. In beide gevallen is er sprake van discretisatie in tijd: er wordt gewerkt met een beperkt aantal beelden per seconde. (Bij film: 24; bij video typisch 25, in Europa, 30, in de USA; zie en.wikipedia.org/wiki/Frame_rate ). In het geval van video vindt er ook nog discretisatie van de beelden zelf plaats: het beeld is verdeeld in discrete pixels, die bovendien een discrete kleur/helderheid hebben.
Opgave. we kunnen in plaats van 44,1 kHz en 16 bits, een geluidssignaal ook representeren met een veel hogere frequentie (typisch 2.8224 MHz, ofwel 64*44,1kHz) en een nauwkeurigheid van 1 bit. Leg uit hoe dit kan. (Zie ook http://en.wikipedia.org/wiki/Direct_Stream_Digital)
Leg uit waarom dit niet de andere kant op werkt, bijvoorbeeld halveren van de bemonsteringsfrequentie, en verdubbelen van de nauwkeurigheid per monster (sample).
Typische eigenschappen van dit soort besturings- of regelalgoritmen zijn:
Bij een real-time systeem is het niet beslist noodzakelijk dat de reactietijd "zo kort mogelijk" is; de reactie moet op tijd zijn. Wat "op tijd" is, hangt erg af van de snelheid van het systeem dat bestuurd moet worden. Het mag duidelijk zijn dat een huishoudoven hier andere eisen stelt dan een straaljager.
Bij besturingsalgoritmen moeten vaak fysische (of chemische of biologische) grootheden gemeten en bestuurd worden, in plaats van abstracte informatie. Een goed begrip van het te besturen fysische, chemische of biologische systeem is essentieel. Modellering en soms ook simulatie spelen in dergelijke gevallen een belangrijke rol. In een volgend hoofdstuk gaan we daarop dieper in.
Als voorbeeld van een regelalgoritme gebruiken we het vullen van een bak met water, door een stroom uit een kraan. Het doel is om een bepaalde hoogte van het water in de bak te bereiken, en vervolgens die hoogte te handhaven. Het handhaven van een bepaalde hoogte is triviaal als de bak niet lekt, maar we zullen ook het geval beschouwen van een bak die enigszins lekt. In eerste instantie gebruiken we een besturing die de kraan alleen kan openen en sluiten. Een mogelijke uitbreiding is om de grootte van de stroom door de kraan te kunnen regelen ("moduleren van de waterstroom").
Voor het eenvoudige geval, waarbij de besturing de kraan alleen kan openen en sluiten, krijgen we de volgende regels voor het besturingsalgoritme:
als de momentane hoogte < ingestelde hoogte: kraan open
als de momentane hoogte >= ingestelde hoogte: kraan dicht
Deze regels blijven geldig zolang de besturing ingeschakeld is; dit geldt in het bijzonder ook als de instelling van de gewenste hoogte verandert. We moeten dan mogelijk ook een mechanisme hebben om water weg te laten lopen, als de bak niet lek is.
Een meer geavanceerd besturingsalgoritme kunnen we gebruiken als we een kraan hebben waarvan we de stand kunnen continu (of in voldoend kleine stappen) kunnen regelen tussen helemaal dicht en helemaal open; we kunnen dan de waterstroom moduleren, in verhouding tot de hoeveelheid water die nog aan de bak toegevoegd moet worden.
In het bijgaande voorbeeld (waterbak-besturing) werken we deze regelingen verder uit.