AI-ParticleSwarmOptimization
view release on metacpan or search on metacpan
- Changed module name from AI::PSO::OO to AI::ParticleSwarmOptimization
on suggestion of PAUSE admins
1.004
- call srand in init if -seedRand value was provided
- added plateau early exit code contributed by Kevin Balbi
1.005
- Remove POD test files from distribution
- Remove bogus print left over from dev testing
- Fix possible undef warning
1.006
- Fix Makefile.pl / Makefile.PL issue that caused *nix installs to fail!
lib/AI/ParticleSwarmOptimization.pm view on Meta::CPAN
"-dimensions must be set to 1 or greater before init or optimize is called"
unless $self->{dimensions} and $self->{dimensions} >= 1;
my $seed =
int (exists $self->{randSeed} ? $self->{randSeed} : rand (0xffffffff));
$self->{rndGen} = Math::Random::MT->new ($seed);
$self->{usedRandSeed} = $seed;
$self->{prtcls} = [];
$self->{bestBest} = undef;
$self->{bestBestByIter} = undef;
$self->{bestsMean} = 0;
$self->_initParticles ();
$self->{iterCount} = 0;
# Normalise weights.
my $totalWeight =
$self->{inertia} + $self->{themWeight} + $self->{meWeight};
$self->{inertia} /= $totalWeight;
$self->{meWeight} /= $totalWeight;
lib/AI/ParticleSwarmOptimization.pm view on Meta::CPAN
@bests = sort {$prtcls->[$a]{bestFit} <=> $prtcls->[$b]{bestFit}} @bests;
$num ||= 1;
return @bests[0 .. $num - 1];
}
sub getParticleBestPos {
my ($self, $prtcl) = @_;
return undef if $prtcl >= $self->{numParticles};
$prtcl = $self->{prtcls}[$prtcl];
return ($prtcl->{bestFit}, @{$prtcl->{bestPos}});
}
sub getIterationCount {
my ($self) = @_;
return $self->{iterCount};
lib/AI/ParticleSwarmOptimization.pm view on Meta::CPAN
printf "Part %3d fit %8.2f", $prtcl->{id}, $fit
if $self->{verbose} >= 2;
printf " (%s @ %s)",
join (', ', map {sprintf '%5.3f', $_} @{$prtcl->{velocity}}),
join (', ', map {sprintf '%5.2f', $_} @{$prtcl->{currPos}})
if $self->{verbose} & kLogDetail;
print "\n";
}
return undef;
}
sub _saveBest {
my ($self, $prtcl, $fit, $iter) = @_;
# for each dimension, set the best position as the current position
@{$prtcl->{bestPos}} = @{$prtcl->{currPos}};
$prtcl->{bestFit} = $fit;
lib/AI/ParticleSwarmOptimization.pm view on Meta::CPAN
A range based on 1/100th of -I<-posMax> - I<-posMin> is used for the initial
speed in each dimension of the velocity vector if a random start velocity is
used.
=item I<-stallSpeed>: positive number, optional
Speed below which a particle is considered to be stalled and is repositioned to
a new random location with a new initial speed.
By default I<-stallSpeed> is undefined but particles with a speed of 0 will be
repositioned.
=item I<-themWeight>: number, optional
Coefficient determining the influence of the neighbourhod best position on the
next iterations velocity. Defaults to 0.5.
See also I<-inertia> and I<-meWeight>.
=item I<-exitPlateau>: boolean, optional
Set true to have the optimization check for plateaus (regions where the fit
hasn't improved much for a while) during the search. The optimization ends when
a suitable plateau is detected following the burn in period.
Defaults to undefined (option disabled).
=item I<-exitPlateauDP>: number, optional
Specify the number of decimal places to compare between the current fitness
function value and the mean of the previous I<-exitPlateauWindow> values.
Defaults to 10.
=item I<-exitPlateauWindow>: number, optional
( run in 2.631 seconds using v1.01-cache-2.11-cpan-d80b1682f3f )