Скорость и кукуруза - это один из вариантов добавления облачного наблюдения с помощью функции Lambda, но в соответствии с вашими требованиями вы можете сделать что-то вроде
Когда лямбда-один запускает и завершает выполнение, вы можете добавить код с конечной точкой другого лямбда. так как вы хотите запустить его через два часа, вы можете установить время, используя node-cron . Поэтому один лямбда-один будет запускаться после этого, он будет запускать функцию лямбда-два, используя конечную точку, где время в 2 часа управляется узел-крон .
Если вы используете Python, то вы можете использовать планировщик
import schedule
import time
def job():
print("I'm working...Triggering another lambda end point")
schedule.every(10).minutes.do(job)
schedule.every().hour.do(job)
schedule.every().day.at("10:30").do(job)
while 1:
schedule.run_pending()
time.sleep(1)
Как маленькая оптимизация, замена:
$roll = int(rand 4) + 1; # $roll is now an integer between 1 and 4
if ($roll == 1) {$base = A;}
elsif ($roll == 2) {$base = T;}
elsif ($roll == 3) {$base = C;}
elsif ($roll == 4) {$base = G;};
с
$base = $dna[int(rand 4)];
Править: Принятие уровня замены находится в диапазоне 0.001 к 1 000:
А также $roll
, генерируйте другое (псевдо) случайное число в диапазоне [1.. 1000], если это меньше чем или равно (1000 * $sub_rate) затем, выполняют замену, иначе ничего не сделайте (т.е. произведите).
Знайте, что можно представить тонкую предвзятость, если свойства генератора случайных чисел не известны.
Не точно, что Вы ищете, но я предлагаю, чтобы Вы смотрели на Био BioPerl:: SeqEvolution:: модуль DNAPoint. Это не берет уровень мутации в качестве параметра все же. Скорее это спрашивает, что нижнюю границу идентификационных данных последовательности с оригиналом Вы хотите.
use strict;
use warnings;
use Bio::Seq;
use Bio::SeqEvolution::Factory;
my $seq = Bio::Seq->new(-seq => 'AAAAAAAAAA', -alphabet => 'dna');
my $evolve = Bio::SeqEvolution::Factory->new (
-rate => 2, # transition/transversion rate
-seq => $seq
-identity => 50 # At least 50% identity with the original
);
my @mutated;
for (1..1000) { push @mutated, $evolve->next_seq }
Все 1 000 видоизмененных последовательностей будут сохранены в массиве @mutated, к их последовательностям можно получить доступ через seq
метод.
В случае замены Вы хотите исключить текущую основу из возможностей:
my @other_bases = grep { $_ ne substr($init_seq, $i, 1) } @dna;
$base = @other_bases[int(rand 3)];
Также см. ответ Mitch Wheat для того, как реализовать уровень замены.
Я не знаю, понимаю ли я правильно, но я сделал бы что-то вроде этого (псевдокод):
digits = 'ATCG'
base = 'AAAAAAAAAA'
MAX = 1000
for i = 1 to len(base)
# check if we have to mutate
mutate = 1+rand(MAX) <= rate*MAX
if mutate then
# find current A:0 T:1 C:2 G:3
current = digits.find(base[i])
# get a new position
# but ensure that it is not current
new = (j+1+rand(3)) mod 4
base[i] = digits[new]
end if
end for