//a constraint to specify that john is a bear Bear( John). //the agent's behaviour Bear( John, Personality):: [Bear : John] <-actor- [Character] -has-> [List = [Naive, dishonest, Vanity, Lasy]]. //knowledge and relationships of the agent Bear( John, Friend, Knowledge ):: [Bear : John] -has-> [List = [ [Agent ] <-typeOf- [ Type = Bird] -actor-> [Name = Arthur], [Agent ] <-typeOf- [ Type = Bee] -actor-> [Name = Betty] ]]. Bear( John, Friend, Knowledge ):: [Type = Agent ] - -locatedIn-> [Position = [16,7]], -follow-> [Trajectory = "Agent1"], <-typeOf- [ Type = Bird] -actor-> [Name = Arthur]. Bear( John, Food, Knowledge ):: [Type = Food ] - -locatedIn-> [Position = [3,11]], -follow->[Trajectory = "Food1"]. Bear( John, Knowledge ):: [Bear : John] -locatedIn-> [CurrentPosition = [5,5]]. Bear( John, Perception ):: [Bear : John] -has-> [Perception = 2]. Bear( John, Knowledge ):: [Bear : John] -has-> [Hungry] -intensityOf-> [Intensity = "very much"] -quantityOfFood-> [Food = "honey"] -quantityOf-> [Quantity = 80]. Bear( John, Knowledge ):: [Bear : John] -has-> [Hungry] -intensityOf-> [Intensity = "normal"] -quantityOfFood-> [Food = "honey"] -quantityOf-> [Quantity = 50]. Bear( John, Knowledge ):: [Bear : John] -has-> [Hungry] -intensityOf-> [Intensity = "few"] -quantityOfFood-> [Food = "honey"] -quantityOf-> [Quantity = 20]. Bear( John, Knowledge ):: [Bear : John] -has-> [Hungry] -intensityOf-> [Intensity = "very much"] -quantityOfFood-> [Food = "fish"] -quantityOf-> [Quantity = 30]. Bear( John, Knowledge ):: [Bear : John] -has-> [Hungry] -intensityOf-> [Intensity = "normal"] -quantityOfFood-> [Food = "fish"] -quantityOf-> [Quantity = 20]. Bear( John, Knowledge ):: [Bear : John] -has-> [Hungry] -intensityOf-> [Intensity = "few"] -quantityOfFood-> [Food = "fish"] -quantityOf-> [Quantity = 5]. //Bear's diet Bear( _Agent, Food ):: [Bear : _Agent] <-actor- [Eat] -obj-> [Food = ["fish", "honey", "Baies_Sauvages"]]. // the shelter of the agent John Bear( _Agent, State ):: [Bear : _Agent] <-actor- [Live] -livesIn-> [Shelter = "hole"] -locatedIn-> [Location]. // inheritence predicat Bear(x,y)::B:-Animal(x,y)::B. /////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// getPossibleFood( _Agent, Food, L ) :- Bear( _Agent, Food ):: [Bear : _Agent] <-actor- [Eat] -obj-> [Food = L]. getPossibleFood( _Agent, Food, L ) :- Bird( _Agent, Food ):: [Bird : _Agent] <-actor- [Eat] -obj-> [Food = L]. Animal( _Agent, Food, _List ) :- Bear( _Agent, Food ):: [Bear : _Agent] <-actor- [Eat] -obj-> [Food = _List]. Animal( _Agent, Food, _List ) :- Bird( _Agent, Food):: [Bird : _Agent] <-actor- [Eat] -obj-> [Food = _List]. memberFood( _Agent, _Food ) :- Animal( _Agent, Food, L), member( _Food, L ). getPossibleFoodInNeighborhood( _Agent, _Ray, _AgentPosition, _Food, _FoodPosition ) :- getAnimalPosition( _Agent, _AgentPosition ), Environment( Food ):: [Food = _Food] -locatedIn-> [Position = _FoodPosition], comparePosition( _AgentPosition , _FoodPosition , _Ray), memberFood( _Agent, _Food ), print("\n"),print("I have seen a food : "),print(_Food). getAnimalPosition( _Agent, _CurrentPosition ) :- Bear( _Agent, Knowledge ):: [Bear : _Agent] -locatedIn-> [CurrentPosition = _CurrentPosition ]. getAnimalPerception( _Agent, _Value ) :- Bear( _Agent, Perception ):: [Bear : _Agent] -has-> [Perception = _Value]. getQuantityOfFoodForAnimal( _Agent, _Food, _Level, _Quantity ) :- Bear( _Agent ), getQuantityOfFoodForBear( _Agent, _Food, _Level, _Quantity ). getQuantityOfFoodForBear( _Agent, _Food, _Level, _Quantity ) :- Bear( _Agent, Knowledge ):: [Bear : _Agent] -has-> [Hungry] - -intensityOf-> [Intensity = _Level] -quantityOfFood-> [Food = _Food] -quantityOf-> [Quantity = _Quantity]. getTrajectory( _Object, _ListTrajectory, _NameTrajectory ) :- Environment( Trajectory ):: [ Trajectory = _NameTrajectory]- -has-> [ List = _ListTrajectory ], -obj-> [ Object = _Object ]. getTypeTrajectory( _Object, _ListTrajectory, _NameTrajectory, _Type ) :- Environment( Trajectory ):: [ Trajectory = _NameTrajectory]- -has-> [ List = _ListTrajectory ], -obj-> [ Object = _Object ], -typeOf-> [ Type = _Type ]. generateAgentTrajectoryFromKnowledge2( _Agent, _Object, _ListTrajectory ) :- getAnimalPosition( _Agent, _CurrentPositition), getAnimalKnowledgeTrajectory( _Agent, _NameTrajectory1), trajectoriesEndingByPosition( _NameTrajectory1, _List1, _CurrentPositition, _Object1), ReturnFirstElementOf( _List1, _Intermediate), getAnimalKnowledgeTrajectory( _Agent, _NameTrajectory2), trajectoriesStartingByPosition( _NameTrajectory2, _List2, _Intermediate, _Object ), diff( _NameTrajectory1, _NameTrajectory2), inverseList( _List1 , _ListRes) , mergeTrajectories( _ListRes, _List2, _ListTrajectory ). getAnimalKnowledgeTrajectory( _Agent, _NameTrajectory) :- Bear( _Agent ), Bear( _Agent, Y, Knowledge ):: [Type ] - -locatedIn-> [Position ], -follow->[Trajectory = _NameTrajectory]. NextAgentPosition( _Agent, _Name, _NextPosition ) :- getAnimalPosition( _Agent, _CurrentPosition ), Environment( Trajectory ):: [ Trajectory = _Name]- -has-> [ List = L ], -obj-> [ Object ], NextCoordinates( _CurrentPosition, L, _NextPosition ). UpDateAgentCurrentPosition( _Agent, _NextPosition ) :- Bear( _Agent ), // to update the knowledge of the agent myRetract(Bear( _Agent, Knowledge ):: [Bear : _Agent] -locatedIn-> [CurrentPosition ]), asserta(Bear( _Agent, Knowledge ):: [Bear : _Agent] -locatedIn-> [CurrentPosition = _NextPosition ],[]), //to update the knowledge of the environment myRetract(Environment( Agent ):: [Agent = _Agent] - -locatedIn-> [CurrentPosition ], -typeOf-> [Type = Bear ]), asserta(Environment( Agent ):: [Agent = _Agent] - -locatedIn-> [CurrentPosition = _NextPosition], -typeOf-> [Type = Bear ],[]), print("\nI have moved to the position "), print(_NextPosition). RetractFoodKnowledge( _Agent, _FoodPosition) :- Bear( _Agent ), myRetract(Bear( _Agent, Food, Knowledge ):: [Type = Food ] - -locatedIn-> [Position = _FoodPosition], -follow->[Trajectory = _NameTrajectory]), !. RetractFoodKnowledge( _Agent, _Food, _FoodPosition). AssertaFoodKnowledge( _Agent, _FoodPosition, _NameTrajectory ) :- Bear( _Agent ), Asserta( Bear( _Agent, Food, Knowledge ):: [Type = Food ] - -locatedIn-> [Position = _FoodPosition], -follow->[Trajectory = _NameTrajectory],[]). fullfilFoodAnimalKnowledge( _Agent, _FoodPosition, _NameTrajectory) :- RetractFoodKnowledge( _Agent, _FoodPosition, _NameTrajectory), AssertaFoodKnowledge( _Agent, _FoodPosition, _NameTrajectory). Animal( _Agent,PrimitiveAction ):: [Animal : _Agent] <-actor- [Eat] - -obj-> [Food = _Food] -numberOf-> [Quantity = _QuantityNeeded], -locatedIn-> [Position = _FoodPosition] :- Environment( Food ):: [Food = _Food] - -locatedIn-> [Position = _FoodPosition ], -exists-> [Quantity = _QuantityAvailble ], SupOrEqual(_QuantityAvailble,_QuantityNeeded), SuppressQuantityOfFoodAt( _Food, _FoodPosition, _QuantityNeeded ), print("\n"),print("The food "),print(_Food), print(" located in "),print(_FoodPosition),print(" has just been consumed \nThe quantity consumed is : "),print(_QuantityNeeded),print("\nI have satisfied my hunger!!"), verifyNullQuantity(_Food, _FoodPosition ). getListOfFriendOf( _Agent, _ListOfFriend ):- Bear( _Agent, Friend ):: [Bear : _Agent] <-actor- [Friend] -has-> [List = _ListOfFriend]. getFoodAnimalKnowledge( _Agent, _NameTrajectory) :- Bear( _Agent ), Bear( _Agent, Food, Knowledge ):: [Type = Food ] - -locatedIn-> [Position = _FoodPosition], -follow->[Trajectory = _NameTrajectory]. getFriendAnimalKnowledge( _Agent, _NameTrajectory, _NameAgent, _TypeAgent) :- Bear( _Agent ), Bear( _Agent, Friend, Knowledge ):: [Type = Agent ] - -locatedIn-> [Position], -follow-> [Trajectory = _NameTrajectory], <-typeOf- [ Type= _TypeAgent] -actor-> [Name = _NameAgent]. getAFriendOfAgent( _Agent, _NameAgent, _TypeAgent) :- Bear( _Agent ), Bear( _Agent, Friend, Knowledge ):: [Type = Agent ] - -locatedIn-> [Position ], -follow-> [Trajectory ], <-typeOf- [ Type = _TypeAgent] -actor-> [Name = _NameAgent]. getPossibleFriendOfAgentInNeighborhood( _Agent, _Ray, _FriendPosition, _FriendName ) :- getAnimalPosition( _Agent, _AgentPosition ), getAFriendOfAgent( _Agent, _FriendName, _TypeFriend), Environment( Agent ):: [Agent = _FriendName] - -locatedIn-> [CurrentPosition = _FriendPosition], -typeOf-> [Type = _TypeFriend], comparePosition( _AgentPosition , _FriendPosition , _Ray). StartDiscussion( _Agent, _OtherAgent, Food, _NameTrajectory) :- send("premier","deuxieme",_res), diff( _Agent, _OtherAgent ), Bear(_OtherAgent), Bear( _OtherAgent, F, Knowledge ):: [Type = Food ] - -locatedIn-> [Position ], -follow->[Trajectory = _NameTrajectory]. traject( _Agent, _CurrentPosition, _TargetPosition, _Type, _GeneratedTraject ):- path( _Agent, _CurrentPosition, _TargetPosition, _Type, _GeneratedTraject ). traject( _Agent, _CurrentPosition, _TargetPosition, _Type, _GeneratedTraject ) :- path( _Agent, _CurrentPosition, _Intermediate, _ , _GeneratedTraject1 ), traject( _Agent, _Intermediate, _TargetPosition, _Type, _GeneratedTraject2 ), mergeTrajectories( _GeneratedTraject1 , _GeneratedTraject2, _GeneratedTraject). path( _Agent, _CurrentPosition, _TargetPosition, _Type, _ListTrajectory ) :- getAnimalKnowledgeTrajectory( _Agent, _NameTrajectory), getTypeTrajectory( _Object, _ListTrajectory, _NameTrajectory, _Type ), ReturnFirstElementOf( _ListTrajectory, _CurrentPosition), ReturnLastElement( _ListTrajectory, _TargetPosition). path( _Agent, _CurrentPosition, _TargetPosition, _Type, _ListTrajectoryInversed ) :- getAnimalKnowledgeTrajectory( _Agent, _NameTrajectory), getTypeTrajectory( _Object, _ListTrajectory, _NameTrajectory, _Type ), ReturnFirstElementOf( _ListTrajectory, _TargetPosition), ReturnLastElement( _ListTrajectory, _CurrentPosition), inverseList( _ListTrajectory , _ListTrajectoryInversed ). Animal( _Agent, Procedure ):: [Animal : _Agent] <-actor- [PerceptionOf]- -id-> [Name = "Neigberhood"], -obj-> [Food = _Food], -LocatedIn-> [Position = _FoodPosition] :- getAnimalPerception( _Agent, _Ray ), getPossibleFoodInNeighborhood( _Agent, _Ray, _AgentPosition, _Food, _FoodPosition ),!. Animal( _Agent, Procedure ) ::[Animal : _Agent] <-actor- [Trajectory]- -id-> [Name = "Final"], -locatedIn-> [CurrentPosition = _CurrentPosition], -to-> [TargetPosition = _NextPosition]:- UpDateAgentCurrentPosition( _Agent, _NextPosition ). Animal( _Agent, Procedure ) ::[Animal : _Agent] <-actor- [Trajectory]- -trajectoryId-> [Name = _NameTrajectory], -locatedIn-> [CurrentPosition = _CurrentPosition], -to-> [TargetPosition = _NextPosition]:- NextAgentPosition( _Agent, _NameTrajectory, _NextPosition ), UpDateAgentCurrentPosition( _Agent, _NextPosition ), !. Animal( _Agent, Procedure ):: [Animal : _Agent] <-actor- [PerceptionOf]- -id-> [Name = "Neigberhood"], -obj-> [Agent = _FriendName], -LocatedIn-> [Position = _FriendPosition] :- getAnimalPerception( _Agent, _Ray ), getPossibleFriendOfAgentInNeighborhood( _Agent, _Ray, _FriendPosition, _FriendName ). Animal( _Agent, Procedure ) ::[Animal : _Agent] <-actor- [Trajectory]- -follow-> [List = _Trajectory], -locatedIn-> [CurrentPosition = _CurrentPosition], -to-> [TargetPosition = _NextPosition]:- NextCoordinates( _CurrentPosition, _Trajectory, _NextPosition ), UpDateAgentCurrentPosition( _Agent, _NextPosition ), !. /////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// member( x, [x|_] ) . member( x, [ _ | L ] ) :- member( x, L ). eq( x, x ). or(p,q) :- p,!. or(p,q) :- q. diff( x, y ) :- eq( x, y),!,fail. diff( x, y). InfCouple( r,[ a | L ] ) :- Inf( a, r ), RestInf( r, L ). RestInf( r, [ b | J ] ) :- Inf( b, r ). Inf( x, y ) :- x < y. Sup( x, y ) :- x > y. InfOrEqual( x, y ) :- x = y, !. InfOrEqual( x, y ) :- x < y. SupOrEqual( x, y ) :- x = y, !. SupOrEqual( x, y ) :- x > y. inverseList( _List1 , _List2 ) :- inversing(_List1, [] , _List2). inversing( [ a | _List1 ], L , _List2 ) :- inversing( _List1, [ a | L ] , _List2 ). inversing( [ ], L , _List2 ) :- eq(L, _List2). merging( _List1, [], _List1 ). mergeTrajectories( _List1 , [ a | _List2 ], _ListRes) :- inverseList( _List1,_List3 ), merging( _List2, _List3, _ListRes). merging( _List1, [ a |_List2 ], _ListRes ) :- merging( [a | _List1 ], _List2, _ListRes). compute( _Xa, _Xb, _Ya, _Yb, _res ). // :- _res is "application.renaldo.RenaldoTools":distance( _Xa, _Xb, _Ya, _Yb ). randomNumber(_Max, _res) :- _res is "RenaldoTools":intRandomValue( _Max). printInConsole( _String) :- "RenaldoTools":print( _String ). printlnInConsole( _String) :- "RenaldoTools":println( _String ). printInPanel( _String) :- "RenaldoTools":printPanel( _String ). readFromConsole( _int ) :- _int is "RenaldoTools":read(). comparePosition( _Couple1, _Coupl2, _DistanceMax) :- getCoordinates( _Couple1, _Coupl2, a, b, x, y ), compute( a, b, x, y,_distance), Inf( _distance , _DistanceMax ). getCoordinates( [a | b], [x | y ], a, b1, x, Y1 ) :- getYcoordinate(b,b1), getYcoordinate(y,Y1). getYcoordinate( [y | _], y ). NextCoordinates( _CurrentPosition, [ _CurrentPosition | L ], _NextPosition ) :- ReturnFirstElementOf( L, _NextPosition). NextCoordinates( _CurrentPosition, [ _element | L ], _NextPosition ) :- NextCoordinates( _CurrentPosition, L, _NextPosition ). ReturnFirstElementOf( [ _First | _ ], _First). ReturnLastElement( [L1 | L2 ], _LastElement) :- eq( L2, []), eq( _LastElement, L1). ReturnLastElement( [L1 | L2 ], _LastElement) :- ReturnLastElement( L2, _LastElement). myRetract(B) :- B, retract(B). trajectoriesEndingByPosition( _NameTrajectory, _List, _Couple, _Object ) :- Environment( Trajectory ):: [ Trajectory = _NameTrajectory]- -has-> [ List = _List ], -obj-> [ Object = _Object ], ReturnLastElement( _List , _Couple ). trajectoriesStartingByPosition( _NameTrajectory, _List, _Couple, _Object ) :- Environment( Trajectory ):: [ Trajectory = _NameTrajectory]- -has-> [ List = _List ], -obj-> [ Object = _Object ], ReturnFirstElementOf( _List , _Couple ). AddKnowlegdeFoodAt(_Food, _FoodPosition, _Quantity ) :- Environment( Food ):: [Food = _Food] -locatedIn-> [Position = _FoodPosition], AddQuantityOfFoodAt(_Food, _FoodPosition, _Quantity),!. AddKnowlegdeFoodAt(_Food, _FoodPosition, _Quantity ) :- asserta(Environment( Food ):: [Food = _Food ] - -locatedIn-> [Position = _FoodPosition ], -exists->[Quantity = _Quantity ],[]),!. AddQuantityOfFoodAt(_Food, _FoodPosition, _Quantity) :- Environment( Food ):: [Food = _Food] - -locatedIn-> [Position = _FoodPosition], -exists->[Quantity = _OldQuantity ], _NewQuantity is _Quantity + _OldQuantity, myRetract(Environment( Food ):: [Food = _ ] - -locatedIn-> [Position = _ ], -exists->[Quantity = _ ]), asserta(Environment( Food ):: [Food = _Food ] - -locatedIn-> [Position = _FoodPosition ], -exists-> [Quantity = _NewQuantity ],[]). SuppressQuantityOfFoodAt( _Food, _FoodPosition, _Quantity):- Environment( Food ):: [Food = _Food] - -locatedIn-> [Position = _FoodPosition], -exists->[Quantity = _OldQuantity ], SupOrEqual(_OldQuantity,_Quantity), _NewQuantity is _OldQuantity - _Quantity, myRetract(Environment( Food ):: [Food = _Food ] - -locatedIn-> [Position = _FoodPosition ], -exists->[Quantity = _ ]), asserta(Environment( Food ):: [Food = _Food ] - -locatedIn-> [Position = _FoodPosition ], -exists->[Quantity = _NewQuantity ],[]). verifyNullQuantity(_Food, _FoodPosition ) :- Environment( Food ):: [Food = _Food] - -locatedIn-> [Position = _FoodPosition], -exists->[Quantity = 0 ], myRetract(Environment( Food ):: [Food = _Food ] - -locatedIn-> [Position = _FoodPosition ]). verifyNullQuantity(_Food, _FoodPosition). Animal( _Agent, Plan ):: [Animal : _Agent] <-actor-[Plan1_SatisfyHungry] -intensityOf-> [Hungry = _Level] :- getAnimalPosition( _Agent, _CurrentPosition ), Animal( _Agent, Procedure ):: [Animal : _Agent] <-actor- [PerceptionOf]- -id-> [Name = "Neigberhood"], -obj-> [Food = _Food], -locatedIn-> [Position = _FoodPosition], Animal( _Agent, Procedure ):: [Animal : _Agent] <-actor- [Trajectory]- -id-> [Name = "Final"], -locatedIn-> [CurrentPosition = _CurrentPosition], -to-> [TargetPosition = _FoodPosition], getQuantityOfFoodForAnimal( _Agent, _Food, _Level, _Quantity ), Animal( _Agent, PrimitiveAction ):: [Animal : _Agent] <-actor- [Eat] - -obj-> [Food = _Food] -numberOf-> [Quantity = _Quantity], -locatedIn-> [Position = _FoodPosition], !. Animal( _Agent, Plan ):: [Animal : _Agent] <-actor-[Plan1_SatisfyHungry] -intensityOf-> [Hungry = _Level] :- getAnimalPosition( _Agent,_CurrentPosition ), getFoodAnimalKnowledge( _Agent, _NameTrajectory), getTrajectory( _Object, _Trajectory, _Name ), ReturnFirstElementOf( _Trajectory, _CurrentPosition), memberFood( _Agent, _Object ), Animal( _Agent, Procedure ):: [Animal : _Agent] <-actor- [Trajectory]- -trajectoryId-> [Name = _NameTrajectory], -locatedIn-> [CurrentPosition = _CurrentPosition], -to-> [TargetPosition = _NextPosition], moveToEndOfTrajectFood( _Agent, _NameTrajectory, _Level ). moveToEndOfTrajectFood( _Agent, _NameTrajectory, _Level ) :- getAnimalPosition( _Agent, _CurrentPosition ), Animal( _Agent, Procedure ):: [Animal : _Agent] <-actor- [PerceptionOf]- -id-> [Name = "Neigberhood"], -obj-> [Food = _Food], -locatedIn-> [Position = _FoodPosition], Animal( _Agent, Procedure ):: [Animal : _Agent] <-actor- [Trajectory]- -id-> [Name = "Final"], -locatedIn-> [CurrentPosition = _CurrentPosition], -to-> [TargetPosition = _FoodPosition], getQuantityOfFoodForAnimal( _Agent, _Food, _Level, _Quantity ), Animal( _Agent, PrimitiveAction ):: [Animal : _Agent] <-actor- [Eat] - -obj-> [Food = _Food] -numberOf-> [Quantity = _Quantity], -locatedIn-> [Position = _FoodPosition], !. moveToEndOfTrajectFood( _Agent, _NameTrajectory, _Level ) :- getAnimalPosition( _Agent, _CurrentPosition ), Animal( _Agent, Procedure ) ::[Animal : _Agent] <-actor- [Trajectory]- -trajectoryId-> [Name = _NameTrajectory], -locatedIn-> [CurrentPosition = _CurrentPosition], -to-> [TargetPosition = _NextPosition], moveToEndOfTrajectFood( _Agent, _NameTrajectory, _Level ). Animal( _Agent, Plan ):: [Animal : _Agent] <-actor-[Plan2_SatisfyHungry] -intensityOf-> [Hungry = _Level] :- getAnimalPosition( _Agent, _CurrentPosition ), print("I am now in "), print (_CurrentPosition), Animal( _Agent, Procedure ):: [Animal : _Agent] <-actor- [PerceptionOf]- -id-> [Name = "Neigberhood"], -obj-> [Agent = _OtherAgent], -locatedIn-> [Position = _OtherAgentPosition], Animal( _Agent, Procedure ):: [Animal : _Agent] <-actor- [Trajectory]- -id-> [Name = "Final"], -locatedIn-> [CurrentPosition = _CurrentPosition], -to-> [TargetPosition = _OtherAgentPosition], AskAnimalFriendForFood( _Agent,_OtherAgent), Animal( _Agent, Plan ):: [Animal : _Agent] <-actor- [Plan1_SatisfyHungry] -intensityOf-> [Hungry = _Level],!. Animal( _Agent, Plan ):: [Animal : _Agent] <-actor- [Plan2_SatisfyHungry] -intensityOf-> [Hungry = _Level] :- getFriendAnimalKnowledge( _Agent, _NameTrajectory, _NameAgent, _TypeAgent), getTrajectory( _Object, _ListTrajectory, _NameTrajectory ), getAnimalPosition( _Agent, _CurrentPosition ), ReturnFirstElementOf( _ListTrajectory, _CurrentPosition), Animal( _Agent, Procedure ):: [Animal : _Agent] <-actor- [Trajectory]- -trajectoryId-> [Name = _NameTrajectory], -locatedIn-> [CurrentPosition = _CurrentPosition], -to-> [TargetPosition = _NextPosition], moveToEndOfTrajectAgent( _Agent, _NameTrajectory, _Level ). moveToEndOfTrajectAgent( _Agent, _NameTrajectory, _Level ) :- getAnimalPosition( _Agent, _CurrentPosition ), Animal( _Agent, Procedure ):: [Animal : _Agent] <-actor- [PerceptionOf]- -id-> [Name = "Neigberhood"], -obj-> [Agent = _OtherAgent], -locatedIn-> [Position = _AgentPosition], Animal( _Agent, Procedure ):: [Animal : _Agent] <-actor- [Trajectory]- -id-> [Name = "Final"], -locatedIn-> [CurrentPosition = _CurrentPosition], -to-> [TargetPosition = _AgentPosition], AskAnimalFriendForFood( _Agent,_OtherAgent), Animal( _Agent, Plan ):: [Animal : _Agent] <-actor- [Plan1_SatisfyHungry] -intensityOf-> [Hungry = _Level],!. moveToEndOfTrajectAgent( _Agent, _NameTrajectory, _Level ) :- getAnimalPosition( _Agent, _CurrentPosition ), Animal( _Agent, Procedure ) ::[Animal : _Agent] <-actor- [Trajectory]- -trajectoryId-> [Name = _NameTrajectory], -locatedIn-> [CurrentPosition = _CurrentPosition], -to-> [TargetPosition = _NextPosition], moveToEndOfTrajectAgent( _Agent, _NameTrajectory, _Level ). Animal( _Agent, Plan ):: [Animal : _Agent] <-actor- [Plan2_SatisfyHungry] -intensityOf-> [Hungry = _Level] :- getAnimalPosition( _Agent, _CurrentPosition ), generateAgentTrajectoryFromKnowledge2( _Agent, "Agent", _ListTrajectory ), Animal( _Agent, Procedure ):: [Animal : _Agent] <-actor- [Trajectory]- -follow-> [List = _ListTrajectory], -locatedIn-> [CurrentPosition = _CurrentPosition], -to-> [TargetPosition = _NextPosition], moveToEndOfGeneratedTrajectAgent( _Agent, _ListTrajectory, _Level ). moveToEndOfGeneratedTrajectAgent( _Agent, _ListTrajectory, _Level ) :- getAnimalPosition( _Agent, _CurrentPosition ), Animal( _Agent, Procedure ):: [Animal : _Agent] <-actor- [PerceptionOf]- -id-> [Name = "Neigberhood"], -obj-> [Agent = _OtherAgent], -locatedIn-> [Position = _AgentPosition], Animal( _Agent, Procedure ):: [Animal : _Agent] <-actor- [Trajectory]- -id-> [Name = "Final"], -locatedIn-> [CurrentPosition = _CurrentPosition], -to-> [TargetPosition = _AgentPosition], AskAnimalFriendForFood( _Agent,_OtherAgent), Animal( _Agent, Plan ):: [Animal : _Agent] <-actor- [Plan1_SatisfyHungry] -intensityOf-> [Hungry = _Level],!. moveToEndOfGeneratedTrajectAgent( _Agent, _ListTrajectory, _Level ) :- getAnimalPosition( _Agent, _CurrentPosition ), Animal( _Agent, Procedure ) ::[Animal : _Agent] <-actor- [Trajectory]- -follow-> [List = _ListTrajectory], -locatedIn-> [CurrentPosition = _CurrentPosition], -to-> [TargetPosition = _NextPosition], moveToEndOfGeneratedTrajectAgent( _Agent, _ListTrajectory, _Level ). Bird( Arthur, Object, Knowledge ):: [Type = Food ] - -locatedIn-> [Position = [24,6]], -follow->[Trajectory = "Food2"]. Bird( Arthur, Knowledge ):: [Bird : Arthur] -locatedIn-> [CurrentPosition = [16,7]]. Bird( Arthur, Perception ):: [Bird : Arthur] -has-> [Perception = 3]. Bird( Arthur, Knowledge ):: [Bird : Arthur] -has-> [Hungry] - -intensityOf-> [Intensity = "very much"] -quantityOfFood-> [Food = "cheese"] -quantityOf-> [Quantity = 10]. Bird( Arthur, Knowledge ):: [Bird : Arthur] -has-> [Hungry] - -intensityOf-> [Intensity = "normal"] -quantityOfFood-> [Food = "cheese"] -quantityOf-> [Quantity = 5]. Bird( Arthur, Knowledge ):: [Bird : Arthur] -has-> [Hungry] - -intensityOf-> [Intensity = "few"] -quantityOfFood-> [Food = "cheese"] -quantityOf-> [Quantity = 2]. Bird( Arthur, Knowledge ):: [Bird : Arthur] -has-> [Hungry] - -intensityOf-> [Intensity = "very much"] -quantityOfFood-> [Food = "Verre_De_Terre"] -quantityOf-> [Quantity = 30]. Bird( Arthur, Knowledge ):: [Bird : Arthur] -has-> [Hungry] - -intensityOf-> [Intensity = "normal"] -quantityOfFood-> [Food = "Verre_De_Terre"] -quantityOf-> [Quantity = 20]. Bird( Arthur, Knowledge ):: [Bird : Arthur] -has-> [Hungry] - -intensityOf-> [Intensity = "few"] -quantityOfFood-> [Food = "Verre_De_Terre"] -quantityOf-> [Quantity = 10]. AskAnimalFriendForFood( _Agent,Arthur) :- print("\nI will ask my friend for food"), agentSend_Wait("John",Arthur,"Bird( Arthur, Food, Knowledge ):: [Type = Food ] -locatedIn-> [Position=_FoodPosition].",_FoodPosition), agentSend_Wait("John",Arthur,"Bird( Arthur, Food, Knowledge ):: [Type = Food ]-follow->[Trajectory = _NameTrajectory].",_NameTrajectory), getTrajectory( _Object, _ListTrajectory, _NameTrajectory ), memberFood( _Agent, _Object ), fullfilFoodAnimalKnowledge( _Agent, _FoodPosition, _NameTrajectory), print("I am going to this food "),!. send(X,Y,_res):- _res is X:send(X,Y). print(V):-"agent.amineJade.ppcgAgent.PPCGAmineJadeAgent":print(V,"John"). agentSend_Wait(X,Y,Z,_res):- _res is "agent.amineJade.ppcgAgent.PPCGAmineJadeAgent":sendAndWait(X,Y,Z).