algorithm basin-hopping with symmetrise csm moves code GMIN contributor David Wales