public Tuple <Matrix <float>, Vector <float> > BuildData(List <TrainingInstance> trainingInstances)
        {
            IState[] states = trainingInstances.Select(x => x.State).ToArray();

            double[] pathCosts = trainingInstances.Select(x => x.Response).ToArray();

            Matrix <float> trainingData = DenseMatrix.Create(states.Length, numInputs, 0);


            for (int r = 0; r < trainingData.RowCount; r++)
            {
                IState state = states[r];

                byte[] stateArr = state.Arr;

                multHeuristic.H(state);

                for (int i = 0; i < multHeuristic.HArr.Length; i++)
                {
                    trainingData[r, i] = multHeuristic.HArr[i] / multHeuristic.Scale[i];
                }

                float maxOutOfPlace = 0;

                for (int i = 0; i < Global.SIZE; i++)
                {
                    byte val = stateArr[i];

                    int diff = (val > i ? val - i : i - val);

                    if (diff > 0 && val > maxOutOfPlace)
                    {
                        maxOutOfPlace = val;
                    }
                }

                trainingData[r, multHeuristic.HArr.Length] = stateArr[middleTokenIndex] == middleTokenIndex ? 1 : 0;

                trainingData[r, multHeuristic.HArr.Length + 1] = maxOutOfPlace / Global.SIZE;
            }

            Vector <float> response = DenseVector.Create(pathCosts.Length, 0);

            for (int i = 0; i < pathCosts.Length; i++)
            {
                double y = pathCosts[i];

                if (responseFunc != null)
                {
                    y = responseFunc(y);
                }

                response[i] = (float)y;
            }

            return(new Tuple <Matrix <float>, Vector <float> >(trainingData, response));
        }
        public Tuple <Matrix <float>, Vector <float> > BuildData(List <TrainingInstance> trainingInstances)
        {
            IState[] states = trainingInstances.Select(x => x.State).ToArray();

            double[] pathCosts = trainingInstances.Select(x => x.Response).ToArray();

            Matrix <float> trainingData = DenseMatrix.Create(states.Length, numInputs, 0);

            for (int r = 0; r < trainingData.RowCount; r++)
            {
                IState state = states[r];

                byte[] stateArr = state.Arr;

                multHeuristic.H(state);

                for (int i = 0; i < multHeuristic.HArr.Length; i++)
                {
                    trainingData[r, i] = multHeuristic.HArr[i] / multHeuristic.Scale[i];
                }

                trainingData[r, multHeuristic.HArr.Length] = (float)state.Op.Vals[0] / Global.SIZE;
            }

            Vector <float> response = DenseVector.Create(pathCosts.Length, 0);

            for (int i = 0; i < pathCosts.Length; i++)
            {
                double y = pathCosts[i];

                if (responseFunc != null)
                {
                    y = responseFunc(y);
                }

                response[i] = (float)y;
            }

            return(new Tuple <Matrix <float>, Vector <float> >(trainingData, response));
        }
예제 #3
0
 public virtual int H(IState state, bool verbose = false)
 {
     multHeuristic.H(state);
     return(multHeuristic.HArr.Max());
 }