-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathAgent.cs
More file actions
104 lines (74 loc) · 3.8 KB
/
Agent.cs
File metadata and controls
104 lines (74 loc) · 3.8 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
/*
Agent :
L’agent Aspirobot T-0.1 possède un certain nombre de fonctionnalités. Il peut aspirer (ce qui a
pour effet d’aspirer à la fois la poussière et les bijoux), ramasser un élément (pour ramasser un
bijou idéalement!) et se déplacer (haut, bas, gauche et droite). Chacune de ses actions lui coûte
1 unité d’électricité (attention, rappelez-vous que vous êtes un propriétaire de manoir cheap
heum... disons qui n’aime pas gaspiller de l’argent). Le robot peut voir toutes les pièces. Le
robot doit être implémenté sous les principes agents vus en classe. Il doit donc observer
l’environnement avec ses capteurs et agir sur celui-ci avec des effecteurs (je vous conseille
carrément de faire des classes capteurs et effecteurs). Votre robot devrait être de type « basé sur
les buts ». Même si le problème est très simple, il est important que celui-ci contienne les
éléments de base (son état interne devrait contenir un état mental sous la forme BDI « Beliefs-
Desires-Intentions »). Il devrait lui aussi être implémenté comme une boucle infinie respectant
l’idée de base vue en cours (voir pseudo-code simple ci-dessous).
------------ PSEUDO CODE -> AGENT BASÉ SUR LES BUTS ----------------------
function Agent-But ([etat_env, but])
ActionsPossibles = actionDeclanchable(etat_env) //observe
for i = 1 to taille(ActionsPossibles){
if capable_atteindre(ActionsPossibles[i], but)
return ActionsPossibles[i];
}
returns an action
-------------------------------------------------------------
*/
using System.Collections;
class Agent
{
private Sensors sensor; //observe
private Effector effector; //choose an action
private Exploration exploration; //uninformed or informed
public Agent(){
sensor = new Sensors();
effector = new Effector();
}
public void AgentDoYourJob(Exploration exploration, Environment ev){
//1. Beliefs - Observation of the map
Map map = new Map(ev.GetMap()); //copy of the map at the moment T
sensor.Observe(map);
//2. Desires - look if goal is achieved or not
if(sensor.GetCellToCollect().Count!=0 || sensor.GetCellToSuck().Count!=0){
Console.WriteLine("Agent : I explore");
//map.DisplayMap();
//3. Intentions - do exploration to reach goal state
int [] cell = new int [2] {map.GetRobotXPosition(),map.GetRobotYPosition()};
ArrayList path = new ArrayList();
/*foreach(int [] element in exploration.Neighbour(cell)){
Console.WriteLine(element[0] + " " + element[1]);
}*/
path = exploration.Explore(sensor.GetCellToSuck(),sensor.GetCellToCollect(),cell);
/*Console.WriteLine("coup à jouer :");
foreach(int [] element in path){
Console.WriteLine(element[0] + " " + element[1]);
}
Console.WriteLine();*/
//4. Just do it
effector.DoAction(path, sensor.GetCellToCollect(), sensor.GetCellToSuck(), ev, exploration.GetNumberOfActions(),2000);
}
else{
Console.WriteLine("Agent : I'm waiting (my goal is reached for the moment)");
Thread.Sleep(exploration.GetMillisecondsToWait());
}
sensor.GetCellToCollect().Clear();
sensor.GetCellToSuck().Clear();
}
public Sensors GetSensor(){
return sensor;
}
public Effector GetEffector(){
return effector;
}
public Exploration GetExploration(){
return exploration;
}
}