コード例 #1
0
        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);
        }
コード例 #2
0
        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);
            }
        }
コード例 #3
0
        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);
        }
コード例 #4
0
            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);
            }