You need to enable JavaScript to run this app. scikit-fuzzy新API下Tipping Problem如何更改defuzzification method?
优惠活动
大模型
产品
解决方案
定价
更多

scikit-fuzzy新API下Tipping Problem如何更改defuzzification method?

scikit-fuzzy 新API切换去模糊方法的操作指引

针对你已跑通的新API版本小费问题示例,不需要改动核心规则、隶属度函数的定义逻辑,只要在对应环节调整参数,就能在默认centroid方法之外切换测试其他去模糊方案,所有操作完全兼容原有示例代码。

可选用的内置去模糊方法

除默认的centroid(重心法)外,框架内置支持的可选项固定为以下几个,传入时必须使用严格小写字符串,否则会触发参数校验报错:

  • bisector:区域二分法
  • mom:最大隶属度平均值
  • som:最大隶属度最小值
  • lom:最大隶属度最大值

两种常用的设置方式

1. 全局指定输出变量的去模糊方法

在初始化输出 consequent 变量时直接传入参数,后续所有涉及该变量的计算都会默认使用指定方法,替代原有默认的centroid逻辑。
你原有示例中定义小费输出变量的代码类似:

tip = ctrl.Consequent(np.arange(0, 26, 1), 'tip')

调整后增加defuzzify_method参数即可全局生效:

tip = ctrl.Consequent(np.arange(0, 26, 1), 'tip', defuzzify_method='mom')

2. 临时切换方法做对比测试

如果需要在同一段控制逻辑下测试不同方法的输出差异,不需要反复修改初始化代码,可以在每次执行compute()前,临时修改输出变量实例的defuzzify_method属性即可:

# 初始化控制仿真器、设置输入值的原有逻辑保持不变
simulation = ctrl.ControlSystemSimulation(tipping_ctrl)
simulation.input['service'] = 9.3
simulation.input['food'] = 6.5

# 临时切换为lom方法计算
tip.defuzzify_method = 'lom'
simulation.compute()
print("lom方法输出的小费值:", simulation.output['tip'])

# 临时切换为bisector方法计算
tip.defuzzify_method = 'bisector'
simulation.compute()
print("bisector方法输出的小费值:", simulation.output['tip'])

常见注意事项

  • 不要直接调用老版本独立的fuzzy.defuzz()函数处理新API生成的隶属度曲线,新API的去模糊逻辑是绑定在Consequent类实例上的,独立调用极易触发参数不匹配报错。
  • 临时修改的defuzzify_method属性是全局绑定在输出变量上的,修改后如果不主动改回,后续所有compute操作都会沿用最后设置的方法。
  • 批量对比不同方法时,可以循环遍历所有内置方法名,每次修改属性后重新跑compute取输出值,不需要反复新建控制逻辑。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.11.06 22:06:04