Working on making the parameter sweep an official feature, with a bit
more usability and reliability.
For the moment, some minor changes were made:
- model is copied correctly so that when using multiple threads actually
different models are used. To do this, the configurations cannot be
indexed by Reaction directly, but by the String representing the ID of a
reaction
- plotted/hidden property of a node is ignored in favor of the nodes
selected when defining the parameter sweep. So only the nodes selected
for comparison are shown in the graphs.
- The decimal formatting of the parameters 'k' in the graphs is now more
proper
Changed the ordering of results: now we show the best X (with X chosen
by the user).
So no error threshold is set a priori, and none is used to limit the
comparisons.
Now we provide also both a linear and logarithmic scale for parameter
sweeps. Moreover, the errors are computed correctly (reading the CSV
fiels better!). Results are ordered from the lowest error to the
highest, and filtered by number ("Show the best X results", as said
before). The "Max abs diff" is currently not shown. At least, now the
parameter sweep mostly works.
Fixed a small mistake with the computation of time intervals and
estimations of processing times: in the ParameterFitter class we still
used those two functions from RunAction with the old argument format: we
passed milliseconds while they expected seconds.
Now the results are correctly shown after completing a computation, and
do not require to press "Filter" before seeing them. Also, each
resulting graph has been equipped with a green/red bar stating the
calculated "goodness" of the fit with respect to the given data series.
Cosmetic improvements to show the fitness of a result in the
ParameterFitter
Adapted the 'opaal version' of the normal (not the completely
deterministic) model to the latest changes, removing useless sequencer
and deltaAlternating and other minor changes. This seems to work with
the latest version of opaal.
- Corrected a minor but vicious bug in the model: if the rate is too
small, the inverse of the rate will be a number too large to be used in
UPPAAL as guard or invariant (> 2^30 - 2). Adding a check to the
"inverse" function allows to consider any 'double' whose .e part is < -9
as 0. Also, updated the 'round' function to directly return
INFINITE_TIME if the 'double' is INFINITE_TIME_DOUBLE. Finally, this
allows us to simplify the 'update' function in all templates, removing
the last if-else and replacing it by the direct assignment T =
round(inverse(rate))
- Changed the access to the "are we the developer" variable, so that it
is read only by InatPlugin, and the others can simply interrogate that
class with the static method
- If we are the developer, a button appears in the Results panel after
the slider to allow exporting an animation as bitmaps. Use the "open as
layers" function in gimp, then save as gif to obtain a gif animation.