/* Ċ Ġ* ĠCopyright Ġ 2 0 2 0 ĠSh ub ham ĠP anch al Ċ Ġ* Ċ Ġ* ĠLicensed Ġunder Ġthe ĠApache ĠLicense , ĠVersion Ġ 2 . 0 Ġ( the Ġ" License "); Ċ Ġ* Ġyou Ġmay Ġnot Ġuse Ġthis Ġfile Ġexcept Ġin Ġcompliance Ġwith Ġthe ĠLicense . Ċ Ġ* ĠYou Ġmay Ġobtain Ġa Ġcopy Ġof Ġthe ĠLicense Ġat Ċ Ġ* Ċ Ġ* Ġhttp :// www . apache . org / licenses / LICENSE - 2 . 0 Ċ Ġ* Ċ Ġ* ĠUnless Ġrequired Ġby Ġapplicable Ġlaw Ġor Ġagreed Ġto Ġin Ġwriting , Ġsoftware Ċ Ġ* Ġdistributed Ġunder Ġthe ĠLicense Ġis Ġdistributed Ġon Ġan Ġ" AS ĠIS " ĠBASIS , Ċ Ġ* ĠWITHOUT ĠWARRANTIES ĠOR ĠCONDITIONS ĠOF ĠANY ĠKIND , Ġeither Ġexpress Ġor Ġimplied . Ċ Ġ* ĠSee Ġthe ĠLicense Ġfor Ġthe Ġspecific Ġlanguage Ġgoverning Ġpermissions Ġand Ċ Ġ* Ġlimitations Ġunder Ġthe ĠLicense . Ċ Ġ*/ ĊĊ Ċ import Ġcom . ml . projects . frozen lake . matrix . Matrix Ċ import Ġmatrix . Matrix Ops Ċ import Ġkotlin . random . Random ĊĊ Ċ // ĠS FFF ĠĠĠĠĠĠ Ġ( S : Ġstarting Ġpoint , Ġsafe ) Ċ // ĠF HF H ĠĠĠĠĠĠ Ġ( F : Ġfrozen Ġsurface , Ġsafe ) Ċ // ĠF FF H ĠĠĠĠĠĠ Ġ( H : Ġhole , Ġfall Ġto Ġyour Ġdo om ) Ċ // ĠH FF G ĠĠĠĠĠĠ Ġ( G : Ġgoal , Ġwhere Ġthe Ġfr is bee Ġis Ġlocated ) Ċ Ċ // Ġactions ( Ġindex Ġ, Ġdirection Ġ) Ġ: Ġ( Ġ 0 Ġ, Ġleft Ġ) Ġ, Ġ( Ġ 1 Ġ, Ġup Ġ) Ġ, Ġ( Ġ 2 Ġ, Ġright Ġ) Ġ, Ġ( Ġ 3 Ġ, Ġdown Ġ) Ċ Ċ // ĠClass Ġfor Ġthe ĠF rozen ĠLake ĠEn vi ro ment Ċ class ĠF rozen Lake Env () Ġ{ ĊĊĠĠĠ Ġcompanion Ġobject Ġ{ ĊĠĠĠĠĠĠĠ Ġval ĠACTION _ LEFT Ġ= Ġ 0 ĊĠĠĠĠĠĠĠ Ġval ĠACTION _ UP Ġ= Ġ 1 ĊĠĠĠĠĠĠĠ Ġval ĠACTION _ RIGHT Ġ= Ġ 2 ĊĠĠĠĠĠĠĠ Ġval ĠACTION _ DOWN Ġ= Ġ 3 ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġlateinit Ġvar Ġenv Matrix Ġ: ĠMatrix ĊĊĠĠĠ Ġ// ĠInitial Ġposition Ġof Ġthe Ġagent Ġ( Ġthe ĠS Ġstate Ġ). ĊĠĠĠ Ġvar Ġagent Pos X Ġ= Ġ 0 ĊĠĠĠ Ġvar Ġagent Pos Y Ġ= Ġ 0 ĊĠĠĠ Ġ// ĠNumber Ġof Ġactions Ġand Ġstates ĊĠĠĠ Ġvar Ġaction Space N Ġ: ĠInt Ġ= Ġ 4 ĊĠĠĠ Ġvar Ġobservation Space N Ġ: ĠInt Ġ= Ġ 1 6 ĊĊĠĠĠ Ġinit Ġ{ ĊĠĠĠĠĠĠĠ Ġinit Env Matrix () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ// ĠPerform Ġan Ġaction Ġin Ġthe Ġenvironment . ĊĠĠĠ Ġfun Ġstep ( Ġaction Ġ: ĠInt Ġ) Ġ: ĠEnv Output Ġ{ ĊĠĠĠĠĠĠĠ Ġvar Ġagent New Pos X Ġ: ĠInt Ġ= Ġagent Pos X ĊĠĠĠĠĠĠĠ Ġvar Ġagent New Pos Y Ġ: ĠInt Ġ= Ġagent Pos Y ĊĠĠĠĠĠĠĠ Ġ// ĠUpdate Ġthe Ġagent 's Ġposition Ġfor Ġsubtract ing / adding Ġa Ġ 1 Ġto Ġit 's Ġexisting Ġposition . ĊĠĠĠĠĠĠĠ Ġwhen ( Ġaction Ġ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠACTION _ LEFT Ġ-> Ġagent New Pos X Ġ= Ġagent Pos X Ġ- Ġ 1 ĊĠĠĠĠĠĠĠĠĠĠĠ ĠACTION _ UP Ġ-> Ġagent New Pos Y Ġ= Ġagent Pos Y Ġ- Ġ 1 ĊĠĠĠĠĠĠĠĠĠĠĠ ĠACTION _ RIGHT Ġ-> Ġagent New Pos X Ġ= Ġagent Pos X Ġ+ Ġ 1 ĊĠĠĠĠĠĠĠĠĠĠĠ ĠACTION _ DOWN Ġ-> Ġagent New Pos Y Ġ= Ġagent Pos Y Ġ+ Ġ 1 ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ// ĠCheck Ġif Ġthe Ġupdated Ġpositions Ġare Ġvalid . ĊĠĠĠĠĠĠĠ Ġif Ġ( Ġagent New Pos X Ġin Ġ 0 .. 3 Ġ&& Ġagent New Pos Y Ġin Ġ 0 .. 3 Ġ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġagent Pos X Ġ= Ġagent New Pos X ĊĠĠĠĠĠĠĠĠĠĠĠ Ġagent Pos Y Ġ= Ġagent New Pos Y ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġreward Ġ= Ġget Reward ( Ġagent Pos X Ġ, Ġagent Pos Y Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĠEnv Output ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠgetState From Pos ( Ġagent Pos X Ġ, Ġagent Pos Y Ġ) Ġ, ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreward Ġ, ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠA Ġreward Ġof Ġ- 1 Ġmeans Ġthat Ġwe Ġf ell Ġinto Ġthe Ġhole ! ĠThe Ġepisode Ġhas Ġended Ġhere Ġ... ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreward Ġ== Ġ- 1 . 0 ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĠEnv Output ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠgetState From Pos ( Ġagent Pos X Ġ, Ġagent Pos Y Ġ) Ġ, ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ 0 . 0 Ġ, ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfalse ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġclass ĠEnv Output ( Ġvar ĠnewState Ġ: ĠInt Ġ, Ġ Ġvar Ġreward Ġ: ĠDouble Ġ, Ġvar Ġis Terminated Ġ: ĠBoolean Ġ) ĊĊĠĠĠ Ġ// ĠGet Ġa Ġrandom Ġaction Ġ( ĠJust Ġas Ġenv . action Space . sample () Ġin ĠPython Ġ) ĊĠĠĠ Ġfun Ġaction Space Sample () Ġ: ĠInt Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn ĠRandom . nextInt ( Ġaction Space N Ġ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ// ĠReset Ġthe Ġpositions Ġof Ġthe Ġagent Ġ( ĠJust Ġas Ġenv . reset () Ġin ĠPython Ġ) ĊĠĠĠ Ġfun Ġreset () Ġ: ĠInt Ġ{ ĊĠĠĠĠĠĠĠ Ġagent Pos Y Ġ= Ġ 0 ĊĠĠĠĠĠĠĠ Ġagent Pos X Ġ= Ġ 0 ĊĠĠĠĠĠĠĠ Ġreturn ĠgetState From Pos ( Ġagent Pos X Ġ, Ġagent Pos Y Ġ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ// ĠGet Ġthe Ġindex Ġfor Ġthe Ġcurrent Ġstate Ġusing Ġthe Ġagent 's Ġposition . ĊĠĠĠ Ġprivate Ġfun ĠgetState From Pos ( Ġagent Pos X Ġ: ĠInt Ġ, Ġagent Pos Y Ġ: ĠInt Ġ) Ġ: ĠInt Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġagent Pos X Ġ+ Ġ( Ġ 4 Ġ* Ġagent Pos Y Ġ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ// ĠGet Ġa Ġreward Ġfor Ġthe Ġgiven Ġposition . ĊĠĠĠ Ġprivate Ġfun Ġget Reward ( Ġagent Pos X Ġ: ĠInt Ġ, Ġagent Pos Y Ġ: ĠInt Ġ) Ġ: ĠDouble Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġenv Matrix . get ( Ġagent Pos X Ġ, Ġagent Pos Y Ġ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġinit Env Matrix () Ġ{ ĊĠĠĠĠĠĠĠ Ġenv Matrix Ġ= ĠMatrix Ops . zeros Like ( Ġ 4 Ġ, Ġ 4 Ġ) ĊĠĠĠĠĠĠĠ Ġ// ĠSet Ġ- 1 Ġat Ġthe Ġpositions Ġof Ġthe Ġ" ho les " ĊĠĠĠĠĠĠĠ Ġenv Matrix . set ( Ġ 1 Ġ, Ġ 1 Ġ Ġ, Ġ- 1 . 0 Ġ) ĊĠĠĠĠĠĠĠ Ġenv Matrix . set ( Ġ 3 Ġ, Ġ 1 Ġ Ġ, Ġ- 1 . 0 Ġ) ĊĠĠĠĠĠĠĠ Ġenv Matrix . set ( Ġ 3 Ġ, Ġ 2 Ġ, Ġ- 1 . 0 Ġ) ĊĠĠĠĠĠĠĠ Ġenv Matrix . set ( Ġ 0 Ġ, Ġ 3 Ġ, Ġ- 1 . 0 Ġ) ĊĠĠĠĠĠĠĠ Ġ// ĠSet Ġ 1 Ġat Ġthe Ġposition Ġof Ġthe Ġgoal ĊĠĠĠĠĠĠĠ Ġenv Matrix . set ( Ġ 3 Ġ, Ġ 3 Ġ, Ġ 1 . 0 Ġ) ĊĠĠĠ Ġ} Ċ Ċ } Ċ