In actual battle the best thing to do is to kill the general as fast as you can, all those command stars means their units will rarely rout while he's around. On the campaign map I find two armies suffice, one normal stack to siege the town and another veteran stack with a good cavalry arm to take on the feild army.
Also sometimes you can siege the town but the feild army will not attack, no idea why though.