Gennaio 2019
Volume 34 Numero 1
[Machine Learning]
Sfruttamento dei vantaggi dell'architettura dell'agente BDI (Beliefs-Desires-Intentions)
Dal Arnaldo Perez Perez | Gennaio 2019
In questo articolo è descrivere un viaggio Assistente per l'agente (TAA) che usa un'architettura di agente convinzioni, esigenze-intenzioni (BDI) per il processo decisionale.
L'architettura dell'agente BDI si basa sulla teoria teorico a di Michael Bratman (Bratman 1987) che spiega ragionamento tramite i seguenti atteggiamenti: convinzioni, esigenze e intenzioni. Di conseguenza, un agente BDI è un agente autonomo che consente di usare questi tre concetti per il funzionamento. Esaminiamo questi concetti uno alla volta:
- Credenze sono modello dell'agente dell'ambiente, fondamentalmente quelli che presume essere sia true. Non è conoscenza come alcuni dei relativi credenze potrebbe essere false. Questo componente dell'architettura BDI è generalmente rappresentato come un set di dati dei fatti come breeze (1, 2), pericolo (2, 3), safe (0, 0), safe (0, 1) e così via.
- Desideri rappresentano lo stato ideale dell'ambiente per l'agente. Ad esempio in mente umana, questi elementi rappresentano che vorremmo vedere avviene in futuro. Desiderio potrebbe essere realistico o meno, come avviene con alcune riflessioni umano e può o non siano raggiungibile. È possibile desiderata si escludono a vicenda inclusivo o esclusivo.
- Intenzioni rappresentano un subset dei desideri che l'agente ha avuto come obiettivi per essere eseguita a breve. Tali intenzioni non risultano allineati relativo convinzioni, ad esempio, l'agente non può avere un'indicazione che consente di passare attraverso una zona morta o in caso contrario, si impedisce di raggiungere l'obiettivo che rappresenta l'intenzione. L'intenzione di questo tipo verrebbe rimosso.
Credenze sono costituiti da un set di dati dei fatti viene aggiornato nel corso della durata dell'agente. Relative alle esigenze e intenzioni, si verifica un paio di domande: La modalità di selezione desiderata per diventare intenzioni e la modalità di selezione successiva intenzioni per acquisire le azioni agente? Per rispondere a questa domanda, devo presenti i due componenti di ragionamento pratico nel modello BDI dell'agente:
- Delega: Questo componente gestisce pensiero strategico e decide quali è da portare a termine ora desiderata. Il risultato è un set di proprie intenzioni.
- Mezzo-end alla motivazione: Questo componente concerne la pianificazione tattico e decide quali azioni devono essere eseguite per soddisfare il set delle intenzioni eseguito il commit. Il risultato è un set di piani e le azioni.
Il diagramma nella figura 1 illustra il funzionamento di un'architettura BDI. Input o percepts ricevuti tramite sensori dall'ambiente vengono inviati per la revisione di convinzione-funzione (BRF). Questa funzione Verifica aggiornamenti al database corrente convinzioni, assicurandosi che il set di percepts ricevuto di recente non siano in contraddizione tra qualsiasi credenze nel set di dati convinzione. La funzione accetta come argomenti il set di input e il set di credenze: Brf (input, credenze).
Figura 1 architettura BDI agente
In seguito, viene generato un set di opzioni che alla fine diventa desiderata e passa il set di dati desiderato. Per generare queste opzioni, la funzione esamina il set di dati convinzione e il set di dati si intende. Di conseguenza, l'accetta come parametri del set di dati convinzione, il set di dati desiderato e il set di dati si intende: generateOptions (convinzioni, esigenze, intenzioni). Il motivo per cui occorre intenzioni per generare opzioni? Perché non si vuole generare opzioni siano in contraddizione tra o Vai a fronte del set corrente delle intenzioni.
Usa una funzione di filtro, le esigenze ottenuti in precedenza vengono filtrati e diventano intenzioni. Per filtrare si esclude in genere desiderata che non è realistico o è molto difficili da soddisfare al momento. La funzione di filtro avrebbe la firma: filtro (convinzioni, esigenze, intenzioni). Infine, dal set di un mezzo-end e intenzioni approccio ragionevole un'azione viene eseguita usando effectors dell'agente (ad esempio arms meccanica e schermate).
Per riepilogare, BDI è un paradigma e set di principi generali, che può essere utilizzato per progettare l'architettura di un sistema software per processi decisionali. È possibile conoscere altri paradigmi di progettazione, ad esempio di architettura a tre livelli o Model-View-Controller per i sistemi Web. Come altri paradigmi di questi tipo, BDI è un meccanismo di progettazione generale anziché linee guida prescrittiva ben definito.
È il momento di spostare oltre la teoria del modello BDI ed esaminare come applicarla a un'applicazione di robotica processo automazione (RPA), in particolare, un agente Assistente di viaggio.
Travel Assistant Agent (TAA)
L'obiettivo consiste nel creare un TAA dove turisti possono i desideri festività di input e ottenere un piano di viaggio festività. In questo esempio sarà il desiderata:
- Spostarsi alla Cuba
- In particolare, per le città di Varadero e l'Avana
- Limiti di budget massimo 1.200 dollari
- Per una settimana
- Indicano in dicembre 2018
Tramite il relativo database convinzioni, il TAA Trasforma queste esigenze in intenzioni e presenta un piano di festività realistico, potrebbe essere simile al seguente: Prenotare il pacchetto di presentazione Cuba spiagge festività con cubamaniatour.com il 15 dicembre per otto giorni a un prezzo di $800.
Questo piano può essere ottenuto mediante un database convinzione che sarà simile al seguente:
- Presentazione del pacchetto, essenziali Tour Cuba, 7 giorni, disponibile sempre, $800.
- Presentazione del pacchetto, Cuba spiagge festivi Tour, 8 giorni, sempre, disponibile $800.
- Presentazione del pacchetto, l'Avana Esplora Cuba Tour, 3 giorni, disponibile 12-10-2018, 500 dollari.
- Presentazione del pacchetto, l'Avana Varadero Tour, 10 giorni, disponibile 17-10-2018, $800.
Si noti che qualsiasi piano fornita da TAA necessario prendere in considerazione tutte le desiderata presentata dal cliente, incluso il desiderio di budget massimo ($1.200) che deve essere considerato dall'agente quando si fornisce il piano. Tale desiderio specifico potrebbe non essere realistico, impedendo l'agente usando il relativo modello BDI per attivare il desiderio in un'indicazione. Nessun piano che non rientra nei parametri di prezzo e altre esigenze, è possibile.
Implementazione di TAA inC#
Ora che si è fatti un'idea del funzionamento di TAA e la modalità di interazione con turisti, esaminiamo come codificare questi un agente in C#. Inizierà creando una classe generica di atteggiamento < trust Anchor, T > che, in quanto più generici possibili, comprensione tutte le caratteristiche di qualsiasi atteggiamento (convinzione, desiderio, intenzione) in un'architettura di agente BDI. Questa classe viene presentata di seguito:
public class Attitude<TA, T>
{
public T AttitudeRepresentation;
public TA Label;
public Attitude(TA label, T attitudeRepr)
{
Label = label;
AttitudeRepresentation = attitudeRepr;
}
}
In questa classe, ho due campi generici: TA utilizzato per identificare il tipo di atteggiamento nell'architettura BDI e T che rappresenta i dati associati. Il parametro generico T viene sostituito da uno dei tipi di enumerazione elencati nella figura 2.
Figura 2 tipi di enumerazione utilizzati come parametro T nella classe BDI
public enum DesireType
{
Visit, Budget, Date
}
public enum BeliefType
{
TourPackages
}
public enum IntentionType
{
BookTourPackage
}
Queste enumerazioni possono essere considerate come il set di esigenze, credenze e intenzioni dell'agente in un momento specifico. Infine, la classe astratta Bdi < T > è racchiusa figura 3.
Figura 3 classe Bdi < T >
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 > è correlato all'architettura BDI e la filosofia ma non ha alcun legame diretto con TAA. Si noti che nella classe Bdi < T >, è sufficiente fornire una mappa (versioni astratte dei metodi Deliberate e MeansEndsReasoning) per la creazione di modelli BDI. Di conseguenza, la classe Bdi < T > viene usata come linee guida per implementare l'architettura dell'agente BDI su qualsiasi dispositivo, programma e così via. Si noti che un metodo che è stata omessa in questa classe UpdateBeliefs. Questa procedura potrebbe aggiornare il set di dati di credenze dopo una determinata condizione viene soddisfatta (ad esempio, delega o alla motivazione Media-end) e corrisponde alla funzione Brf descritta in precedenza. È stato lasciato il lettore e le relative condizioni specifiche per creare un metodo di aggiornamento.
La classe Taa < T > che rappresenta l'agente di viaggio Assistente eredita dal Bdi < T > e il relativo costruttore e l'implementazione di metodi ereditati è illustrata nel figura 4.
Figura 4 costruttore della classe Taa < T > e i metodi ereditati
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;
}
}
Nella classe Taa delega si verifica nel metodo ponderato, che infine chiama il metodo LookForTours, come illustrato nella figura 5. È in questo metodo che desideri immessi da turisti seek soddisfazione possibili da inserire su convinzioni nel set di dati credenze. Si tenga presente che nel modello di esempio, ogni convinzione rappresenta un pacchetto di presentazione. Se viene trovato un pacchetto di questo tipo, viene aggiunto a un elenco dei risultati delle intenzioni, ognuno dei quali costituiti da un determinato pacchetto tour di prenotazione. Quindi, nel metodo MeansEndsReasoning, per avere una logica semplice restituito il primo pacchetto tour fattibile l'intenzione di festività per la struttura.
Figura 5 LookForTours metodo
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;
}
Usa diverse strategie, è possibile restituire il pacchetto di presentazione o si intende con il prezzo più basso o più lunga durata. In questo caso, in sostanza, output è l'intenzione di prima. Il metodo GetPlan dovrebbe per restituire l'azione o un set di azioni da eseguire da turismo desiderata. In questo caso, l'azione (un pacchetto di presentazione di prenotazione) coincide con il set di intenzioni e il risultato del metodo MeansEndsReasoning.
Per concludere, è stata testata my TAA in un'applicazione Console come illustrato nella figura 6. Vi ho creato alcuni dati fittizi come il set di convinzioni, la creazione di un elenco di turistica desiderata e quindi ottenuto un piano per queste esigenze.
Figura 6 programma classe
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();
}
Il metodo PrintPlan è incluso nella parte inferiore del programma. Stampa il dizionario contenente i dati appartenenti all'operatore Panoramica con pacchetto di presentazione è stata selezionata da TAA come opzione di prenotazione. Il metodo PrintPlan simile alla seguente:
private static string PrintPlan(Dictionary<string, string> toPrint)
{
var result = "";
foreach (var keyValue in toPrint)
{
result += keyValue.Key + ", " + keyValue.Value + '\n';
}
return result;
}
}
Il risultato ottenuto dopo l'esecuzione del codice esperimento precedente è illustrato nella figura 7.
Figura 7 Output di TAA per esigenze da turismo
In questo articolo ho presentato l'architettura di convinzioni, esigenze-intenzioni (BDI). Descritte in questa architettura l'agente dal punto di vista teorico, spiegato l'idea alla base di TAA e nel modo altrimenti funzionerebbero, presentato un'implementazione in C# in cui il TAA è stata implementata con l'architettura BDI. Infine, il codice TAA è stato testato e ho illustrato, tramite una semplice applicazione Console, come consenta gli turisti ottenere le opzioni per i pacchetti di presentazione di libro come piani festività che soddisfano i valori immessi desideri (max budget, città da visitare, data, ora e altro ancora). Spetta a questo punto è possibile estendere il modello BDI semplice presentato nell'esercitazione e adattarlo alle proprie esigenze.
Arnaldo pare Castañoè un esperto di informatica basato in Belgrado, Serbia e Montenegro, dove lavora per i servizi digitali P3, una filiale di gruppo P3, una società multinazionale tedesca con sede a Aachen. È l'autore di "pratico di intelligenza artificiale-Machine Learning, BOT e soluzioni dell'agente tramite C#" (Apress, 2018), "PrestaShop Recipes" (Apress 2017) e anche una serie di testi di programmazione, ovvero "JavaScript Fácil", "Y HTML, CSS Fácil" e "Python Fácil"(Marcombo America del sud) e scrive per sue VisualStudioMagazine.com e stupefacente Magazine. Uno dei CO-fondatori della presentazione di discorsi Cuba (cubamaniatour.com) e propria esperienza include Visual Basic, C#, .NET Framework e l'intelligenza artificiale. Musica e cinema sono alcuni dei ama. Contattarlo all'indirizzo arnaldo.skywalker@gmail.com.
Grazie al seguente esperto tecnico Microsoft per la revisione dell'articolo: James McCaffrey