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); }
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); }