2014-12-19 2 views
0

Я делаю генетический алгоритм, и у меня возникают проблемы с мутацией. Я хочу создать 30 случайных символов, которые будут действовать как 10 состояний в моей конечной машине (10 наборов из 3 цифр), первая цифра каждого из трех должна быть между 1-4, а две другие цифры должны быть между 0-9.Попытка создать строку из 30 случайных чисел в виде строки

Как только я сгенерировал свои номера, я должен преобразовать их в строку из 30 символов. Я хотел бы только мутировать что-то вроде каждой пятой цифры.

Это то, что я в настоящее время пытается:

% mutate probability 0.2 
if (rand < 0.2) 
     % pick best chromosome to mutate 
      mut = combo{10}; 

      for t = 3:30 
       mut(t) = num2str(randi([0,9])); 
      end 
    end 

То, что я в настоящее время не может сделать, это мутировать только каждый энный цифра или убедитесь, что первый из каждых 3-х цифр между 1-4, сохраняя другие - между 0-9.

В случае, если это полезно: combo{10} представляет 110202132224154246176368198100

ответ

3

Не в полной мере понять, что вам по мутирует строки, но, чтобы получить строку из 30 случайных чисел, вы можете просто сделать следующее:

str_r = sprintf('%d', randi([0,9],1,30)); 
# modify selected characters. 
str_r(1:3:end) = sprintf('%d', randi([1,4],1,10)); 

Пример результат str_r является:

299334478355384287226314472383 
+0

мутирования строки просто означает изменение несколько цифр, извините, если я неправильно сформулированным. Мои строки состоят из 10 наборов из 3-х цифр, объединенных вместе, поэтому каждая первая и цифра каждого набора должны быть между 1-4, но две другие цифры должны быть между 0-9. 198 486 376 ... Можно ли это сделать? – JmJ

+0

@JmJ Я исправил anwser – Marcin

+0

Когда я пытаюсь добавить его в массив строк, используя 'first_gen = [''; ''; ''; ''; ''; ''; ''; ''; '' ; '']; 'и' first_gen (i) = {str_r}; 'Я получаю ошибку' Конверсия в char из ячейки невозможна. ' Вы знаете, как исправить это? – JmJ