From 89bc5c8c5343212123d84492c9f7cb7a53b6c711 Mon Sep 17 00:00:00 2001
From: "Anmulwar, Sweta V (PG/R - Elec Electronic Eng)" <sa02405@surrey.ac.uk>
Date: Sun, 9 Apr 2023 11:45:09 +0100
Subject: [PATCH] Userintent with Gamma&Delta

---
 .vs/QLearningApp/v16/.suo                     | Bin 96256 -> 98304 bytes
 .../MachineLearning/Models/QLearning.cs       | 109 +++++++++++++-----
 .../MachineLearning/Models/QLearningStats.cs  |  11 +-
 QLearningApp/Program.cs                       |   4 +-
 QLearningApp/RLsync.cs                        |  25 ++--
 QLearningApp/bin/Debug/QLearningApp.exe       | Bin 12800 -> 13312 bytes
 QLearningApp/bin/Debug/QLearningApp.pdb       | Bin 44544 -> 46592 bytes
 ...QLearningApp.csprojAssemblyReference.cache | Bin 424 -> 424 bytes
 QLearningApp/obj/Debug/QLearningApp.exe       | Bin 12800 -> 13312 bytes
 QLearningApp/obj/Debug/QLearningApp.pdb       | Bin 44544 -> 46592 bytes
 10 files changed, 106 insertions(+), 43 deletions(-)

diff --git a/.vs/QLearningApp/v16/.suo b/.vs/QLearningApp/v16/.suo
index 2c923d19ec055f7212ed0a292944aa1c237b41c9..4440aaa92ef0803fdda288649133ffcf000c393b 100644
GIT binary patch
delta 6173
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
Pg=80xj~ORk*=+qQJu1-~

delta 5084
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
Ipae+eKk<${DF6Tf

diff --git a/QLearningApp/MachineLearning/Models/QLearning.cs b/QLearningApp/MachineLearning/Models/QLearning.cs
index 852a0c8..4734e96 100644
--- a/QLearningApp/MachineLearning/Models/QLearning.cs
+++ b/QLearningApp/MachineLearning/Models/QLearning.cs
@@ -12,23 +12,27 @@ namespace QLearningApp.MachineLearning
         private double _gamma;
         public double Gamma { get => _gamma; }
 
-        private double[][] _qTable;
-        public double[][] QTable { get => _qTable; }
+        private double[,,] _qTable;
+        public double[,,] QTable { get => _qTable; }
 
         private RLSync _qLearningProblem;
+        List<double> matrixList = new List<double>();
 
         public QLearning(double gamma, RLSync qLearningProblem, double TargetFPS)
         {
             _qLearningProblem = qLearningProblem;
             _gamma = gamma; // discount factor 
-            _qTable = new double[qLearningProblem.NumberOfStates][];
+            _qTable = new double[qLearningProblem.NumberOfStates,qLearningProblem.gamma_length,qLearningProblem.delta_length];
             /* Need to convert it in the 3-D array */
-            for (int i = 0; i < qLearningProblem.NumberOfStates; i++)
-                _qTable[i] = new double[qLearningProblem.NumberOfActions];
+            /*for (int i = 0; i < qLearningProblem.NumberOfStates; i++) //fps_space.Length;//9
+                _qTable[i] = new double[qLearningProblem.NumberOfActions];*/ //6*6=36
             for (int i = 0; i < qLearningProblem.NumberOfStates; i++)
             {
-                for (int j = 0; j < qLearningProblem.NumberOfActions; j++)
-                    _qTable[i][j] = 0;
+                for (int j = 0; j < qLearningProblem.gamma_length; j++)
+                {
+                    for (int k = 0; k < qLearningProblem.delta_length; k++)
+                        _qTable[i,j,k] = 0;
+                }
             }
             qLearningProblem.Target_fps = TargetFPS;
             /*I can add PE and APL here*/
@@ -48,28 +52,47 @@ namespace QLearningApp.MachineLearning
         public QLearningStats Run(int initialStateIndex)//returning an object
         {
             if (initialStateIndex < 0 || initialStateIndex > _qLearningProblem.NumberOfStates) throw new ArgumentException($"The initial state can be between [0-{_qLearningProblem.NumberOfStates}", nameof(initialStateIndex));
-
             var result = new QLearningStats();
             result.InitialState = _qLearningProblem.fps_space[initialStateIndex];
             int stateIndex = initialStateIndex;
-            int counter = 0;
-            List<double> actions = new List<double>();
+            int jmax = 0, kmax = 0;
+            List<double> gammaactions = new List<double>();
+            List<double> deltaactions = 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());
+                //int actionIndex = _qTable[stateIndex].ToList().IndexOf(_qTable[stateIndex].Max());
                 //state = action;
-                double state = _qLearningProblem.SimulatedFPSValues(actionIndex, 4);
-
+                //int actionIndex = matrixList.IndexOf(matrixList.Max());
+                
+                //int actionIndex= _qTabl[0,0].ToList().IndexOf(_qTable[stateIndex,0,0].Max());//it would be nice if it works
+                double element = _qTable[stateIndex, 0, 0];
+                for (int j = 0; j < _qLearningProblem.delta_length; j++)
+                        for (int k = 0; k < _qLearningProblem.gamma_length; k++)
+                        {
+                            if (_qTable[stateIndex, j, k] >= element)
+                            {
+                                element = _qTable[stateIndex, j, k];
+                                jmax = j;//gamma values
+                                kmax = k;//delta values
+                            }
+                        }
+                
+                double state = _qLearningProblem.SimulatedFPSValues(jmax,kmax);//FPS value
+
+                //Console.WriteLine("Next state FPS"+state);
                 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 FPS state: " + prev_state + ", Action: " + gamma_action + ", Next FPS state: " + state);
+                double gamma_action = _qLearningProblem.gamma_space[jmax];
+                double delta_action = _qLearningProblem.delta_space[kmax];
+               
+                //Console.WriteLine("Current FPS state" + prev_state);
+                Console.WriteLine("Current FPS state: " + prev_state + ", Gamma Action: " + gamma_action + ", delta Action: " + delta_action + ", Next FPS state: " + state);
                 prev_state = state;
-                actions.Add(gamma_action);
+                gammaactions.Add(gamma_action);
+                deltaactions.Add(delta_action);
                 stateFPS.Add(state);
                 /* Newly added code to make it finite loop */
                 if (_qLearningProblem.GoalStateIsReached(state))
@@ -81,7 +104,8 @@ namespace QLearningApp.MachineLearning
                 /*if (counter == 50)
                 { break; }*/
             }
-            result.Actions = actions.ToArray();
+            result.gammaActions = gammaactions.ToArray();
+            result.deltaActions = deltaactions.ToArray();
             return result;
         }
 
@@ -91,11 +115,11 @@ namespace QLearningApp.MachineLearning
 
             //Console.WriteLine("Enter targetted FPS value ={0}",targetFPS);
             double currentState = initialState;//FPS value
-            int counter = 0;
+            //int counter = 0;
             while (true)
             {
                 currentState = TakeAction(currentState);//currentState= FPS, return should be FPS value
-                counter++;
+                //counter++;
                 /*if (counter == 500)
                     break;//will run 500 times*/
                 if (_qLearningProblem.GoalStateIsReached(currentState))
@@ -106,23 +130,41 @@ namespace QLearningApp.MachineLearning
         private double TakeAction(double currentState)
         {
             //var validActions = _qLearningProblem.GetValidActions(currentState);
-            int randomIndexActionGamma = _random.Next(0, _qLearningProblem.NumberOfActions);
+            int randomIndexActionGamma = _random.Next(0, _qLearningProblem.gamma_length);
+            
+            int randomIndexActionDelta = _random.Next(0, _qLearningProblem.delta_length);
+            //Console.WriteLine("randomIndexActionGamma ={0},randomIndexActionDelta ={1}", randomIndexActionGamma, randomIndexActionDelta);
             //int randomIndexActionDelta = _random.Next(0, _qLearningProblem.NumberOfActions);//choosing a random action from number of actions defined
             double gamma_action = _qLearningProblem.gamma_space[randomIndexActionGamma];//retrieving gamma value form randomIndexAction
-                                                                                        // 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 delta_action = _qLearningProblem.delta_space[randomIndexActionGamma];
+            double delta_action = _qLearningProblem.gamma_space[randomIndexActionDelta]; //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);
             // 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 nextState = rho * currentState + (1 - rho) * _qLearningProblem.SimulatedFPSValues(randomIndexActionGamma, randomIndexActionDelta); // 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();
+            double nextStateIndex = _qLearningProblem.fps_spaceIndex(nextStatefps_space);
+            //double nsReward = _qTable[Convert.ToInt32(nextStateIndex), 0, 0];
+            /* 
+             Next state index is fixed and need to find out the highest value of Q based on it)
+             */
+            double Max = _qTable[Convert.ToInt32(nextStateIndex), 0, 0];
+            for (int j = 0; j < _qLearningProblem.delta_length; j++)
+                for (int k = 0; k < _qLearningProblem.gamma_length; k++)
+                {
+                    if (_qTable[Convert.ToInt32(nextStateIndex), j, k] > Max)
+                    {
+                        Max = _qTable[Convert.ToInt32(nextStateIndex), j, k];
+                    }
+                }
+            
+            double nsReward = Max;
+            //Console.WriteLine("value of nsReward=" + nsReward);
             double qCurrentState = saReward + (_gamma * nsReward);
             int currentStateIndex = _qLearningProblem.fps_spaceIndex(currentState);
-            _qTable[currentStateIndex][randomIndexActionGamma] = qCurrentState;
+            _qTable[currentStateIndex, randomIndexActionGamma, randomIndexActionDelta] = qCurrentState;
             return nextState;
         }
 
@@ -136,3 +178,14 @@ namespace QLearningApp.MachineLearning
 
     }
 }
+
+
+/*
+ for (int i = 0; i < _qLearningProblem.NumberOfStates; i++)//check here
+                    for (int j = 0; j < _qLearningProblem.delta_length; j++)
+                        for (int k = 0; k < _qLearningProblem.gamma_length; k++)
+                        {
+                            matrixList.Add(_qTable[i, j, k]);
+                        }
+ 
+ */
\ No newline at end of file
diff --git a/QLearningApp/MachineLearning/Models/QLearningStats.cs b/QLearningApp/MachineLearning/Models/QLearningStats.cs
index 3cbb266..5daac39 100644
--- a/QLearningApp/MachineLearning/Models/QLearningStats.cs
+++ b/QLearningApp/MachineLearning/Models/QLearningStats.cs
@@ -7,7 +7,8 @@ namespace QLearningApp.MachineLearning
         public double InitialState { get; set; }
         public double EndState { get; set; }
         public int Steps { get; set; }
-        public double[] Actions { get; set; }
+        public double[] gammaActions { get; set; }
+        public double[] deltaActions { get; set; }
 
         public double[] State { get; set; }
 
@@ -16,9 +17,11 @@ namespace QLearningApp.MachineLearning
             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 gammaActions)
+                sb.AppendLine($"gammaAction: {action}");
+            foreach (var action in deltaActions)
+                sb.AppendLine($"deltaAction: {action}");
+            sb.AppendLine($"Agent arrived at the goal state: {EndState}");
             return sb.ToString();
         }
     }
diff --git a/QLearningApp/Program.cs b/QLearningApp/Program.cs
index 597ca94..776be1c 100644
--- a/QLearningApp/Program.cs
+++ b/QLearningApp/Program.cs
@@ -35,8 +35,8 @@ namespace QLearningApp
                 {
                     var qLearningStats = qLearning.Run(initialStateIndex);
                     Console.WriteLine(qLearningStats.ToString());
-                    var normalizedMatrix = qLearning.QTable.NormalizeMatrix();
-                    Console.Write(normalizedMatrix.Print());
+                    //var normalizedMatrix = qLearning.QTable.NormalizeMatrix();
+                    //Console.Write(qLearning.QTable.ToString());
                 }
                 catch(Exception ex)
                 {
diff --git a/QLearningApp/RLsync.cs b/QLearningApp/RLsync.cs
index 5287ef0..2d50828 100644
--- a/QLearningApp/RLsync.cs
+++ b/QLearningApp/RLsync.cs
@@ -24,19 +24,21 @@ namespace QLearningApp
          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 
+            FPS, PE: 30FPS, PE: 25ms --> target 
          trade -off
          */
 
-        public int NumberOfStates => fps_space.Length;
+        public int NumberOfStates => fps_space.Length;//9
 
-        public int NumberOfActions => gamma_space.Length * delta_space.Length;//6*6=36
+        //public int NumberOfActions => gamma_space.Length * delta_space.Length;//6*6=36
+        public int gamma_length => gamma_space.Length;//6
+        public int delta_length => delta_space.Length;//6
 
         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]; 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]
+            double reward = 1 / (1 + System.Math.Abs(currentState - Target_fps)) * (1 - alpha * System.Math.Abs(action_gamma / 100) - beta * System.Math.Abs(action_delta / 100)); // gamma nand delta are normalized to [0, 1]
             return reward;
         }
 
@@ -44,15 +46,21 @@ namespace QLearningApp
         {
 
             //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 = _random.Next(3,5);//trying randomness
+            //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 } };
-            // 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;
+            double[,] FPS = new double[,] { { 0, 8, 10, 12, 13, 15 },
+                                            { 8, 10, 13, 15, 18, 20 },
+                                            { 10, 12, 15, 20, 22, 25 },
+                                            { 10, 15, 18, 20, 25, 28 }, 
+                                            { 30, 30, 30, 30, 30, 30 }, 
+                                            { 15, 20, 25, 27, 30, 30 } }; //{ 10, 15, 20, 22, 30, 30 }-second last row
+            // 6*6 matrix 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 System.Math.Abs(FPS[gammaIndex,deltaIndex] + random_fps_noise);
         }
 
         public int fps_spaceIndex(double FPS)
+
         {
             var fps_Index=0;
             for (int i = 0; i<fps_space.Length; i++)
@@ -60,7 +68,6 @@ namespace QLearningApp
                 if (FPS == fps_space[i])
                     fps_Index = i;
                     //break;
-            
             }
             return fps_Index;
         }
diff --git a/QLearningApp/bin/Debug/QLearningApp.exe b/QLearningApp/bin/Debug/QLearningApp.exe
index 0251b165b78624be1647a5e81810119edd4a5a8a..ea93ca9266419cad2c275deb93337a461f88c6f1 100644
GIT binary patch
delta 5947
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

delta 5115
zcmZu#4R96J6+ZXw?%jR+-V52c@Lv9TAtZU^1q?~}2@Q~tgdcwp6)^!B2nx!NJbjN^
zY=9T4f+#pJTbW4)Eja3oZ5_2tonZzYwAcZQ6<c-C@dtIJ%1ot>(^}MGzk7ERkam;(
z?m6e4d(OG%o_p^m{kQkuy8D4K<=YONqTo4AV<^lTh*A((zVNZmJ-=R5aAhaawNkL0
z=!CJS(v9>JMZiDTK{VB?<n>+;tF>EeAWGs*c@MHQtMgu9wXDJWkc~-hfd%=@#mmW{
zv2{c{i-|OFHj(h&OgDH7cxlO%ypI#<53lBZnratA({0eH$Ge}m<QG>dGt|?zq=)wz
z&@e6)Ew)8CO(uq5j7HZhZ{!f~V^A$F&A3E%ArFjLZN5A+64F3+dS=gJyR0lX3Zm+h
z=+IMfkYQ8PQwa)_ExIFVvf#n%)K<+j=srIn;<+N|ZI*s`*{%vAR(&!yG<>t16HoZ!
zc;KqJ?SS{WHa?G-d?%ZQ)GFNt<<iZjq*F+dO?9Q1OF1lKz7AzU+?gto9f2W`*%8CS
zR4MpW8Nkj?hcrg1aw$Pbb}(#kKt5m0%!QEpyvR9d!r9w~O_<4(aGyc=g0c?{i?ah4
z$rmq@-wcz=bq!?=HWXnzqGU0i8V&dH3oII{=jm=D(~@f;T;0j*ndES2W~LC*6lzPj
zhGV1(Bv*-Uq7TbmL~|6T9g!I$M_il{eMppW&Gh|p<rz#6y-LmJsT^y^#tfwqQdvnm
z&?3{Qic}Po_cP-<R^=Tx4zRJ_S}|Hw!*-^|+bt5JR+1_28Ii~*LApko9HXv+_aPo#
zwqe<-T0=qz>2!iR06DaL#P!XXkj}Nuav0Y$8r=G;EXT*~bi%hJ^o%aMFfsPHNOao}
zNZkv1IB$-BKORXpP&_)MZ4HKo3*bN~(H#x>!!PK_sy_ZbvJ%}9Ysi93=lGX(BZKNf
z9zQ`IM`)K<hD@K^z-a<n#Oe@YOA_aO5n0MA7P%cnn477Q-uq@z{s^iOlW<6jHx_D8
z9MZeM(=6c%N7Pqm=X1LAlCGUtJ(iMb&OU~o+&EA_&p{|`;j8t@ouCb5u%!fP;dms6
z$n2;>R~MNC<gPKbj^&ARNP=)p64e=0KC+fU?F%(|Kda_o3PGlanR=MYj0d=uWBUFa
zt0V)LVl%eAen|+9c|nYYJcoqXDP%64!g{3LP%tc%&tRh<9ctd{<Z`S5*Dl+Inq}4T
z>?@ex<JF0np)&n=by4=Lk`%}6KvI&$AqbsP$J`{n`{L9@=}>KQ$Ly1G*9bXwrV(Ot
z^gxzr#QbfXZZhjbGMwDP4Ljj_hs2N!h6JTU*dvjtf4=a;4<eLl!pIB?O+Y(}vX0it
zg-34W!H(s$<6*h<A_eEdHWS^!Bt=F#h*;Rh1|^n9)9+)Tpsz6yyUEF6S%nNqZh*KS
znJQ{^^j?}Mb089wZ*yBT?&?+ksr2ql*YJmFRw!e5Bf{l*M^~$}xO+2-@6z=V7eo#G
zUA{a+t7@v%aV>x89cwTp*WL{|C^M9|?t~V1yLRBs*F}VKPded2)3FbTKIw3dizDBO
z`1@SOj8jS8DQb$Enpj{&)vXu^o9d3h`GAz@bz`veCE=}!bmir}bR}%yz;-By;<9a#
ztw9NJc~Xjtdn1!VUyaCaQGK%Fcgk}??VF%4lZ1-8@P^O0VPclHW*t|R)04vHwGoB9
zO-AB6@w?>Af-djtX!Z0{Sl6m8M4gz{&3LPB*pOYl{<a)qrTwt*94f!+#v5n>2Feq*
zYR--GI?*l%U+>*ma77*jVL1rZMkp_JieQkODry`t;FTkB#wi}V64$@F))Y@PUPu|H
zN)5&)Q_wzzAtC9<^;xD%`{aJ3&-Ay2pu8b*xx#-KZ|A`rR?OQ9zgJ3c>Ps>BmkK+S
zJYmd+=EK&rz!!wXdvxjGYi$<r1-KD(PRZ-c4=q7!QF4Nw(xm2YC0}7l{Y4=u=~eQ@
zz`URhiaDxG?@+2)l1jf*lD|P>(=4q5gXb!vkD%A4MO1-V5%s9aGm<}rG@3hRm!c*2
z2=;OpE*P7(;(j}Ao)?mfD9z<!jpXu3v{b#zl5CVvGBCITZx_Yzt)O9`^w3440uCDB
z;#5s8Iz9lm5~FGrxA8~Zx5FHx7sZnd8RAa^zf*XEJp(%bg=$RgX~yVA^Eu#Q{tQqK
zVDt%k8BNoq{890H;Cj`&P~nsO5F|Tcj?r{r6WhuT1NYGpU=ceC2Y2Yw%`LzMNyJ0j
ztWK*HQ|k7)ymf<h48wbU*7}Y4I^(o9;L0q?_4^!s#@__@dBDAHF2c9f+)Bc;jr7nd
zX41}ptK%Oqi+<~KMN>_Nw724}BHBZ*iceUGHdd)|MR~vTKE>{(>d+Z<mSKkz?WHHI
zbIhhq0r!&iFBYbAirZ%Wg|%WOzX`Z2wEr+1!8k_|3><1aLMMEV1}p=MY{^ZAK%-`u
z7t&k!NFmxvPF_349E#xBknC&1;W3Jg^SOGQ#V-9saoa3gZ>5pc5pbpYF*cH}4!C!<
zR@BGBfI9=5qiAWsH6Vv^S{ZQD5KNrb2b^x@OL>Cs4%k8~2`(RSuWF^dh_(mZ8(I?F
zZpHnPwu>E9OlSN)mEdAJ_apA#io2I);OnZGLUnRVGBXS(O-yn3(s<0D%Y%neEpBo~
zi*$LoywBuO^CghcmpI@!od+^HrX=&A!)Q|Ia{Ls%oF0Q6jb2fjUtxnXa+PMQ8YS&B
zdP&KBk9oiOU!10fO$&uc#_RwM%vjQuK$|843#mn6yTW-2uT$8guvg(~;3&FF(f26a
zs&D{^Z=t8rl+c?r!>mSizH3beF2Z_7AfHR`;%J`_`Vngp<kI~Ph39Fv)<@@Qlh#j+
zU8CJcU#Ue2v3_e8Iqb0JK~pZ%dCKX1^gLB*JK*Ib{xls@7D8;h^#{ryqEq}h6|+GY
zIz;zt$ElJ{HNT}Yr8JJ6uml^&&RV6cjAn>xHWu<GNLoWJz`t5OOuAf!-Wt9RxG<Du
zNxGL>_yl}oN_1%ku$1Nit7sK4O&MSlZRHd4^b^@ohr+8=#|^X{k|j!Vi^8?^D@by5
z9N0(i@HXY(Ugh9ZMKdN{GWHN9HBHe~3j48TTljv32bAQ1(mA3eFSEQH_OcRvthzr|
zG~>z~m*y%JU8(5PiY86=CKa|RT&}QR;eLfj6rNT{y0S(MD0LeJI2UagZIaRLSlcAk
z(am%#?yNz27K`u(ox<Nn8(E(1W_xksF`RR{{N}^3o2(k#zR#L<z@#Pd9VR7B+63Sg
zx}?u)5@)F1l+_ISHoe(<F<zP<fpd`Kwh03hxNR5}0XYg=-a;inj)ihSm&uPMD#zk6
zssM5tjS~hT1KSWa;eQ2BbQ12Uw}38{b>TCG^nSU&E`1#AHEcTn!G|yHW8W!_VWE=A
z?-cp}3j+Zf$dQQ<O{B)8n<&AS(L&aX7AmbXZdtahb9L^{b-nj=tn1C?CN?Z<_&?G{
zDP7pRc4hl58&+r5&sebx0`E+s*()o0YG%ijiOmhO8yXs0CU&(?p48Od(b6%cbJpZ3
z9kbiJ+8Y~ZH@37l&6?CQadOAhDU+tOcTS$zIA!wGDYH8|n%WyD9%RLnnb%rUd@xt?
zI@4~-u0A-u>=-lWt-p2U#%ou3dc}f+cUR<C(s!Pt+{z8hhUnWs&;RKiD^_NqS(&`c
z+na3S3p3su$ujMl-i_Yb<edkXR(`?xsCw`2u}2F}%sUZX^I+-x=l`_s+d=oAJG@iX
zlZBDwmSuSbHCIGOm{v44(&DkA^75!Rr)EhWU7Q=HW<`0aSr99-tWmLE7F7`Cv7{A^
za;U=wD=09OxUi5hNmS6NSpNVT&BkB-BnN?w8cAlkWP*8=N5OGcR#Z}m5M%uZE{;*%
z6*RAc={D3NusLkcAXZRb06WYjBT3~h2~&?E&O$R98;gkWD_<+B0tfQgQg3H%iK~g2
z#f7B_Cxy2jZ-e(*?Ifgt<b>^1S{Nxswxzz0R}{@3l%<5CrxkcV@4#E_T|aJ2;Tz3M
z9({73+qv)LRo>s*2R`!d8#lio+bOmEXJ@B(dRz(L(&>FaZk6|o^n%K<ZGO*CJ0akQ
zTW@V$t@mDCVQ5&xyDB}pvgNXI%>h5uws>pPqeB<D()4K7;w?$ndatCfKA3ELfE_HT
R|JLC9n-4mT=h&VG^S>9o>YM-o

diff --git a/QLearningApp/bin/Debug/QLearningApp.pdb b/QLearningApp/bin/Debug/QLearningApp.pdb
index ff74b3d8ed7901b7810459b8e1eab4d326b71edd..212d01b5aaf1be5750912b2a43e1e1ccbc55e85b 100644
GIT binary patch
literal 46592
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

delta 7830
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
OuZ7OqG5PE*zyAZ7oO9a%

diff --git a/QLearningApp/obj/Debug/QLearningApp.csprojAssemblyReference.cache b/QLearningApp/obj/Debug/QLearningApp.csprojAssemblyReference.cache
index b9971596f5ab326a4ea03dc9bc7679cfb48bb94b..c240c2684ac24abfea7de1369b85f99398d906b7 100644
GIT binary patch
delta 13
UcmZ3%yn=ayKO^IU$pMTJ03Uh;Gynhq

delta 13
UcmZ3%yn=ayKO>{k<N(G9038Gawg3PC

diff --git a/QLearningApp/obj/Debug/QLearningApp.exe b/QLearningApp/obj/Debug/QLearningApp.exe
index 0251b165b78624be1647a5e81810119edd4a5a8a..ea93ca9266419cad2c275deb93337a461f88c6f1 100644
GIT binary patch
delta 5947
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

delta 5115
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
R|JLC9n-4mT=h&VG^S>9o>YM-o

diff --git a/QLearningApp/obj/Debug/QLearningApp.pdb b/QLearningApp/obj/Debug/QLearningApp.pdb
index ff74b3d8ed7901b7810459b8e1eab4d326b71edd..212d01b5aaf1be5750912b2a43e1e1ccbc55e85b 100644
GIT binary patch
literal 46592
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

delta 7830
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
OuZ7OqG5PE*zyAZ7oO9a%

-- 
GitLab