优化方法-爬山法

转载 2015年11月18日 17:56:49

爬山法是一种局部最优的算法(本质上属于贪心法),也属于启发式的方法,它一般只能得到局部最优解。当优化的问题的局部最优解即为全局最优解时可以用此方法来求最优问题,否则可以考虑多次爬山法或者其他的方法如遗传算法和模拟退火法。

一、原理

爬山法一般从一个随机的解开始,然后逐步找到一个最优解(局部最优)。 假定所求问题有多个参数,我们在通过爬山法逐步获得最优解的过程中可以依次分别将某个参数的值增加或者减少一个单位。例如某个问题的解需要使用3个整数类型的参数x1、x2、x3,开始时将这三个参数设值为(2,2,-2),将x1增加/减少1,得到两个解(1,2,-2), (3, 2,-2);将x2增加/减少1,得到两个解(2,3, -2),(2,1, -2);将x3增加/减少1,得到两个解(2,2,-1),(2,2,-3),这样就得到了一个解集:(2,2,-2), (1, 2,-2), (3, 2,-2), (2,3,-2), (2,1,-2), (2,2,-1), (2,2,-3)
从上面的解集中找到最优解,然后将这个最优解依据上面的方法再构造一个解集,再求最优解,就这样,直到前一次的最优解和后一次的最优解相同才结束“爬山”。

二、代码

import random  
 def evaluate(x1, x2, x3):
    return x1+x2-x3 
 if __name__ == '__main__':
    x_range = [ [-2, 5], [2, 6], [-5, 2] ]
    best_sol = [random.randint(x_range[0][0], x_range[0][1]), 
           random.randint(x_range[1][0], x_range[1][1]), 
           random.randint(x_range[2][0], x_range[2][1])] 
     while True:
        best_evaluate = evaluate(best_sol[0], best_sol[1], best_sol[2])
        current_best_value = best_evaluate
        sols = [best_sol] 
         for i in xrange(len(best_sol)):
            if best_sol[i] > x_range[i][0]:
                sols.append(best_sol[0:i] + [best_sol[i]-1] + best_sol[i+1:])
            if best_sol[i] < x_range[i][1]:
                sols.append(best_sol[0:i] + [best_sol[i]+1] + best_sol[i+1:])
        print sols
        for s in sols:
            el = evaluate(s[0], s[1], s[2])
            if el < best_evaluate:
                best_sol = s
                best_evaluate = el
        if best_evaluate == current_best_value:
            break 
     print 'best sol:', current_best_value, best_sol
某次运行结果如下: 
 [[0, 5, 1], [-1, 5, 1], [1, 5, 1], [0, 4, 1], [0, 6, 1], [0, 5, 0], [0, 5, 2]]
[[-1, 5, 1], [-2, 5, 1], [0, 5, 1], [-1, 4, 1], [-1, 6, 1], [-1, 5, 0], [-1, 5, 2]]
[[-2, 5, 1], [-1, 5, 1], [-2, 4, 1], [-2, 6, 1], [-2, 5, 0], [-2, 5, 2]]
[[-2, 4, 1], [-1, 4, 1], [-2, 3, 1], [-2, 5, 1], [-2, 4, 0], [-2, 4, 2]]
[[-2, 3, 1], [-1, 3, 1], [-2, 2, 1], [-2, 4, 1], [-2, 3, 0], [-2, 3, 2]]
[[-2, 2, 1], [-1, 2, 1], [-2, 3, 1], [-2, 2, 0], [-2, 2, 2]]
[[-2, 2, 2], [-1, 2, 2], [-2, 3, 2], [-2, 2, 1]]
best sol: -2 [-2, 2, 2] 
可以看到,最优解是-2,对应的x1、x2、x3分别取值-2、2、2。

三、如何找到全局最优

爬山法获取的最优解的可能是局部最优,如果要获得更好的解,多次使用爬山算法(需要从不同的初始解开始爬山),从多个局部最优解中找出最优解,而这个最优解也有可能是全局最优解。

另外,模拟退火算法也是一个试图找到全局最优解的算法


转自:http://www.jb51.net/article/49390.htm

通俗理解爬山算法

爬山算法贪心算法 爬山算法即是模拟爬山的过程,随机选择一个位置爬山,每次朝着更高的方向移动,直到到达山顶,即每次都在临近的空间中选择最优解作为当前解,直到局部最优解。这样算法会陷入局部最优解,能...
  • ali197294332
  • ali197294332
  • 2015年12月01日 12:28
  • 2729

搜索算法:爬山法

爬山法是深度优先搜索的改进算法。在这种方法中,使用某种贪心算法来帮助我们决定在搜索空间中向哪个方向搜索。由于爬山法总是选择往局部最优的方向搜索,所以可能会有“无解”的风险,而且找到的接不一定是最优解。...
  • urecvbnkuhBH_54245df
  • urecvbnkuhBH_54245df
  • 2010年08月31日 20:07
  • 3415

爬山算法

爬山算法1 爬山算法简单介绍  爬山算法是一种寻找局部最优的方法,属于启发式算法的一种。由于爬山算法专注于寻找局部最优,因此该算法虽然搜索效率较高,但是也损失了很高的精度,只能达到局部最优解。   ...
  • qq_30981697
  • qq_30981697
  • 2017年04月10日 16:30
  • 269

爬山算法

爬山算法是一种局部择优的方法,采用启发式方法,是对深度优先搜索的一种改进,它利用反馈信息帮助生成解的决策。 属于人工智能算法的一种。算法描述从当前的节点开始,和周围的邻居节点的值进行比较。 如果当前节...
  • u011331383
  • u011331383
  • 2015年03月26日 16:20
  • 1885

搜索法之爬山法

1. 爬山法 hill-climbing爬山法是向值增加的方向持续移动到简单循环过程,算法在到达一个“峰顶”时终止,此时相邻状态中没有比该“峰顶”更高的值。爬山法不维护搜索树,当前节点只需要记录当前状...
  • tangye711ndcs
  • tangye711ndcs
  • 2011年05月20日 09:48
  • 2170

【最优化方法】穷举法 vs. 爬山法 vs. 模拟退火算法 vs. 遗传算法 vs. 蚁群算法

一、 穷举法   列举所有可能,然后一个个去,得到最优的结果。如图一,需要从A点一直走到G点,才能知道,F是最高的(最优解)。这种算法得到的最优解肯定是最好的,但也是效率最低的。穷举法虽...
  • GarfieldEr007
  • GarfieldEr007
  • 2016年04月25日 19:03
  • 3568

集体智慧编程——优化搜索算法:爬山法,模拟退火算法,遗传算法-Python实现

在优化问题中,有两个关键点 代价函数:确定问题的形式和规模之后,根据不同的问题,选择要优化的目标。如本文涉及的两个问题中,一个优化目标是使得航班选择最优,共计12个航班,要使得总的票价最少且每个人的等...
  • bcj296050240
  • bcj296050240
  • 2016年03月09日 23:12
  • 3873

基于爬山算法求解TSP问题(JAVA)

一、TSP问题 TSP问题(Travelling Salesman Problem)即旅行商问题,又译为旅行推销员问题、货郎担问题,是数学领域中著名问题之一。假设有一个旅行商人要拜访n个城市,他...
  • wangqiuyun
  • wangqiuyun
  • 2013年04月16日 19:22
  • 9722

【最优化方法】穷举法 vs. 爬山法 vs. 模拟退火算法 vs. 遗传算法 vs. 蚁群算法

优化算法入门系列文章目录(更新中):   1. 模拟退火算法   2. 遗传算法   一. 爬山算法 ( Hill Climbing )          介绍模拟退火前...
  • kuvinxu
  • kuvinxu
  • 2014年06月29日 08:46
  • 2182

从猴子爬山到最优化方法

  • 2014年03月02日 23:42
  • 1.02MB
  • 下载
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:优化方法-爬山法
举报原因:
原因补充:

(最多只允许输入30个字)