随机爬山法
伪代码
图片来源Evolutionary Optimization Algorithms by Dan Simon
python实现
随机爬山法求解ackley函数
import math
import random
# 适应度函数
def f(x):
# Ackley函数
d=len(x)
a,b,c=20,0.2,2*math.pi
sum1,sum2=0,0
for i in range(d):
sum1+=x[i]**2
sum2+=math.cos(c*x[i])
f=-a*math.exp(-b*(math.sqrt(1.0/d*sum1)))-math.exp(1.0/d*sum2)+a+math.exp(1)
return f
# 爬山法
def hillClimbing(d):
x0=[random.uniform(-32.768,32.768) for i in range(d)] #随机产生个体
while (abs(f(x0))>10**(-3)): #终止准则
q=random.randint(0,d-1)
x1=x0[:]
x1[q]=random.uniform(-32.768,32.768)
if f(x0)>f(x1):
x0=x1
return x0
# Press the green button in the gutter to run the script.
if __name__ == '__main__':
x0=hillClimbing(20)
print(x0,f(x0))