GA implementation