docs/si/rl/game.html
9importmultiprocessing10importmultiprocessing.connection1112importcv213importgym14importnumpyasnp
මෙයOpenAI ජිම් ක්රීඩා පරිසරය සඳහා ඔතා. අපි මෙහි කරුණු කිහිපයක් කරන්නෙමු:
නිරීක්ෂණයයනු ප්රමාණයේ ආතන්ය (4, 84, 84). එය රාමු හතරක් (ක්රීඩා තිරයේ රූප) පළමු අක්ෂය මත එකමත. එනම්, එක් එක් නාලිකාව රාමුවක් වේ.
17classGame:
38def\_\_init\_\_(self,seed:int):
පරිසරයනිර්මාණය කරන්න
40self.env=gym.make('BreakoutNoFrameskip-v4')41self.env.seed(seed)
රාමු4 ක් සඳහා ටෙන්සර්
44self.obs\_4=np.zeros((4,84,84))
අවසානරාමු 2 හි උපරිමය තබා ගැනීමට බෆරය
47self.obs\_2\_max=np.zeros((2,84,84))
කථාංගවිපාක පිළිබඳ වාර්තාවක් තබා ගන්න
50self.rewards=[]
සහජීවිත ගණන
52self.lives=0
action සඳහා ක්රියාත්මක 4 කාලය පියවර සහ ක tuple ආපසු (නිරීක්ෂණ, විපාකය, සිදු, episode_info).
observation : රාමු 4 ක් (අවසාන ක්රියා 3 සඳහා මෙම රාමුව සහ රාමු)reward : ක්රියාව ක්රියාත්මක කරන ලද අතර සම්පූර්ණ විපාකයdone : කථාංගය අවසන් වේවා (ජීවිතයක් අහිමි විය)episode_info : සම්පූර්ණ නම් කථාංග තොරතුරු54defstep(self,action):
66reward=0.67done=None
පියවර4 ක් සඳහා ධාවනය කරන්න
70foriinrange(4):
OpenAIජිම්නේසියම පරිසරය තුළ ක්රියාව ක්රියාත්මක
72obs,r,done,info=self.env.step(action)7374ifi\>=2:75self.obs\_2\_max[i%2]=self.\_process\_obs(obs)7677reward+=r
ජීවිතගණන ඉතිරි කර ගන්න
80lives=self.env.unwrapped.ale.lives()
ජීවිතයක්නැති වුවහොත් නැවත සකසන්න
82iflives\<self.lives:83done=True84break
එක්එක් පියවර සඳහා ත්යාග පවත්වා ගන්න
87self.rewards.append(reward)8889ifdone:
අවසන්නම්, කථාංගය අවසන් නම් කථාංග තොරතුරු සකසන්න, සහ නැවත සකසන්න
91episode\_info={"reward":sum(self.rewards),"length":len(self.rewards)}92self.reset()93else:94episode\_info=None
අවසානරාමු දෙකේ උපරිම ලබා ගන්න
97obs=self.obs\_2\_max.max(axis=0)
රාමු4 ක තොගයට එය තල්ලු කරන්න
100self.obs\_4=np.roll(self.obs\_4,shift=-1,axis=0)101self.obs\_4[-1]=obs102103returnself.obs\_4,reward,done,episode\_info
කථාංගතොරතුරු සහ රාමු 4 ක් පිරිසිදු කරන්න
105defreset(self):
OpenAIGym පරිසරය
112obs=self.env.reset()
හැඹිලිනැවත සකසන්න
115obs=self.\_process\_obs(obs)116foriinrange(4):117self.obs\_4[i]=obs118self.rewards=[]119120self.lives=self.env.unwrapped.ale.lives()121122returnself.obs\_4
ක්රීඩාරාමු අළු බවට පරිවර්තනය කර 84x84 බවට නැවත සකස් කරන්න
124@staticmethod125def\_process\_obs(obs):
130obs=cv2.cvtColor(obs,cv2.COLOR\_RGB2GRAY)131obs=cv2.resize(obs,(84,84),interpolation=cv2.INTER\_AREA)132returnobs
සෑමසේවක ක්රියාවලියක්ම මෙම ක්රමය ක්රියාත්මක කරයි
135defworker\_process(remote:multiprocessing.connection.Connection,seed:int):
ක්රීඩාවසාදන්න
143game=Game(seed)
සම්බන්ධතාවයෙන්උපදෙස් බලා ඒවා ක්රියාත්මක කරන්න
146whileTrue:147cmd,data=remote.recv()148ifcmd=="step":149remote.send(game.step(data))150elifcmd=="reset":151remote.send(game.reset())152elifcmd=="close":153remote.close()154break155else:156raiseNotImplementedError
නවසේවකයෙකු නිර්මාණය කර එය වෙනම ක්රියාවලියක් තුළ ක්රියාත්මක කරයි.
159classWorker:
164def\_\_init\_\_(self,seed):165self.child,parent=multiprocessing.Pipe()166self.process=multiprocessing.Process(target=worker\_process,args=(parent,seed))167self.process.start()