我们有一台温度调节机器,我不满意。我想改进控制算法以更好地适应机器场景。
我在C#中编写了一个模拟系统,它模拟了机器行为并对控制回路参数进行了基准测试,我想使用学习/最小化算法为每个场景找到最佳参数。
模拟器获得4个参数 - 3个PID参数,以及PID不响应的PID阈值。将来可能会有更多参数。 模拟器返回一个数字,说明PID的执行情况。基准(现在 - 更高更好)。
Matlab部分使用不同的参数运行C#应用程序,并应根据返回的等级尝试找到最佳参数。
问题:
(完全可能是一个不同的问题)有没有办法运行算法,以便并行运行基准测试应用程序?
PID参数是整数,Matlab倾向于使用双精度数。所选择的算法应该能够将自己限制在一定的准确度。
使用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堆栈交换,请提前道歉