Algorithm-Evolutionary-Fitness
view release on metacpan or search on metacpan
lib/Algorithm/Evolutionary/Fitness/Knapsack.pm view on Meta::CPAN
use strict; # -*- cperl -*-
use warnings;
use lib qw( ../../../../lib );
=head1 NAME
Algorithm::Evolutionary::Fitness::Knapsack - Fitness function for the knapsack problem
=head1 SYNOPSIS
my $n_max=100; #Max. number of elements to choose
my $capacity=286; #Max. Capacity of the knapsack
my $rho=5.0625; #Penalty coeficient
my @profits = qw( 1..100 );
my @weights = qw( 2.. 101 );
my $knapsack = Algorithm::Evolutionary::Fitness::Knapsack->new( $n_max, $capacity, $rho, \@profits, \@weights );
=head1 DESCRIPTION
Knapsack function with penalties applied in a particular way.
=head1 METHODS
=cut
package Algorithm::Evolutionary::Fitness::Knapsack;
our ($VERSION) = ( '$Revision: 3.1 $ ' =~ / (\d+\.\d+)/ ) ;
use Carp qw( croak );
use base qw(Algorithm::Evolutionary::Fitness::String);
=head2 new
Creates a new instance of the problem, with the said number of bits and peaks
=cut
sub new {
my $class = shift;
my ( $n_max, $capacity, $rho, $profits_ref, $weights_ref ) = @_;
if ( ((scalar @$profits_ref) != $n_max ) ||
((scalar @$weights_ref) != $n_max ) ) {
croak "Wrong number of profits";
}
if ( (scalar @$profits_ref) != ( scalar @$weights_ref ) ) {
croak "Profits and weights differ";
}
#Instantiate superclass
my $self = $class->SUPER::new();
$self->{'capacity'} = $capacity;
$self->{ 'rho' } = $rho;
$self->{ 'profits'} = $profits_ref;
$self->{ 'weights'} = $weights_ref;
$self->initialize();
return $self;
}
( run in 1.290 second using v1.01-cache-2.11-cpan-39bf76dae61 )