如何在MATLAB中约束遗传算法,使解决方案都在2到20之间,并且是整数?
我正在使用该功能:
x = ga(@myFitnessfcn,nvars,A,b,[],[],LB,UB,nonlcon,IntCon)
myFitnessfcn接受两个输入并返回标量输出。
但是,myFitnessfcn只能接受2到20之间的整数输入。
我该如何实现?
到目前为止,我最好的尝试是:
A = [1, 1; -1, -1]
b = [20; -2]
IntCon = [1, 2]
LB = 2
UB = 20
nonlcon = []
但这只是尝试用myFitnessfcn
[4, 1872]
答案 0 :(得分:2)
在InitialPopulation
的选项中查看PopInitRange
和gaoptimset
。
你可以初始化2到20范围内的整数序列作为初始种群。
那么你可以使用IntCon。
OR
作为myFitnessfcn
model=round(model);
if model > 20 || model < 2
fitness=1e20;
else
% evaluate the original fitness function
end
这种方式输入到适应度函数的模型参数总是整数。并且由于任何具有小于2或大于20的值的模型将被赋予非常差的适应度值(例如1e20),这基本上是Simon所说的,这些模型将在2-3代后自动从群体中移除。
答案 1 :(得分:1)
对不起,我不知道Matlab,但一般来说,在GA中,当解决方案超出该范围时,您可以设置低或0适应度,当它在范围内时,可以设置更高的数字。