OverviewFilesCommitsIssuesDocsReleasesPeers

opencog-rocca commits / 7dd8231

rooca agent with flatworld experiment
7dd8231223834dea993c0cfbf9fcdf565a84519f
by Hedra <tanksh24@gmail.com> · 2022-01-10T17:57:43.000Z

Changed files (2) +41 -25

examples/flatworld.py +33 -17
……@@ -7,7 +7,7 @@ from opencog.type_constructors import *
77from opencog.utilities import set_default_atomspace
88
99from rocca.agents import OpencogAgent
10from rocca.agents.utils import agent_log
10from rocca.agents.utils import TRUE_TV, agent_log
1111from rocca.envs.malmo_demo.flatworld_env import *
1212from rocca.envs.wrappers import MalmoWrapper
1313from opencog.ure import ure_logger
……@@ -46,6 +46,33 @@ class AbstractMalmoWrapper(MalmoWrapper):
4646 print("Error sending command:", e)
4747 return obs_list, mk_evaluation("Reward", reward), done
4848
49class FlatworldAgent(OpencogAgent):
50 def __init__(self, env, atomspace):
51 set_default_atomspace(atomspace)
52
53 # Create Action Space. The set of allowed actions an agent can take.
54 # TODO take care of action parameters.
55 action_space = {
56 ExecutionLink(SchemaNode("go_to_the_key")),
57 ExecutionLink(SchemaNode("go_to_the_house")),
58 ExecutionLink(SchemaNode("go_to_the_diamonds")),
59 }
60 # Create Goal
61 pgoal = EvaluationLink(PredicateNode("Reward"), NumberNode("1"))
62 ngoal = EvaluationLink(PredicateNode("Reward"), NumberNode("0"))
63
64 # Call super ctor
65 OpencogAgent.__init__(self, env, atomspace, action_space, pgoal, ngoal)
66
67 # Overwrite some OpencogAgent parameters
68 self.polyaction_mining = False
69 self.monoaction_general_succeedent_mining = True
70 self.temporal_deduction = True
71 self.true_cogscm = True
72 self.empty_vardecl_cogscm = True
73 # Todo: restart the environment to get an initial reward
74 self.initial_reward = EvaluationLink(PredicateNode("Reward"), NumberNode("0"))
75
4976if __name__ == "__main__":
5077 atomspace = AtomSpace()
5178 set_default_atomspace(atomspace)
……@@ -53,30 +80,19 @@ if __name__ == "__main__":
5380 # Init loggers
5481 log.set_level("info")
5582 # log.set_sync(True)
56 agent_log.set_level("debug")
83 agent_log.set_level("fine")
5784 # agent_log.set_sync(True)
5885 ure_logger().set_level("info")
5986
6087 #
6188 wrapped_env = AbstractMalmoWrapper(missionXML=missionXML, validate=True)
6289
63 # Create Goal
64 pgoal = EvaluationLink(PredicateNode("Reward"), NumberNode("1"))
65 ngoal = EvaluationLink(PredicateNode("Reward"), NumberNode("0"))
66
67 # Create Action Space. The set of allowed actions an agent can take.
68 # TODO take care of action parameters.
69 action_space = {
70 ExecutionLink(SchemaNode("go_to_the_key")),
71 ExecutionLink(SchemaNode("go_to_the_house")),
72 ExecutionLink(SchemaNode("go_to_the_diamonds")),
73 }
74
75 cog_agent = OpencogAgent(wrapped_env, atomspace, action_space, pgoal, ngoal)
76
90 cog_agent = FlatworldAgent(wrapped_env, atomspace)
91 reward_t0 = cog_agent.record(cog_agent.initial_reward, 0, TRUE_TV)
92 agent_log.info("Initial reward: {}".format(reward_t0))
7793
7894 # Training/learning loop
79 lt_iterations = 3 # Number of learning-training iterations
95 lt_iterations = 2 # Number of learning-training iterations
8096 lt_period = 50 # Duration of a learning-training iteration
8197 for i in range(lt_iterations):
8298 cog_agent.reset_action_counter()
rocca/envs/malmo_demo/flatworld_env.py +8 -8
……@@ -50,12 +50,13 @@ def build_house(x, y, z, width, length, height, blocktype):
5050 for j in range(width):
5151 genstring = genstring + drawBlock(x_front, y_cur, z_cur, "glass") + "\n"
5252 genstring = genstring + drawBlock(x_back, y_cur, z_cur, "diamond_block") + "\n"
53 genstring = genstring + drawBlock(x_back-1, y_cur, z_cur, blocktype) + "\n"
5354 z_cur = z_cur + 1 if z_cur >= 0 else z_cur-1
5455
5556 for k in range(length):
5657 if k % 2 == 0:
57 genstring = genstring + drawBlock(x_cur, y_cur, z_left, "air") + "\n"
58 genstring = genstring + drawBlock(x_cur, y_cur, z_right, "air") + "\n"
58 genstring = genstring + drawBlock(x_cur, y_cur, z_left, "glass") + "\n"
59 genstring = genstring + drawBlock(x_cur, y_cur, z_right, "glass") + "\n"
5960 else:
6061 genstring = genstring + drawBlock(x_cur, y_cur, z_left, blocktype) + "\n"
6162 genstring = genstring + drawBlock(x_cur, y_cur, z_right, blocktype) + "\n"
……@@ -153,7 +154,7 @@ def go_to_the_key(agent):
153154 action_complete = stop_condition(agent, 'tripwire_hook')
154155 if action_complete:
155156 agent.sendCommand("hotbar.2 1")
156 observation = {"agent_status":["agent_holds_the_key"]}
157 observation = {"observation":["holds_key"]}
157158 holds_key = True
158159 else:
159160 observation = []
……@@ -169,13 +170,13 @@ def go_to_the_house(agent):
169170 agent.sendCommand("move 1")
170171 action_complete = stop_condition(agent, 'dark_oak_door')
171172 if action_complete:
172 observation = {"agent_status":[]}
173 observation = {"observation":[]}
173174 if holds_key:
174175 agent.sendCommand("tp {} {} {}".format(door_x, door_y, door_z))
175 observation["agent_status"].append("agent_inside_the_house")
176 observation["agent_status"].append("agent_holds_the_key")
176 observation["observation"].append("inside_the_house")
177 observation["observation"].append("holds_key")
177178 else:
178 observation["agent_status"].append("agent_nextto_closed_door")
179 observation["observation"].append("nextto_closed_door")
179180
180181 else:
181182 observation = []
……@@ -218,7 +219,6 @@ missionXML = '''
218219 <FlatWorldGenerator generatorString="3;7,220*1,5*3,2;1;biome_1"/>
219220 <DrawingDecorator>
220221 '''+build_house(start_x, start_y, start_z, width, length, height,"planks")+'''
221 '''+drawBlock(diamond_x, diamond_y, diamond_z, "diamond_block")+'''
222222 '''+drawLine(door_x, door_y-1, door_z, door_x, door_y, door_z, "dark_oak_door", "EAST")+'''
223223 '''+drawBlock(key_x, key_y-1, key_z, "command_block")+'''
224224 '''+drawBlock(key_x, key_y, key_z, "tripwire_hook")+'''