First, it's important to note that depending on your problem specifications, we may not know of any good algorithms to solve it - this is especially true when you start to add in more problem constraints.
There are three levels of abstraction here - your question primarily deals with the highest level, but FLYAQ covers all three so I include them here as well.
High level: Task assignment and ordering
Given a list of tasks, constraints, and costs, we first find the best set of ordered sets of waypoints for each robot in your team respects the constraints. This is generally called the "vehicle routing problem", and has many variants. One open source software is OptaPlanner. The HeuristicLab also has an impressively mature software stack for these problems. You could also consider solving these problems using a linear program solver such as Gurobi or open source alternatives. If you have a more specific problem in mind, create another question and I'll post an answer (this is my area of research).
Mid-level: Trajectory planning
Once a robots has been assigned an ordered set of waypoints to visit, it still needs to decide how to connect the dots. Depending on your hardware this might already be abstracted away (e.g. with MotionPlanner and Ardu* planners). If you need to solve this problem, there are a few very good libraries for this, such as Open Motion Planning Library and Drake. The output of this layer is typically a polynomial or spline representation of a trajectory that is guaranteed to be collision free.
Low level: Rate control
At the lowest level the robot needs to translate a desired trajectory into rate commands for its actuators. This is entirely dependent on your hardware platform, and is often abstracted away. If you already have hardware, then see if a google search yields an example of how to go from a waypoint list or trajectory to rate commands.
Putting everything together
A typical software set-up will separate each level of abstraction into different applications, since they run at different rates (typically high level is ~0.1-1Hz, mid level is 1-10Hz, low level is 10-100Hz). One very popular middleware is the Robot Operating System, which has an active community and many tutorials.
This answer is vague by necessity - your question covers a range of topics which has thousands of published work on. If you have a more specific problem or abstraction layer in mind, there are definitely more specific answers available.