1

我想在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 
4

1 回答 1

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。

于 2014-06-26T16:03:56.663 回答