1)确定性搜索原理:利用while循环,随机生成一个介于1到100的初始数,后循环逼近所求数,大了就减,小了就加,最终到达所求数,具体程序如下:
Start=random.randint(1,100)#随机生成一个初始值
start=int(start)#只取整数位
X=39
while start!=X
if start>X:
start-=1
if start<X:
start+=1
if start==X:
print("Success")
当输出了success时,说明我们成功搜寻到了所求数。
2)不确定搜索我不是很确定,我理解的含义是遍历次数会很不可控,数量往往会很大,在我的理解里我只是将确定搜索的循环中缩小范围的加减数值随机化了,次数虽然会大大增加但是在有限次内也一定能完成遍历搜索
def Y(x):
return (x-39)*(x-39)#y=(x-39)*(x-39),y很接近于0时几乎就说明X接近了39
def dx(x):
return 2*x-78
X = x_0 = random.randint(1,100)#产生1到100的随机数作为初始值
# 保存梯度下降所经过的点
globalX = [x_0]
globalY = [Y(x_0)]
# 迭代30次
for i in range(30):
alpha = random.randint(1, 9)#随机的学习率,相当于移动步长的参数
print(alpha*0.1 )
temX = X - alpha*0.1 * dx(X)
temY = Y(temX)
# X,Y 重新赋值
X = temX
# 存储新值
globalX.append(temX)
globalY.append(temY)
print(u"最终结果为:(x,y)=(%.5f, %.5f)" % (X, Y(X)))
print(u"迭代过程中取值")
num = len(globalX)
for i in range(num):
print(u"x%d=%f, y%d=%f" % (i,globalX[i],i,globalY[i]))