日韩性视频-久久久蜜桃-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()

結果圖


作者:電氣-余登武

總結

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

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

主站蜘蛛池模板: 国产调教在线观看 | 日韩色 | 成年在线观看 | 黑人巨大精品欧美黑白配亚洲 | 女生扒开尿口 | 青青草狠狠操 | 国产手机在线观看 | 激情文学8888 | 国产精品7 | 麻豆视频在线播放 | 日本色网址 | 成人午夜剧场视频网站 | 免费观看久久久 | 成人在线视频网站 | 99热手机在线观看 | 国产偷拍一区二区 | 不卡在线一区二区 | 亚洲性欧美 | 成人手机在线观看 | 久久在线观看 | 一本一道久久综合狠狠老精东影业 | 国产丰满麻豆 | 中日韩在线观看视频 | av中文在线观看 | 国产午夜福利一区 | 狂野欧美性猛交免费视频 | www.jizzjizz| 日本免费在线视频 | 日本极品喷水 | 波多野吉衣在线视频 | 中文字幕――色哟哟 | 伊人影院在线播放 | 免费精品一区二区 | 国产传媒国产传媒 | 久久久黄色片 | 日韩在线视频在线观看 | 国产精品videossex国产高清 | 在线免费观看一级片 | 麻豆影视免费观看 | 超碰狠狠干 | 在线天堂资源 | 好了av在线 | 欧美精品一区二区不卡 | 男人操女人下面视频 | 网站在线观看你懂的 | 偷偷操视频 | 欧美欧美欧美 | 午夜小影院 | 国产亚洲精品成人无码精品网站 | av一区二区三区在线观看 | aaa级片| 久久久久久久久久久免费 | 国产粉嫩在线 | 强侵犯の奶水授乳羞羞漫虐 | 东京av男人的天堂 | 日韩资源在线观看 | 午夜免费激情视频 | 成人蜜桃视频 | 99re久久精品国产 | 色狠狠一区二区三区香蕉 | 免费观看一区二区三区视频 | 久久一区二区三区四区五区 | 免费观看a毛片 | 国产婷婷色一区二区三区在线 | а√天堂8资源中文在线 | 国产女人和拘做受视频免费 | 牛牛影视av | 激情五月在线 | 日日操夜夜骑 | 天天舔天天操天天干 | 天天做夜夜操 | 不卡黄色 | 亚洲A∨无码国产精品 | 亚洲精品无amm毛片 国内一区二区三区 | 91精品久久久久久久久中文字幕 | 日韩av男人的天堂 | 五月激情六月丁香 | 超碰人人擦 | 国产老女人乱淫免费 | 亚洲视频图片小说 | 国产视频h| 147人体做爰大胆图片成人 | 中国一级大黄大黄大色毛片 | 国产av人人夜夜澡人人爽麻豆 | 男女互插视频 | free性满足hd国产精品久 | 成人观看网站 | 爱情岛论坛自拍 | 琪琪秋霞午夜被窝电影网 | 性感美女一区二区三区 | 色婷婷久久综合 | 亚洲av无码一区二区三区在线观看 | 99热官网 | 日韩福利视频网 | 亚洲综合视频在线播放 | 欧美日韩人妻精品一区二区三区 | www.jizzjizz | av色播| 日本大尺度电影免费观看全集中文版 |