1

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

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

4

1 回答 1

1

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

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

避免标量化的方法是为gamultiobj. 我从来没有这样做过。这里有一些关于它的注释。

ga从某些版本开始支持整数约束。我的 2011b 支持它。键入help ga并查找它是否包含该行X = ga(FITNESSFCN,NVARS,A,b,[],[],lb,ub,NONLCON,INTCON)。请注意,INTCON用于说明哪些参数是整数的参数。

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

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);
于 2013-03-13T23:38:00.827 回答