You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Platypus的NSGAII算法中调整目标:最大化x²并最小化(x-1)²

修改Platypus NSGAII实现以混合最大化/最小化目标

嗨,这事儿其实很简单,因为Platypus的Problem类默认是最小化所有目标的,所以要实现最大化某个目标,我们只需要对这个目标取反(最小化一个负数等价于最大化原数值),或者直接显式设置目标的优化方向。下面给你两种可行的修改方式:

方法1:修改目标函数返回值(最直接)

我们只需要把要最大化的x²改成-x²,这样算法在最小化这个负数的时候,就等价于最大化原来的x²。修改后的代码如下:

from platypus import NSGAII, Problem, Real

def schaffer(x):
    # 把最大化x²转为最小化 -x²,同时保留最小化(x-1)²
    return [-x[0]**2, (x[0]-1)**2]

problem = Problem(1, 2)
problem.types[:] = Real(-10, 10)
problem.function = schaffer

algorithm = NSGAII(problem)
algorithm.run(10000)

方法2:显式设置目标优化方向(更清晰)

如果你不想修改目标函数的数值,可以通过Problem的directions属性来指定每个目标是最大化还是最小化。Platypus提供了Problem.MAXIMIZE和Problem.MINIMIZE两个常量来定义方向:

from platypus import NSGAII, Problem, Real

def schaffer(x):
    # 保持原目标函数的返回值
    return [x[0]**2, (x[0]-1)**2]

problem = Problem(1, 2)
problem.types[:] = Real(-10, 10)
problem.function = schaffer
# 第一个目标最大化,第二个目标最小化
problem.directions[:] = [Problem.MAXIMIZE, Problem.MINIMIZE]

algorithm = NSGAII(problem)
algorithm.run(10000)

这两种方法都能达到你的需求——最大化x²同时最小化(x-1)²。个人更推荐第二种,因为代码可读性更高,目标的优化方向一目了然,后期维护也更方便。

内容的提问来源于stack exchange,提问作者samie

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.22 08:56:16