首页 > 编程语言 >猎人猎物优化算法

猎人猎物优化算法

时间:2022-09-24 13:34:31浏览次数:50  
标签:猎物 R1 self 算法 Deuc 猎人 fitness np best

猎人猎物优化算法

连续空调间的优化算法

import numpy as np
from tqdm import tqdm # 进度条设置
import random
from matplotlib import rcParams
import math
import matplotlib; matplotlib.use('TkAgg')
from pylab import *
mpl.rcParams['font.sans-serif'] = ['SimHei'] # 指定默认字体
mpl.rcParams['axes.unicode_minus'] = False # 解决保存图像是负号'-'显示为方块的问题

config = {
"font.family": 'serif',
"mathtext.fontset": 'stix',
"font.serif": ['SimSun'],
}
rcParams.update(config)


class HPO(object):
def __init__(self, m, T, lb, ub, R, C):
self.M= m # 种群个数
self.T = T # 迭代次数
self.lb = lb
self.ub = ub
self.R = R #行
self.C = C #列
self.b = 0.1 #调节参数
def init_x(self):
x = np.random.uniform(self.lb, self.ub, (self.M, self.R, self.C))
return x

def fitness(self,x):
"""
(x1-50)**2+(x2-50)**2
:param x:
:return:
"""
# result = (x[0] - 50) ** 2 + (x[1] - 50) ** 2
result = x[:, :, 0] ** 2 + x[:, :, 1] ** 2
return result



def main(self):
x = self.init_x()
fitness = self.fitness(x)
fitness_best = fitness.min()
x_num = list(fitness).index(fitness_best)
x_best = x[x_num]

fitness_best_list = []
fitness_best_list.append(fitness_best)

for it in range(self.T):
C = 1-it*(0.98/self.T)
R1 = np.random.choice([0, 1], (self.M, self.R, self.C))
R3 = np.random.choice([0, 1], (self.M, self.R, self.C))
R2 = np.random.rand(self.M)
kbest = round(self.M*C)

#R1 IDX Z
R1 = R1-C
R1[R1 <=0] = 0
R1[R1 > 0] = 1
# R_IDX (p==0) ~IDX = R1
R_IDX = R1.copy()
R_IDX = 1-R_IDX
z = np.zeros((self.M, self.R, self.C))
for i in range(self.M):
z[i] = R2[i] * R_IDX[i]
z += R3*R1


# #u
# u=np.zeros((self.R,self.C))
# for i in range(self.M):
# u += x[i]
# u = u/self.M
#
# #Deuc
# Deuc_par = x-u
# # print(Deuc_par)
# Deuc = np.zeros(self.M)
# for i in range(self.M):
# Deuc[i] = np.sum(Deuc_par[i]**2)
# Deuc = np.sqrt(Deuc)
# max_index = np.argmax(Deuc)
# P_pos = x[max_index]
# x_new = np.zeros((self.M, self.R, self.C))
# x_new=x+0.5*(2*C*z*P_pos-x+2*(1-C)*z*u-x)
#
# #kbest
# kbest=round(self.M*C)
R5 = np.random.rand()
x_new = np.zeros((self.M, self.R, self.C))
if 0<self.b:
# u
u = np.zeros((self.R, self.C))
for i in range(self.M):
u += x[i]
u = u / self.M

# Deuc
Deuc_par = x - u
# print(Deuc_par)
Deuc = np.zeros(self.M)
for i in range(self.M):
Deuc[i] = np.sqrt(np.sum(Deuc_par[i] ** 2))
kbest = round(self.M * C)
Deuc_max = np.max(sorted((Deuc)[:kbest]))
Deuc = Deuc[:kbest]
num_par = np.where(Deuc == Deuc_max)
num = num_par[0][0]
P_pos = x[num]
x_new = x + 0.5 * (2 * C * z * P_pos - x + 2 * (1 - C) * z * u - x)
else:
R4 = np.random.rand()
for i in range(self.M):
x_new[i] = x_best+C*z*np.cos(2*np.pi*R4)*(x_best-x[i])
x = x_new
fitness = self.fitness(x)
fitness_best_new = fitness.min()

if fitness_best_new <= fitness_best:
fitness_best = fitness_best_new
x_num = list(fitness).index(fitness_best)
x_best = x[x_num]
else:
fitness_best = fitness_best
fitness_best_list.append(fitness_best)
print(fitness_best)
plt.plot(fitness_best_list, label='迭代曲线')
plt.xlabel('迭代次数')
plt.ylabel('适应度')
plt.legend()
plt.show()

if __name__ == '__main__':
hpo = HPO(5,10,-10,10,1,2)
hpo.main()


 

标签:猎物,R1,self,算法,Deuc,猎人,fitness,np,best
From: https://www.cnblogs.com/qj696/p/16725487.html

相关文章

  • 速度之巅-位图算法
     代码实现:    ......
  • 算法竞赛进阶指南 0x24 迭代加深
    对于深度优先,如果答案在很浅的部位,但是整个搜索树过于深,那么就会寄掉。但是对于广度优先,本来挺好,但是在队列里面存储太多的元素,到时爆。同时,广度优先也不容易存储数据。......
  • 讲讲Vue diff算法
    diff算法就是进行虚拟节点对比,并返回一个patch对象,用来存储两个节点不同的地方,最后用patch记录的消息去局部更新Dom。特点:比较只会在同层级进行,不会跨层级比较在di......
  • 经典算法——舍罕王算
    传说,印度的舍罕王打算重赏国际象棋的发明人,当时的宰相是西萨·班·达依尔。这位聪明的宰相胃口似乎并不大,他跑在国王面前说:“陛下,请您在这张棋盘的第一小格内,赏给我一粒麦......
  • 算法练习-第三天【链表】
    链表203.移除链表元素参考:代码随想录203.移除链表元素看完题目的第一想法一道基本的链表题目,遍历链表如果当前节点的下一个节点值等于val,那么就将当前节点的Next指......
  • 6th 2022/6/8 算法总结·LCA·倍增
    开头的话这个算法对于大部分图论无环图题都是必备的,应多多复习大概是对于两个点的公共祖先倍增众所周知,为了找到公共祖先,最暴力的算法就莫过于一个个往上跳,直至相遇而......
  • 4th 2022/5/25 算法总结 哈希篇
    开头的话这个算法,并不像大部分其它的算法那样,逻辑正确后,时间复杂度一般都是较稳定的,哪怕是最高和最低之间也没差多少但哈希不一样,它时间复杂度较不稳定,虽然可以通过特殊......
  • 计算机系统结构大题精讲4-页面替换算法-Cache 组相连映像
    1、在一个采用LRU算法和组相连映像的Cache系统中,主存由0-15共16块组成;Cache分为2组,每组两块,每块大小为16个存储字。在某个程序执行时,访存的主存块地址流为:6、2、4、1、4、6......
  • KMP 算法实现
    #coding=utf-8defget_next_list(findding_str):#求一个字符串序列每个位置的最长相等前、后缀j=0#最长相等前缀的末位next=[0]#next数组用......
  • C语言经典算法100例二
    【程序21】题目:猴子吃桃问题:猴子第一天摘下若干个桃子,当即吃了一半,还不瘾,又多吃了一个第二天早上又将剩下的桃子吃掉一半,又多吃了一个。以后每天早上都吃了前一天剩下的一......