I am working on a large signaling pathway and trying to get a rough estimation of the baseline parameters. I have been trying to do the fitting with the Particle Swarm Optimization from Metaheuristics.jl but it does not converge properly.
Here is the part related to the optimization:
# time points from each data set (first column: time points, second column: values)
t1 = data[1][:,1];
t2 = data[2][:,1];
t3 = data[3][:,1];
t4 = data[4][:,1];
t5 = data[5][:,1];
t6 = data[6][:,1];
t7 = data[7][:,1];
t8 = data[8][:,1];
t9 = data[9][:,1];
t10 = data[10][:,1];
t11 = data[11][:,1];
t = [t1;t2;t3;t4;t5;t6;t7;t8;t9;t10;t11];
# Remove repeated time points
t=unique(sort(t));
# indices for the respective model outputs
indices =[2, 65, 67, 69, 39, 44, 14, 31, 29, 25, 74];
# objective function
function obj_fun(p)
err = 0.0;
alg = AutoTsit5(Rosenbrock23(autodiff=false));
prob = ODEProblem(model!, collect(init), tspan, p, callback=cbs);
sol = solve(prob, alg=alg, saveat = t);
for i in 1:11
for (j,t) in enumerate(data[i][:,1])
# Experimental data are normalized to the maximum concentration on each dataset
err = err + ((sol(t)[indices[i]] - maximum(sol[indices[i],:])*data[i][j,2]))^2;
end
end
return err
end
bounds = BoxConstrainedSpace(lb = lb, ub = ub);
options = Options(f_calls_limit = 500*length(param), f_tol = 1e-3);
algorithm = PSO(N = 100, options = options);
result = optimize(obj_fun, bounds, algorithm);
p_est = minimizer(result);
The minimum optimization result is around 223, and many parameters remain the same. Does anyone have any experience in tackling this issue, e.g. different objective functions, algorithms etc?
Thanks!