我正在制作遗传算法而且我遇到了突变问题。我想要做的是生成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
答案 0 :(得分: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