最近在用perl写遗传算法的时候遇到了一些实际问题,譬如需要在函数中同时传递标量参数和多个数组;
下面我将用到的方法做一个简要介绍。为了简要说明问题,我用简化的函数示例
#该示例中,重组交换函数需要传递重组率cross_rate(标量),亲本1和亲本2的DNA序列(数组)。
代码如下:
#!usr/bin/perl -w
sub cross {
my $cross_rate = $_[0]; #传入重组率参数
my @parent1 = @{$_[1]}; #传入亲本1的DNA标记
my @parent2 = @{$_[2]}; #传入亲本2的DNA标记
my @result = ();
if($cross_rate > 0){
my @tmp = @parent1;
@parent1 = @parent2;
@parent2 = @tmp;
}
push(@result,[@parent1]);
push(@result,[@parent2]);
return @result; #将结果返回给二维的@result数组
}
#测试函数的运行结果
my @p1 = ( 2 .. 10);
my @p2 = (6 .. 14);
print "Before Corss:\n";
print "@p1\n";
print "@p2\n";
my @cross_result = &cross(0.5,\@p1,\@p2); #调用重组函数,并将函数运行结果返回给@cross_result
print "After Corss:\n";
print "@{$cross_result[0]}\n";
print "@{$cross_result[1]}\n";
程序运行结果如下: