сохранение эволюции событий в циклах - PullRequest
0 голосов
/ 25 октября 2018

Я делаю простую симуляцию в 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
...