Distributed task allocation optimisation techniques in multi-agent systems