//La perception de l'etat actuel du bloc public void GetPerception(Environnement env) { this.satisfied = CheckSatisfaction(); this.free = env.CheckFree(this); this.place1Weight = env.GetPlace1State(); this.place2Weight = env.GetPlace2State(); }
//Choisir l'action a faire selon son etat actuel percu public void TakeAction(Environnement env) { if (!satisfied) { if (free) //si le bloc est non satisfait et libre on se deplace { Move(); pushed = false; } else //si le bloc est non satisfait et non libre on pousse { Push(); } } }
static void Main(string[] args) { //Creation de l'environnement Environnement env = new Environnement(); //Creation des blocs Block ba = new Block("A", env); Block bb = new Block("B", env); Block bc = new Block("C", env); Block bd = new Block("D", env); List <Block> blockList = new List <Block>() { ba, bb, bc, bd }; //Initialisation des bloc de dessous souhaités de chaque bloc (Agencement souhaité) ba.goalBlockName = "B"; bb.goalBlockName = "C"; bc.goalBlockName = "D"; bd.goalBlockName = ""; //Creation et remplissage de la pile initiale env.matrix = new Stack <Block>(); env.matrix.Push(bd); env.matrix.Push(ba); env.matrix.Push(bb); env.matrix.Push(bc); //Tant que le but n'est pas atteint (la satisfaction de tous les blocs) les agents executent leurs Perception-Action while (!env.GoalAchieved(blockList)) { env.PrintState(); foreach (Block block in blockList) { block.GetPerception(env); block.TakeAction(env); } } Console.ReadLine(); }
public bool onTable = false; // True si le block est sur la table (place1 ou place2) et non sur la pile principale //Le constructeur public Block(string name, Environnement env) { this.name = name; this.env = env; }