从事涉及遗传算法的任务(大量的头痛,大量的乐趣)。我需要能够测试不同的交叉方法和不同的变异方法,以比较它们的结果(我必须为课程写的部分论文)。因此,我只想将函数名称作为函数句柄传递给 Repopulate 方法。
function newpop = Repopulate(population, crossOverMethod, mutationMethod)
...
child = crossOverMethod(parent1, parent2, @mutationMethod);
...
function child = crossOverMethod(parent1, parent2, mutationMethod)
...
if (mutateThisChild == true)
child = mutationMethod(child);
end
...
这里的关键点就像3,参数3:我如何将mutationMethod向下传递另一个级别?如果我使用 @ 符号,我会被告知:
"mutationMethod" was previously used as a variable,
conflicting with its use here as the name of a function or command.
如果我不使用@ 符号,那么mutationMethod 会被调用,没有参数,并且非常不高兴。
虽然我知道是的,但我可以重写我的代码以使其以不同的方式工作,但我现在很好奇如何让它真正工作。
任何帮助是极大的赞赏。