Janvier 2019
Volume 34, numéro 1
[Machine Learning]
Tirer parti de l’architecture de l’agent Croyances-Désirs-Intentions
Par Arnaldo Perez Perez | Janvier 2019
Dans cet article, je décris un voyage Compagnon Agent (TA) qui utilise une architecture de l’agent de convictions-souhait-Intentions (BDI) pour son processus de prise de décision.
L’architecture de l’agent BDI est basée sur la théorie théorique de Michael Bratman (Bratman 1987) qui explique le raisonnement via les attitudes suivantes : croyances, leurs souhaits et intentions. Par conséquent, un agent BDI est un agent autonome qui rend utiliser de ces trois concepts à son fonctionnement. Commençons par examiner ces concepts un par un :
- Croyances sont le modèle de l’agent de l’environnement, en fait ce qu’il pense pour être true. Il n’est pas connaissance que certaines de ses convictions peuvent avoir la valeur false. Ce composant de l’architecture BDI est généralement représenté comme un jeu de données de faits tels que breeze (1, 2), danger (2, 3), safe (0, 0), safe (0, 1) et ainsi de suite.
- Souhait représente l’état idéale de l’environnement pour l’agent. Comme dans l’esprit humain, ces éléments représentent que nous aimerions voir accompli à l’avenir. Un souhait peut être réaliste ou non, comme il se produit avec la pensée humaine et peut ou ne peut pas être obtenu. Souhait peut être mutuellement inclusive ou exclusive.
- Intentions représentent un sous-ensemble de souhait que l’agent a pris comme objectifs qui doivent être effectuées plus rapidement. Ces intentions ne peuvent pas contredire ses croyances — par exemple, l’agent ne peut pas avoir une intention qui permet de passer par une zone morte ou sinon l’empêche d’atteindre l’objectif qui représente l’intention. Une intention de ce type serait ignorée.
Croyances se composent d’un jeu de données de faits qui est mis à jour pendant la durée de vie de l’agent. Concernant le souhait et intentions, une paire de questions se pose : Comment sélectionner désire devenir intentions, et comment sélectionner des intentions plus loin pour devenir des actions de l’agent ? Pour répondre à cette question, je dois présenter les deux composants de raisonnement pratique dans le modèle BDI de l’agent :
- Autre objectif : Ce composant porte sur la réflexion stratégique et décide quels souhait doivent le faire maintenant. Le résultat est un ensemble d’intentions.
- Raisonnement signifie principaux : Ce composant concerne la planification tactique et décide de quelles actions doivent être effectuées pour répondre à l’ensemble des intentions validées. Le résultat est un ensemble de plans et des actions.
Le diagramme dans Figure 1 illustre le fonctionnement d’une architecture BDI. Entrées ou percepts reçus via des capteurs à partir de l’environnement sont soumises à la fonction de révision croyance (BRF). Cette fonction supervise les mises à jour de la base de données de convictions actuel, s’assurer que le jeu récemment reçu de percepts ne contredire les croyances dans le jeu de données croyance. La fonction accepte comme arguments l’ensemble des entrées et l’ensemble de convictions : Brf (entrées, croyances).
Figure 1 l’Architecture de l’Agent BDI
Par la suite, un ensemble d’options qui finalement devient souhait et passe le jeu de données désir est généré. Pour générer ces options, la fonction examine le jeu de données croyance et le jeu de données d’intention. Par conséquent, elle accepte comme paramètres le jeu de données croyance, le jeu de données désir et le jeu de données d’intention : generateOptions (croyances, souhait, intentions). Pourquoi devez-vous intentions pour générer des options ? Étant donné que vous ne souhaitez pas générer d’options qui contredisent ou accédez à l’ensemble actuel d’intentions.
Le souhait précédemment obtenu à l’aide d’une fonction de filtre, est filtrées et deviennent les intentions. Pour filtrer, vous excluez généralement souhait qui ne sont pas réaliste ou est très difficiles à remplir pour le moment. La fonction de filtre aurait la signature : filtre (croyances, souhait, intentions). Enfin, à partir de l’ensemble des intentions et moyens-fin d’une approche de raisonnement une action est effectuée à l’aide d’EFFECTEURS de l’agent (par exemple, les armes mécaniques et écrans).
Pour résumer, BDI est un paradigme et un ensemble de principes généraux, ce qui peut être utilisé pour concevoir l’architecture d’un système logiciel pour la prise de décision. Il se peut que vous pourrez être familiarisé avec les autres paradigmes de conception, telles que l’architecture à trois niveaux ou Model-View-Controller pour les systèmes Web. Comme ces autres paradigmes BDI est une aide générale de conception, et non un incontournables bien définis.
Il est temps de passer au-delà de la théorie du modèle BDI et observez comment l’appliquer à une application Automation de processus robotique (RPA), plus précisément, un Assistant de voyages.
Agent de l’Assistant de voyage (TA)
L’objectif consiste à créer un TAA où touristes peuvent entrer leurs souhaits de vacances et obtenir un plan de voyage vacances. Pour cet exemple, le souhait sera :
- Voyage à Cuba
- Plus précisément, pour les villes de la Havane et Varadero
- Avec un budget maximal de 1 200 USD
- Pendant une semaine
- S’écartent en décembre 2018
À l’aide de sa base de données croyances, le TAA transforme ces souhait en intentions et présente un plan de vacances réaliste, ce qui peut ressembler à ceci : Livre le package de la visite guidée Cuba plages vacances avec cubamaniatour.com le 15 décembre pour 8 jours à un prix de 800 $.
Ce plan peut être obtenu à l’aide d’une base de données croyance semblable au suivant :
- Visite guidée du Package, essentielles visite guidée Cuba, 7 jours, disponible toujours, 800 $.
- Visite guidée, Cuba Package plages jours fériés visite guidée, 8 jours, disponible toujours, 800 $.
- Visite guidée du Package, la Havane Explorer Cuba visite guidée, 3 jours, disponible 12-10-2018, 500 $.
- Visite guidée du Package, la Havane Varadero visite, 10 jours, disponible 17-10-2018, 800 $.
Notez que n’importe quel plan fourni par TAA doit prendre en considération tous les souhait soumis par le client, y compris le désir de budget maximale (1 200$) doit être prises en compte par l’agent lors de la fourniture du plan. Ce désir spécifique n’est peut-être pas réaliste, empêchant l’agent à l’aide de son modèle BDI pour activer le désir dans une intention. Aucun plan ne peut pas contenir les paramètres du prix et autres souhait n’est possible.
Implémentation de TAA dansC#
Maintenant que vous avez une idée du fonctionne de la ta et comment il interagira avec touristes, examinons comment coder cet agent dans C#. Je commencerai en créant une Attitude < TA, T > classe générique, qui est aussi général que possible, comprendrez toutes les caractéristiques de n’importe quel attitude (croyance, désir, intention) dans une architecture de l’agent BDI. Cette classe est présentée ici :
public class Attitude<TA, T>
{
public T AttitudeRepresentation;
public TA Label;
public Attitude(TA label, T attitudeRepr)
{
Label = label;
AttitudeRepresentation = attitudeRepr;
}
}
Dans cette classe, j’ai deux champs génériques : TA qui est utilisé pour identifier le type de l’attitude dans l’architecture BDI et T qui représente les données associées. Le paramètre générique T est remplacé par un des types enum répertoriés dans Figure 2.
Figure 2 Types d’énumération utilisés en tant que paramètre T dans la classe BDI
public enum DesireType
{
Visit, Budget, Date
}
public enum BeliefType
{
TourPackages
}
public enum IntentionType
{
BookTourPackage
}
Ces énumérations peuvent être considérées comme l’ensemble des désirs, croyances et intentions de l’agent à un moment donné. Enfin, la classe abstraite Bdi < T > est indiquée dans Figure 3.
Figure 3 Bdi < T > classe
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);
}
La classe Bdi < T > est lié à l’architecture BDI et sa philosophie, mais n’a aucune relation directe avec TAA. Notez que dans la classe Bdi < T >, j’ai simplement fournir un mappage (versions abstraites des méthodes Deliberate et MeansEndsReasoning) pour créer des modèles BDI. Par conséquent, la classe Bdi < T > est utilisée comme un plan pour implémenter l’architecture de l’agent BDI sur n’importe quel appareil, programme et autres. Notez qu’une méthode qui a été omise dans cette classe est UpdateBeliefs. Cette procédure est mise à jour le jeu de données croyances après qu’une certaine condition est remplie (par exemple, la réflexion ou raisonnement ne se termine moyenne) et correspond à la fonction Brf décrit précédemment. Il a été laissé le lecteur et ses conditions spécifiques pour créer une telle méthode de mise à jour.
La classe Taa < T > qui représente l’Agent de l’Assistant Déplacement hérite Bdi < T > et son constructeur, et l’implémentation de méthodes héritées est illustrée dans Figure 4.
Figure 4 constructeur de la classe Taa < T > et les méthodes héritées
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;
}
}
Dans la classe Taa, délégation se produit dans la méthode délibérée, laquelle appelle finalement la méthode LookForTours, comme indiqué dans Figure 5. Il est dans cette méthode que souhait entrées par touristes recherche la satisfaction possible par être placés sur les croyances dans le jeu de données croyances. N’oubliez pas que dans l’exemple de modèle, chaque croyance représente un package de la visite guidée. Si un tel package est trouvé, il est ajouté à une liste de résultats des intentions, qui se composent d’un certain package visite guidée de réservation. Puis, dans la méthode MeansEndsReasoning, pour avoir une logique simple j’ai renvoyé le premier package de présentation possible comme l’intention de vacances pour ce dernier.
Figure 5 LookForTours (méthode)
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;
}
À l’aide de stratégies différentes, vous pouvez retourner le package de présentation ou d’une intention avec le prix le plus bas ou plus longue durée. Dans ce cas, pour faire simple, j’ai générés l’intention première. La méthode GetPlan est supposée pour renvoyer l’action ou un ensemble d’actions à effectuer le souhait de tourisme. Dans ce cas, l’action (un package de la visite guidée de réservation) coïncide avec l’ensemble des intentions et le résultat de la méthode MeansEndsReasoning.
Pour conclure, j’ai testé mon TAA dans une Application Console comme illustré dans Figure 6. Il, j’ai créé des données factices ainsi l’ensemble de convictions, créé une liste de tourisme souhait, puis vous avez un plan pour ces souhait.
Classe de programme figure 6
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();
}
La méthode PrintPlan est incluse en bas du programme. Il imprime le dictionnaire contenant les données appartenant à l’opérateur dont package visite a été sélectionnée par TAA comme option de réservation. La méthode PrintPlan ressemble à ceci :
private static string PrintPlan(Dictionary<string, string> toPrint)
{
var result = "";
foreach (var keyValue in toPrint)
{
result += keyValue.Key + ", " + keyValue.Value + '\n';
}
return result;
}
}
Le résultat obtenu après l’exécution du code d’expérience précédente est indiqué dans Figure 7.
Sortie de la figure 7 de TAA pour le souhait de tourisme
Dans cet article, j’ai présenté l’architecture des Intentions de convictions souhait (BDI). J’ai décrit cette architecture de l’agent à partir d’un point de vue théorique, expliqué l’idée derrière le TAA et la façon dont il fonctionne et présenté une implémentation dans C# où le TAA a été implémenté à l’aide de l’architecture BDI. Enfin, le code TAA a été testé et je vous ai montré, via une Application de Console simple, qui permet de touristes obtenir des options pour les packages de visite guidée de livre en plans de vacances correspondant à leurs souhaits entrés (budget max, villes visiter, date, heure et bien plus encore). Il incombe désormais vous permettent d’étendre le modèle BDI simple présenté ici et l’adapter à vos besoins.
Arnaldo Pérez Castañoest un authentique scientifique basé à Belgrade, Serbie, où il travaille pour Services numériques P3, une filiale du groupe P3, une société multinationale allemande basé à AIX-la-Chapelle. Il est l’auteur de « l’Intelligence artificielle apprentissage pratique, les robots et les Solutions de l’Agent à l’aide C#» (Apress, 2018), « PrestaShop Recipes » (Apress 2017) et également une série de livres de programmation — « JavaScript Fácil », « HTML y CSS Fácil » et « Python Fácil » (Marcombo Amérique du Sud) — et il écrit pour VisualStudioMagazine.com et Magazine collision. Il est un des cofondateurs de visite guidée de Cuba moments (cubamaniatour.com) et son expertise inclut Visual Basic, C#, .NET Framework et Intelligence artificielle. Cinéma et musique sont quelques-uns de ses passe-temps favoris. Contactez-le à l’adresse arnaldo.skywalker@gmail.com.
Merci à l'expert technique Microsoft suivant d'avoir relu cet article : James McCaffrey