intelligent water drop algorithm