使用matlab完善(pid)控制系统

时间:2014-08-19 21:37:14

标签: algorithm matlab genetic-algorithm

我们有一台温度调节机器,我不满意。我想改进控制算法以更好地适应机器场景。

我在C#中编写了一个模拟系统,它模拟了机器行为并对控制回路参数进行了基准测试,我想使用学习/最小化算法为每个场景找到最佳参数。

模拟器获得4个参数 - 3个PID参数,以及PID不响应的PID阈值。将来可能会有更多参数。 模拟器返回一个数字,说明PID的执行情况。基准(现在 - 更高更好)。

Matlab部分使用不同的参数运行C#应用程序,并应根据返回的等级尝试找到最佳参数。

问题:

  1. 我应该使用哪种最小化算法?应该使用GA吗?
  2. (完全可能是一个不同的问题)有没有办法运行算法,以便并行运行基准测试应用程序?

  3. PID参数是整数,Matlab倾向于使用双精度数。所选择的算法应该能够将自己限制在一定的准确度。

  4. 使用ga,这一行应该开始这个过程:

    problem.fitnessfcn = @fitness_fcn;
    problem.nvars = 4;
    problem.intcon = [1,2,3,4];
    problem.solver = 'ga';
    problem.options = gaoptimset(@ga);
    [x fval] = ga(problem)    
    

    这就是健身功能:

    function [ val ] = fitness_fcn( k )
    
    app = '"c:\path\to\sim.exe"';
    
    kp = k(1);
    ki = k(2);
    kd = k(3);
    pidTh = k(4);
    
    command = sprintf('%s %f %f %f %f', app, kp, ki, kd, pidTh);
    [status, res] = system(command);
    
    val = str2double(res);
    
    end
    

    这种方法有效,但我没有得到任何好的数字

    如果这应该进入EE堆栈交换,请提前道歉

0 个答案:

没有答案