【问题标题】:Using Matlab GA for optimization of expensive fitness function with Constraints使用 Matlab GA 优化带约束的昂贵适应度函数
【发布时间】:2014-04-09 21:09:34
【问题描述】:

我正在使用 Matlab 中的遗传算法 来优化 计算成本高且也有约束的适应度函数。我现在以 penalty 的形式对目标函数施加约束,因为 约束违反只能在函数评估结束时计算。我想使用 nonlcon 来满足约束。

但我的问题是适应度函数评估是昂贵,我不能再做一次检查约束违规。我见过一些嵌套函数公式,其中使用输出函数我可以累积每一代的所有单个变量值。

根据我的想法,是否有可能有一种矩阵,我可以在其中存储所有单个值在一代开始时更新该矩阵,同时我的适应度评估和调用 nonlcon 进行约束评估,然后查找更新后的矩阵是否违反约束。在我尝试实现这一点时,我有一些疑问。

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

2) 由于我的适应度函数计算量很大,因此我使用并行评估。那么在Matlab中使用并行选项是否可以实现上述想法,否则会产生一些困难?

【问题讨论】:

    标签: matlab optimization constraints genetic-algorithm


    【解决方案1】:

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

    使用此设置,您调用适应度函数和约束函数的顺序无关紧要。对于具有新输入集的第一次调用,将计算结果,对于具有相同输入的任何后续调用,将返回保存的结果!

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2016-12-12
      • 1970-01-01
      • 1970-01-01
      • 2014-09-27
      • 2018-05-03
      • 2012-02-02
      • 2012-09-20
      • 1970-01-01
      相关资源
      最近更新 更多