private float[] RecursiveRead(int[] indexes, int depth, MyDimList d)
        {
            if (depth == this.m_maxDimensions - 2)
            {
                int     noActions = m_dimensionSizes[ACTIONS] - m_disabledActions.Count;
                float[] utils     = new float[noActions];

                // fill the utils array with the utilities of actions that are not disabled
                int pos = 0;

                for (int i = 0; i < m_dimensionSizes[ACTIONS]; i++)
                {
                    MyDimList tmp = d.GetChildNo(i);

                    if (!d.GetChildNo(i).IsLast())
                    {
                        MyLog.ERROR.WriteLine("Expexcted last dimension!");
                        utils[i] = MyDimList.DEF_VAL;
                    }
                    if (!m_disabledActions.ContainsKey(i))
                    {
                        utils[pos++] = d.GetChildNo(i).GetValue();
                    }
                }
                return(utils);
            }
            else
            {
                MyDimList child = d.GetChildNo(indexes[depth]);
                return(RecursiveRead(indexes, depth + 1, child));
            }
        }
        private void RecursiveSet(int[] stateValues, int action, int depth, MyDimList d, float value)
        {
            if (depth == this.m_maxDimensions - 2)
            {
                MyDimList last = d.GetChildNo(action);
                last.SetValue(value);
                return;
            }
            MyDimList child = d.GetChildNo(stateValues[depth]);

            this.RecursiveSet(stateValues, action, depth + 1, child, value);
        }
        public MyQSAMemory(int maxStateVariables, int initNoActions)
        {
            m_maxDimensions = maxStateVariables + 1;
            ACTIONS         = m_maxDimensions - 1;

            m_dimensionSizes  = new int[m_maxDimensions];
            m_disabledActions = new Dictionary <int, bool>();

            m_d = new MyDimList(m_maxDimensions, 0);
            MyDimList tmp = m_d;

            // recursively init all dimensions
            for (int i = 1; i < m_maxDimensions; i++)
            {
                m_dimensionSizes[i] = 1;  // all constants by default

                tmp = tmp.GetChildNo(0);
                tmp = new MyDimList(m_maxDimensions, i);
            }

            this.m_dimensionSizes[ACTIONS] = initNoActions;
        }
        public MyQSAMemory(int maxStateVariables, int initNoActions)
        {
            m_maxDimensions = maxStateVariables + 1;
            ACTIONS = m_maxDimensions - 1;

            m_dimensionSizes = new int[m_maxDimensions];
            m_disabledActions = new Dictionary<int, bool>();

            m_d = new MyDimList(m_maxDimensions, 0);
            MyDimList tmp = m_d;

            // recursively init all dimensions
            for (int i = 1; i < m_maxDimensions; i++)
            {
                m_dimensionSizes[i] = 1;  // all constants by default

                tmp = tmp.GetChildNo(0);
                tmp = new MyDimList(m_maxDimensions, i);
            }

            this.m_dimensionSizes[ACTIONS] = initNoActions;
        }
 private void RecursiveSet(int[] stateValues, int action, int depth, MyDimList d, float value)
 {
     if (depth == this.m_maxDimensions - 2)
     {
         MyDimList last = d.GetChildNo(action);
         last.SetValue(value);
         return;
     }
     MyDimList child = d.GetChildNo(stateValues[depth]);
     this.RecursiveSet(stateValues, action, depth+1, child, value);
 }
        private float[] RecursiveRead(int[] indexes, int depth, MyDimList d)
        {
            if (depth == this.m_maxDimensions - 2)
            {
                int noActions = m_dimensionSizes[ACTIONS] - m_disabledActions.Count;
                float[] utils = new float[noActions];

                // fill the utils array with the utilities of actions that are not disabled
                int pos = 0;

                for (int i = 0; i < m_dimensionSizes[ACTIONS]; i++)
                {
                    MyDimList tmp = d.GetChildNo(i);

                    if (!d.GetChildNo(i).IsLast())
                    {
                        MyLog.ERROR.WriteLine("Expexcted last dimension!");
                        utils[i] = MyDimList.DEF_VAL;
                    }
                    if (!m_disabledActions.ContainsKey(i))
                    {
                        utils[pos++] = d.GetChildNo(i).GetValue();
                    }
                }
                return utils;
            }
            else
            {
                MyDimList child = d.GetChildNo(indexes[depth]);
                return RecursiveRead(indexes, depth + 1, child);
            }
        }