日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

免疫算法(二进制)算例(源码实现)

發布時間:2024/9/30 编程问答 31 豆豆
生活随笔 收集整理的這篇文章主要介紹了 免疫算法(二进制)算例(源码实现) 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

??????之前我們講解了免疫算法以及離散的免疫算法。見鏈接:
萬字長文了解免疫算法原理 及求解復雜約束問題(源碼實現)
離散免疫算法求解旅行商問題(源碼實現)

??????今天講下二進制的免疫算法。
我愛學習,愛玉醬。

算例

?????? 假設一個數PD=210,它可以看成下列中的數,某幾個組合而成來的。
P_state=np.array([1700,2600,180,2200,1400,60,85,290,4100,3000,1590,200,1300,50,100,30,90]),即PD=sum(xiP_statei)其中的xi表示狀態,只能取0或1。
?????? 限制條件:【180,2200】,序號[2,3]不能共存;【60,85,300】,序號[5,6,7]不能共存;【50,100】 序號[13,14]不能共存;【25,90】序號[15,16]不能共存。

算例實現

?????? 如果不懂算法原理,請看之前免疫算法博文。
??????由于二進制編碼不可能出現重復,所以無需計算濃度。

python實現
python3.7

#!/usr/bin/env python3 # -*- coding: utf-8 -*- # @Author: yudengwu(余登武) # @Date : 2021/5/19 #@email:1344732766@qq.com import pandas as pd import numpy as np from tqdm import tqdm#進度條設置 import matplotlib.pyplot as plt import matplotlib; matplotlib.use('TkAgg') from pylab import * mpl.rcParams['font.sans-serif'] = ['SimHei'] mpl.rcParams['axes.unicode_minus'] = False#以一個負荷為例講解優化算法P_state=np.array([1700,2600,180,2200,1400,60,85,290,4100,3000,1590,200,1300,50,100,30,90])#17個狀態state_num=17 #狀態數 #【180,2200】,序號[2,3]不能共存 #【60,85,300】,序號[5,6,7]不能共存 #【50,100】 序號[13,14]不能共存 #【25,90】序號[15,16]不能共存#總負荷 Pload=446.0 #這個值可以設置的########適應度函數 def calc_f(xi):""":param xi 為個體 即電器的工作狀態,01二二進制,0表示當前狀態關,1表示開:xi 為np.array(數據):return 返回 np.abs(XiP_state-pload) P_state為電器"額定功率":"""xi=np.array(xi)xi=xi.reshape(state_num,)return np.abs(np.sum(xi*P_state)-Pload)###############免疫算法相關函數############# #免疫操作函數:克隆、變異、變異抑制 def variation(Sortf):""":param Sortf : 排序后的種群:return: 經過克隆、變異、變異抑制后的群體af .af的規模為Sortf的一半"""Ncl = 5 # 克隆個數af = np.zeros((np.int(NP / 2), state_num)) # 存儲變異后的個體for i in range(np.int(NP / 2)): # 遍歷前一半個體# 選激勵度前NP/2個體進行免疫操作a = Sortf[i] # 當前個體 .shape(state_num,)a = a.reshape(-1, state_num) # (-1,維度state_num)Na = np.tile(a, (Ncl, 1)) # 對當前個體進行克隆 Na.shape=(Ncl, state_num)for j in range(Ncl): # 遍歷每一個克隆樣本for k in range(state_num):#遍歷個體的每一個元素#變異if np.random.random()<0.5:#Na[j,k]=1else:Na[j,k]=0# 【180,2200】,序號[2,3]不能共存while Na[j, 2] + Na[j, 3] == 2 :Na[j, 2] = np.random.randint(0, 2, 1)Na[j, 3] = np.random.randint(0, 2, 1)# 【60,85,300】,序號[5,6,7]不能共存while Na[j, 5] + Na[j, 6] + Na[j, 7] == 2 or Na[j, 5] + Na[j, 6] + Na[j, 7] == 3:Na[j, 5] = np.random.randint(0, 2, 1)Na[j, 6] = np.random.randint(0, 2, 1)Na[j, 7] = np.random.randint(0, 2, 1)# 【50,100】 序號[13,14]不能共存while Na[j, 13] + Na[j, 14] == 2:Na[j, 13] = np.random.randint(0, 2, 1)Na[j, 14] = np.random.randint(0, 2, 1)# 【25,90】序號[15,16]不能共存while Na[j, 15] + Na[j, 16] == 2:Na[j, 15] = np.random.randint(0, 2, 1)Na[j, 16] = np.random.randint(0, 2, 1)# 保留克隆源個體Na[0, :] = Sortf[i]#####克隆抑制,保留親和度最高的個體NaMSLL = np.zeros((Ncl, 1)) # 存儲變異種群親和度值for j in range(Ncl): # 遍歷每一個克隆樣本NaMSLL[j] = calc_f(xi=Na[j]) # 親和度=距離Index = np.argsort(NaMSLL, axis=0) # 激勵度按升序排序Index = Index[:, 0]NaSortf = Na[Index] # 排序后的種群af[i] = NaSortf[0] # 取最優return af#免疫操作:創建新生種群 def refresh():""":return: 創建一半新生群體 bf"""#########初始化群體bf = np.random.randint(0, 2, (np.int(NP/2), state_num)) # 在[0,2)之前隨機取整數,取state_num(19)個 bf.shape=(50, 19)for j in range(np.int(NP / 2)): # 遍歷每一個個體# 【180,2200】,序號[2,3]不能共存while bf[j, 2] + bf[j, 3] == 2:bf[j, 2] = np.random.randint(0, 2, 1)bf[j, 3] = np.random.randint(0, 2, 1)# 【60,85,300】,序號[5,6,7]不能共存while bf[j, 5] + bf[j, 6] + bf[j, 7] == 2 or bf[j, 5] + bf[j, 6] + bf[j, 7] == 3:bf[j, 5] = np.random.randint(0, 2, 1)bf[j, 6] = np.random.randint(0, 2, 1)bf[j, 7] = np.random.randint(0, 2, 1)# 【50,100】 序號[13,14]不能共存while bf[j, 13] + bf[j, 14] == 2:bf[j, 13] = np.random.randint(0, 2, 1)bf[j, 14] = np.random.randint(0, 2, 1)# 【25,90】序號[15,16]不能共存while bf[j, 15] + bf[j, 16] == 2:bf[j, 15] = np.random.randint(0, 2, 1)bf[j, 16] = np.random.randint(0, 2, 1)return bf#############免疫算法開始############ NP=100 #免疫個體數目 G=200 #最大免疫代數#########初始化群體 f=np.random.randint(0,2,(NP,state_num)) #在[0,2)之前隨機取整數,取state_num(19)個 f.shape=(100, 19) for j in range(NP):while f[j, 2] + f[j, 3] == 2:f[j, 2] = np.random.randint(0, 2, 1)f[j, 3] = np.random.randint(0, 2, 1)# 【60,85,300】,序號[5,6,7]不能共存while f[j, 5] + f[j, 6] + f[j, 7] == 2 or f[j, 5] + f[j, 6] + f[j, 7] == 3:f[j, 5] = np.random.randint(0, 2, 1)f[j, 6] = np.random.randint(0, 2, 1)f[j, 7] = np.random.randint(0, 2, 1)# 【50,100】 序號[13,14]不能共存while f[j, 13] + f[j, 14] == 2:f[j, 13] = np.random.randint(0, 2, 1)f[j, 14] = np.random.randint(0, 2, 1)# 【25,90】序號[15,16]不能共存while f[j, 15] + f[j, 16] == 2:f[j, 15] = np.random.randint(0, 2, 1)f[j, 16] = np.random.randint(0, 2, 1)len=np.zeros((NP,1)) #存儲calc_f(X)結果for i in range(NP):#遍歷每一個個體len[i]=calc_f(xi=f[i]) #計算初始群體每個個體的路程長度 ###激勵度按升序排序 Index=np.argsort(len,axis=0) Index=Index[:,0] Sortf=f[Index] # #排序后的初始群體 shape=(100, 18)##############免疫循環############ trace=[] #記錄迭代激勵度最優值 for gen in tqdm(range(G)):#遍歷每一次迭代af = variation(Sortf) # 選擇一半個體 進行克隆、變異、變異抑制 shape=(100, 18)aflen=np.zeros((af.shape[0],1)) #存儲af群體路徑長度 shape=(100, 1)for j in range(af.shape[0]):#遍歷af中的每一個個體aflen[j] = calc_f(xi=af[j]) # 計算af群體每個個體的路程長度(親和度)bf = refresh() # 創建一半新生種群#bf.shape=(100, 18)bflen = np.zeros((bf.shape[0], 1)) # 存儲bf群體路徑長度 shape=(100, 1)for j in range(bf.shape[0]): # 遍歷bf中的每一個個體bflen[j] = calc_f(xi=bf[j]) # 計算bf群體每個個體的路程長度(親和度)# ##########種群刷新:免疫種群與新生種群合并##f1 = np.concatenate((af, bf), axis=0) # 合并的種群 f1.shape=(50, 18) f1為子代f1len = np.concatenate((aflen, bflen), axis=0) # 合并種群激勵度值 shape=(200, 1)Index = np.argsort(f1len, axis=0)Index = Index[:, 0]Sortf = f1[Index] # shape(50, 18)trace.append(calc_f(xi=f1[0])) # 記錄最優個體的激勵度值############輸出優化結果 Bestf=Sortf[0,:] #最優變量 print('最優變量',Bestf) print('誤差',trace[-1] ) #最優值 print('最優值',np.array(Bestf)*P_state) plt.plot(trace) plt.title('迭代曲線') plt.xlabel('迭代次數') plt.ylabel('abs(sum(xi*Pi)-Pload)') plt.show()

結果圖


作者:電氣-余登武

總結

以上是生活随笔為你收集整理的免疫算法(二进制)算例(源码实现)的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。

主站蜘蛛池模板: 成年男女免费视频网站 | 大乳村妇的性需求 | 95看片淫黄大片一级 | 亚洲第一成肉网 | 亚洲一区二区小说 | 深夜视频一区二区三区 | 97国产成人无码精品久久久 | 国产精品香蕉 | 日本做爰全过程免费看 | 欧美一级片在线看 | 国产亚洲欧美在线视频 | 91爱| 色婷婷av一区二区三区麻豆综合 | 久久久精 | 久久久精品视频在线 | aaaa毛片 | 呦呦精品 | 99久久人妻精品免费二区 | 亚洲 小说 欧美 激情 另类 | 97久久人国产精品婷婷 | 亚洲熟女乱综合一区二区 | 国产精品久久久久久久久 | 成av人片一区二区三区久久 | 欧美撒尿777hd撒尿 | 韩国伦理片在线播放 | 日本a一级 | 一级片手机在线观看 | 色呦呦一区二区 | 久久三级 | 亚洲一区二区高清 | 一二三四av| 亚洲男人的天堂在线观看 | 日本精品一区二区视频 | 亚洲在线视频免费观看 | 一级免费看片 | 免费国产小视频 | 久久福利视频导航 | a级片视频网站 | 精品久久久久久久久久久久久久久久 | 国产妇女馒头高清泬20p多 | 国产精品色哟哟 | 熟女高潮一区二区三区视频 | 精品国产一区二区三区性色av | 香港一级纯黄大片 | 亚洲欧洲在线看 | www,四虎 | 瑟瑟视频网站 | 久久精品一区二区国产 | 欧美日韩中文字幕视频 | 午夜视频在线免费看 | 亚洲精品一区二区三区四区五区 | 亚洲另类天堂 | 色网站入口 | 在线免费观看av网址 | 国产精品一区二区自拍 | avt天堂网 | 亚洲深夜福利视频 | 欧美日韩三级在线 | 免费美女毛片 | 亚洲国产精品一 | 国产精品久久久久久久免费看 | 国产亚洲激情 | 四级黄色片 | 日韩欧美一区二区三区四区 | 日本少妇影院 | 看黄色小视频 | 美女隐私黄www网站动漫 | 日本蜜桃视频 | 中文在线资源天堂 | 一起草国产 | 欧美精品福利视频 | www.看毛片| 午夜视频免费看 | 男人的天堂狠狠干 | 在线观看av大片 | 毛片一区二区 | 亚洲在线精品视频 | 羞辱极度绿帽vk | 日日操夜夜操狠狠操 | 九九热视频免费观看 | 国产91清纯白嫩初高中在线观看 | 精品国产三级片在线观看 | jizz91| 999福利视频 | 裸体男女树林做爰 | 亚洲国产aⅴ精品一区二区 日韩黄色在线视频 | 亚欧精品在线 | 性av网站| 老色批永久免费网站www | 今天最新中文字幕mv高清 | 欧美日一本 | 中文字幕专区 | 亚洲精品国产精品乱码桃花 | 另类ts人妖一区二区三区 | 色吊丝av中文字幕 | 波多野结衣人妻 | 国产一区二区三区免费 | 成人av在线一区二区 | 成年人在线观看网站 |