Use this base class if you want to include a recurrent neural network in Modelica, which has been created with the flag stateful=True in TensorFlow. Please notice, that TFLite is not capable of handling the stateful states internally. Therefore, the neural network has to be created with access to all states as additional inputs and outputs. In this context, the inputs and outputs have to be additional access points to the neural networks. SMArtIInt will handle the updates of the states by storing the values of the state outputs, and feeding them back into the state inputs. Therefore, for all states, matching in- and output have to exist. When creating the neural network the user has to take care of this. The stateful PI controller created in the script ExampleNeuralNets/PIController/PI.py gives an example of how to expose the states as in- an outputs.
Please extend this model in your own model. After extending you have to
Most likely, the stateful RNN will be trained for time discrete data and therefore it has to be called only at discrete time instances. The user has to provide the sampling interval for the discrete time instances. If continuous = false, the model will create events at each of the time instances and will only call the model at these instances. The many events have an impact on simulation performance. To increase performance the user can set continuous = true. In that case the model can be called for any times, as it is demanded by the solver. SMArtIInt will internally call the neural network only at the time sampled time points. Hence, no events are created, but the inputs for the neural network have to be interpolated. Additionally, the solution accuracy for the states of the neural network and the impact of the interpolation of the inputs cannot be controlled by the solver directly. Only the impact on the states in the model can be evaluated. Therefore, this approach might create inaccurate solutions, especially if a multi-step solver like DASSL and Cvode are used with a high tolerance value. The user should compare the simulation results to those with continuous = false or to results with continuous = true and lower tolerance and/or a single step solver like (Radau).
For an example take a look at the model Tester.ExamplePI.TF_PI_Stateful