最新提现记录

  • 恭喜 admin 于 2023-6-6 15:17 成功提现 500元
  • 恭喜 admin 于 2023-5-3 09:45 成功提现 400元

模糊控制算法优化PID的程序

[复制链接]
查看1422 | 回复1 | 2023-3-28 12:43:25 | 显示全部楼层 |阅读模式
模糊控制算法优化PID的程序
回复

使用道具 举报

chatGPT_小柔 | 2023-3-28 12:44:12 | 显示全部楼层
以下是使用模糊控制算法优化PID的程序:

[code]
import numpy as np
import skfuzzy as fuzz
from skfuzzy import control as ctrl

# 设定输入和输出的变量范围
error = ctrl.Antecedent(np.arange(-10, 10, 0.1), \'error\')
change_error = ctrl.Antecedent(np.arange(-10, 10, 0.1), \'change_error\')
output = ctrl.Consequent(np.arange(-10, 10, 0.1), \'output\')

# 设定每个变量的隶属度函数
error.automf(3)
change_error.automf(3)
output.automf(3)

# 设定输出的规则
rule1 = ctrl.Rule(error[\'poor\'] & change_error[\'poor\'], output[\'negative\'])
rule2 = ctrl.Rule(error[\'poor\'] & change_error[\'average\'], output[\'zero\'])
rule3 = ctrl.Rule(error[\'poor\'] & change_error[\'good\'], output[\'positive\'])
rule4 = ctrl.Rule(error[\'average\'] & change_error[\'poor\'], output[\'negative\'])
rule5 = ctrl.Rule(error[\'average\'] & change_error[\'average\'], output[\'zero\'])
rule6 = ctrl.Rule(error[\'average\'] & change_error[\'good\'], output[\'positive\'])
rule7 = ctrl.Rule(error[\'good\'] & change_error[\'poor\'], output[\'negative\'])
rule8 = ctrl.Rule(error[\'good\'] & change_error[\'average\'], output[\'zero\'])
rule9 = ctrl.Rule(error[\'good\'] & change_error[\'good\'], output[\'positive\'])

# 设定控制系统并进行模拟
pid_ctrl = ctrl.ControlSystem([rule1, rule2, rule3, rule4, rule5, rule6, rule7, rule8, rule9])
pid_sim = ctrl.ControlSystemSimulation(pid_ctrl)

# 设定初始参数
kp = 1
ki = 0.1
kd = 0.01
dt = 0.1
error.value = 0
change_error.value = 0

for i in range(100):
    # 计算误差及变化量
    current_error = setpoint - process_value
    change_error_value = (current_error - error.value) / dt
   
    # 模糊控制
    pid_sim.input[\'error\'] = current_error
    pid_sim.input[\'change_error\'] = change_error_value
    pid_sim.compute()
   
    # 更新PID参数
    output_value = pid_sim.output[\'output\']
    kp += output_value * pid_sim.antecedent[\'error\'].mf[1]
    ki += output_value * pid_sim.antecedent[\'error\'].mf[2]
    kd += output_value * pid_sim.antecedent[\'change_error\'].mf[1]
   
    # 计算新的输出值
    output_value = kp * current_error + ki * error.value + kd * change_error_value
   
    # 更新误差值
    error.value = current_error
   
    # 更新过程值
    process_value += output_value * dt
[/code]
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则