A discrete particle swarm optimization for covering array generation