public IHyperCube <double> GetCentroid(IHyperCube <double>[] points) { if (points == null) { return(null); } if (points.Length == 1) { return(points[0].Clone( ) as IHyperCube <double>); } IHyperCube <double> p = points[0].Clone( ) as IHyperCube <double>; string[] varNames = p.GetVariableNames(); foreach (string varName in varNames) { double val = 0.0; for (int i = 0; i < points.Length; i++) { val += points[i].GetValue(varName); } p.SetValue(varName, val / ((double)points.Length)); } return(p); }
public IHyperCube <double> GenerateRandomWithinHypercube(IHyperCube <double>[] points) { if (points.Length == 0) { return(this.GenerateRandom(points[0])); } else { IHyperCube <double> p = points[0].Clone() as IHyperCube <double>; string[] varNames = p.GetVariableNames(); for (int i = 0; i < varNames.Length; i++) { string v = varNames[i]; double minimum; double maximum; GetSmallestIntervalForValues(points, v, out minimum, out maximum); minimum = Math.Max(minimum, p.GetMinValue(v)); maximum = Math.Min(maximum, p.GetMaxValue(v)); checkFeasibleInterval(minimum, maximum, v); p.SetValue(varNames[i], GetRandomisedValue(minimum, maximum)); } return(p); } }
public IHyperCube <double> GenerateRandom(IHyperCube <double> point) { string[] varNames = point.GetVariableNames( ); IHyperCube <double> result = point.Clone( ) as IHyperCube <double>; for (int i = 0; i < varNames.Length; i++) { string v = varNames[i]; // We take the bounds of the result point, to cater for cascading parameter constraints. double min = result.GetMinValue(v); double max = result.GetMaxValue(v); checkFeasibleInterval(min, max, v); result.SetValue(varNames[i], GetRandomisedValue(min, max)); } return(result); }
private bool tryAdd(string varName, IHyperCube <U> sysConfig, double realStepSize) { var min = sysConfig.GetMinValue(varName).ToDouble(null); var max = sysConfig.GetMaxValue(varName).ToDouble(null); var val = sysConfig.GetValue(varName).ToDouble(null); var newval = val + realStepSize; bool result = true; if (newval < min) { newval = min; result = false; } else if (newval > max) { newval = max; result = false; } sysConfig.SetValue(varName, (U)((IConvertible)newval).ToType(typeof(U), CultureInfo.InvariantCulture)); return(result); }