Thank you for such a speedy reply, obviously the final decision is up to you but I think the trigger should change depending on the situation-for instance a single goblin walking into a large group of vampires would likely be attacked because the vampires are confident in their ability to win-two similar groups would be less likely to fight because there would be less certain odds of winning.
An example of a potential code line for this could be something like:
numgoblins / numvampires + dissent
(Where dissent would be added for fights and subtracted for disiplaneary actions)
This way at first the only time you would have fighting is if a small group of one race is near a large group of another-but as fights continue so does dissent, and thus the fights would increse in size and frequency.
A few ideas I have to prevent these fights would be to disipline your minions-such as sending one involved in a fight to the dungeon for a while, or maybe even have it killed for a big change in the variable. Another thing you could do is possess the keeper and maybe whack the minions to get them to stop and decrease dissent a bit.
I also do think it is a good idea to designate rooms for different minions-that would also add another tactical element to the game because players would no longer be able to just fill an entrance with powerful creatures, instead they would have to keep similar races together-which would make the game more difficult because the AI invasions could have specialists that would be good against certain units (such of the priest idea for fighting undead)
As for how long the fighting lasts I would think every kill lowers dissent a certain value-and the fighting would stop once dissent reaches zero. That way the keeper could intervene to attempt to save the lives of a few minions by whacking a few or sending others to the dungeon.