# Agent (software)

Softwareagenten worden gebruikt in het vakgebied van de kunstmatige intelligentie. Agenten zijn autonome computerprogramma's die de belangen van de gebruiker behartigen. Deze systemen hebben meestal een bepaalde doelstelling, en gedragen zich rationeel en autonoom. Een systeem is autonoom als zijn gedrag wordt bepaald door zijn eigen ervaringen; het systeem vertoont een lerend gedrag. Een veelgebruikt voorbeeld is een agent die voor de gebruiker verschillende websites af gaat om de beste prijs en voorwaarden voor een bepaald artikel te vinden, hierover onderhandelt en tot slot de transactie afsluit. Omdat een softwareagent taken verricht die opgedragen zijn door een persoon, noemt men zo’n programma meestal ook een bot (computerprogramma), bij deze benaming moet men de verklaring echter niet gaan zoeken in het materische.
Vanwege de autonome handelwijze van deze agenten is de betrouwbaarheid erg belangrijk. Vandaar dat er binnen de informatica en kunstmatige intelligentie veel onderzoek naar wordt gedaan. Logica is hierbij een erg belangrijk deelgebied. Voor het programmeren van agenten kan een agentprogrammeertaal gebruikt worden. Het programmeerparadigma waarbij men een agentprogrammeertaal gebruikt heet agentgeoriënteerd programmeren.
Een systeem dat bestaat uit meerdere agenten wordt een multi-agent systeem genoemd.

## Soorten agenten

Er zijn verschillende soorten agenten die een probleem op verschillende manieren oplossen:
Een rationele agent is een agent die de beste handelingen voor een bepaalde doelstelling uitkiest uit verschillende opties. Wat rationeel is hangt van een viertal criteria af:
* De prestatiemeting (performance measure). Voor het bepalen van de mate van succes gebruiken we een prestatiemeting. Deze bepalen we via een externe autoriteit die het gedrag van de agent beoordeelt.
* Alles wat de agent tot nu toe heeft waargenomen (perceptie sequentie / percept sequence).
* De (voor)kennis (wat de agent weet over zijn omgeving).
* De acties die een agent kan uitvoeren.
Een ideale agent moet voor alle waargenomen informatie (percept sequences) de actie uitvoeren die de prestatiemeting maximaliseert, op basis van de waargenomen informatie en de ingebouwde kennis die de agent bezit.
Een eenvoudige reflexagent denkt, zoals te verwachten, eenvoudig. De agent onderzoekt zijn omgeving door middel van zijn sensoren, en krijgt daar een beeld van. Daarna gaat hij met ‘condition-action rules’ uitmaken welke actie hij moet uitvoeren met zijn actuatoren. Condition-action rules zijn voorgeprogrammeerde regels die de agent helpen een actie te maken.
Een reflexagent met toestand is intelligenter dan een eenvoudige reflexagent, maar ze doet grotendeels hetzelfde. (Ze krijgen informatie over de omgeving binnen via sensoren, slagen die informatie op, gebruiken condition-action rules om uit te maken welke actie ze moeten uitvoeren en voeren die uit via hun actuatoren.) Een groot verschil met de eenvoudige reflexagenten is echter dat deze agent rekening houdt met hoe de omgeving evolueert, en welke impact de acties die de agent gaat uitvoeren op de omgeving zal geven.
Een doelgebaseerde agent is iets heel anders dan een reflexagent. Deze agent heeft een bepaald doel dat het moet verwezenlijken. Zoals alle agenten krijgt het informatie over de omgeving via de sensoren, daarna vergelijkt het welke actie het beste zou zijn voor de omgeving, maar ook rekening houdend met de doelen die de agent heeft. Daarna wordt deze actie uitgevoerd door de actuatoren.
Een nutgebaseerde agent werkt juist hetzelfde als een doelgebaseerde agent, met één verschil: nutgebaseerde agenten moeten ervoor zorgen dat ze een actie uitvoeren die nuttig is voor de omgeving, of gewoon in het algemeen nuttig is. Voor de rest is de werking hetzelfde.
Een lerende agent is het neusje van de zalm van hun soort, ze hebben de meest complexe structuur. Leermechanismen zullen waarschijnlijk alleen worden gebruikt om nieuwe programma’s te genereren. Ze zullen dus nooit het slimme programma zelf zijn, maar ze zullen het gegenereerde programma altijd slimmer maken. Elke slimme agent moet beslissen welke acties het zal ondernemen, en kan dat alleen maar doen wanneer het over een model van zijn omgeving beschikt dat echt die omgeving voorspelt. Dit kan door sensoren, maar die zijn niet altijd even betrouwbaar. Zo’n model van de omgeving wordt de laatste jaren door een lerend mechanisme gemaakt, in plaats van de gegevens van de sensoren op te slagen, zodat men toch dichter bij de werkelijkheid zit.

## Mapping

Wanneer een softwareagent acties onderneemt, op grond van zijn waarnemingen, kan er een tabel worden gemaakt waarin de acties worden opgeslagen voor iedere waarneming. Dit noemen we de mapping van de perceptie sequenties op hun acties.

## Bedrijftoepassingen

Het gebruik van softwareagenten stijgt in een aanzienlijk hoog tempo. Dit komt grotendeels omdat de vraag naar deze programma’s, of toepassingen, alsmaar groter wordt. Sommige agenten zijn nu zeer belangrijk voor bepaalde bedrijven, en net zoals het internet zal het gebruik ervan ook exponentieel toenemen. We vinden momenteel bedrijfstoepassingen in:
* Verkoop en marketing
* Bankieren
* Telecommunicatie
* Professionele systemen
* Gegevensverwerking en netwerkbeheer

## Literatuur

* An Introduction to MultiAgent Systems, Michael Wooldridge, (2002) John Wiley & Sons Ltd., ISBN 047149691X