From a8964e1c8a54e74c439a8907757ec8792aca14d2 Mon Sep 17 00:00:00 2001 From: "Anmulwar, Sweta V (PG/R - Elec Electronic Eng)" <sa02405@surrey.ac.uk> Date: Sat, 18 Mar 2023 18:34:58 +0000 Subject: [PATCH] change reward function --- .vs/QLearningApp/v16/.suo | Bin 85504 -> 94208 bytes .../MachineLearning/Models/QLearning.cs | 17 +++++++---- .../MachineLearning/Models/QLearningStats.cs | 8 ++++-- QLearningApp/RLsync.cs | 27 +++++++++++++----- QLearningApp/bin/Debug/QLearningApp.exe | Bin 11776 -> 11776 bytes QLearningApp/bin/Debug/QLearningApp.pdb | Bin 42496 -> 44544 bytes ...QLearningApp.csprojAssemblyReference.cache | Bin 424 -> 1887 bytes QLearningApp/obj/Debug/QLearningApp.exe | Bin 11776 -> 11776 bytes QLearningApp/obj/Debug/QLearningApp.pdb | Bin 42496 -> 44544 bytes 9 files changed, 37 insertions(+), 15 deletions(-) diff --git a/.vs/QLearningApp/v16/.suo b/.vs/QLearningApp/v16/.suo index bc59d5026d25c5db7010cc3e41ab3f114900bd4d..c11f9588c5155375b9b6326e09a8499ec865b4e8 100644 GIT binary patch delta 4293 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�}>c;FsVOcom!mB5U@6GoT+h!2mc55}Z9%v#5VyAe`CntYF$tKk5Bg z7vZ_mm7uwNh+inAEqvo_TEtli-7$%aowpd>9jJ)gss@N_bD%tenn(qn26lJk!q@d0 zHa==oz>#=g36<bmqPD)6iu0FV4;K%TRPPn|&2X>AuQ-e+PQ%-h#0N^Ln*ZHQX-KA- zQ%oj9p*J0huMnJ7Q@Gti_M_IjGIv`klgC&{N0VJ-qbWqkc~2EBXGd&S9#uhVmGJq4 z%+{95-8L%a`VcbnzWEfwSC!E+dL_^zoPp0Nqa51c?ct+*9lu!)!%Jl}NJsqL=I|X0 zsOP9{OqQhxjxp1jwE_KxQoieS1!-kE=rQ$-gw59Qi<Pulbdu(o0cKX~>aL=0nv(wd zmc6bYeD?I-^~={p<gW|0;S$^;HL%>K$p@-Qt!b4SaYfES7`EZ6mZ#@qW(s9HO$MFO zWXSU!D9sZ#CnFF+lk#w)m~y>)xGuC6OPx)}{Fe^B=VFqOliO{*xa0aEYi#n~yjeAG zSDNbn)LooXx!L@zmHzSV@<CW2A8<<!*}m&+;6gTNqZsi|$6KP^fdsIf!i5+9*U%~Y zN}(ftA$G(7_a+SPMF_YM0!aV=PmZ4W<&N$UA+cOU@Z)T#+Dt8;yL3u+tbU}t!aQwk vdPnD9Km5(rHw<qkHSUl9^R0iX3O4NAcj&OC#&eZVlM|vRMlyTr0pq^_(osQw delta 3039 zcmeH}eQZ-z6u|F!ef`*0OUpXejj<2LMkn2D*KTZMj&@@U=#X`wA&MgdCRrHm+&V?J ztc_w&gJ^pU*H1nQf+!l<Thc^gn9)DbKSUE_&_tR48(m~m2Do}|JIWM4@IU|XzWm-h z@7(jwefOSoKSJZ`(5vd_?Kp8U&0=Is&lpn?Gx2zw9t?;jr@dDJTQ!A-!|T7f^T~Bz zK?!L?ZMa*r8$38A1z{HsXoG4qS?h3GRS;Z22IL`LH2V~?D7VqOOw1#wHD)IA2put> z$R-L11CdW;5r>GEh{Z%Ev5;6q<PyTC_*K)a{42>e#=`4!ti7bN&#Hx)gXBuWNw|pR zgwW#!T^?)>d-vi{niY>_n{|Gw5l(R|twtB5mk<$=dJMgn%2tT(yM>OrFU{$`D%E{$ zvFUa)s3Ho93_>0DF3l4C5)FzX`t>$(BJ9odh>jG`sVti#-$Ak%oTbDvB8_Mul5XPh zYLcyCZ+1j4%cUe^uWZh`URg&9F(Mv%K7s1&ewYb&?zI4gNg_la1?pKDE$KGYEzo0I z`YE+rDAAO*Bi#GKzyBg)Xu>9=12S>I7=-yaMRyYp%nRy`qH+2kQ6h$burMSn=$^0u zqcUX*O7N^QVBV_IJxX?oV2o$CqOIDDZi`iZg_PK1amk`aIcC`i5(8x>>ub1Gds$?5 zBsU<M$yKRfEk3sBlQa-HS48k5ekee@l!k%)4YEj=lt!7%|3Z@M=c;hBXoI|Ru0{zg zUI%GRL`Q@=^)XHsZ;)$$rwJ@+(~0>cGGLC~l0DKT749y%ODE<?&F?Eq&f|xYLzyhq z18Upd=)P|;ZgJ%+q5DD*u}-Q_l6e_UTd%73lk~kZU3NF<a!4#BZZr~D7SflKW>mPR zf~_6)j9Ob|^-xP^Pk+}iu8mi6<AY$ttL-kmqsr!VCTpHd)fm@!Te~{@eBHk7ZGHYN zJzdz=VN0*EIUPw$Y>kid=VZ`ET~egOEp_?Cr#RTIS3(^j7_qIE<Q3F(>Zg=IMVl;( zxz1nnLvbPola=d4e=*?P7j;V`t9L;nUV9@o=VURxQXk`F%|3p?1y(-pf;|3`AC}^{ zDJxnhMe>_&HM)9;)NiVNk^EYSmkE(>uM)2j2MIBfhlwLZlsHNpBVH$FPIvBrXoECz z&pG%{WXaLVQVCAtlrNr<NQUI(Q{n^7e~}WJM(W0BjdCTdk^d|{d-g%}K)M)vv2y?8 z*gqv<<2JYAerQY`wM)_Cnn>kGe;r>vP3TlXy`_-b(!mDD!`_uSA{=iJBD>!t-XcyB zIe6N#5NP0?V&J2Ziji}pdhEDVhMRv{tel+yh@LXvq#OD2JqsMiGd~<Ds9;-JKRK!( z#0Dsyg4u$DKbD%l3(Q2DVxO7b$z_K>o)`ZRut>_w=wm+CO>Acs_;7V*W(8|!1N3f9 zXah9gx|Op(ma7-`urAigZkTUkJIVVt()OTzBAXZ1gC_4@QUS5rPCM7!tDM;t_tY31 zb^ikR_>>zf@6W|ge=ckhE7KtJ(8kunnrTaO(cQtySz|(WlH{Ok6*(&>D^cemNx1e9 zO{|vgEo@|ZOwzWH(8Qeh{!|(6zHIz|c>Zp9>a+fA9Lw;7%PX<>+8REj28U92O#}GM zW!o*<N}xiBue|M&DtSKA(#Ah1R?F-r|IVF$-zM*dPFi4_cLln9{oQ_FKYBZsr8{eF zwW+1nDYf+-13>r87@yF9De)h?5nx6$G-#)SMeUh*xP6{wxg)jA4^a-4+}q#PM+^8v zF}DiTz?&sF!-Eb`qoG~L*UE50Esj{lvFVM_4<>QEOP0d1B_!m=hBfdwWF+<%v0tq^ z$7f_1jy-J$4=fXToh%b)yGdA2Tt8^eR<PL`KI(#2-dP0&d|VCM>$}gLhU<2T=K=Io z(-DF3G6yt>^CaU?1vz|=1B!JU&!;Dhxc7coxae=&K2QTzER`%^j(KVz8@OBt2M?@( zcX+f8I^bP?x)FjnR&CcNL$XUKHseK?g<@ogUEBtrtDrBT<b{o3hWQ-opak8m4cyoS z4dek<Bt66)Sq0Ak?*BNSf7=WOW67D}{jmqGJhI=vc}IrJr{(r~u-~lht%p23wA{?U fr{!9gGXAs{ZpZOzjp>hWl0Soos^;?_R>AOZPRL;C diff --git a/QLearningApp/MachineLearning/Models/QLearning.cs b/QLearningApp/MachineLearning/Models/QLearning.cs index cf3e1d5..2939919 100644 --- a/QLearningApp/MachineLearning/Models/QLearning.cs +++ b/QLearningApp/MachineLearning/Models/QLearning.cs @@ -49,24 +49,29 @@ namespace QLearningApp.MachineLearning int stateIndex = initialStateIndex; int counter = 0; List<double> actions = new List<double>(); + List<double> stateFPS = new List<double>(); + double prev_state = result.InitialState; while (true) { result.Steps += 1; counter++; int actionIndex = _qTable[stateIndex].ToList().IndexOf(_qTable[stateIndex].Max()); - //state = action; double state = _qLearningProblem.SimulatedFPSValues(actionIndex, 4); + double statefps_space = _qLearningProblem.fps_space.OrderBy(x => Math.Abs((long)x - state)).First(); stateIndex = _qLearningProblem.fps_spaceIndex(statefps_space); double gamma_action = _qLearningProblem.gamma_space[actionIndex]; + Console.WriteLine("Current state: " + prev_state + ", Action: " + gamma_action + ", Next state: " + state); + prev_state = state; actions.Add(gamma_action); + stateFPS.Add(state); /*if (_qLearningProblem.GoalStateIsReached(action)) { result.EndState = action; break; }*/ - if (counter == 100) + if (counter == 50) { break; } } result.Actions = actions.ToArray(); @@ -82,8 +87,8 @@ namespace QLearningApp.MachineLearning { currentState = TakeAction(currentState);//currentState= FPS, return should be FPS value counter++; - if (counter == 100) - break;//will run 100 times + if (counter == 500) + break;//will run 500 times } } @@ -96,9 +101,11 @@ namespace QLearningApp.MachineLearning // double delta_action = _qLearningProblem.delta_space[randomIndexActionGamma]; double delta_action = 20; //fixed for now, can be changed in the future int delta_actionIndex = 0; + double rho = 0.4; double saReward = _qLearningProblem.GetReward(currentState, gamma_action, delta_action); - double nextState = _qLearningProblem.SimulatedFPSValues(randomIndexActionGamma, delta_actionIndex); // FPS for time t+1, delta_actionIndex changes to 4 in the RLSync as it is hardcoded + // Use rho to have a slowly & smoothly changing FPS value after an action is taken + double nextState = rho * currentState + (1-rho) * _qLearningProblem.SimulatedFPSValues(randomIndexActionGamma, delta_actionIndex); // FPS for time t+1, delta_actionIndex changes to 4 in the RLSync as it is hardcoded double nextStatefps_space = _qLearningProblem.fps_space.OrderBy(x => Math.Abs((long)x - nextState)).First();//need to test first, looking for the closet value of the FPS int nextStateIndex = _qLearningProblem.fps_spaceIndex(nextStatefps_space); double nsReward = _qTable[nextStateIndex].Max(); diff --git a/QLearningApp/MachineLearning/Models/QLearningStats.cs b/QLearningApp/MachineLearning/Models/QLearningStats.cs index 52197bf..3cbb266 100644 --- a/QLearningApp/MachineLearning/Models/QLearningStats.cs +++ b/QLearningApp/MachineLearning/Models/QLearningStats.cs @@ -9,14 +9,16 @@ namespace QLearningApp.MachineLearning public int Steps { get; set; } public double[] Actions { get; set; } + public double[] State { get; set; } + public override string ToString() { StringBuilder sb = new StringBuilder(); sb.AppendLine($"Agent needed {Steps} steps to find the solution"); sb.AppendLine($"Agent Initial State: {InitialState}"); - foreach (var action in Actions) - sb.AppendLine($"Action: {action}"); - sb.AppendLine($"Agent arrived at the goal state: {EndState}"); + /*foreach (var action in Actions) + sb.AppendLine($"Action: {action}");*/ + //sb.AppendLine($"Agent arrived at the goal state: {EndState}"); return sb.ToString(); } } diff --git a/QLearningApp/RLsync.cs b/QLearningApp/RLsync.cs index ba89edc..53bd0f8 100644 --- a/QLearningApp/RLsync.cs +++ b/QLearningApp/RLsync.cs @@ -1,23 +1,32 @@ using QLearningApp.MachineLearning; +using System; using System.Collections.Generic; namespace QLearningApp { public class RLSync { + private Random _random = new Random(); // Actions public double[] gamma_space = { 10, 20, 30, 40, 50, 100 }; // the possible values of gamma // private double[] delta_space = { 10, 20, 30, 40, 50, 100 }; // possible values of delta public double[] delta_space = { 20 }; - public double alpha = 0.5; //original value - public double beta = 0.5;//original value + public double alpha = 0.2; //original value + public double beta = 0.2;//original value // State space - public double[] fps_space = { 10, 15, 20, 25, 30 }; + public double[] fps_space = { 10, 12, 15, 17, 20, 22, 25, 27, 30 };//PE, APL 0-30 read it form file private double[][] rewards = new double[5][]; public double target_fps = 30; + /* + target for syn window if it is 100ms, target should be given by user not hard-coded + ini satse: 20 FPS, 100ms latency + initial values 30FPS, APL 100ms--> Target APL 20ms, FPS >=15 + FPS, PE: 30FPS, PE: 25ms --> target + trade -off + */ public int NumberOfStates => fps_space.Length; @@ -26,17 +35,21 @@ namespace QLearningApp public double GetReward(double currentState, double action_gamma, double action_delta) { //double reward = 1 / (System.Math.Abs(currentState - target_fps)) - alpha * action_gamma - beta * action_delta; - double reward = 1 / (1+System.Math.Abs(currentState - target_fps)) - alpha * action_gamma/100 - beta * action_delta/100; // gamma nand delta are normalized to [0, 1] + //double reward = 1 / (1+System.Math.Abs(currentState - target_fps)) - alpha * action_gamma/100 - beta * action_delta/100; // gamma nand delta are normalized to [0, 1]; does not perform well when fps is very low + double reward = 1 / (1 + System.Math.Abs(currentState - target_fps)) * (1 - alpha * action_gamma / 100 - beta * action_delta / 100); // gamma nand delta are normalized to [0, 1] return reward; } public double SimulatedFPSValues(int gammaIndex, int deltaIndex) //these values are for trial and this is the simulated environment { - + //keeping deltaIndex as 4 so that RL algo could get the FPS 30 value, changed it to 2 to get the better Q values - deltaIndex = 4; + deltaIndex = _random.Next(3,5);//trying randomness + double random_fps_noise = 3*(_random.NextDouble()-0.5); // adding uniform random noise to observed fps value + // deltaIndex = 3; double[,] FPS = new double[,] { { 0, 10, 10, 15, 15, 15 }, { 10, 12, 13, 15, 20, 22 }, { 10, 15, 15, 20, 25, 25 }, { 10, 20, 20, 25, 30, 30 }, { 10, 20, 25, 30, 30, 30 }, { 25, 25, 27, 30, 30, 30 } }; - return FPS[gammaIndex,deltaIndex]; + // Further improvements in the simulation: depending on changing network delays, the FPS matrix can change, allowing higher FPS at smaller values of gamma and delta + return FPS[gammaIndex,deltaIndex] + random_fps_noise; } public int fps_spaceIndex(double FPS) diff --git a/QLearningApp/bin/Debug/QLearningApp.exe b/QLearningApp/bin/Debug/QLearningApp.exe index dd85ef5d8b654d2ec43c4a78f954a79055056d3f..e4f4aa93e341dc975f26aaa27d9d8eea57239c6a 100644 GIT binary patch delta 4565 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 DwkE@; delta 4285 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 diff --git a/QLearningApp/bin/Debug/QLearningApp.pdb b/QLearningApp/bin/Debug/QLearningApp.pdb index 59f8455f6d0cc789d542866017dc0fe548410b34..9d44aaa90b958891a04c1091fe1a6b715ea4889a 100644 GIT binary patch delta 5467 zcmeHLdr+0f72o~54=w_^fPy?P4|&St!UYvX9*T$v$}0wth^RcY0`iD436TqmkJJZn ztVtXtG>NU5)@k&bNt3{gn#5_WW|E28IyDp1A#Em&#u!bb$<+SNcfX72w4F|8`d24= z=X}3!&z?QId(PRj`(67v#ePK@i1mC(2vI5VV046=&q?=tZbDo=a}N)PxAKLgFvT#W zGfLsAnT8C7Vd<+1n`~=SJ7<5iY@{{j!2YjlS1;c(ex>l_x0i}0fBkysvAk#GakoNq z*txNr4@=XkYp-@^m7cv&cKp(=bv2Lom)__$-2CqL2Ujn%;E-Ek*i)w)HVwSK`<?8< z$F>c8wmInQOD)w0ifUha^WEJazWR2#PE{DZ%UzeFPdP;c(UrQ&jY+ZeX>_daIoZ+f zm=fcGsmALRgBwN1Mlck`zRs{YK2T;;c-%chq!0!_G{+bCgyU5a25}SXo(=+=<ysui z#{XE#6BLyYiRYq(59AvZlGr3qQ-7i*;PfOR*jRpIlJ`EmTmi+Rev8HuZA!3?ZYCxv z;W~;)Iv`ilSW+aOA1C?Cdb*R8EE^~;c}vEq9vx5)vm&jSF`GR)r*2XHNGr2>j2AIp zA>>(h4}FsSgg#V+dF$wubxM9gX$6ZhgEhJf;mvg}8#)>`)^&E(cQrWGT!5N<2t5Eb zMj($Ifqq7M(i%zQRx`b9HA@rJM(UwQxRbO6nb<r`t&|rZMu{mttA!Pf(tbzwcFW$Q zviE}Q^N@WxirLb)L-u_nx4bX6KCNuqtMs+{Nu5y$tV>LmvTw)M$qK8=6!GdL4;s*b z!nSi2G#G3K8cqrII*B<}LWG;aI-7DJ(8J`E`^qH_^g)m12HKqJ=QRT9gNR#h2J89M zGa-JOVLZNPn2zQ))nEo{v03PZEr2dseQCfpmCoBH!vL3U7U@oRY>{#@g{0LKhy>`f zNZBNN>t$bo?0ZJ`y(#;~<<`Bjf4=M=mi<@cwh(o(k{9bKrQCX6QSIhh?B_I==C3R< z(xtReFEiG01cXo&U@7Sb5N3zcXCTZDr3cY?x>=rf+)jT;B63P*Js0pYdtQwUIT0}t z==&n+XD{tZ6T-e8wRB(?@cI{jvp=Sx9XJd8Uf^ut05Ai%510vj1(*dq3(N*y2j&33 z1LgufFmfKS3OEl~51bEN2h0aPCc!SkiyaIecq?!*>irsS2Nt8g12_{n04xC>0xkhQ z4_r#uX2%#kF+op}PQDp4yt@&`(?K&pQJ_egpApw%gMTG{u7L5xB#(f<UL(iAo>> zT|5Xx0I73A3<{(;J3>QL0og~@z$w5QU<i=s9tK>FI-9l@$nIGNi~&9@1pOr=qi39D zw0XF~kfZtcATF#2&0;0`@wlsi7T_9SBCrt%hlnO193Yy33xMl@n6rQ*?N0z(fWts! z0sB#48*q#_>;}C27L0b_Wnc&JPry##4PY0IWrmnSVaf*3Uiv6Aj>FD<PGI<>5Mdi_ z0zLplkf>{a92kyzH!Ya+#<9{`Ig~YBX*W`IR<_$FEQ0$`{Tg5D$%<0!M*3M+rn22g ze+29`Qs~^7%6=m)0}LB!&)iJqu#wKrjp&)CpdSjG!Bv8>TaRigMN>mpU4=72ab8H( z@<OTBkKN@eaFOAJt6%58?q_DdqaYl)B&*L*bR2bctZb|3>R8*_gceS$l^Ez8h&zlL zDLy-uYLnw=EZfIlcz`EE{UlG!bv(c%!|8$Kkz-aiVcj|LYz*cM<mjk5$AgU$n!{By z8-`m(@e1R-3t1S4Ik~wynwIOqMq=6ATo1!^jCE9P^}(=kMbyNQCse5(W=D&7mAz7( zt#c=6OT`@3$j1};9kT2(M7bJ)h)y+<ktprh+E}@;7Xtl(CY%_aA`P?@G#?Zpn0E{9 zZ2kzRD-=;h;dzU_K8J;MIw68VX}ZC@RmbOfDDo<O`6FKn%a4^uXi>h6b`^Wkir7#( zn4jj&E@2a9Yrd_dkMlcCI?cn?^zech6X%wbplaH^U`;~rMn9hY_YaDznmG3OM8OOU zT@+Gand*ktgCK700&(wXDl6~}=%{a9)7DbgxS_MIwQX%@19#>FLDGW-MXBn!B<;VG zy<JW>&(!Alo)$;QrxOLK#Bhe*F9`A+$51;U!L4WLPQeV%VAQsP;=y@`QWicMkcQcD zAt$I$xXAD=om$u=EfiNcqbD5Zk3kCL;9_?KfjGG#F{y=BATz6FI%IiSF~AC7ED#Az z!~vZy9E9tFRM)Y-l^~}nq-qva{~<&Y5c8@+>=88^T7e*JL1CW{Oaqnzu}E!z1PqW5 zx(J##G0;iKoFVT;K|Or9@DwwEu!VZKd_Vur0iPoZOH%VL=Sf7Mn2UM<Fc%mIL{7A0 z&#K4<WjW59dEjGq>LKJ@atMxoHX6=b;YGh#6xV~iCcXu+8C|C5G1r5*;Ka3027=Ta z?+N4_%sXZgkatWK&=<G?I2G6p<Q-!|J~3g3m_!mN62v>D7&H?U!#jo+7I`NY!*3fv zJ3zk#y#=}gx&@jBgIGbOpk`1v4K8gPEIm0?JYDXgsA3DA3yQbMztTI!IZBX1?j?<~ zgxX8C%RP=eB_#Fx(CY|#k!+`^(iwP`mG;O!dcQPT?ju?Dg1k$I%VO|6Up7n8Pa;Ek zlHxvzW|r@VqVwezJg=1}%SsBVNS4)9Qqd#Z9p@`-Qr>mQ2ZN+6afB=jl74*ox(fOR zGzFoX0LnEC<{clZa*MkGM}LEDa1?7|pXZ^G@jM=khY<jbA5uzHOa=}rwU($!?bPab zpqi!lO2JsB@qeQ6*V4`^OHYV4M!SYnH7(C-z1p?05O=DUC$-+`TKh|wCu<Ma+TYgn zyrju}sI}uFqsj$n{EJTcaxqsE&}$u2G=VY=rPlEgO)g!NJErlYv<cqU+ILcWwI$<Y zt@m85^^{gG(Rz<*{A(J1qG`KLuT?LVIx^MNBE}nQa_Ez4Us}0dN24_+yqoD_&Ce&< zh1+0WB3V|OX>@tBJV{ZtFL?bL6L<^s9_Wg4EYDpItteJfQ)tPGS<*(^R@{YPZ=D6t zpVs-y5qhmIC~ySk)(PuOD@qFXU#N(}d4jECa$K(q)hR%)HKVfU{!#8H;#7%o%vkU0 zxtceTvu7}d*Ngi{xJ%y2*G5`%U!D(Xy|{mJyX2jGO&(uWpEVT7aY|{73>a5k=WMZJ z&aRQGsHM?AkWU+_&C6=z8<lfjZVC-IMg;I_GSQ4Q=vweNU2e1laPpsMMRN4fI$t2~ zCSQ4hqMH72Z1IR3+7&FDDWrL!X*T@HrP<Na93$OtAO&#=!za$#M$;5{my6Zmxh_({ zeoR^Kujj;FuD+eYTe|wjS&jG&8RF3TAng0s)(7eDVm1{t25t#`3GNB<Yze|Q1fKfS zP(4iEE&lj~s7IYY9}ZJ*i@%<4(Xrg3=X>l|>e~|BkRthwuYK2B0`+|DbE7Z8z!irX z+b0;f*)U`O1OpcvW*nYi;4Z@qzOSh|^n3v;Qnler{Ik|T1s~dmws<Al&5_#nuHvwo ze<P1~n01P;JNazPTvUlnJc1n&hGk#CB==!4rO@#W7LkiZSAoZ-<MR;*h<di+<AT3* z_$!AGAwEFF92(sCLI7U``RGUiSwV0*A8;alFz;6~+aWhCRQ|VrP;7S7xkvNCgMuZ> zmDlA^^sayNp9M|nzx6{##ikVh4;l48Z+yq_?nd1YJ0Cm$X>I2Zb?ByLwLJ9-$H3x0 zdwja0qhy|aDEZ!jvE);Z;EqoxdGUXf{@C!mxBrV2fj>0VTSYk#8AI?LuNYJU!ha9= z=0RFPitr6zfVX@QCl$`v$UPz#ln0sznon<UYzi;H+d@zw2>)@Y-;Mv2P%0d9<evWT D$?qj{ delta 5052 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 I)J^@r0ah&IjQ{`u diff --git a/QLearningApp/obj/Debug/QLearningApp.csprojAssemblyReference.cache b/QLearningApp/obj/Debug/QLearningApp.csprojAssemblyReference.cache index 5485901991f75d811c511f8b31437067d0d8912b..61c22a8f31600f3266c789c4539e43982ba04598 100644 GIT binary patch literal 1887 zcmcIk-EPw`7<Jkt>(7AlH~t1>cc4{Ps!|w86@s#95@T$%nz$%TZu6y!>LkT>#>O-7 zD7*{eikILWz+YB%C<@#qQcs-pIOjXZ_D2jt$Zvh&9k1n*hL3N8v4~~tEBZ1CxJL&} zP9^Qd0-DYN2pPmtx7DF7>QcAq^b)QT0o@1^B^Ylyd&!6g<JWLHh^G*BM{e8i_)q*+ z%j>wT%`6mK%h%|iN(EtGF$Kt~`T>XZsl0mjm#%_y7%N?Zq}xm$DK_GORaeUzOoabZ zZB3}{#LU}bV-<^~xu3c&w-<*qCO}m1yZzt`nEIu(4;W8C5>h6XRj;hf>v$`?AYyzm z=hyzm^B-7-so^pXECiG@@zp=(q09PVFo|@yJtlz|MkAf5-`h(X{NA(So`@%ch0c~v zLpl#mHXc75z5^cwL}PGXNC}}%9OQ5j>TpZ*;d3meL%O>;IDa~RL_5Q|g<Vi|Td5iK zIJYZWYgC*TZk|-9s&zgTr-N2%T0#{k@ro%%5&EDuPZUIW9%O2+UhIOs4>{clqED&T za<L1Ry2LauXr03X(hTJ|7CacGW-e+GR)ENSr(<yF<&u_}6d<!WceK|(Vj?|J4Ltg| z+p7(Pv?W}@(N%<N2-gu-5N;sc)L<cb{rr1>H{dffX**oUR*;UcN0h_ZGxcv;Vv*^= zOxh9~r?iAR22t`OLQ18QL8=u4J0<!0bMh_tUcuf|tJUmVc-M`=rERy}dP)qe73;_n zZ)b_<Cy#h1OGM9k#MLYjbIBv#%@Q%YJmS495%bL>-p>+o4f2RimWb<=M_kJg>wf_6 Cx*PTY delta 28 ecmcc5w}N?tKO^I$$pMUBd<;M!zy>0LfExg1ZUl({ diff --git a/QLearningApp/obj/Debug/QLearningApp.exe b/QLearningApp/obj/Debug/QLearningApp.exe index dd85ef5d8b654d2ec43c4a78f954a79055056d3f..e4f4aa93e341dc975f26aaa27d9d8eea57239c6a 100644 GIT binary patch delta 4565 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 DwkE@; delta 4285 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 diff --git a/QLearningApp/obj/Debug/QLearningApp.pdb b/QLearningApp/obj/Debug/QLearningApp.pdb index 59f8455f6d0cc789d542866017dc0fe548410b34..9d44aaa90b958891a04c1091fe1a6b715ea4889a 100644 GIT binary patch delta 5467 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 D$?qj{ delta 5052 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 I)J^@r0ah&IjQ{`u -- GitLab