爬山算法笔记

收藏点自己根据别人写的用例的算法笔记
源代码来自,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
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值