a simple evoulutionary algorithm 1. the user can enter any user defined string as the evolutionary tareget up to 30 characters max

5 ビュー (過去 30 日間)
clc
clear
t= 'Hell world!';
numRands=length(t);
tlength=numRands;
source=t(ceil(rand(1,tlength)*numRands));
fitval = fitness(source, t);
i = 0;
while 1
i = i + 1;
m = mutate(source);
fitval_m = fitness(m, t);
if fitval_m < fitval
fitval = fitval_m;
source = m;
fprintf('%5i %5i %14s', i, fitval_m, m);
end
if fitval == 0
break
end
end
function fitval = fitness(source, t)
fitval = 0
for i = 1 : length(source)
fitval = fitval + (double(t(i)) - double(source(i))) ^ 2;
end
end
function parts = mutate(source)
parts = source;
charpos = randi(length(source)) - 1;
parts(charpos) = char(double(parts(charpos)) + (randi(3)-2));
end
  2 件のコメント
yared Zeleke
yared Zeleke 2018 年 3 月 30 日
編集済み: Walter Roberson 2018 年 3 月 31 日
The quation is
1. The user can enter any user defined string as the evolutionary target up to 30 characters max.
2. The program should randomly generate the first ‘source’ from which to mutate.
3. The program should print-out every 100th iteration the iteration and the current mutated source and its fitness in the command window.
I tried but I have some eror I need some one to correct it to me finally the result should be the same as t

サインインしてコメントする。

採用された回答

Walter Roberson
Walter Roberson 2018 年 3 月 31 日
You have
charpos = randi(length(source)) - 1;
The result of that can be 0 because randi might have generated a 1. You then have
parts(charpos) = char(double(parts(charpos)) + (randi(3)-2));
but charpos can be 0 so you can be attempting to index at location 0, which is not defined.
I do not know why you are subtracting 1 at the point?

その他の回答 (0 件)

カテゴリ

Help Center および File ExchangeLinear Algebra についてさらに検索

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!

Translated by