Я делаю простую симуляцию в Matlab.
У меня есть три стадии, в которых может находиться робот. Они Search
, Assess
или Recruit
.Если робот находится на каком-либо из этих этапов, необходимо выполнить определенные действия.Если робот закончил Search
, он должен перейти к Assess
.Если он закончил Assess
, то он должен перейти к Recruit
.Когда робот достигнет стадии Recruit
, начальная численность роботов должна уменьшиться на 1. Я сохраняю current_time
и уменьшение с number_of_robots_in_nest_initial
.Я нахожу какую-то проблему, чтобы выйти из цикла while и сохранить current_time
и number_of_robots_in_nest_initial
.Любая помощь, чтобы решить эту проблему будет оценена.
for_distribution = @(mean_time) log(1/(1-rand))/mean_time;
number_of_robots_in_nest_initial = 20
current_time = 0;
counter = 1;
state ='search';
mean_search_duration = 1998.849773195878;
mean_assessment_duration = [93.63,99.050];
mean_recruitment_duration = 136.756;
mean_threshold_time_to_pick_nest = [1309.01,1905.4];
while true
switch state
case 'search'
t = for_distribution(mean_search_duration);
current_time(counter+1) = current_time(counter) + t; %#ok<SAGROW>
state = 'assessing';
case 'assessing'
t = for_distribution(mean_assessment_duration(1));
current_time(counter+1) = current_time(counter) + t; %#ok<SAGROW>
if current_time > mean_time_to_pick_nest(1)
state = 'recruiting';
else
state = 'search';
end
case 'recruiting'
t = for_distribution(mean_recruitment_duration);
current_time(counter+1) = current_time(counter) + t; %#ok<SAGROW>
number_of_robots_in_nest_initial(current_time(counter+1)) = number_of_robots_in_nest_initial(current_time(counter)) - 1;
if number_of_robots_in_nest_initial(current_time) == 0
break
end
end
counter = counter+1;
end