多目标遗传算法适应度评估Matlab

时间:2014-06-25 06:52:34

标签: matlab artificial-intelligence genetic-algorithm fitness

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

1 个答案:

答案 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。