Multi-heuristic dynamic task allocation using genetic algorithms in a heterogeneous distributed system