The attack strategy creates and controls the attack plans and the defend strategy creates the defend plans and the defend choke point plan.
The problem of switching choke points is correct. The harassing code had a similar problem with constantly switching target positions. That's why I changed it. I think the attack and defend plans have specific control mechanisms to avoid the fast switching, but I agree, the defend strategy should have a switching delay for the defend choke point plans. That could solve at least 'some' problems. But just like you said, the problem of the movement code to get 10 new problems for every solved problem makes changes in this area a real nightmare, especially the tactics. However, the switching delay for the choke points should be easy to do without the risk of unpleasant surprises.
A delay won't solve it. Moving back and forth between points at 10 sec intervals would be just as bad.
As I can see it, you don't have code in there that checks for the local situation, is my army able to beat the enemy where it is now? If yes, do an attack there. If not, you can either move to attack an undefended LP of the enemy, or move back to take up a defensive (waiting) position (preferably at an LP2), and that position should be mostly enemy free.
I could do this by just messing with your code, so Defendchokepointplan would also launch attacks and such. But to keep things right, I would much rather like to know, how (or where) is it decided what plan gets carried out? If I wanted to put in some checks to decide what plan to go for, where in the code should I be looking?