使用Matlab GA优化带约束的昂贵适应度函数

时间:2013-05-12 20:05:51

标签: matlab optimization constraints genetic-algorithm

我在Matlab中使用遗传算法来优化计算上昂贵的适应度函数,该函数也具有约束。我现在正在以惩罚的形式对目标函数强加约束,因为约束违反只能在函数评估结束时计算。我想使用nonlcon而不是满足约束。

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

根据我的想法,是否可以使用一种矩阵,我可以在生成更新开始时将所有单个值存储在矩阵中,同时我的适应度评估以及当我调用nonlcon进行约束评估时,然后查找更新的矩阵以进行约束违规。虽然我试图实现这一点,但我有些疑惑。

1)我记得在一些论坛中读到,遗传算法的outputfcn可以在一代的开始结尾被调用。默认情况下,它在最后。如果它最后调用,我将无法执行我的方法。遗憾的是,我无法找到如何在开头而不是一代结束时调用outputfcn。

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

1 个答案:

答案 0 :(得分:0)

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

使用此设置,您调用健身功能和约束功能的顺序并不重要。对于使用新输入集的第一次调用,将计算结果,对于具有相同输入的任何后续调用,将返回保存的结果!