我想在Matlab中基于NSGA2
遗传算法编写两个目标函数,但是,我很难混淆输入染色体来评估我的目标,而在我的目标函数中,染色体是未使用的,我我不知道如何根据我的函数调用为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
答案 0 :(得分:0)
从代码中不清楚你到底在做什么,所以我不能具体。但是:
如果f(X)= Y是要优化的函数,则函数将问题的X向量(在决策空间中)映射到Y向量(在目标中)空间)
染色体的克隆和突变发生在决策空间中,而评估是在问题的客观空间中完成的。也就是说,如果X是染色体,则不能将染色体本身传递给评估函数,而是将其映射到客观空间。
fitness = evaluate(X, ...) //wrong
fitness = evaluate(f(X), ...) // correct
NSGA2算法特别选择非支配染色体,因此染色体本身不进行评估,而是与人群中的其他染色体进行比较。因此,您必须传递所有染色体,并且只保留这些染色体
all(f(X) <= f(X_i))
对于人口中的每个X_i。