AI-Pathfinding-OptimizeMultiple
view release on metacpan - search on metacpan
view release on metacpan or search on metacpan
}
],
"include_underscores" : 0
},
"Dist::Zilla::Role::MetaProvider::Provider" : {
"$Dist::Zilla::Role::MetaProvider::Provider::VERSION" : "2.002004",
"inherit_missing" : 1,
"inherit_version" : 1,
"meta_noindex" : 1
},
"Dist::Zilla::Role::ModuleMetadata" : {
"Module::Metadata" : "1.000037",
"version" : "0.006"
}
},
"name" : "@Filter/MetaProvides::Package",
"version" : "2.004003"
},
{
"class" : "Dist::Zilla::Plugin::MetaResources",
"name" : "@Filter/MetaResources",
"version" : "6.024"
-
class: Dist::Zilla::Plugin::FinderCode
name: '@Filter/MetaProvides::Package/AUTOVIV/:InstallModulesPM'
version: '6.024'
include_underscores: 0
Dist::Zilla::Role::MetaProvider::Provider:
$Dist::Zilla::Role::MetaProvider::Provider::VERSION: '2.002004'
inherit_missing: '1'
inherit_version: '1'
meta_noindex: '1'
Dist::Zilla::Role::ModuleMetadata:
Module::Metadata: '1.000037'
version: '0.006'
name: '@Filter/MetaProvides::Package'
version: '2.004003'
-
class: Dist::Zilla::Plugin::MetaResources
name: '@Filter/MetaResources'
version: '6.024'
-
class: Dist::Zilla::Plugin::ModuleBuild
config:
bin/optimize-game-ai-multi-tasking view on Meta::CPAN
optimize-game-ai-multi-tasking - command line driver for L<AI::Pathfinding::OptimizeMultiple>
=head1 VERSION
version 0.0.17
=head1 DESCRIPTION
To be written.
=for :stopwords cpan testmatrix url bugtracker rt cpants kwalitee diff irc mailto metadata placeholders metacpan
=head1 SUPPORT
=head2 Websites
The following websites have more information about this module, and may be of help to you. As always,
in addition to those websites please use your favorite search engine to discover more resources.
=over 4
lib/AI/Pathfinding/OptimizeMultiple.pm view on Meta::CPAN
use AI::Pathfinding::OptimizeMultiple::SimulationResults ();
use MooX qw/late/;
use PDL;
use Scalar::Util qw/ blessed /;
has chosen_scans => ( isa => 'ArrayRef', is => 'rw' );
has _iter_idx => ( isa => 'Int', is => 'rw', default => sub { 0; }, );
has _num_boards => ( isa => 'Int', is => 'ro', init_arg => 'num_boards', );
has _orig_scans_data => ( isa => 'PDL', is => 'rw' );
has _optimize_for => ( isa => 'Str', is => 'ro', init_arg => 'optimize_for', );
has _scans_data => ( isa => 'PDL', is => 'rw' );
has _selected_scans =>
( isa => 'ArrayRef', is => 'ro', init_arg => 'selected_scans', );
has _status => ( isa => 'Str', is => 'rw' );
has _quotas => ( isa => 'ArrayRef[Int]', is => 'ro', init_arg => 'quotas' );
has _total_boards_solved => ( isa => 'Int', is => 'rw' );
has _total_iters => ( is => 'rw' );
has _trace_cb =>
( isa => 'Maybe[CodeRef]', is => 'ro', init_arg => 'trace_cb' );
has _scans_meta_data => ( isa => 'ArrayRef', is => 'ro', init_arg => 'scans' );
has _scans_iters_pdls =>
( isa => 'HashRef', is => 'rw', init_arg => 'scans_iters_pdls' );
has _stats_factors => (
isa => 'HashRef',
is => 'ro',
init_arg => 'stats_factors',
default => sub { return +{}; },
);
sub BUILD
{
my $self = shift;
my $args = shift;
my $scans_data = PDL::cat(
map {
my $id = $_->id();
my $pdl = $self->_scans_iters_pdls()->{$id};
my $factor = $self->_stats_factors->{$id};
(
defined($factor)
? ( ( $pdl >= 0 ) * ( ( $pdl / $factor )->ceil() ) +
( $pdl < 0 ) * $pdl )
: $pdl
);
} @{ $self->_selected_scans() }
);
$self->_orig_scans_data($scans_data);
$self->_scans_data( $self->_orig_scans_data()->copy() );
return 0;
}
my $BOARDS_DIM = 0;
my $SCANS_DIM = 1;
my $STATISTICS_DIM = 2;
sub _next_iter_idx
{
lib/AI/Pathfinding/OptimizeMultiple/DataInputObj.pm view on Meta::CPAN
return ( ( !@proc_stat ) || ( $orig_stat[9] > $proc_stat[9] ) );
}
# Number of numbers in the header of the solutions' iteration counts
my $NUM_NUMBERS_IN_HEADER = 3;
my $HEADER_START_BOARD_IDX = 0;
my $HEADER_NUM_BOARDS = 1;
my $HEADER_ITERATIONS_LIMIT = 2;
sub _get_scans_data_helper
{
my $self = shift;
my $selected_scans = $self->selected_scans();
my $start_board = $self->start_board();
my $scans_data = {};
my $scans_lens_data = {};
my $data_dir = ".data-proc";
my $lens_dir = ".data-len-proc";
mkpath( [ $data_dir, $lens_dir ] );
foreach my $scan (@$selected_scans)
{
{
my $dest_path = $data_dir . "/" . $scan->id();
{
if (
$self->_should_update(
$scan->data_file_path(), $dest_path
)
)
{
my $data_s = _slurp( $scan->data_file_path() );
my @array = unpack( "l*", $data_s );
if ( ( $array[$HEADER_START_BOARD_IDX] != 1 )
|| ( $array[$HEADER_NUM_BOARDS] < $self->num_boards ) )
{
die "Incorrect file format in scan "
. $scan->{'id'} . "!\n";
}
my $c = pdl( \@array );
writefraw( $c, $dest_path );
}
}
{
my $start_idx = $NUM_NUMBERS_IN_HEADER + ( $start_board - 1 );
my $scan_vec = readfraw($dest_path);
$scans_data->{ $scan->id() } =
$scan_vec->slice( $start_idx . ":"
. ( $start_idx + $self->num_boards() - 1 ) );
}
}
{
my $src = $scan->data_file_path();
my $dest = "$lens_dir/" . $scan->id();
if ( $self->_should_update( $src, $dest ) )
{
my $data_s = _slurp($src);
my @iters = unpack( "l*", $data_s );
if ( ( $iters[0] != 1 ) || ( $iters[1] < $self->num_boards() ) )
{
die "Incorrect file format in scan " . $scan->id() . "!\n";
}
# Remove the header
splice @iters, 0, $NUM_NUMBERS_IN_HEADER;
my $c = pdl(
[
\@iters,
$self->_read_text_ints_file(
"data/" . $scan->id() . ".fcs.moves.txt"
),
$self->_read_text_ints_file(
"data/" . $scan->id() . ".fcpro.moves.txt"
),
]
);
writefraw( $c, $dest );
}
{
my $scan_vec = readfraw($dest);
$scans_lens_data->{ $scan->id() } = $scan_vec->slice(
sprintf( "%d:%d,:,*",
( $start_board - 1 ),
( ( $self->num_boards() - 1 ) + ( $start_board - 1 ) ) )
)->xchg( 1, 2 );
}
}
}
return { 'scans' => $scans_data, 'with_lens' => $scans_lens_data };
}
sub _get_scans_data_generic
{
my ( $self, $id ) = @_;
return $self->_get_scans_data_helper()->{$id};
}
sub get_scans_iters_pdls
{
my $self = shift;
return $self->_get_scans_data_generic('scans');
}
sub get_scans_lens_iters_pdls
{
my $self = shift;
return $self->_get_scans_data_generic('with_lens');
}
sub _filter_scans_based_on_black_list_ids
{
my ( $scans, $black_list_ids ) = @_;
my %black_list = ( map { /(\d+)/ ? ( $1 => 1 ) : () } @$black_list_ids );
return [ grep { !exists( $black_list{ $_->id() } ) } @$scans ];
}
sub _is_scan_suitable
{
my ( $self, $scan ) = @_;
my @stat = stat( $scan->data_file_path() );
return (
scalar(@stat)
&& ( $stat[7] >=
12 + ( $self->num_boards() + $self->start_board() - 1 ) * 4 )
);
}
sub _get_scans_registry_file_path
{
return "scans.txt";
lib/AI/Pathfinding/OptimizeMultiple/PostProcessor.pm view on Meta::CPAN
=head1 SUBROUTINES/METHODS
=head2 $self->scans_rle()
For internal use.
=head2 $self->process($scans_orig)
For internal use.
=for :stopwords cpan testmatrix url bugtracker rt cpants kwalitee diff irc mailto metadata placeholders metacpan
=head1 SUPPORT
=head2 Websites
The following websites have more information about this module, and may be of help to you. As always,
in addition to those websites please use your favorite search engine to discover more resources.
=over 4
lib/AI/Pathfinding/OptimizeMultiple/Scan.pm view on Meta::CPAN
my $self = shift;
$self->used(1);
}
sub is_used
{
my $self = shift;
return $self->used();
}
sub data_file_path
{
my $self = shift;
return "./data/" . $self->id() . ".data.bin";
}
1;
__END__
=pod
=encoding UTF-8
lib/AI/Pathfinding/OptimizeMultiple/SimulationResults.pm view on Meta::CPAN
Returns the status.
=head1 SEE ALSO
L<AI::Pathfinding::OptimizeMultiple> , L<AI::Pathfinding::OptimizeMultiple::ScanRun> .
=head1 AUTHOR
Shlomi Fish, L<http://www.shlomifish.org/> .
=for :stopwords cpan testmatrix url bugtracker rt cpants kwalitee diff irc mailto metadata placeholders metacpan
=head1 SUPPORT
=head2 Websites
The following websites have more information about this module, and may be of help to you. As always,
in addition to those websites please use your favorite search engine to discover more resources.
=over 4
t/optimize-multiple-full-test.t view on Meta::CPAN
use Test::More tests => 4;
use Test::Differences qw(eq_or_diff);
use PDL (qw/ pdl /);
use AI::Pathfinding::OptimizeMultiple ();
# TEST:$c=0;
sub test_based_on_data
{
local $Test::Builder::Level = $Test::Builder::Level + 1;
my ( $scans_aref, $quotas_aref, $want_results, $stats_factors, $blurb ) =
@_;
my $results_aref = [];
my $selected_scans = [
map {
my $id = $_->{name};
AI::Pathfinding::OptimizeMultiple::Scan->new(
id => $id,
cmd_line => "-l $id",
)
} @{$scans_aref},
];
my %num_boards = ( map { scalar( @{ $_->{data} } ) => 1 } @$scans_aref );
my @nums = keys(%num_boards);
if ( @nums != 1 )
{
Carp::confess("num is not 1.");
}
my $obj = AI::Pathfinding::OptimizeMultiple->new(
{
scans => [ map { +{ name => $_->{name} } } @$scans_aref, ],
num_boards => $nums[0],
scans_iters_pdls =>
{ map { $_->{name} => pdl( $_->{data} ), } @$scans_aref, },
quotas => $quotas_aref,
selected_scans => $selected_scans,
optimize_for => "speed",
( $stats_factors ? ( stats_factors => $stats_factors ) : () ),
}
);
$obj->calc_meta_scan();
my @have = (
view all matches for this distributionview release on metacpan - search on metacpan
( run in 2.814 seconds using v1.00-cache-2.02-grep-82fe00e-cpan-4673cadbf75 )