在MATLAB中约束遗传算法,使解都在2到20之间,并且都是整数

在MATLAB中约束遗传算法,使解都在2到20之间,并且都是整数,matlab,genetic-algorithm,Matlab,Genetic Algorithm,如何在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

如何在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 = []
但这只是试图用
[41872]


很抱歉,我不懂Matlab,但一般来说,在GA中,当解超出该范围时,可以设置一个低或0适应度,当解在该范围内时,可以设置一个更高的数值。

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

那么你可以使用IntCon

作为您的
myFitnessfcn

model=round(model);
if model > 20 || model < 2
   fitness=1e20;
else
   % evaluate the original fitness function
end
model=圆形(model);
如果型号>20 | |型号<2
适合度=1e20;
其他的
%评估原始适应度函数
结束

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

问题是,当ga试图用一个非整数或超出范围的数字计算myFitnessfcn时,它返回一个错误并停止。同样,我不知道matlab,但我会在适应度函数的开始处进行边界检查,如果超出范围,返回0或负无穷大或类似值,否则,评估适应度函数的其余部分。因此,您只需要检查错误输入,并在这些情况下返回可能的最低适应度分数,否则继续评估适应度。