A C++ / Python platform to perform parallel computations of optimisation tasks (global and local) via the asynchronous generalized island model. State of the art optimization algorithms are included. A common interface is provided to other optimization frameworks/algorithms such as NLOPT, SciPy, SNOPT, IPOPT, GSL
GNU General Public License v3.0
268
stars
87
forks
source link
Serialization problem on multi-objective optimization in archipelagos [sf#8] #8
As with this particular problem, all individuals converge to one point, the border solutions are identical and thus df == 0.0
In the branch "development_marcus" is a workaround for the crowding distance implemented.
It is still unclear, why this bug is causing the archipelago to crash but is not reproducible by using a single island only. Moreover, the method in serialization.h to catch nans and infs seems not to work as we are dealing with negative nans here.
Originally created by mmarcusx on 2012-10-23 15:46:20.
Evolution on a specific problem makes the archipelago crash.
To reproduce: download the problem from the attachment and then try:
from PyGMO import * import dtlz4 as dt4 alg = algorithm.nsga_II(gen=1) archi = archipelago() archi.push_back(island(alg, dt4.dtlz4(restrict=[1,2]), 12))
archi.evolve(400) archi[0]
(If you do not see the error, try another archi.evolve(400))
Stepping inside with pdb and checking state[1] reveals "-nan" values in the middle of all these numbers.
These -nans are somehow correlated to nans produced in population.cpp, in the method "update_crowding_d":
double df = get_individual(I[lastidx]).cur_f[i] - get_individual(I[0]).cur_f[i]; m_crowding_d[I[j]] += (get_individual(I[j+1]).cur_f[i] - get_individual(I[j-1]).cur_f[i])/df;
As with this particular problem, all individuals converge to one point, the border solutions are identical and thus df == 0.0
In the branch "development_marcus" is a workaround for the crowding distance implemented.
It is still unclear, why this bug is causing the archipelago to crash but is not reproducible by using a single island only. Moreover, the method in serialization.h to catch nans and infs seems not to work as we are dealing with negative nans here.