#matlab #artificial-intelligence #genetic-algorithm #fitness
#matlab #искусственный интеллект #генетический алгоритм #Фитнес
Вопрос:
Я хочу написать две целевые функции на основе NSGA2
генетического алгоритма в Matlab, однако я путаю входные хромосомы для оценки моих целей, а в моей целевой функции хромосомы не используются, я не знаю, как оценить целевую функцию в соответствии с хромосомами, в которых находится мой вызов функции evaluateObjective(chromosome(ii,:), V)
, и у меня следующие параметрыдля ввода.
S = [0.9 0.8 0.3 0.3];
W = [0.9 0.7 0.4 0.1];
P = [15 17 18];
T = [13 14 13];
V=4;
Моя функция желания:
Obj1: for all w belongs to W and p belongs to P
summation of (w*p)
Obj2: for all t belongs to T and s belongs to S
summation of (t*s)
И целевая функция:
function f = evaluateObjective(x, V) %x is the choromosome
% Objective function 1
sum = 0;
for i = 1 : V - 1
sum = sum - W((i))*P;
end
f(1) = sum;
% Objective function 2
sum = 0;
for i = 1 : V
sum = sum S*S(i);
end
f(2) = sum;
end
Ответ №1:
Из кода неясно, что именно вы делаете, поэтому я не могу быть конкретным. Однако:
Если f (X) = Y является функцией, подлежащей оптимизации, функция отображает вектор X (в пространстве решений) задачи в вектор Y (в целевом пространстве)
Клонирование и мутация хромосом выполняются в пространстве решений, в то время как оценка выполняется в объективном пространстве проблемы. То есть, если X является хромосомой, вы передаете в функцию оценки не саму хромосому, а ее отображение в объективном пространстве. это
fitness = evaluate(X, ...) //wrong
fitness = evaluate(f(X), ...) // correct
Алгоритм NSGA2, в частности, выбирает только недоминированные хромосомы, поэтому хромосома оценивается не сама по себе, а по сравнению с другими хромосомами в вашей популяции. Итак, вам нужно передать все все хромосомы и сохранить только те, для которых
all(f(X) <= f(X_i))
для каждого X_i в популяции.