p-medianpython代码
时间: 2023-07-03 09:30:19 浏览: 52
以下是一个简单的Python实现p-median问题的代码:
```python
import numpy as np
from scipy.spatial.distance import cdist
def p_median(data, p):
n = len(data)
D = cdist(data, data)
sol = np.arange(n) # 初始解设为所有点都是设施
old_cost = np.sum(np.min(D[:, sol], axis=1))
while True:
# 计算每个点到解中所有点的距离
distances = D[:, sol]
# 找到最近的p个设施
nearest = np.argpartition(distances, p-1, axis=1)[:, :p]
# 计算新的代价
new_cost = np.sum(np.min(distances[range(n)[:, None], nearest], axis=1))
if old_cost == new_cost: # 如果代价不再改变,停止迭代
break
# 更新解
sol = np.zeros(n, dtype=bool)
for i in nearest.flat:
sol[i] = True
old_cost = new_cost
return sol
```
其中,`data`是一个n×2的二维数组,表示n个点的坐标;`p`是设施的数量。函数的返回值是一个长度为n的布尔型数组,表示哪些点是最终选择的设施。
相关推荐
![zip](https://img-home.csdnimg.cn/images/20210720083736.png)
![pptx](https://img-home.csdnimg.cn/images/20210720083543.png)
![zip](https://img-home.csdnimg.cn/images/20210720083736.png)
![zip](https://img-home.csdnimg.cn/images/20210720083736.png)
![pptx](https://img-home.csdnimg.cn/images/20210720083543.png)
![zip](https://img-home.csdnimg.cn/images/20210720083736.png)
![zip](https://img-home.csdnimg.cn/images/20210720083736.png)
![zip](https://img-home.csdnimg.cn/images/20210720083736.png)