esa / pagmo

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

Closed darioizzo closed 10 years ago

darioizzo commented 10 years ago

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.

darioizzo commented 10 years ago

Originally posted by mmarcusx on 2013-03-11 16:02:10.

darioizzo commented 10 years ago

Originally posted by mmarcusx on 2013-03-11 16:02:11.

Negative -nans no longer occur in the computation of the crowding distance. Bug fixed.