ランダムシミュレーションDNA突然変異についての反省


前回の記事では、DNAの1つの位置をランダムに選択し、4つの塩基からランダムに1つの塩基を選択し、ランダムに選択した塩基でDNAのある位置の塩基を置換した.
この過程で何か問題があるかどうか考えてみましょう.突然変異は本当に発生しましたか?
前の文章から、その中の数行の出力結果が同じであることが観察されました.
何がこのような結果をもたらしたのか.
考えてみましょう.私たちが選んだ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; }

だから私たちはプログラムを設計する時、いろいろな状況を十分に考慮して、抜け穴が現れないようにしなければなりません.