Diff of /tests/TESTS_MusOptTool.m [000000] .. [592feb]

Switch to unified view

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);