0

我正在制作一个遗传算法,但我遇到了突变问题。我想要做的是生成 30 个随机字符,它们将在我的有限状态机中充当 10 个状态(10 组 3 位数字),每 3 位的第一个数字必须在 1-4 之间,而其他 2 位数字必须在0-9。

生成数字后,我必须将它们转换为 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

我目前不能做的是只改变每第 n 个数字或确保每 3 个数字中的第一个数字在 1-4 之间,而其他数字保持在 0-9 之间。

如果它有帮助:combo{10}代表110202132224154246176368198100

4

1 回答 1

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
于 2014-12-19T05:20:17.590 回答