生成多个互不重叠的不同半径圆
https://www.zhihu.com/question/53012468
固定区域,生成所有圆,统计圆的面积,最后面积最大的就是答案。
import numpy as np
from scipy.optimize import minimize
from scipy.spatial.distance import pdist
import matplotlib.pyplot as plt
import os
def obj_grad_round(x, radii, pair_index_to_index_pair, repulsion_scale, attraction_scale):
n = len(radii)
centroids = np.reshape(x, (n, 2))
circles_pdist_sqrd = pdist(centroids, 'sqeuclidean')
obj = 0
grad = np.zeros((n, 2))
for pidx, dist_sqrd in enumerate(circles_pdist_sqrd):
i, j = pair_index_to_index_pair[pidx]
touching_dist_sqrd = (radii[i] + radii[j]) ** 2
grad_inc = 4 * (dist_sqrd - touching_dist_sqrd) * (centroids[i, :] - centroids[j, :])
scale = repulsion_scale if dist_sqrd < tou