用 Python 寻找服务中心的最佳位置的程序
假设我们有一个位置列表,其中包含一些房屋所在的坐标点列表。如果您想在 (xc, yc) 建立一个服务中心,使得从任何给定点到 (xc, yc) 的欧几里得距离之和最小。所以我们必须找到最小距离的总和。
因此,如果输入类似于位置 = [(10,11),(11,10),(11,12),(12,11)],那么输出将为 4.0
为了解决这个问题,我们将遵循以下步骤 -
数字:= 50
定义一个函数total()。这将占用 cx, cy, 位置
总计:= 0.0
对于位置上的每个 p,做
x, y := p
total := total + (cx, cy) 和 (x, y) 之间的欧几里得距离
总回报
定义一个函数fy()。这将占用 x, 个位置
l := 0, r := 101
水库:= 0
对于 i 在 0 到 numIter 的范围内,执行
x1 := l + (r - l) / 3
x2 := r - (r - l) / 3
t1 := fy(x1, 位置)
t2 := fy(x2, 位置)
res := t1 和 t2 的最小值
如果 t1 < t2,则
除此以外,
r := x2
l := x1
l := y1
r := y2
y1 := l + (r - l) / 3
y2 := r - (r - l) / 3
t1 := 总计(x, y1, 位置)
t2 := 总计(x, y2, 位置)
res := t1 和 t2 的最小值
如果 t1 < t2,则
除此以外,
返回资源
定义一个函数fx()。这将采取立场
l := 0, r := 101
水库:= 0
对于 i 在 0 到 numIter 的范围内,执行
返回资源
从 main 方法,返回fx(positions)
示例
让我们看看以下实现以更好地理解
from math import sqrtdef solve(points):
numIter = 50
def total(cx, cy, positions):
total = 0.0
for p in positions:
x, y = p
total += sqrt((cx - x) * (cx - x) + (cy - y) * (cy - y))
return total
def fy(x, positions):
l, r = 0, 101
res = 0
for i in range(numIter):
y1 = l + (r - l) / 3
y2 = r - (r - l) / 3
t1 = total(x, y1, positions)
t2 = total(x, y2, positions)
res = min(t1, t2)
if t1 < t2:
r = y2
else:
l = y1
return res
def fx(positions):
l, r = 0, 101
res = 0
for i in range(numIter):
x1 = l + (r - l) / 3
x2 = r - (r - l) / 3
t1 = fy(x1, positions)
t2 = fy(x2, positions)
res = min(t1, t2)
if t1 < t2:
r = x2
else:
l = x1
return res
return fx(positions)
positions = [(10,11),(11,10),(11,12),(12,11)]
print(solve(positions))
输入
[(10,11),(11,10),(11,12),(12,11)]输出结果
4.0
以上是 用 Python 寻找服务中心的最佳位置的程序 的全部内容, 来源链接: utcz.com/z/363234.html