赞
踩
收藏点自己根据别人写的用例的算法笔记
源代码来自,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
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。