当前位置:   article > 正文

爬山算法笔记_crying 正在学习爬山算法。 现在他有一个定义在 [ 1 , ] [1,n] 中的

crying 正在学习爬山算法。 现在他有一个定义在 [ 1 , ] [1,n] 中的

收藏点自己根据别人写的用例的算法笔记
源代码来自,https://blog.csdn.net/a6225301/article/details/50497800
爬山算法是完全的贪心算法,解空间里随机移动,但是很容易陷入局部最优解

#encoding=utf-8
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]),#-2到5生成一个随机数
           random.randint(x_range[1][0], x_range[1][1]),  #2到6生成一个随机数
           random.randint(x_range[2][0], x_range[2][1])]    #-5到2生成一个随机数

    while True:
        best_evaluate = evaluate(best_sol[0], best_sol[1], best_sol[2]) #求解当前状态下三个数
        current_best_value = best_evaluate #当前最优解
        sols = [best_sol]
        #print sols #这里的sol求的是当前存储的最优解坐标
        print best_sol

        for i in xrange(len(best_sol)): #x_range函数是生成小于当前值的所有函数
            if best_sol[i] > x_range[i][0]:#这个判断是判断当前解和边界的关系,第i个位置的参数加1或者减去1,第一个判断的是下界,第二个判断的是上界
                sols.append(best_sol[0:i] + [best_sol[i]-1] + best_sol[i+1:])#得到的是一个三元组,当前位置减1,大于下届数的数减去1
            if best_sol[i] < x_range[i][1]:
                sols.append(best_sol[0:i] + [best_sol[i]+1] + best_sol[i+1:])#得到的是一个三元组,当前位置减1,小于于下届数的数加上1
        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
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/盐析白兔/article/detail/710729
推荐阅读
相关标签
  

闽ICP备14008679号