(Dette dokument er til historisk reference – jeg skrev det i 2005 og offentliggjorde det på mit nu nedlagte websted på http://agtivity.com/agdef.htm, men det burde stadig have en vis aktuel relevans).
For nyere overvejelser om dette emne kan du læse disse nyere artikler:
- Hvad er autonomi og handlekraft?
- Intelligente enheder:
- Hvad er en intelligent digital assistent?
En softwareagent (eller autonom agent eller intelligent agent) er et computerprogram, der arbejder mod mål (i modsætning til diskrete opgaver) i et dynamisk miljø (hvor forandring er normen) på vegne af en anden enhed (menneskelig eller computerbaseret), muligvis over en længere periode, uden kontinuerlig direkte overvågning eller kontrol, og som udviser en betydelig grad af fleksibilitet og endda kreativitet i sin måde at omdanne mål til handlingsopgaver på.
Et softwareagent-system (eller multiagent-system (MAS)) er et computermiljø (f.eks. internettet eller et overlay-netværk i et grid computing-miljø), hvor individuelle softwareagenter interagerer med hinanden, nogle gange på en samarbejdsbaseret måde, nogle gange på en konkurrerende måde og nogle gange autonomt forfølger deres individuelle mål, får adgang til ressourcer og tjenester i miljøet og producerer lejlighedsvis resultater for de enheder, der har iværksat disse softwareagenter.
En mere enkel og struktureret definition er at sige, at en softwareagent er et computerprogram, der udviser de karakteristika, der kendetegner agentur eller softwareagent.
Den anden enhed kan være et menneske, et traditionelt, “gammelt” computerprogram, en robot eller en anden softwareagent. En softwareagent ligner en robot, men opererer i cyberspace, på et computernetværk.
En softwareagent er autonom eller i det mindste semi-autonom, hvilket betyder, at den kan udføre opgaver i forfølgelsen af et mål med et minimum af ingen direkte overvågning eller direkte kontrol , men kan interagere med en anden enhed for at opnå vejledning eller outputresultater. Den kan have eller kan ikke have en brugergrænseflade.
En softwareagent kan faktisk være interaktiv eller konverserende og handle på vegne af en anden enhed, som ikke er direkte synlig for den “bruger”, der interagerer med agenten. Dette ville være en direkte analog til, hvordan virkelige agenter arbejder.
En softwareagent kan være nødt til at have et højt niveau af “intelligens” for at kunne håndtere et dynamisk miljø, hvor det uventede er normen. Men det er også muligt at have en “dum” softwareagent, som arbejder selvstændigt for at udføre veldefinerede opgaver og kun anmoder om tilsyn, når den opdager uventede forhold.
En softwareagent kan være “mobil” og bevæge sig eller blive flyttet rundt på nettet, men en softwareagent kan også være “statisk” og udføre alt sit arbejde på én værtscomputer på nettet, herunder få adgang til ressourcer, der befinder sig på andre værter end den vært, hvor agenten udfører sit arbejde.
En interaktiv eller konversationsagent kan faktisk blot være en “assistent”, der er under direkte kontrol og på vegne af den samme bruger. Dette ville være en mindre autonom funktionsmåde, men den interaktive agent kunne muligvis instrueres til at gå ud og nå et eller andet mål og arbejde i en autonom funktionsmåde, mens han gør det. Spørgsmålet om “agens” drejer sig mest om, i hvilket omfang der IKKE er et en-til-en-forhold mellem konverteringen mellem brugeren og agenten og det faktiske sæt af opgaver, der udføres af den påståede agent. En assistent gør præcis, hvad der bliver sagt. En agent får et mål og har fleksibilitet med hensyn til, hvordan han skal nå dette mål.
En agent kan være en enkelt agent (én agent, der udfører en række opgaver for at nå et mål), en del af et agentensemble (et relativt lille hold med specialisering blandt holdets medlemmer) eller en meget lille del af en agentarmada (et stort antal agenter med en betydelig grad af parallelitet for selv specifikke opgaver). Selv en enkelt agent kan interagere med andre agenter, som er ansvarlige over for en anden enhed. Det, der adskiller et agentensemble og en agentarmada, er, at de er ansvarlige over for en enkelt enhed.
Vi kan tale om et agentfællesskab eller et fællesskab af softwareagenter eller et multiagent-system, hvor mange uafhængige agenter i det mindste synes at samarbejde (og/eller konkurrere) om at forfølge fælles mål. Fællesskabet kan være begrænset til på forhånd planlagte medlemmer, eller det kan være åbent og tillade vilkårlige, eksterne agenter at “slutte sig til” det åbne fællesskab af softwareagenter.
En softwareagent kan køre for evigt eller på ubestemt tid og kontinuerligt forfølge sine mål, men det er også muligt for en instans af en agent at ophøre, når dens mål er opfyldt eller ikke længere er nødvendige.
Karakteristika, der ofte nævnes som passende for softwareagenter, omfatter: reaktiv, deliberativ, målstyret, adaptiv, autonom, lærende, kommunikativ, konkurrerende og kollaborativ adfærd.
Softwareagenter (og softwareagent-systemer) bør designes ved hjælp af en modulær arkitektur.
Softwareagenter er det næste evolutionære skridt ud over objekter og programmer. Objekter har en tendens til at være passive med kun ét objekt aktivt ad gangen, og objekter har en tendens til at være “skjult” i programmer. Programmer har en tendens til at være relativt statiske, og det er ikke nogen let opgave at designe en distribueret beregning med et ubestemt antal programmer, der samarbejder. Softwareagenter giver mulighed for parallelisme og samarbejde mellem programmer i stor skala, og for at gøre det nemt og på en robust, pålidelig, fleksibel og sikker måde.
For diskussion af spørgsmål i forbindelse med definitionen af, hvad en agent er eller ikke er, klik her.
Former af softwareagenter
Da der ikke findes nogen fast definition af en softwareagent, er her de forskellige former for softwareagenter, som jeg hidtil har identificeret:
- Systemagent – en kontinuerligt kørende baggrundsopgave eller dæmon, der typisk har et specialiseret, forprogrammeret formål..
- Brugeragent – brugergrænsefladen på klientsiden for en sofistikeret netværksapplikation. F.eks. webbrowser til adgang til World Wide Web.
- Client Agent – brugergrænseflade på klientsiden til et serverbaseret program, f.eks. en søgemaskine eller tilbudssøgning. Serversiden udfører normalt blot et databasesøgning på en database, der uafhængigt vedligeholdes af en form for webcrawler, der overvåger ændringer på websteder.
- Webcrawler – et serverbaseret program, der kontinuerligt eller periodisk scanner internettet eller udvalgte dele af internettet for at finde oplysninger af interesse. Dette er ikke rigtig en agent, da den ikke handler på vegne af en diskret bruger, men den indsamler data, der kan bruges til en bred målgruppe af brugere.
- Conversational Agent – et interaktivt program, der præsenterer en meget brugervenlig grænseflade og derefter udfører specifikke opgaver efter brugerens anvisninger. Da den reagerer direkte på brugerens anmodninger, fungerer den ikke rigtig autonomt.
- Intelligent agent – et program, der udfører en opgave eller forfølger mål med minimal specifik styring ved hjælp af intelligente eller heuristiske teknikker med den virkning, at brugeren er meget imponeret over, at en computer kan være så klog. En IA behøver ikke at være mobil, da de mange oplysninger på nettet kan tilgås på afstand.
- Mobil agent – et autonomt program, der bevæger sig mellem værtssystemer i forbindelse med forfølgelsen af et eller flere mål. En MA behøver ikke at være virkelig intelligent, men skal være tilstrækkelig fleksibel til at kunne håndtere et miljø, hvor tingene kan ændre sig eller være utilgængelige på et hvilket som helst tidspunkt.
- (Lukket) multiagent-system – et tæt integreret applikationsmiljø, hvor dele af applikationen er fordelt på miniprogrammer, der forfølger delmål.
- Åbent multiagent-system – et løst integreret, distribueret applikationsmiljø, hvor uafhængigt konstruerede programmer (agenter) kan deltage i strukturerede interaktioner, hvor agenterne har en betydelig grad af fælles interesse (fællesskab).
- Ultimativ softwareagent – et ekstremt intelligent og fleksibelt program, der kan handle på samme måde som et virkeligt menneske, men begrænset til cyberspace. Desuden har et USA evnen til dynamisk at opdele sig selv i underagenter, som kan udføre delopgaver og operere parallelt med en hvilken som helst grad af interaktion. En USA kan også klone sig selv (eller helst automatisk blive klonet af agentinfrastrukturen) for at udnytte netværkets iboende parallelitet. Opdelte eller klonede underagenter kan genkombineres på et hvilket som helst tidspunkt, hvis det er hensigtsmæssigt for enten den samlede agents funktion eller ydeevne. Et USA kan også interagere med andre, uafhængige USA’er (et fællesskab af USA’er), som USA’eren ikke har nogen forudprogrammeret bevidsthed om. Der kan anvendes en bred vifte af programmeringssprog, implementeringsteknikker og kommunikationsprotokoller. Ethvert USA er fuldt ud interoperabelt med alle andre USA, kun med forbehold af administrative kontroller og ressourcebegrænsninger.
- Robot – en intelligent softwareagent, der er mobil i den virkelige verden. Robotter kan ikke klone sig selv i dag, men i teorien KAN en robot fysisk bygge kopier af sig selv ELLER købe eller leje “tomme” (eller skal-) robotter (ala en biludlejning). I teorien kunne en robot “transportere” sig selv til et andet sted ved at købe en tom skal et andet sted og derefter “uploade” sin softwarestatus til den anden “tomme” robot. Robotten kan vælge at forlade den oprindelige skal eller kan simpelthen bruge denne mekanisme til kloning.
- Robotfællesskab – robotter, der kan interagere i forfølgelse af fælles interesser.
- Hybrid robot/agent – en robot, der kan interagere med en eller flere softwareagenter, eller en softwareagent, der kan interagere med en eller flere robotter. Tingene bliver virkelig interessante, når et fællesskab af robotter interagerer med et fællesskab af softwareagenter! Bemærk også, at en robot kan overføre sin softwaretilstand til en softwareagent og derefter operere i cyberspace, SOM OM den var en softwareagent, og derefter RETURNERER sin tilstand tilbage til robotten. En softwareagent kan gøre det modsatte: overføre sin tilstand til en fysisk robot, betjene robotten og derefter returnere sin tilstand tilbage til cyberspace. En robot kan handle SOM OM den var en softwareagent ved hjælp af fjernadgang. Og en softwareagent kan også betjene en fysisk robot direkte fra cyberspace, også ved hjælp af fjernadgang. Faktisk kan en enkelt softwareagent (eller et team af agenter) betjene flere robotter på samme eller forskellige steder, herunder styre interaktionen mellem disse robotter.
For et endnu tidligere syn på emnet se Stan Franklin og Art Graessers artikel “Is it an Agent, or just a Program?”: A Taxonomy for Autonomous Agents.”
Se også Wikipedia-artiklen om Software Agent.