【发布时间】:2021-06-29 13:32:13
【问题描述】:
我想在一个单位立方体内排列 N 个硬球,使体积密度为 eta。 我有一个代码,但效率不高。
def direct_disks_box(N, sigma):
condition = False
while condition == False:
L = [[random.uniform(sigma, 1.0 - sigma), random.uniform(sigma, 1.0 - sigma), random.uniform(sigma, 1.0 - sigma)]]
for k in range(1, N):
a = [random.uniform(sigma, 1.0 - sigma), random.uniform(sigma, 1.0 - sigma), random.uniform(sigma, 1.0 - sigma)]
min_dist = min(math.sqrt((a[0] - b[0]) ** 2 + (a[1] - b[1]) ** 2 + (a[2] - b[2]) ** 2) for b in L)
if min_dist < 2.0 * sigma:
condition = False
break
else:
L.append(a)
condition = True
return L
如果你看上面的代码,拒绝率非常高。有什么办法可以降低拒签率?零拒绝率会很棒。非常感谢!
【问题讨论】:
标签: python optimization simulation physics