天牛须算法(BAS)python实现

import time
import numpy as np
import math
def normalize(x):#单位化向量
norm=math.sqrt(sum(e**2 for e in x))
return x/norm
def sign(a):#符号函数
if a>0 :
return 1
elif a<0:
return -1
else: return 0
def f(input):#测试函数(目标为求得函数最小值,此函数极值点为0)
x=input[0]
y=input[1]
result =-20np.exp(-0.2np.sqrt((xx+yy)/2))-np.exp((np.cos(2np.pix)+np.cos(2np.piy))/2)+20+np.exp(1)
return result
time_start=time.time()#计时器

eta=0.95 #步长调整比例
iter=100 #迭代次数
step=1 #初始搜索步长
d0=5 #触须间距
k=2 #变量维数
x=np.random.rand(k) #随机生成天牛质心坐标
xl=x #左触须坐标
xr=x #右触须坐标
for i in range(iter): #开始迭代
dir=np.random.rand(k)
dir=normalize(dir)
xl=x+d0dir/2
xr=x-d0
dir/2
fl=f(xl)
fr=f(xr)
x=x-stepdirsign(fl-fr)
step*=eta
print(x)

time_end=time.time()
print(‘time cost’,time_end-time_start,‘s’)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值