我在 Matlab 中使用遗传算法来优化计算成本高的适应度函数,该函数也有约束。我现在以惩罚的形式对目标函数施加约束,因为约束违反只能在函数评估结束时计算。我想使用 nonlcon 来满足约束。
但我的问题是适应度函数评估很昂贵,我不能再做一次检查约束违规。我已经看到了一些嵌套函数公式,其中使用输出函数我可以为每一代累积所有单独的变量值。
根据我的想法,是否有可能有一种矩阵,我可以在其中存储所有单个值在一代开始时更新该矩阵,而我的适应度评估以及当我调用 nonlcon 进行约束评估时,然后查找更新后的矩阵是否违反约束。当我试图实现这一点时,我有一些疑问。
1)我记得在某个论坛上读到,遗传算法的 outputfcn 可以在一代开始或结束时调用。默认情况下,它位于末尾。如果它在最后调用,我将无法执行我的方法。可悲的是,我无法找到如何在一代的开始而不是结束时调用 outputfcn。
2)由于我的适应度函数计算量很大,所以我使用并行评估。那么在Matlab中使用并行选项时是否可以实现上述想法,否则会产生一些困难?