public RlmCacheDataArray Execute(long[] rneurons, double[][] inputs, double[] from, double[] to, bool[] rneuronsCache, double[] fromCache, double[] toCache)
        {
            RlmCacheDataArray retVal = new RlmCacheDataArray(inputs.Length);

            Parallel.For(0, rneurons.Length, (r) =>
            {
                bool isMatch      = true;
                bool isMatchCache = true;
                for (int i = 0; i < inputs.Length; i++)
                {
                    if (!(inputs[i][r] >= from[i] && inputs[i][r] <= to[i]))
                    {
                        isMatch = false;
                    }

                    if (!(inputs[i][r] >= fromCache[i] && inputs[i][r] <= toCache[i]))
                    {
                        isMatchCache = false;
                    }

                    if (!isMatch && !isMatchCache)
                    {
                        break;
                    }
                }

                if (isMatch)
                {
                    var rneuronId = rneurons[r];
                    ManagerReference.FindBestSolution(rneuronId);
                }

                if (isMatchCache)
                {
                    double[] values = new double[inputs.Length];
                    for (int j = 0; j < inputs.Length; j++)
                    {
                        values[j] = inputs[j][r];
                    }
                    retVal.Add(rneurons[r], values);
                }
            });

            return(retVal);
        }
Example #2
0
        public virtual RlmCacheDataArray FindBestSolutionAndBuildCache(long[] rneurons, long[] results, double[][] inputs, bool[] rneuronsCache)
        {
            RlmCacheDataArray cachedData = new RlmCacheDataArray(inputs.Length);

            Parallel.For(0, results.Length, (i) =>
            {
                if (results[i] != 0)
                {
                    ManagerReference.FindBestSolution(results[i]);
                }

                if (rneuronsCache[i])
                {
                    double[] values = new double[inputs.Length];
                    for (int j = 0; j < inputs.Length; j++)
                    {
                        values[j] = inputs[j][i];
                    }
                    cachedData.Add(rneurons[i], values);
                }
            });

            return(cachedData);
        }