我使用 Dymola 一段时间了,但这是我第一次使用控制器。我有一个复杂的热电厂模型,我需要控制一些变量。到目前为止,我已经成功实现了一些 PI 和 PID 控制器,通过施加恒定设定点来控制某些信号。
但是,我现在遇到了一个不同的问题:我需要控制信号以最大化另一个变量的值,而不是将其固定为恒定设定点。我研究了各种方法来解决这个问题,例如使用 PID 控制器、梯度法优化或非免费的 RealTimeOptimization 函数,但我需要一些额外的指导。
这是我需要实现的目标的简化描述(通过一个简单的案例):
我需要控制变量
inputVar
(范围从0到1)以在每个模拟时间步最大化outputVar
的值。例如,如果我们模拟 3600 秒,结果应显示 inputVar
的最佳值如何随时间变化以最大化 outputVar
,从零开始并可能增加到 1。
我不确定这项任务有多具有挑战性,如果有任何有关如何在 Dymola 中实现此任务的建议或示例,我将不胜感激。谢谢!
model TestOptControlSignal
"Tests that represents a model complex that must be controlled with an input variable in order to maximize an output variable"
//Simplified model
parameter Real amplitude = 10;
parameter Real frequency = 1e-4;
parameter Real phase1 = 0;
parameter Real phase2 = 3.14/2;
Real sine_wave1;
Real sine_wave2;
Real inputVar "variable to be optimized during the entire simulation - values in range: [0,1]";
Real outputVar "max output";
equation
sine_wave1 = amplitude * sin(2 * Modelica.Constants.pi * frequency * time + phase1);
sine_wave2 = amplitude * sin(2 * Modelica.Constants.pi * frequency * time + phase2);
inputVar = 1 "This is the variable that must be modified in order to maximize the outputVar in each step of the simulation";
outputVar = sine_wave1*inputVar+sine_wave2*(1-inputVar);
annotation (uses(Modelica(version="4.0.0")),experiment(
StopTime=3600,
Interval=1,
__Dymola_Algorithm="Dassl"));
end TestOptControlSignal;
恐怕不是真正的答案,但评论太多了,所以:
您所描述的内容让我想起了光伏 (PV) 电池的 MPPT(最大功率点跟踪)。也许这将是搜索网络的一个很好的起点,因为应该有很多解决方案。 PhotoVoltaics 库中有一个简单的时钟/采样版本,即块
PhotoVoltaics.Components.Blocks.MPTrackerSample
。在下面的屏幕截图中,这将是组件 mpTracker
。
这种实现的缺点是,由于采样(上述情况下为 10 秒,默认为 1 秒),它会减慢整体模拟的速度。如果系统相对简单并且应该例如计算光伏系统典型的全年情况,采样事件可能会限制性能。如果这对您的工厂来说不是问题,这可能是一个解决方案。
还有一个关于该主题的更通用的视图可以提供帮助:https://de.mathworks.com/discovery/optimal-control.html
PS:如果您找到一个好的连续解决方案,那将是 PhotoVoltaics 和类似库的一个很好的扩展。所以这里的一些反馈会很好:)