/** Initialise the simplex and evaluate it. Returns null on failure. */ private List <double[]> makeSimplex(double[] initialParams, double[] initialParamVariations, Random random) { var simp = Java.NewDoubleArray2(numVertices, numParams + 1 + numExtraArrayElements); /* simpTable.put(Thread.currentThread(), simp); */ if (initialParams != null) { for (int i = 0; i < numParams; i++) { if (double.IsNaN(initialParams[i])) { Array.Copy(initialParams, 0, simp[0], 0, Math.Min(initialParams.Length, numParams)); } } } evaluate(simp[0]); if (double.IsNaN(value(simp[0]))) { findValidInitalParams(simp[0], initialParamVariations, random); } if (double.IsNaN(value(simp[0]))) { return(null); } if (initializeSimplex(simp, initialParamVariations, random)) { return(simp); } else { return(null); } }