ランダムシミュレーションDNA突然変異についての反省
前回の記事では、DNAの1つの位置をランダムに選択し、4つの塩基からランダムに1つの塩基を選択し、ランダムに選択した塩基でDNAのある位置の塩基を置換した.
この過程で何か問題があるかどうか考えてみましょう.突然変異は本当に発生しましたか?
前の文章から、その中の数行の出力結果が同じであることが観察されました.
何がこのような結果をもたらしたのか.
考えてみましょう.私たちが選んだDNA配列の中の塩基と私たちが4つの塩基から選んだ塩基は、私たちのプログラムでは特に規定されていません.もし以下の場合、私たちが選んだDNAの中の塩基は私たちが選んだ4つの塩基の中の1つと同じであれば、私たちは結果が同じで、何の変化もありません.
では、どうすればいいのでしょうか.
選択した2つの塩基を比較するだけで、彼らが同じであれば、次のサイクルを行い、等しくなければ、次のステップの操作を行います.
だから私たちはプログラムを設計する時、いろいろな状況を十分に考慮して、抜け穴が現れないようにしなければなりません.
この過程で何か問題があるかどうか考えてみましょう.突然変異は本当に発生しましたか?
前の文章から、その中の数行の出力結果が同じであることが観察されました.
何がこのような結果をもたらしたのか.
考えてみましょう.私たちが選んだDNA配列の中の塩基と私たちが4つの塩基から選んだ塩基は、私たちのプログラムでは特に規定されていません.もし以下の場合、私たちが選んだDNAの中の塩基は私たちが選んだ4つの塩基の中の1つと同じであれば、私たちは結果が同じで、何の変化もありません.
では、どうすればいいのでしょうか.
選択した2つの塩基を比較するだけで、彼らが同じであれば、次のサイクルを行い、等しくなければ、次のステップの操作を行います.
use strict;
use warnings;
#
my $DNA="AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
";
my $i;
my $mutant;
srand(time|$$);
$mutant=mutate($DNA);
print "Mutate
". $DNA;
print "Here is the original DNA:
";
print "$DNA
";
print "Here is the mutant DNA:
";
print "$mutant
";
print "Here are 10 more successive mutations:
";
for ($i=0;$i<10;++$i)
{
$mutant=mutate($mutant);
print "$mutant
";
}
# :
sub randomposition
{
my($string)=@_;
return int(rand(length($string)));
}
# :
sub randelement
{
my(@array)=@_;
return $array[rand @array];
}
# : , ATGC
sub randomnucleotide
{
my (@nucleotides)=qw/A T G C/;
return randelement(@nucleotides);
}
# :
sub mutate
{
my($dna)=@_;
my(@nucleotides)=qw(A T G C);
my($position)=randomposition($dna);
my $newbase;
do#
{
$newbase=randomnucleotide(@nucleotides);
}
until( $newbase ne substr($dna,$position,1));
substr($dna,$position,1,$newbase);#substr($string,$initial_position,$length,replacement substring)
return $dna;
}
だから私たちはプログラムを設計する時、いろいろな状況を十分に考慮して、抜け穴が現れないようにしなければなりません.