一家快递公司希望在新城市建立新的服务中心。公司统计了该城市所有客户在二维地图上的坐标,并希望能够以此为依据为新的服务中心选址:使服务中心 到所有客户的欧几里得距离的总和最小 。

给你一个数组 positions ,其中 positions[i] = [xi, yi] 表示第 i 个客户在二维地图上的位置,返回到所有客户的 欧几里得距离的最小总和 。

换句话说,请你为服务中心选址,该位置的坐标 [xcentre, ycentre] 需要使下面的公式取到最小值:

与真实值误差在 10^-5 之内的答案将被视作正确答案。

示例 1:


输入:positions = [[0,1],[1,0],[1,2],[2,1]]
输出:4.00000
解释:如图所示,你可以选 [xcentre, ycentre] = [1, 1] 作为新中心的位置,这样一来到每个客户的距离就都是 1,所有距离之和为 4 ,这也是可以找到的最小值。
示例 2:

输入:positions = [[1,1],[3,3]]
输出:2.82843
解释:欧几里得距离可能的最小总和为 sqrt(2) + sqrt(2) = 2.82843
示例 3:

输入:positions = [[1,1]]
输出:0.00000
示例 4:

输入:positions = [[1,1],[0,0],[2,0]]
输出:2.73205
解释:乍一看,你可能会将中心定在 [1, 0] 并期待能够得到最小总和,但是如果选址在 [1, 0] 距离总和为 3
如果将位置选在 [1.0, 0.5773502711] ,距离总和将会变为 2.73205
当心精度问题!
示例 5:

输入:positions = [[0,1],[3,2],[4,5],[7,6],[8,9],[11,1],[2,12]]
输出:32.94036
解释:你可以用 [4.3460852395, 4.9813795505] 作为新中心的位置

提示:

1 <= positions.length <= 50
positions[i].length == 2
0 <= positions[i][0], positions[i][1] <= 100

来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/best-position-for-a-service-centre
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。

思路

  1. 三分
  2. 模拟退火
  3. 梯度下降
  4. 还有大佬直接调scipy的优化库

采用梯度下降算法,主要注意如何调节学习率 使用step表示
这里的关键思路是保持x0, y0不变的情况下(同时斜率也保持不变),成倍数的缩减步长,直到找到距离小于当前点的转移点x1, y1,然后再进行下一步迭代,因为这样可以解决震荡的问题。

from scipy.optimize import minimize
class Solution:def getSum(self,x,y,positions):"""求欧式距离和"""return sum([sqrt((x - x1) ** 2 + (y - y1) ** 2) for x1, y1 in positions])def getDeri(self,x,y,positions):"""求(x,y)处导数"""dx = 0dy = 0for x1,y1 in positions:div = sqrt((x - x1)**2 + (y - y1)**2)if div==0:continuedx += (x - x1) / divdy += (y - y1) / divreturn dx,dydef getMinDistSum(self, positions: List[List[int]]) -> float:#统计坐标是否重叠if len(set([tuple(v) for v in positions])) <= 1:return 0x0 = sum([p[0] for p in positions]) / len(positions)y0 = sum([p[1] for p in positions]) / len(positions)step = 10while True:dx,dy = self.getDeri(x0,y0,positions)if dx==0 and dy==0: break;while True:x1 = x0 - step * dxy1 = y0 - step * dyif self.getSum(x1,y1,positions) < self.getSum(x0,y0,positions):breakstep /= 2if abs(self.getSum(x1,y1,positions) - self.getSum(x0,y0,positions)) < 10**-7:break;x0 = x1y0 = y1return self.getSum(x0,y0,positions)

梯度下降-5463. 服务中心的最佳位置相关推荐

  1. 【机器学习基础】线性回归和梯度下降的初学者教程

    作者 | Lily Chen 编译 | VK 来源 | Towards Data Science 假设我们有一个虚拟的数据集,一对变量,一个母亲和她女儿的身高: 考虑到另一位母亲的身高为63,我们如何 ...

  2. 最佳论文!牛津大学揭示梯度下降复杂度理论

    点上方计算机视觉联盟获取更多干货 仅作学术分享,不代表本公众号立场,侵权联系删除 转载于:机器之心 AI博士笔记系列推荐 周志华<机器学习>手推笔记正式开源!可打印版本附pdf下载链接 梯 ...

  3. 基于机器学习梯度下降优化算法来寻找最佳的线性回归模型

    https://www.toutiao.com/a6638782437587419652/ 幻风的AI之路 2018-12-25 18:12:27 线性回归模型 线性回归模型是一个非常简单的算法模型, ...

  4. 不能兼顾速度与精度,STOC 2021最佳论文揭示梯度下降复杂度理论

    ©作者 | 机器之心编辑部 来源 | 机器之心 梯度下降算法具有广泛的用途,但是关于它的计算复杂度的理论研究却非常少.最近,来自利物浦大学.牛津大学的研究者从数学的角度证明了梯度下降的计算复杂度,这项 ...

  5. 机器学习中的梯度下降( Gradient Descent)算法

    前言 梯度下降(Gradient Descent,GD)算法主要分为三种:批量梯度下降(Batch Gradient Descent,BGD)算法.随机梯度下降(Stochastic Gradient ...

  6. 【深度学习】(4) 梯度下降、损失函数

    各位同学好,今天和大家介绍一下TensorFlow2.0中的梯度下降.激活函数及其梯度.损失函数及其梯度. (1) 梯度计算:GradientTape(),tape.watch(),tape.grad ...

  7. 强化学习(七) - 函数近似方法 - 随机梯度下降, 半梯度下降,及瓦片编码(Tile Coding)实例

    函数近似方法 7.1 目标预测(VE‾\overline{VE}VE) 7.2 随机梯度下降和半梯度下降 例7.1: 1000态随机行走的状态收敛 7.3 线性近似 7.4 线性方法的特征构造 7.4 ...

  8. 独家 | 数据科学家指南:梯度下降与反向传播算法

    作者:Richmond Alake 翻译:陈之炎 校对:zrx本文约3300字,建议阅读5分钟 本文旨在为数据科学家提供一些基础知识,以理解在训练神经网络时所需调用的底层函数和方法. 标签:神经网络, ...

  9. 机器不学习:浅显易懂!「高中数学」读懂梯度下降的数学原理

    https://www.toutiao.com/a6677899033182208523/ 梯度下降是最常用的机器学习优化算法之一,Towards Data Science 近日发布了一篇文章,浅显易 ...

最新文章

  1. python中的错误
  2. 重新定义数据库历史的时刻——时间序列数据库Schwartz认为InfluxDB最有前途,Elasticsearch也不错...
  3. bootstrap-select实现下拉框多选效果
  4. C语言输入end时结束程序,给大家一个程序,输入多个字符串以END结束后排序,这个程序运行,即结果都是对的。...
  5. 盘点 Serverless 架构的六个特质
  6. hibernate原理
  7. linux系统下deepin eclipse不能显示源码报class File Editor Source not found
  8. 恭喜你,2018 中国开发者有奖大调查“榜上有名”!
  9. linux自动切换tty,Linux 中不适用功能键切换TTY
  10. Mysql安装 | 跟着黑马程序员视频安装Mysql,少走随机密码错误的弯路【有手就行系列】
  11. 7-11 秋天的第一杯奶茶 (20 分)
  12. 计算机添加定时启动软件,有什么软件可以让电脑定时开机?除了设定BIOS!
  13. 你有哪些“相见恨晚”的UE4学习资料?
  14. PEST分析顺丰服务需求_顺丰内外部环境分析.doc
  15. 互联网周刊:深度分析云计算
  16. B. Dubious Cyrpto(思维+枚举)
  17. iOS开发之集成支付宝
  18. 工业交换机智能监控管理方案
  19. vue源码分析系列一:new Vue的初始化过程
  20. 一面大批裁员,一面又控股科陆电子 美的何享健要做什么

热门文章

  1. 理解套间(涉及进程、线程、COM线程模型)(转载)
  2. h5课件制作_H5课件——H5页面在教学上的妙用
  3. 华为RH2288H V3服务器raid配置
  4. Linux debian安装DBeaver连接MySQL8、导入和导出数据库详细教程
  5. ReThought (二): 如何照顾团队中的新人
  6. 转运RNA(tRNA)甲基化修饰7-甲基胞嘧啶(m7C)|tRNA-m7G
  7. 如何利用ipad高效学习python
  8. 用迭代算法实现扭蛋机例子
  9. a标签跳转页面自动在最前面携带localhost:8080,怎么解决?
  10. 学生家乡网页设计作品静态HTML网页—— HTML+CSS+JavaScript制作辽宁沈阳家乡主题网页源码(11页)