AI-Termites
view release on metacpan or search on metacpan
lib/AI/Termites/LoginquitasPostulo.pm view on Meta::CPAN
use Math::Vector::Real;
use Math::Vector::Real::kdTree;
use parent 'AI::Termites';
sub before_termites_action {
my $self = shift;
my @ixs = grep !$self->{wood}[$_]{taken}, 0..$#{$self->{wood}};
$self->{kdtree_ixs} = \@ixs;
$self->{kdtree} = Math::Vector::Real::kdTree->new(map $_->{pos}, @{$self->{wood}}[@ixs]);
}
sub termite_take_wood_p {
my ($self, $termite) = @_;
my $pos = $termite->{pos};
my $near = $self->{near};
my $wood_ix = $self->{kdtree}->find_nearest_neighbor($pos, $near);
if (defined $wood_ix) {
my ($next_ix, $d) = $self->{kdtree}->find_nearest_neighbor($pos, $near, $wood_ix);
if (not defined $next_ix or rand($near) < $d) {
lib/AI/Termites/NemusNidor.pm view on Meta::CPAN
use Math::Vector::Real;
use Math::Vector::Real::kdTree;
use Math::Vector::Real::MultiNormalMixture;
use parent 'AI::Termites';
sub before_termites_action {
my $self = shift;
my @ixs = grep !$self->{wood}[$_]{taken}, 0..$#{$self->{wood}};
$self->{kdtree_ixs} = \@ixs;
$self->{kdtree} = Math::Vector::Real::kdTree->new(map $_->{pos}, @{$self->{wood}}[@ixs]);
my $sigma = $self->{near}**(-2) * log(2);
# print "sigma: $sigma\n";
my $mnm = Math::Vector::Real::MultiNormalMixture->new(mu => [map $_->{pos}, @{$self->{wood}}[@ixs]],
sigma => $sigma);
$self->{mnm} = $mnm;
$self->{mnm_max} = $mnm->max_density_estimation;
}
sub termite_take_wood_p {
my ($self, $termite) = @_;
my $pos = $termite->{pos};
my $near = $self->{near};
my $wood_ix = $self->{kdtree}->find_nearest_neighbor($pos, $near);
lib/AI/Termites/PeractioBaro.pm view on Meta::CPAN
use Math::Vector::Real;
use Math::Vector::Real::kdTree;
use parent 'AI::Termites';
sub before_termites_action {
my $self = shift;
my @ixs = grep !$self->{wood}[$_]{taken}, 0..$#{$self->{wood}};
# say '@ixs: ', scalar @ixs;
$self->{kdtree_ixs} = \@ixs;
$self->{kdtree} = Math::Vector::Real::kdTree->new(map $_->{pos}, @{$self->{wood}}[@ixs]);
}
sub termite_take_wood_p {
my ($self, $termite) = @_;
my $pos = $termite->{pos};
my $near = $self->{near};
my $wood_ix = $self->{kdtree}->find_nearest_neighbor($pos, $near);
if (defined $wood_ix) {
# say "one near $pos, $near";
my $second = $self->{kdtree}->find_nearest_neighbor($pos, $near, $wood_ix);
lib/AI/Termites/VicinusOccurro.pm view on Meta::CPAN
use Math::nSphere qw(nsphere_volumen);
use parent 'AI::Termites';
my $nlog2 = -log 2;
sub before_termites_action {
my $self = shift;
my @ixs = grep !$self->{wood}[$_]{taken}, 0..$#{$self->{wood}};
$self->{kdtree_ixs} = \@ixs;
$self->{kdtree} = Math::Vector::Real::kdTree->new(map $_->{pos}, @{$self->{wood}}[@ixs]);
# print "dim: $self->{dim}, near: $self->{near}, density: $self->{wood_density}\n";
$self->{alpha} = $nlog2/(nsphere_volumen($self->{dim} - 1, $self->{near}) * $self->{wood_density});
}
sub termite_take_wood_p {
my ($self, $termite) = @_;
my $pos = $termite->{pos};
( run in 0.348 second using v1.01-cache-2.11-cpan-49f99fa48dc )