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

使用Platypus NSGA-II时最优决策变量打印异常问题求助

解决Platypus NSGA-II中决策变量返回布尔数组而非整数的问题

问题原因

Platypus库中Integer类型的决策变量默认采用二进制编码存储,直接访问solution.variables时,返回的是该整数对应的二进制编码布尔数组,而非原始的整数值。这就是你看到[[False, True, False, True, False]]这类输出的原因。

解决方案

需要通过Platypus提供的解码方法,将布尔数组转换为对应的整数。有两种可靠的方式:

  1. 使用问题实例的decode方法
    调用定义好的problem对象的decode方法,传入变量的布尔数组,即可得到解码后的整数值。

  2. 直接访问solution.decision_variables属性
    Platypus的Solution对象内置了decision_variables属性,该属性存储的是已经解码后的原始决策变量值,可直接读取。

修改后的代码示例

将原代码中打印决策变量的行替换为以下任意一种即可:

方式1:使用decode方法

st.write(f"Decision variables: {problem.decode(best.variables)}")

方式2:使用decision_variables属性

st.write(f"Decision variables: {best.decision_variables}")

修改后的完整关键代码片段:

if filtered:
    # Find solution with lowest objective1
    best = min(filtered, key=lambda s: s.objectives[0])
    st.subheader("Best solution with f2 < 1")
    # 方式1:用decode解码
    st.write(f"Decision variables: {problem.decode(best.variables)}")
    # 或者方式2:直接访问decision_variables
    # st.write(f"Decision variables: {best.decision_variables}")
    st.write(f"Objectives: f1={best.objectives[0]:.4f}, f2={best.objectives[1]:.4f}")
    # 后续绘图代码不变...

补充说明

  • 如果需要批量处理所有解决方案的决策变量,同样可以应用上述解码逻辑,例如:
    decoded_vars = [problem.decode(s.variables) for s in solutions]
    # 或者
    decoded_vars = [s.decision_variables for s in solutions]
    
  • 两种方式在功能上等价,可根据个人习惯选择。decision_variables属性更简洁,而decode方法适合需要手动控制编码/解码流程的场景。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.12 08:53:09