Januar 2019

Band 34, Nummer 1

[Machine Learning]

Nutzen der BDI-Agent-Architektur (Beliefs, Desires, Intentions)

Durch Arnaldo Perez Perez | Januar 2019

In diesem Artikel beschreibe ich eine Reise-Assistenten Agent (TAA), die eine Überzeugungen-Wünsche-Absichten (BDI)-Agent-Architektur für die Entscheidungsfindungsprozess verwendet.

Die BDI-Agent-Architektur basiert darauf, dass philosophischer Michael Bratmans Theorie (Bratman 1987), die erklärt, Logik durch die folgenden Einstellungen: überzeugungen, Wünsche und Absichten. Daher ist ein BDI-Agent ein autonomer Agent, mit der, Nutzen dieser drei Konzepte für ihr funktionieren. Betrachten Sie diese Konzepte werden nacheinander aus:

  • Überzeugungen sind das Agentaktionskonto-Modell der Umgebung im Grunde er glaubt, um wahr zu sein. Es ist nicht wissen, wie einige der überzeugungen "falsch" sein kann. Diese Komponente der BDI-Architektur wird in der Regel und so weiter als ein Dataset mit Fakten wie Breeze (1, 2) "," Gefahr (2, 3) "," Safe (0, 0) "," Safe (0, 1) dargestellt.
  • Wünsche stellen die ideale Zustand der Umgebung für den Agent dar. Wie in der menschlichen Denken Sie daran, Folgendes darstellen, die wir gerne hätten in der Zukunft erreicht. Wunsch möglicherweise realistisch, oder nicht, wie es tritt auf, mit dem menschlichen denken, und können möglicherweise nicht erreichbar. Wünsche können sich gegenseitig inklusiv oder exklusiv sein.
  • Absichten darstellen, eine Teilmenge der Wünsche, die als Ziele bald erreicht werden der Agent ausgeführt wurde. Diese Absicht können nicht für die überzeugungen wechseln – z. B. keine der Agent eine Absicht, das macht es einem inaktiven Bereich durchlaufen, oder andernfalls verhindert, dass sie erreichen das Ziel, der die Absicht darstellt. Solche eine Absicht wird verworfen.

Überzeugungen bestehen aus ein Fakt-Dataset, das während der Lebensdauer des-Agents aktualisiert wird. In Bezug auf die Wünsche und Absichten tritt ein paar Fragen auf: Wie auswählen Sie Wünsche zu Absichten, und wie auswählen Sie späteren Absichten zu agentaktionen? Um dies zu beantworten, müssen die beiden Komponenten praktische Beschreibung in das BDI-Modell des Agents vorgestellt:

  • Delegierungen: Diese Komponente behandelt die strategische Planung und entscheidet, was Wünsche sind, um jetzt ausgeführt werden. Das Ergebnis ist eine Reihe von Absichten.
  • Bedeutet, dass-Ends Schlussfolgerung: Diese Komponente beinhaltet das Planen der taktischen und entscheidet, welche Aktionen ausgeführt werden soll, um den Satz von Commit Absichten zu erfüllen. Das Ergebnis ist eine Reihe von Plänen und Aktionen.

Das Diagramm in Abbildung1 veranschaulicht die Funktionsweise einer BDI-Architektur. Eingaben oder perzepte dar, die über Sensoren aus der Umgebung empfangen werden, die Weltanschauung-Revision-Funktion (BRF) gesendet. Diese Funktion überwacht die Updates auf die aktuelle überzeugungen-Datenbank, um sicherzustellen, dass die zuletzt empfangene Menge der perzepte alle überzeugungen im Gegensatz zur allgemeinen Auffassung Dataset widersprechen nicht. Die Funktion akzeptiert als Argumente auf, der Gruppe der Eingaben und den Satz von überzeugungen: Brf (Eingaben, überzeugungen).

Das BDI-Agent-Architektur
Abbildung 1: die BDI-Agent-Architektur

Anschließend wird eine Reihe von Optionen generiert, die schließlich wird die Wünsche und das Wunsch-Dataset gibt. Um diese Optionen zu generieren, sucht die Funktion den anwendungskompatibilitätsprozess-Dataset und das Ziel-Dataset. Als Ergebnis der nimmt als Parameter Weltanschauung Dataset, Wunsch Dataset und das Ziel-Dataset: GenerateOptions (überzeugungen, Wünsche, Absichten). Warum benötigen Sie die Absicht, um Optionen zu generieren? Da Sie keine Optionen zu generieren, die widersprechen oder für den aktuellen Satz von Absichten wechseln, möchten.

Mit einer Filterfunktion, die zuvor abgerufenen Wünsche werden gefiltert und Absichten werden. Um Sie in der Regel ausschließen Wünsche filtern, die nicht realistisch oder sehr schwierig, zu dem Zeitpunkt zu erfüllen. Die Filter-Funktion müsste die Signatur: Filter (überzeugungen, Wünsche, Absichten). Schließlich wird aus der Gruppe der Absichten und eine bedeutet, dass-Ends Argumentation Ansatz eine Aktion verwendet mithilfe des Agents Effectors (z. B. den mechanischen Waffen und Bildschirm).

Zusammenfassend gesagt ist BDI ein Paradigma und ein Satz von allgemeinen Prinzipien, die verwendet werden kann, um die Architektur eines Softwaresystems für die entscheidungsfindung zu entwerfen. Sie können mit anderen schaffen, z. B. drei-Ebenen-Architektur oder Model-View-Controller für die Web-Systemen vertraut sein. Diese anderen Paradigmen ähnelt BDI eine klar definierte ausführlichen Blaupause, anstatt einen allgemeinen Entwurf-Hilfe.

Es wird Zeit, über die der Theorie der das BDI-Modell verschieben, und erläutert, wie Sie diese auf eine Anwendung Robotic Process Automation (RPA) anwenden, insbesondere eine Reisebüros-Assistenten.

Assistent Reisebüros (TAA)

Das Ziel ist die Erstellung einer TAA Touristen in fernen Ländern können, in dem ihre Wünsche Feiertag Eingabe und einen Feiertag Travel Plan zu erhalten. In diesem Beispiel werden die Wünsche:

  • Kuba Ortswechsel
  • Insbesondere für die Städte Havanna und Varadero
  • Klicken Sie auf eine maximale Budget 1.200 USD
  • Für eine Woche
  • Im Dezember 2018 ASP.NET-Technik

Verwenden die Datenbank überzeugungen, die TAA transformiert diese Wünsche in Absichten und zeigt einen realistische Holiday-Plan, der etwa wie folgt aussehen könnte: Buchen Sie das Kuba Strände Feiertag Tour-Paket mit cubamaniatour.com am 15. Dezember für acht Tage zu einem Preis von $800.

Dieser Plan kann abgerufen werden, mithilfe einer Weltanschauung-Datenbank, die dem folgenden ähnelt:

  • Einführung in wichtige Kuba Tour, 7 Tagen-Paket verfügbar, immer 800 $. 
  • Einführung in Paket, Kuba Strände Feiertage Tour, acht Tage, immer verfügbare 800 $. 
  • Tour Havanna Explorer Kuba Tour, 3 Tage ist,-Paket verfügbar, 12: 10: 2018 500 US-Dollar. 
  • Tour durch Havanna Varadero Tour 10 Tagen-Paket verfügbar, 17: 10: 2018 800 $. 

Beachten Sie, dass sämtliche TAA gebotenen Pläne berücksichtigt alle Wünsche, die von den Kunden werden muss, einschließlich den maximale Budget Wunsch ($1.200), der vom Agent berücksichtigt werden muss, bei der Bereitstellung des Plans übermittelt wurden. Diese bestimmte Wunsch möglicherweise nicht realistisch, verhindert des Agents seine BDI-Modell verwenden, um den Wunsch, in dem Ziel zu aktivieren. Es kann nicht geplant, die in der der Preis und die andere Wünsche passen nicht erreicht werden.

TAA-Implementierung inC#

Nun, dass Sie einen Überblick über die Funktionsweise der TAA und wie sie mit Touristen in fernen Ländern interagieren, sehen wir uns wie derartiger Agent im code C#. Zunächst erstellen eine generische Haltung < TA, T >-Klasse, die so allgemein wie möglich ist, werden alle Merkmale jeder Einstellung (Weltanschauung belief, Desire, Intention) zu verstehen, wird in einer BDI-Agent-Architektur. Diese Klasse ist hier dargestellt:

public class Attitude<TA, T>
  {
    public T AttitudeRepresentation;
    public TA Label;
    public Attitude(TA label, T attitudeRepr)
    {
      Label = label;
      AttitudeRepresentation = attitudeRepr;
    }
  }

In dieser Klasse habe ich zwei generische Felder: TA, die verwendet wird, um den Typ der Einstellung in der BDI-Architektur zu identifizieren und "T", das die zugeordneten Daten darstellt. Der generische T-Parameter wird um eins der aufgeführten Enumerationstypen ersetzt abbildung2.

Abbildung 2-Enumerationstypen als T-Parameter in BDI-Klasse

public enum DesireType
{
  Visit, Budget, Date
}
public enum BeliefType
{
  TourPackages
}
public enum IntentionType
{
  BookTourPackage
}

Diese Enumerationen können als Satz von Wünsche, überzeugungen und Absichten des Agents zu einem bestimmten Zeitpunkt angezeigt werden. Zum Schluss sehen Sie die abstrakte Bdi < T >-Klasse in Abbildung 3.

Abbildung 3 Bdi < T >-Klasse

public abstract class Bdi<T>
  {
    public IEnumerable<Attitude<BeliefType, T>> Beliefs { get; set; }
    public IEnumerable<Attitude<DesireType, T>> Desires { get; set; }
    public IEnumerable<Attitude<DesireType, T>> Intentions { get; set; }
    protected Bdi(IEnumerable<Attitude<BeliefType, T>> beliefs)
    {
      Beliefs = new List<Attitude<BeliefType, T>>(beliefs);
      Desires = new List<Attitude<DesireType, T>>();
      Intentions = new List<Attitude<DesireType, T>>();
    }
    protected abstract IEnumerable<Attitude<IntentionType, T>> Deliberate(
      IEnumerable<Attitude<DesireType, T>> desires);
    protected abstract T MeansEndsReasoning(IEnumerable<Attitude<IntentionType,
      T>> intentions);
}

Die Bdi < T >-Klasse bezieht sich auf die BDI-Architektur und der Philosophie weist jedoch keine direkte Beziehung mit TAA. Beachten Sie, dass in der Bdi < T >-Klasse, ich einfach eine Zuordnung (abstrakte Versionen der Methoden Deliberate und MeansEndsReasoning) zum Erstellen von BDI-Modellen. Aus diesem Grund ist die Bdi < T >-Klasse als eine Blaupause verwendet, die BDI-Architektur-Agent auf jedem Gerät, Anwendung und ähnliches zu implementieren. Beachten Sie, dass eine Methode, die in dieser Klasse weggelassen wurde UpdateBeliefs. Dieses Verfahren wird das Dataset Überzeugungen aktualisiert, nachdem eine bestimmte Bedingung erfüllt sind (z. B. Delegierungen oder Mean-Ends reasoning) und die Brf-Funktion, die zuvor beschriebenen entspricht. Es hat der Reader und die bestimmten Bedingungen, um solche eine Updatemethode erstellen verlassen wurde.

Die Taa < T >-Klasse, die der Assistent Reisebüros darstellt, die von Bdi < T > und ihres Konstruktors erbt und die Implementierung von geerbten Methoden wird veranschaulicht, Abbildung 4.

Abbildung 4 Taa < T >-Klassenkonstruktors und geerbte Methoden

public class Taa<T> : Bdi<T> where T: Dictionary<string, string>
  {
    public Taa(IEnumerable<Attitude<BeliefType, T>> beliefs) : base(beliefs)
    {
    }
    public T GetPlan(IEnumerable<Attitude<DesireType, T>> desires)
    {
      return MeansEndsReasoning(Deliberate(desires));
    }
    protected override IEnumerable<Attitude<IntentionType, T>>
      Deliberate(IEnumerable<Attitude<DesireType, T>> desires)
    {
      return LookForTours(desires.ToList());
    }
    protected override T MeansEndsReasoning(IEnumerable<Attitude<IntentionType,
      T>> intentions)
    {
      return intentions.FirstOrDefault() == null ?  null :
        intentions.First().AttitudeRepresentation;
    }
  }

In der Klasse Taa Delegierungen tritt auf, die absichtliche-Methode, die letzten Endes die LookForTours-Methode aufgerufen, siehe Abbildung 5. Es ist in dieser Methode, dass Wünsche von Touristen in fernen Ländern eingegebenen möglich Zufriedenheit Suchen von für überzeugungen im Überzeugungen Dataset eingefügt wird. Denken Sie daran, dass im Beispielmodell, jede Weltanschauung ein Tour Paket darstellt. Wenn ein Paket gefunden wird, wird es auf eine Ergebnisliste des Zwecks hinzugefügt alle bestehen aus der Buchung eines bestimmten Tour-Pakets. Und dann in der MeansEndsReasoning-Methode, um eine einfache Logik ich das erste mögliche Tour Paket so Feiertag für die touristische zurückgegeben.

Abbildung 5 LookForTours-Methode

private IEnumerable<Attitude<IntentionType, T>>
  LookForTours<T>(List<Attitude<DesireType, T>> desires) where T : Dictionary<string, string>
  {
    var visitDesire = desires.First(d => d.Label == DesireType.Visit);
    var dateDesire = desires.First(d => d.Label == DesireType.Date);
    var maxBudgetDesire = desires.First(d => d.Label == DesireType.Budget);
    var citiesToVisit = visitDesire.AttitudeRepresentation["visiting"]
      .Split(',');
    var dateFrom = dateDesire.AttitudeRepresentation["from"];
    var days = int.Parse(dateDesire.AttitudeRepresentation["days"]);
    var maxBudget =
      double.Parse(maxBudgetDesire.AttitudeRepresentation["max"]);
    var tourPackages = Beliefs.Where(b => b.Label == BeliefType.TourPackages);
    var result = new List<Attitude<IntentionType, T>>();
    foreach (var tourPackage in tourPackages)
    {
      var data = tourPackage.AttitudeRepresentation as Dictionary<string, string>;
      var starts = data["starts"];
      var daysTour = int.Parse(data["days"]);
      var cities = data["cities"].Split(',');
      var price = double.Parse(data["price"]);
      if (daysTour <= days &&
        cities.Intersect(citiesToVisit).Count() == cities.Length &&
        starts == dateFrom &&
        price < maxBudget)
      {
        result.Add(new Attitude<IntentionType, T>(IntentionType.BookTourPackage,
          tourPackage.AttitudeRepresentation as T));
      }
    }
    return result;
  }

Verwenden verschiedene Strategien, könnten Sie die Tour-Paket oder beabsichtigen, mit dem niedrigsten Preis oder die längste Dauer zurückgeben. In diesem Fall um einfach zu halten, ich die erste Absicht ausgegeben. Die GetPlan-Methode sollte die Aktion oder eine Reihe von Aktionen zum Ausführen von Sport-Wünsche zurück. In diesem Fall stimmt die Aktion (eine Einführung in Paket Buchung) mit dem Satz der Absichten und das Ergebnis der Methode MeansEndsReasoning ein.

Abschließend ich getestet habe meine TAA in einer Konsolenanwendung Siehe Abbildung 6. Es habe ich einige Dummydaten, wie die überzeugungen, eine Liste von touristische Wünsche erstellt, und klicken Sie dann einen Plan für diese Wünsche haben.

Abbildung 6-Program-Klasse

class Program
  {
    static void Main(string[] args)
    {
      var beliefs = new List<Attitude<BeliefType, Dictionary<string, string>>>
      {
        new Attitude<BeliefType, Dictionary<string, string>>(
          BeliefType.TourPackages,
          new Dictionary<string, string> { { "tour", "Essential-Cuba" },
          { "starts" , "Anytime" }, { "days" , "7"}, { "cities", "HAV, VAR, TRI" }, 
          { "price" , "800"}, { "operator" , "www.cubamaniatour.com" }}),
        new Attitude<BeliefType, Dictionary<string, string>>(
          BeliefType.TourPackages,
          new Dictionary<string, string> { { "tour", "Cuba Beaches Holiday" },
          { "starts", "10-12-2018" }, { "days" , "8"}, { "cities", "HAV, VAR" }, 
          { "price" , "800"}, { "operator" , "www.cubamaniatour.com" }}),
        new Attitude<BeliefType, Dictionary<string, string>>(
          BeliefType.TourPackages,
          new Dictionary<string, string> { { "tour", "Havana & Varadero Tour" },
          { "starts", "12-15-2018" }, { "days" , "15"}, { "cities", "HAV,
            VAR, TRI" }, 
          { "price" , "800"}, { "operator" , "www.cubamaniatour.com" }}),
        new Attitude<BeliefType, Dictionary<string, string>>(
          BeliefType.TourPackages,
          new Dictionary<string, string> { { "tour", "Discover Cuba" },
          { "starts", "12-15-2018" }, { "days", "15"}, { "cities", "HAV,
            VAR, TRI" }, 
          { "price" , "800"}, { "operator" , "www.cubamaniatour.com" }}),
        new Attitude<BeliefType, Dictionary<string, string>>(
          BeliefType.TourPackages,
          new Dictionary<string, string> { { "tour", "Classic Car Tour" },
          { "starts", "12-15-2018" }, { "days", "10"}, { "cities", "HAV,
            VAR, TRI" }, 
          { "price" , "800"}, { "operator" , "www.cubamaniatour.com" }}),
        new Attitude<BeliefType, Dictionary<string, string>>(
          BeliefType.TourPackages,
          new Dictionary<string, string> { { "tour", "Havana Explorer" },
          { "starts", "12-15-2018" }, { "days", "3"}, { "cities", "HAV,
            VAR, TRI" }, 
          { "price" , "800"}, { "operator" , "www.cubamaniatour.com" }}),
        new Attitude<BeliefType, Dictionary<string, string>>(
          BeliefType.TourPackages,
          new Dictionary<string, string> { { "tour", "Trinidad Time" },
          { "starts", "12-15-2018" }, { "days", "7"}, { "cities", "HAV,
            VAR, TRI" }, 
          { "price" , "800"}, { "operator" , "www.cubamaniatour.com" }}),
      };
      var taa = new Taa<Dictionary<string, string>>(beliefs);
      var desires = new List<Attitude<DesireType, Dictionary<string, string>>>
      {
        new Attitude<DesireType, Dictionary<string, string>>(DesireType.Visit,
          new Dictionary<string, string> { {"visiting", "HAV, VAR" } }),
        new Attitude<DesireType, Dictionary<string, string>>(DesireType.Budget,
          new Dictionary<string, string> { {"max", "1000" } }),
        new Attitude<DesireType, Dictionary<string, string>>(DesireType.Date,
          new Dictionary<string, string> { {"from", "10-12-2018" },
            {"days" , "9"  }})
      };
      var tourPackage = taa.GetPlan(desires);
      Console.WriteLine(tourPackage == null ?
        "Sorry, no plan goes according to your details" : PrintPlan(tourPackage));
      Console.ReadLine();
    }

Die PrintPlan-Methode, die am unteren Rand des Programms enthalten ist. Es gibt das Wörterbuch mit Daten, die an den Tour-Operator, dessen Tour-Paket von TAA als Buchung-Option ausgewählt wurde, gehört. Die Methode PrintPlan sieht folgendermaßen aus:

private static string PrintPlan(Dictionary<string, string> toPrint)
  {
    var result = "";
    foreach (var keyValue in toPrint)
    {
      result += keyValue.Key + ", " + keyValue.Value + '\n';
    }
    return result;
  }
}

Das Ergebnis abgerufen wird, nach dem Anzeigen in den vorherigen Experiment Code ausführen abbildung7.

Ausgabe des TAA für Sport-Wünsche
Abbildung 7 Ausgabe TAA für Sport-Wünsche

In diesem Artikel habe ich die Architektur Überzeugungen-Wünsche-Absichten (BDI) vorgestellt. Ich diese Agent-Architektur aus theoretischer Sicht beschrieben und erläutert, die Idee hinter der TAA und wie es funktioniert und präsentiert eine Implementierung in C# , wobei die TAA die BDI-Architektur implementiert wurde. Klicken Sie abschließend der TAA Code getestet wurde, und habe ich gezeigt, über eine einfache Konsolenanwendung, wie sie zum Abrufen von Optionen zum Buch Einführung in Pakete als Holiday-Pläne, die ihre eingegebenen Wünsche (max. Budget, Städte zu besuchen, Datum, Zeit und mehr) abgeglichen Touristen in fernen Ländern ermöglicht. Es ist jetzt entscheiden, ob Sie das einfache BDI-Modell, das hier gezeigte erweitern, und es an Ihre eigenen Anforderungen anpassen.


Arnaldo Pérez Castañoeine Computerwissenschaftler Sitz in Belgrad, Serbien, für P3 Digitaldienste, eine Tochtergesellschaft der deutschen multinationale Unternehmen mit Hauptsitz in Aachen P3-Gruppe arbeitet ist. Er ist Autor von "praktische künstliche Intelligenz – Machine Learning, Bots und Agent-Lösungen mit C#" (Apress, 2018), "PrestaShop Recipes" (Apress 2017) und auch eine Reihe von Büchern zu programmieren, "JavaScript Fácil", "HTML-y CSS Fácil" und "Python Fácil"(Marcombo S.A.) – und er schreibt für VisualStudioMagazine.com und Magazine-Abgleich. Er ist einer der Mitbegründer von Kuba Mania Tour (cubamaniatour.com) und sein wissen umfasst Visual Basic C#, .NET Framework und künstliche Intelligenz. Das Kino und die Musik zählen zu seinen Leidenschaften. Sie erreichen ihn unter arnaldo.skywalker@gmail.com.

Unser Dank gilt dem folgenden technischen Experten bei Microsoft für die Durchsicht dieses Artikels: James McCaffrey