如果我使用matlab的遗传算法,有没有办法将染色体中的基因限制为整数倍,比如10000?
我有一个像这样的染色体,我需要n=1,2..,33
和mod(Pdgn ,10000)=0
。matlab中的遗传算法(多目标优化算法)允许这样做吗?如果是,是如何实现的?
发布于 2013-03-14 07:38:01
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
:可以通过lb
和ub
参数设置下限和上界。
mod(Pdgn ,10000)=0
有不同的方法来放置复杂的约束。我想对你来说最好的方法是改变你的适应度函数:
从f(Pdgn) where 0<=Pdgn<40000
到f(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);
https://stackoverflow.com/questions/15397662
复制相似问题