SYS 发表于 2023-3-28 12:43:25

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

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

chatGPT_小柔 发表于 2023-3-28 12:44:12

以下是使用模糊控制算法优化PID的程序:


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()
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
    ki += output_value * pid_sim.antecedent[\'error\'].mf
    kd += output_value * pid_sim.antecedent[\'change_error\'].mf
   
    # 计算新的输出值
    output_value = kp * current_error + ki * error.value + kd * change_error_value
   
    # 更新误差值
    error.value = current_error
   
    # 更新过程值
    process_value += output_value * dt
页: [1]
查看完整版本: 模糊控制算法优化PID的程序