def BFFA(Eval_Func,n=20,m_i=25,minf=0,dim=None,prog=False,gamma=1.0,beta=0.20,alpha=0.25):
"""
input:{ Eval_Func: Evaluate_Function, type is class
n: Number of population, default=20
m_i: Number of max iteration, default=300
minf: minimazation flag, default=0, 0=maximization, 1=minimazation
dim: Number of feature, default=None
prog: Do you want to use a progress bar?, default=False
}
output:{Best value: type float 0.967
Best position: type list(int) [1,0,0,1,.....]
Nunber of 1s in best position: type int [0,1,1,0,1] ? 3
}
"""
estimate=Eval_Func().evaluate
if dim==None:
dim=Eval_Func().check_dimentions(dim)
#flag=dr
global_best=float("-inf") if minf == 0 else float("inf")
pb=float("-inf") if minf == 0 else float("inf")
global_position=tuple([0]*dim)
gen=tuple([0]*dim)
#gamma=1.0
#beta=0.20
#alpha=0.25
gens_dict = {tuple([0]*dim):float("-inf") if minf == 0 else float("inf")}
#gens_dict[global_position]=0.001
gens=random_search(n,dim)
#vs = [[random.choice([0,1]) for i in range(length)] for i in range(N)]
for gen in gens:
if tuple(gen) in gens_dict:
score = gens_dict[tuple(gen)]
else:
score=estimate(gen)
gens_dict[tuple(gen)]=score
if score > global_best:
global_best=score
global_position=dc(gen)
if prog:
miter=tqdm(range(m_i))
else:
miter=range(m_i)
for it in miter:
for i,x in enumerate(gens):
for j,y in enumerate(gens):
if gens_dict[tuple(y)] < gens_dict[tuple(x)]:
gens[j]=exchange_binary(y,gens_dict[tuple(y)])
gen = gens[j]
if tuple(gen) in gens_dict:
score = gens_dict[tuple(gen)]
else:
score=estimate(gens[j])
gens_dict[tuple(gen)]=score
if score > global_best if minf==0 else score < global_best:
global_best=score
global_position=dc(gen)
return global_best,global_position,global_position.count(1)
binary_optimization.py 文件源码
python
阅读 28
收藏 0
点赞 0
评论 0
评论列表
文章目录