- 论坛徽章:
- 0
|
程序效率低的可怕,如何提高一下呢,是不是这样随机是有问题的。大家提点意见!
#!/bin/perl
use strict;
my @x;
my $count = 0;
open OF, ">;hapresult.csv" or die("cannot write file!\n"
print OF ("x1,x2,x3,x4,x5,x6,x7,x8,r1,r2,r3,a1,a2,a3,a4,a5,a6,a\n"
while($count < 10){ #产生8个小于1的随机数;
my $sum = 0;
for my $i(0 .. 7) {
$x[$i] = rand();
$sum += $x[$i];
}
$x[$_] /= $sum foreach (0 .. 7);
my $r1=(($x[0]+$x[1])*($x[6]+$x[7])-($x[2]+$x[3])*($x[4]+$x[5]))*(($x[0]+$x[1])*($x[6]+$x[7])-($x[2]+$x[3])*($x[4]+$x[5]))/(($x[0]+$x[1]+$x[2]+$x[3])*($x[4]+$x[5]+$x[6]+$x[7])*($x[0]+$x[1]+$x[4]+$x[5])*($x[2]+$x[3]+$x[6]+$x[7]));
my $r2=(($x[0]+$x[4])*($x[3]+$x[7])-($x[2]+$x[6])*($x[1]+$x[5]))*(($x[0]+$x[4])*($x[3]+$x[7])-($x[2]+$x[6])*($x[1]+$x[5]))/(($x[0]+$x[4]+$x[2]+$x[6])*($x[1]+$x[5]+$x[3]+$x[7])*($x[0]+$x[4]+$x[1]+$x[5])*($x[2]+$x[6]+$x[3]+$x[7]));
my $r3=(($x[0]+$x[2])*($x[5]+$x[7])-($x[1]+$x[3])*($x[4]+$x[6]))*(($x[0]+$x[2])*($x[5]+$x[7])-($x[1]+$x[3])*($x[4]+$x[6]))/(($x[0]+$x[2]+$x[1]+$x[3])*($x[4]+$x[6]+$x[5]+$x[7])*($x[0]+$x[2]+$x[4]+$x[6])*($x[1]+$x[3]+$x[5]+$x[7]));
if ($r1 >; 0.7 and $r1 <0.8 and $r2 >; 0.7 and $r2 <0.8 and $r3 <$r1 and $r3 <$r2){
$count++;
my $A1=$x[0]/($x[0]+$x[2])-$x[1]/($x[1]+$x[3]);
my $A2=$x[0]/($x[0]+$x[2])-$x[4]/($x[4]+$x[6]);
my $A3=$x[1]/($x[1]+$x[3])-$x[4]/($x[4]+$x[6]);
my $A4=$x[0]/($x[0]+$x[2])-$x[5]/($x[5]+$x[7]);
my $A5=$x[1]/($x[1]+$x[3])-$x[5]/($x[5]+$x[7]);
my $A6=$x[4]/($x[4]+$x[6])-$x[5]/($x[5]+$x[7]);
my $a1=abs($A1);
my $a2=abs($A2);
my $a3=abs($A3);
my $a4=abs($A4);
my $a5=abs($A5);
my $a6=abs($A6);
($a1,$a2,$a3,$a4,$a5,$a6)=sort($a1,$a2,$a3,$a4,$a5,$a6);
my $a=$a6;
print OF $x[$_], ($_ == 7 ? ",$r1,$r2,$r3,$a1,$a2,$a3,$a4,$a5,$a6,$a,\n" : "," foreach (0 .. 7);
}
}
close(OF); |
|