将遗传算法染色体中的基因限制为整数倍

时间:2013-03-13 22:23:19

标签: matlab genetic-algorithm

如果我使用matlab中的GA,有没有办法将染色体中的基因限制为10000的整数倍?

我有一个类似这样的染色体{Pdg1 Pdg2 ... Pdg33},我需要0<=Pdgn<=400000 n=1,2..,33mod(Pdgn ,10000)=0。 matlab中的GA(多目标优化算法)是否允许这样做?如果是,怎么样?

1 个答案:

答案 0 :(得分:1)

gamultiobj不支持整数约束。我通常执行标量化并使用普通ga

function res = scalarizedFitness(x)
    [obj1, obj2, obj3] = yourFitnessFunction(x);
    %choose w1, w2, w3
    res = w1 * obj1 + w2 * obj2 + w3 * obj3;
end

避免标量化的方法是为gamultiobj编写自己的变异函数。我从来没有这样做过。 Here是关于它的一些注释。

ga支持整数约束,因为某些版本。我的2011b支持它。输入help ga并查看其是否包含行X = ga(FITNESSFCN,NVARS,A,b,[],[],lb,ub,NONLCON,INTCON)。请注意INTCON参数,用于表示哪些参数是整数。

0<=Pdgn<=400000:您可以使用lbub参数设置下限和上限。

mod(Pdgn ,10000)=0有不同的方法可以放置复杂的约束。我想最适合你的是改变你的健身功能:

f(Pdgn) where 0<=Pdgn<40000f(X) where 0<X<40 and Pdgn = X * 10000

结果代码可能看起来像

function result = fitnessfun(X)
    Pgds = X * 10000;
    result = scalarizedFitness(Pgds);
end

NVARS = 33;
%lower bounds
lb = 0 * ones(1, NVARS);
%upper bounds
ub = 40 * ones(1, NVARS);
%which variables are integers (all of them)
intcon = 1:NVARS;
result = ga(@fintessfun, NVARS, [], [], [], [], lb, ub, [], intcon);