|
a |
|
b/tests/TESTS_MusOptTool.m |
|
|
1 |
%% TEST1: map a model on itself |
|
|
2 |
% check that generally the algorithm optimizes models as expected. |
|
|
3 |
% If asked to map a model on the same model, the optimization should |
|
|
4 |
% converge on the initial values of the target model. |
|
|
5 |
clear; |
|
|
6 |
% add opensim API |
|
|
7 |
import org.opensim.modeling.* |
|
|
8 |
% add tools |
|
|
9 |
addpath('../MATLAB_tool/MuscleParOptTool') |
|
|
10 |
|
|
|
11 |
% setup the optimization |
|
|
12 |
reference_model = './models/gait2392_simbody.osim'; |
|
|
13 |
target_model = reference_model; |
|
|
14 |
N_eval = 5; |
|
|
15 |
log_folder = './test1_logs'; |
|
|
16 |
|
|
|
17 |
% optimize |
|
|
18 |
[osimModel_opt, SimsInfo] = optimMuscleParams(reference_model, target_model, N_eval, log_folder); |
|
|
19 |
|
|
|
20 |
% test |
|
|
21 |
assert(min(max(SimsInfo.LmOptLts_opt-SimsInfo.LmOptLts_ref)<1.0e-14)); |
|
|
22 |
|
|
|
23 |
%% TEST2: reproduce parameter optimization from MATLAB example |
|
|
24 |
clear; |
|
|
25 |
% add opensim API |
|
|
26 |
import org.opensim.modeling.* |
|
|
27 |
% add tools |
|
|
28 |
addpath('../MATLAB_tool/MuscleParOptTool') |
|
|
29 |
|
|
|
30 |
% setup the optimization |
|
|
31 |
reference_model = './models/test2_reference.osim'; |
|
|
32 |
target_model = './models/test2_target.osim'; |
|
|
33 |
N_eval = 10; |
|
|
34 |
log_folder = './test2_logs'; |
|
|
35 |
|
|
|
36 |
% optimize |
|
|
37 |
[osimModel_opt, SimsInfo] = optimMuscleParams(reference_model, target_model, N_eval, log_folder); |
|
|
38 |
|
|
|
39 |
% test |
|
|
40 |
expected_model = './models/test2_expected.osim'; |
|
|
41 |
osimExp = Model(expected_model); |
|
|
42 |
% load muscles |
|
|
43 |
exp_mus = osimExp.getMuscles(); |
|
|
44 |
opt_mus = osimModel_opt.getMuscles(); |
|
|
45 |
% define a loss |
|
|
46 |
loss = 0; |
|
|
47 |
% compare musculotendon properties between optimized and expected |
|
|
48 |
for n = 0:opt_mus.getSize()-1 |
|
|
49 |
cur_opt_mus = opt_mus.get(n); |
|
|
50 |
cur_exp_mus = exp_mus.get(n); |
|
|
51 |
dL = abs(cur_opt_mus.getOptimalFiberLength()- cur_exp_mus.getOptimalFiberLength()); |
|
|
52 |
dT = abs(cur_opt_mus.getTendonSlackLength()- cur_exp_mus.getTendonSlackLength()); |
|
|
53 |
loss = loss+dL+dT; |
|
|
54 |
end |
|
|
55 |
|
|
|
56 |
%test |
|
|
57 |
assert(loss<1.0e-14); |