在MATLAB中对遗传算法进行约束,使其解均在2 ~ 20之间,且为整数



我如何在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 = []

但这只是试图用[4, 1872]myFitnessfcn

这里是ga的MATLAB页面

参见gaoptimset选项中的InitialPopulationPopInitRange。您可以初始化范围为2到20的整数序列作为初始总体。

则可以使用IntCon

作为myFitnessfcn

中的第一条语句
model=round(model);
if model > 20 || model < 2
   fitness=1e20;
else
   % evaluate the original fitness function
end

这样给适应度函数的模型参数总是整数。由于任何值小于2或大于20的模型都将被赋予非常糟糕的适应度值(例如1e20),这基本上就是Simon所说的,这样的模型将在2-3代后自动从种群中移除。

对不起,我不懂Matlab,但一般在GA中,当解在该范围之外时,您可以设置低或0适应度,当它在该范围内时,可以设置一些更高的数字。

最新更新