Hi, the scripts for AMIGO2 have issues/errors, and as a consequence the reported performance of AMIGO2 is wrong.
See my emails (and attachments) of 8 and 9-March-2023, and the notes below.
Thanks,
Julio
Problem LotkaVolterra.m
Nominal params are [0.02 0.03 0.05], and i.c. [100 100]
Running the script with AMIGO2 gives the following estimates:
Estimated global parameters:
k1 : 1.0000e-04 +- 1.3765e-02 (1.38e+04%); (bound active)
k2 : 3.0138e-02 +- 1.1397e-04 ( 0.378%);
k3 : 5.0300e-02 +- 9.3082e-04 ( 1.85%);
Estimated global initial conditions:
r : 9.9999e+01 +- 9.3448e-04 (0.000934%);
w : 9.8910e+01 +- 8.1850e-01 ( 0.828%);
Param k1 is quite off from its nominal value.
However, since noiseless data is used, tighter tolerances are needed for the integration.
By simply setting:
inputs.ivpsol.rtol=1.0e-10; % [] IVP solver integration tolerances
inputs.ivpsol.atol=1.0e-10;
we re-run AMIGO2 and now get:
Estimated global parameters:
k1 : 2.0002e-02 +- 1.0257e-06 ( 0.00513%);
k2 : 3.0000e-02 +- 8.4087e-09 ( 2.8e-05%);
k3 : 5.0000e-02 +- 6.8484e-08 (0.000137%);
Estimated global initial conditions:
r : 1.0000e+02 +- 6.8999e-08 ( 6.9e-08%);
w : 1.0000e+02 +- 6.1306e-05 (6.13e-05%);
i.e. almost perfect recovery of the nominal parameters.
Incidentally, checking the convergence curve we see that the computation time needed for the above solution is less than 1 second.
We can also see this in the output of the optimizer:
Iteration: 12 NFunEvals: 885 Bestf: 2.00738e-12 CPUTime: 0.906250
Problem FHN.m
Data is inconsistent with true parameters, so reproted performance of AMIGO2 is wrong.
I generated with AMIGO2 noiseless data using the true parameter values indicated in the Julia file for your method .
I then solved the problem using this data and AMIGO could recover the true parameters in just 3 s of computation:
Estimated global parameters:
a : 2.0001e-01 +- 6.0307e-06 ( 0.00302%);
b : 1.9999e-01 +- 5.6450e-06 ( 0.00282%);
g : 2.0000e+00 +- 1.3371e-07 (6.69e-06%);
Estimated global initial conditions:
x1 : 1.0000e+00 +- 3.8778e-09 (3.88e-07%);
x2 : -1.0000e+00 +- 4.0442e-08 (-4.04e-06%);
Iteration: 32 NFunEvals: 2118 Bestf: 9.07821e-10 CPUTime: 2.843750
I.e., it seems that in your AMIGO2 scripts, data is inconsistent with true params.
I suspect the same happens for the other cases.
Hi, the scripts for AMIGO2 have issues/errors, and as a consequence the reported performance of AMIGO2 is wrong.
See my emails (and attachments) of 8 and 9-March-2023, and the notes below.
Thanks,
Julio
Problem LotkaVolterra.m
Nominal params are [0.02 0.03 0.05], and i.c. [100 100]
Running the script with AMIGO2 gives the following estimates:
Param k1 is quite off from its nominal value.
However, since noiseless data is used, tighter tolerances are needed for the integration.
By simply setting:
inputs.ivpsol.rtol=1.0e-10; % [] IVP solver integration tolerances
inputs.ivpsol.atol=1.0e-10;
we re-run AMIGO2 and now get:
i.e. almost perfect recovery of the nominal parameters.
Incidentally, checking the convergence curve we see that the computation time needed for the above solution is less than 1 second.
We can also see this in the output of the optimizer:
Iteration: 12 NFunEvals: 885 Bestf: 2.00738e-12 CPUTime: 0.906250
Problem FHN.m
Data is inconsistent with true parameters, so reproted performance of AMIGO2 is wrong.
I generated with AMIGO2 noiseless data using the true parameter values indicated in the Julia file for your method .
I then solved the problem using this data and AMIGO could recover the true parameters in just 3 s of computation:
Iteration: 32 NFunEvals: 2118 Bestf: 9.07821e-10 CPUTime: 2.843750
I.e., it seems that in your AMIGO2 scripts, data is inconsistent with true params.
I suspect the same happens for the other cases.