Hill-climbing 其实也不是很复杂,在这个博文里面,我假定一个512维度的空间中存在一个点point1 ,我的目标是随机初始化一个点,通过Hill-climbing找到这个目标点point1。

站在当前点,通过探索所有可能的走法去判断下一步哪一个走法是能够朝着目标靠近的。过程其实也不复杂,在512里面的某一个维度,走起来只有两种选择,加一个步长或者减去一个步长。如果下一步找不到比较好的选择,都不能靠近目标点,那么算法结束。

具体代码可以看下面:

__author__ = 'xingbo, it is based on inital version of sidharthgoyal'
import math
from random import *
import random
import numpy
import copyincrement = 0.05
startingPoint = numpy.random.random(512)
point1 = numpy.random.random(512)
print('target:',point1)
# point2 = [6,4]
# point3 = [5,2]
# point4 = [2,1]def distance(coords1, coords2):""" Calculates the euclidean distance between 2 lists of coordinates. """# print('coords1',coords1)# print('coords2',coords2)return numpy.sqrt(numpy.sum((coords1 - coords2)**2))def sumOfDistances(x, px):d1 = distance(x, px)return d1def newDistance(d1, point1):d1temp = sumOfDistances(d1, point1 )d1 = numpy.append(d1,d1temp) return d1minDistance = sumOfDistances(startingPoint, point1 )
flag = Truethreshold = 0.4
i = 1
lastFitness = 99
while lastFitness > threshold:d = []old_point = startingPointfor index in range(512):increment_arr = numpy.zeros(512)increment_arr[index] = incrementnewpoint = startingPoint + increment_arrd1 = newDistance(newpoint, point1)newpoint = startingPoint - increment_arrd2 = newDistance(newpoint, point1)d.append(d1)d.append(d2)# print(i,' ', startingPoint[:4])d = numpy.array(d)minimum = min(d[:,512])if minimum < minDistance:minindex = numpy.argmin(d[:,512])startingPoint = d[minindex,:512]minDistance = minimumprint('found ',i,' ', startingPoint[:4],'score',d[minindex,512])lastFitness = d[minindex,512]else:flag = False# print('new start poiny ',i)startingPoint = startingPoint + numpy.random.random(512) * 0.1i+=1print('target:',point1[:10])
print('result:',startingPoint[:10])

运行结果:

found  3319   [0.54880071 0.14943408 0.16443942 0.67552999] score 0.40665809714898343
found  3320   [0.54880071 0.14943408 0.16443942 0.67552999] score 0.4050587747707967
found  3321   [0.54880071 0.14943408 0.16443942 0.67552999] score 0.4034618667141106
found  3322   [0.54880071 0.14943408 0.16443942 0.67552999] score 0.4018617552269553
found  3323   [0.54880071 0.14943408 0.16443942 0.67552999] score 0.4002772234555598
found  3324   [0.54880071 0.14943408 0.16443942 0.67552999] score 0.3986881730615146
target: [0.54391242 0.16028716 0.15798658 0.6986903  0.74380195 0.258413040.40675962 0.2248158  0.76813796 0.7937874 ]
result: [0.54880071 0.14943408 0.16443942 0.67552999 0.73628524 0.25467860.37020921 0.2397613  0.75941863 0.75618421]

import numpy as np
from scipy.optimize import minimizext = np.random.rand(512) * 2
print('x terget:',xt[:10])def rosen(x):"""The Rosenbrock function"""return np.sqrt(np.sum((x - xt)**2))# 初始迭代点
x0 = np.random.rand(512) * 2res = minimize(rosen, x0, method='BFGS', jac=[],options={'disp': True})print('res',res.x[:10])

Hill-climbing 算法python 实现相关推荐

  1. Python:实现hill climbing爬山法用来寻找函数的最大值算法(附完整源码)

    Python:实现hill climbing爬山法用来寻找函数的最大值算法 import mathclass SearchProblem:def __init__(self, x: int, y: i ...

  2. 零基础学启发式算法(2)-局部搜索(Local Search)和爬山算法(Hill Climbing)

    一.局部搜索(Local Search) 局部搜索是一种近似算法(Approximate algorithms),是一种简单的贪心搜索算法.从一个候选解开始,持续地在其邻域中搜索,直至邻域中没有更好的 ...

  3. 旅行商问题 java_爬山算法(Hill Climbing)解决旅行商问题(TSP)

    何为TSP问题? 旅行商问题 TSP(Travelling Salesman Problem)是数学领域中著名问题之一. 场景:一个旅行商人需要拜访n个城市 条件:要选择一个路径能够拜访到所有的城市, ...

  4. 爬山算法 ( Hill Climbing )/模拟退火(SA,Simulated Annealing)

    一. 爬山算法 ( Hill Climbing ) 爬山算法是一种简单的贪心搜索算法,该算法每次从当前解的临近解空间中选择一个最优解作为当前解,直到达到一个局部最优解.爬山算法实现很简单,其主要缺点是 ...

  5. 【机器学习基础】(一) 爬山算法 ( Hill Climbing )与模拟退火(SA,Simulated Annealing)

    一.爬山算法 ( Hill Climbing ) 爬山算法属于人工智能算法的一种. 这种算法基于贪心算法的思想,该算法每次从当前解的临近解空间中选择一个最优解作为当前解,直到达到一个局部最优解.爬山算 ...

  6. 算法(Python版)|156Kstars|神级项目-(1)The Algorithms - Python简介

    文章目录 算法(Python版) 项目地址 项目概况 说明 参与入门 社区频道 算法列表 Arithmetic Analysis 算术分析 Audio Filters 音频过滤器 Backtracki ...

  7. 棋盘最短路径 python_Dijkstra 最短路径算法 Python 实现

    Dijkstra 最短路径算法 Python 实现 问题描述 使用 Dijkstra 算法求图中的任意顶点到其它顶点的最短路径(求出需要经过那些点以及最短距离). 以下图为例: 算法思想 可以使用二维 ...

  8. 2021-03-15 数据挖掘算法—K-Means算法 Python版本

    数据挖掘算法-K-Means算法 Python版本 简介 又叫K-均值算法,是非监督学习中的聚类算法. 基本思想 k-means算法比较简单.在k-means算法中,用cluster来表示簇:容易证明 ...

  9. 2021-01-28 粒子群优化算法-Python版本和Matlab函数 particleswarm 调用

    粒子群优化算法-Python版本和Matlab函数 particleswarm 调用 前两天分享了粒子群优化算法的原理和Matlab原理实现,本文分享一下Python代码下的PSO实现以及Matlab ...

  10. 最优化算法python实现篇(4)——无约束多维极值(梯度下降法)

    最优化算法python实现篇(4)--无约束多维极值(梯度下降法) 摘要 算法简介 注意事项 算法适用性 python实现 实例运行结果 算法过程可视化 摘要 本文介绍了多维无约束极值优化算法中的梯度 ...

最新文章

  1. 2022-2028年中国手机配件行业发展前景战略及投资风险预测分析报告
  2. 输出不详宗教预言,Google翻译为何“水逆”了?
  3. 鱼和熊掌兼得:同时使用 JPA 和 Mybatis
  4. 浅析企业网站应该如何选择适合自己的服务器?
  5. vc 版本 宏 (zz.IS2120@BG57IV3)
  6. VTK:Points之DensifyPoints
  7. POJ 2778 DNA Sequence (AC自动机+矩阵快速幂)
  8. SQL SERVER 2012 OBJECT_ID
  9. Java并发编程的基础-线程的生命周期
  10. (操作系统题目题型总结)第二章:处理器管理
  11. 《运营之光》《策略产品经理》《推荐系统实践》读书笔记随笔
  12. android超级管理员权限作用,Android获取超级管理员权限的实现
  13. Redis单台的安装部署及集群部署
  14. JavaScript (十九):DOM对象其它操作
  15. C语言程序——小数的四舍五入
  16. 目前医疗大数据面临四大挑战
  17. Centos7系或中标麒麟ifconfig/ip addr无法显示ip地址的详细解决方法
  18. 象yhoo相册那样在网页上操作图片(不完全)_1
  19. 超详细的--STP理论
  20. 软件测试自学摄影审美,【摄影讲评】摄影常用的5种透视 第1234讲?

热门文章

  1. JavaScript 常用字符串、数组、对象、判断类型方法
  2. 91-blockchain入门
  3. 一个应届生的应聘:直飞Google总部[zt]
  4. 【开源】PaddleHub人像分割实现桌面动态挂件
  5. Json详解以及fastjson使用教程
  6. lrc格式歌词格式化处理函数封装,返回对象数组
  7. 九大排序算法告诉你什么是内部排序和外部排序
  8. 数据结构常考题 —— 八种经典内部排序算法
  9. java异步框架feed,Feed流及回复、转发的关系
  10. 人还是要有幻想的(22)