I'm not sure what you mean by "multiple moving AI". Do you have several gameobjects that have AI, and they are moving in the same time?
If so, then here's how I'd do it.
You can have the same AI system on both the server and the client, for example, a state machine. Every gameobject with AI can be described by several states, like "walking_left speed". The AI system would provide various ways of changing these states, but that doesn't matter, because what you're interested in is synchronizing the movement between the server and the client.
What I did when I made my first multiplayer game, was foolishly have the server overwrite the positions of objects. Don't do this, because this results in choppy movement that is dependent on your network latency. Rather, you share those states, and make sure that both the server and the client know that a certain entity is walking at some direction (the direction vector can also specify the speed by its length). If everyone knows at which direction an entity is going, it's a simple matter of designing a movement system that make sure that in same time intervals, entities will be on the same position, and deploying that system on the server and the client side.
Someone at Valve made a post about making multiplayer systems: https://developer.valvesoftware.com/wiki/Source_Multiplayer_Networking.
Also, I believe that using both UDP and TCP is not exactly a good idea, I forgot why, so you might want to investigate... Another useful link: http://gafferongames.com/networking-for-game-programmers/udp-vs-tcp/.