2013-05-12 109 views
2

我正在使用遗传算法在Matlab优化计算昂贵的适应度函数也有约束。我现在将惩罚限制在目标函数中,因为违反约束只能在函数求值的末尾计算。我想用nonlcon来满足约束条件。使用Matlab遗传算法优化昂贵的适应度函数约束

但我的问题是,健身功能评估是昂贵的,我不能再次做检查违反约束。我已经看到了一些嵌套的函数公式,其中使用输出函数I可以累积每一代的所有单个变量值。

根据我的想法,是否有可能有一个矩阵,我可以将所有的个人价值存储在一代生成更新开始时矩阵,而我的健身评估和当我调用nonlcon的约束评估,然后查找更新后的矩阵来约束违规。当我试图实现这一点时,我有一些疑问。

1)我记得我在一些论坛上outputfcn遗传算法中读书可以被称为无论是在开始一代年底。默认情况下,它在最后。如果它在最后调用,我将无法执行我的方法。可悲的是,我无法在一开始就找到如何调用outputfcn,​​而不是一代人的结束。

2)由于我的健身功能在计算上很昂贵,我正在使用并行评估。那么,在Matlab中使用并行选项时可能会实现上述想法,否则会产生一些困难?

回答

0

你还在寻找答案?我有一个类似的问题,并解决了它here。我在ga中使用了两个匿名函数fitnessFunctionnonlconFunction,它们都指向我的switchOutput函数。他们只是传递一个额外的标志,要求输出。在switchOutput中,对于具有特定输入集的第一次调用完成了昂贵的计算,并且存储结果。如果有另一个具有相同输入集的调用,则返回存储的结果。

使用此设置,无论您将哪种顺序称为健身功能和约束功能都无关紧要。对于第一次使用新输入集的调用,结果将被计算出来,并且对于具有相同输入的任何后续调用,保存的结果将被返回!