The algorithm bases on an iteration, which slows down the calculation significant.

20 circles, 40 iterations, solved.

20 circles, 40iterations , some circles are too close.
The object was created by trial and error, which leaves much potential to improve the code. ;)