コード例 #1
0
 public PsoOptimizer(double bestGlobalError, double[] bestGlobalPosition, Particle[] swarm,
                     PsoArguments psoArguments)
 {
     Arguments          = psoArguments;
     BestGlobalError    = bestGlobalError;
     Swarm              = swarm;
     BestGlobalPosition = bestGlobalPosition;
 }
コード例 #2
0
        /// <summary>
        /// Init PSO
        /// </summary>
        /// <returns></returns>
        public static PsoOptimizer Build(int dimensions,
                                         Func <double[], double> errorFunc,
                                         PsoArguments psoArguments)
        {
            var swarm = Enumerable.Range(0, psoArguments.SwarmSize)
                        .Select(i => new Particle(dimensions, errorFunc, psoArguments))
                        .ToArray();
            var bestGlobalError    = swarm[0].Objective;
            var bestGlobalPosition = new double[dimensions];

            swarm[0].Position.CopyTo(bestGlobalPosition, 0);


            var particleIndex = Enumerable.Range(0, swarm.Length).ToArray();


            // Update Ring Inline (Define which particle Learning from)
            for (var i = 0; i < particleIndex.Length; i++)
            {
                var informers         = new List <Particle>();
                var numberOfinformers = psoArguments.MaxInformers / 2;

                for (var n = 1; n <= numberOfinformers; n++)
                {
                    var p = i - n;
                    while (p < 0)
                    {
                        p = swarm.Length + p;
                    }
                    informers.Add(swarm[particleIndex[p]]);
                }

                numberOfinformers += psoArguments.MaxInformers % 2;
                for (var n = 1; n <= numberOfinformers; n++)
                {
                    var p = i + n;
                    while (p >= swarm.Length)
                    {
                        p = p - swarm.Length;
                    }
                    informers.Add(swarm[particleIndex[p]]);
                }

                swarm[particleIndex[i]].InformersList = informers;
            }

            return(new PsoOptimizer(bestGlobalError, bestGlobalPosition, swarm, psoArguments));
        }
コード例 #3
0
ファイル: Particle.cs プロジェクト: llenroc/QuantTC
 /// <summary>
 ///
 /// </summary>
 /// <param name="dimensions"></param>
 /// <param name="errorFunc"></param>
 public Particle(int dimensions, Func <double[], double> errorFunc, PsoArguments arguments)
 {
     Random        = new Random();
     Dimensions    = dimensions;
     Arguments     = arguments;
     ErrorFunc     = errorFunc;
     InformersList = new List <Particle>();
     Velocity      = Enumerable.Range(0, Dimensions)
                     .Select(i => Random.NextDouble(Arguments.RangeMin, Arguments.RangeMax)).ToArray();
     Position = Enumerable.Range(0, Dimensions)
                .Select(i => Random.NextDouble(Arguments.RangeMin, Arguments.RangeMax)).ToArray();
     BestPosition = new double[Dimensions];
     Position.CopyTo(BestPosition, 0);
     Objective = ErrorFunc(Position);
     BestError = Objective;
 }