AI-Termites
view release on metacpan or search on metacpan
lib/AI/Termites/LoginquitasPostulo.pm view on Meta::CPAN
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) {
return $self->{kdtree_ixs}[$wood_ix];
}
}
undef
}
sub termite_leave_wood_p {
my ($self, $termite) = @_;
my $pos = $termite->{pos};
my $near = $self->{near};
my ($wood_ix, $d) = $self->{kdtree}->find_nearest_neighbor($pos, $near);
if (defined $wood_ix and rand($near) > $d) {
return 1;
}
undef;
}
1;
lib/AI/Termites/NemusNidor.pm view on Meta::CPAN
my $near = $self->{near};
my $wood_ix = $self->{kdtree}->find_nearest_neighbor($pos, $near);
if (defined $wood_ix) {
my @near = $self->{kdtree}->find_in_ball($pos, $near * 3, $wood_ix);
my $density = $self->{mnm}->density_portion($pos, @near);
my $max = $self->{mnm_max};
$self->{mnm_max} = $max = $density if $density > $max;
# printf "take -> max: %6g, density: %6g. ratio: %02.7f\n", $max, $density, $density/$max * 100;
return $self->{kdtree_ixs}[$wood_ix] if $density < rand($max);
}
undef
}
sub termite_leave_wood_p {
my ($self, $termite) = @_;
my $pos = $termite->{pos};
my $near = $self->{near};
my @near = $self->{kdtree}->find_in_ball($pos, $near * 3);
my $density = $self->{mnm}->density_portion($pos, @near);
my $max = $self->{mnm_max};
$self->{mnm_max} = $max = $density if $density > $max;
# printf "leave -> max: %6g, density: %6g. ratio: %02.7f\n", $max, $density, $density/$max * 100;
return 1 if $density > rand($max);
undef;
}
1;
lib/AI/Termites/PeractioBaro.pm view on Meta::CPAN
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);
return $self->{kdtree_ixs}[$wood_ix] unless defined $second;
# say "two near $wood_ix - $second";
}
undef
}
sub termite_leave_wood_p {
my ($self, $termite) = @_;
my $pos = $termite->{pos};
my $near = $self->{near};
return defined $self->{kdtree}->find_nearest_neighbor($pos, $near);
undef;
}
1;
lib/AI/Termites/VicinusOccurro.pm view on Meta::CPAN
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 $count = $self->{kdtree}->find_in_ball($pos, $near, $wood_ix);
if (exp($self->{alpha} * $count) > rand) {
return $self->{kdtree_ixs}[$wood_ix];
}
}
undef
}
sub termite_leave_wood_p {
my ($self, $termite) = @_;
my $pos = $termite->{pos};
my $near = $self->{near};
my $count = $self->{kdtree}->find_in_ball($pos, $near);
if (exp($self->{alpha} * $count) < rand) {
return 1;
}
undef;
}
1;
( run in 1.688 second using v1.01-cache-2.11-cpan-d80b1682f3f )