我是 Modelica 的新手,我想知道是否可以编写一种动态规划方程。假设时间由整数 i 离散化,在我的具体应用中,x 是布尔值,f 是 x 的布尔函数。
x(t_i) = f(x(t_{i+d}))
其中 d 可以是正整数或负整数。当然,我会相应地初始化 x,无论是真还是假。
任何帮助或参考将不胜感激!
我是 Modelica 的新手,我想知道是否可以编写一种动态规划方程。假设时间由整数 i 离散化,在我的具体应用中,x 是布尔值,f 是 x 的布尔函数。
x(t_i) = f(x(t_{i+d}))
其中 d 可以是正整数或负整数。当然,我会相应地初始化 x,无论是真还是假。
任何帮助或参考将不胜感激!
有可能的。在 Modelica 中,时间离散化通常由编译器进行,您必须处理方程(连续动力学)。否则,如果您想在离散时间点生成事件,您可以使用 when 语句来实现。我建议您看一下使用 OpenModelica 进行面向对象建模和仿真的介绍(PDF 格式,6.6 MB)- Peter Fritzson 的最新教程(2012 年)。有一个关于离散事件和混合系统的部分,应该阐明如何在 Modelica 中实现你的方程。您可以在下面找到该教程中有关弹跳球模型的示例,因为您可以看到在编写动态方程时不考虑时间离散化。所以球的连续模型 v=der(s), a=der(v) 和处理与地面接触的 when 子句中的离散部分:
model BouncingBall "the bouncing ball model"
parameter Real g=9.81; //gravitational acc.
parameter Real c=0.90; //elasticity constant
Real height(start=10),velocity(start=0);
equation
der(height) = velocity;
der(velocity)=-g;
when height<0 then
reinit(velocity, -c*velocity);
end when;
end BouncingBall;
希望这会有所帮助,马可
如果我理解您的问题,您想使用 的最后n
评估x
来确定 的下一个值x
。如果是这样,此代码显示如何执行此操作:
model BooleanHistory
parameter Integer n=10 "How many points to keep";
parameter Modelica.SIunits.Time dt=1e-3;
protected
Boolean x[n];
function f
input Integer n;
input Boolean past[n-1];
output Boolean next;
algorithm
next :=not past[1]; // Example
end f;
initial equation
x = {false for i in 1:n};
equation
when sample(0,dt) then
x[2:n] = pre(x[1:(n-1)]);
x[1] = f(n, x[2:n]);
end when;
end BooleanHistory;