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

时间:2014-03-20 22:22:27

标签: 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 = 20
nonlcon = []

但这只是尝试用myFitnessfcn

评估[4, 1872]

Here is the MATLAB page on ga

2 个答案:

答案 0 :(得分:2)

InitialPopulation的选项中查看PopInitRangegaoptimset。 你可以初始化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适应度,当它在范围内时,可以设置更高的数字。