This is a linear program that can be solved by general LP solvers.
It can also be modelled more specifically as a min-cost max-flow problem: Put the attractors on the left side of a bipartite graph and the points on the right side.
- Connect every attractor i on the left side to the source via an edge of capacity N_i and cost 0.
- Connect every point i on right side to the sink via an edge of capacity 1 and cost 0.
- Add edges from every attractor to every point with capacity 1 and the cost being their distance.
The minimum-cost max-flow in this graph is the solution to your problem. You can solve this for example using the method of successive shortest paths with Dijkstra.
Unfortunately I don't know theoretical bounds of this approach for the very specific properties of the graph (bipartite and total capacity n on the left side). I think the worst case for successive shortest paths is (polylog)quadratic, but in practice it should be much faster. Maybe somebody with more experience with linear programming and network optimization can say more about what the best algorithm would be to solve the arising cost-flow problem.