Exemple #1
0
            private static Point GetRandom(Point min, Point max)
            {
                var   r = new MathNet.Numerics.Random.CryptoRandomSource();
                Point p = new Point(min);

                p.x += r.NextDouble() * (max.x - min.x);
                p.y += r.NextDouble() * (max.y - min.y);
                return(p);
            }
Exemple #2
0
            /// <summary>
            /// Создать частицу в окне решений
            /// </summary>
            /// <param name="min">Минимальные возможные значения положения</param>
            /// <param name="max">Максимальные возможные значения положения</param>
            /// <param name="f">Целевая функция</param>
            public Bee(Vectors min, Vectors max, Func <Vectors, double> f)
            {
                var r = new MathNet.Numerics.Random.CryptoRandomSource();

                x = new Vectors(min);
                for (int i = 0; i < x.Deg; i++)
                {
                    x[i] += r.NextDouble() * (max[i] - min[i]);
                }
                // v = null;f = null;bestval = double.MaxValue;p = null;

                WhenX(min, max, f);
            }
Exemple #3
0
            /// <summary>
            /// Задать пчелу по известному начальному положению
            /// </summary>
            /// <param name="x"></param>
            /// <param name="min"></param>
            /// <param name="max"></param>
            /// <param name="f"></param>
            public Bee1D(double x, double min, double max, Func <double, double> f)
            {
                random = new MathNet.Numerics.Random.CryptoRandomSource();
                this.x = x;

                p       = x;
                this.f  = new Func <double, double>(f);
                bestval = f(p);

                double vmax = (max - min), vmin = -vmax;

                v = vmin;
                v = random.NextDouble() * (vmax - vmin);
            }
Exemple #4
0
            /// <summary>
            /// Задать пчелу по известному начальному положению
            /// </summary>
            /// <param name="x"></param>
            /// <param name="min"></param>
            /// <param name="max"></param>
            /// <param name="f"></param>
            public Bee2D(Point x, Point min, Point max, Func <Point, double> f)
            {
                random = new MathNet.Numerics.Random.CryptoRandomSource();
                this.x = x;

                p       = x;
                this.f  = new Func <Point, double>(f);
                bestval = f(p);

                Point vmax = (max - min), vmin = -vmax;

                v   = vmin;
                v.x = random.NextDouble() * (vmax.x - vmin.x);
                v.y = random.NextDouble() * (vmax.y - vmin.y);
            }
Exemple #5
0
            /// <summary>
            /// Переопределить скорость
            /// </summary>
            /// <param name="w">Коэффициент инерции</param>
            /// <param name="fp">Весовой коэффициент для p</param>
            /// <param name="fg">Весовой коэффициент для g</param>
            /// <param name="g">Наилучшее положение по рою</param>
            public void RecalcVOld(double w, double fp, double fg, Vectors g)
            {
                var    r  = new MathNet.Numerics.Random.CryptoRandomSource();
                double fi = fg + fp;

                Vectors rp = new Vectors(v.Deg), rg = new Vectors(v.Deg);

                for (int i = 0; i < v.Deg; i++)
                {
                    rp[i] = r.NextDouble();
                    rg[i] = r.NextDouble();
                }

                v = 2 * w / Math.Abs(2 - fi - Math.Sqrt(fi * (fi - 4))) * (v + fp * Vectors.CompMult(rp, p - x) + fg * Vectors.CompMult(rg, g - x));
            }
Exemple #6
0
            /// <summary>
            /// Задать наилучшее положение и случайные скорости, когда x уже известно
            /// </summary>
            /// <param name="min"></param>
            /// <param name="max"></param>
            /// <param name="f"></param>
            public void WhenX(Vectors min, Vectors max, Func <Vectors, double> f)
            {
                var r = new MathNet.Numerics.Random.CryptoRandomSource();

                p       = new Vectors(x);
                this.f  = new Func <Vectors, double>(f);
                bestval = f(p);

                Vectors vmax = (max - min), vmin = -vmax;

                v = new Vectors(vmin);
                for (int i = 0; i < x.Deg; i++)
                {
                    v[i] += r.NextDouble() * (vmax[i] - vmin[i]);
                }
            }