pythonga
1. 終端運行python過慢啊
在cmd中輸入Python,再回車之前打開'fiddler'進行抓包,你會發現cmd發送了4個網路請求但是都訪問失敗code=502,解決的方法就是電腦開啟全局vpn後再用cmd調用Python.下面是證明的圖片,後面兩個是我開啟全局vpn後返回的code=200
那麼有沒有不用vpn就可以不卡這19秒呢?
答案是肯定的 改hosts就可以了 具體方法我不做解釋,如果你連這都不會,別學Python了
111.206.66.61 ocsp.startssl.com
111.206.66.61 crl.startssl.com
這兩條就是關鍵了
最後求贊助啊個人網站:www.xiaohei.ga
2. python遺傳演算法目標函數怎麼編
一、遺傳演算法介紹
遺傳演算法是通過模擬大自然中生物進化的歷程,來解決問題的。大自然中一個種群經歷過若干代的自然選擇後,剩下的種群必定是適應環境的。把一個問題所有的解看做一個種群,經歷過若干次的自然選擇以後,剩下的解中是有問題的最優解的。當然,只能說有最優解的概率很大。這里,我們用遺傳演算法求一個函數的最大值。
f(x) = 10 * sin( 5x ) + 7 * cos( 4x ), 0 <= x <= 10
1、將自變數x進行編碼
取基因片段的長度為10, 則10位二進制位可以表示的范圍是0到1023。基因與自變數轉變的公式是x = b2d(indivial) * 10 / 1023。構造初始的種群pop。每個個體的基因初始值是[0, 1, 0, 1, 0, 1, 0, 1, 0, 1]
2、計算目標函數值
根據自變數與基因的轉化關系式,求出每個個體的基因對應的自變數,然後將自變數代入函數f(x),求出每個個體的目標函數值。
3、適應度函數
適應度函數是用來評估個體適應環境的能力,是進行自然選擇的依據。本題的適應度函數直接將目標函數值中的負值變成0. 因為我們求的是最大值,所以要使目標函數值是負數的個體不適應環境,使其繁殖後代的能力為0.適應度函數的作用將在自然選擇中體現。
4、自然選擇
自然選擇的思想不再贅述,操作使用輪盤賭演算法。其具體步驟:
假設種群中共5個個體,適應度函數計算出來的個體適應性列表是fitvalue = [1 ,3, 0, 2, 4] ,totalvalue = 10 , 如果將fitvalue畫到圓盤上,值的大小表示在圓盤上的面積。在轉動輪盤的過程中,單個模塊的面積越大則被選中的概率越大。選擇的方法是將fitvalue轉化為[1 , 4 ,4 , 6 ,10], fitvalue / totalvalue = [0.1 , 0.4 , 0.4 , 0.6 , 1.0] . 然後產生5個0-1之間的隨機數,將隨機數從小到大排序,假如是[0.05 , 0.2 , 0.7 , 0.8 ,0.9],則將0號個體、1號個體、4號個體、4號個體、4號個體拷貝到新種群中。自然選擇的結果使種群更符合條件了。
5、繁殖
假設個體a、b的基因是
a = [1, 0, 0, 0, 0, 1, 1, 1, 0, 0]
b = [0, 0, 0, 1, 1, 0, 1, 1, 1, 1]
這兩個個體發生基因交換的概率pc = 0.6.如果要發生基因交換,則產生一個隨機數point表示基因交換的位置,假設point = 4,則:
a = [1, 0, 0, 0, 0, 1, 1, 1, 0, 0]
b = [0, 0, 0, 1, 1, 0, 1, 1, 1, 1]
交換後為:
a = [1, 0, 0, 0, 1, 0, 1, 1, 1, 1]
b = [0, 0, 0, 1, 0, 1, 1, 1, 0, 0]
6、突變
遍歷每一個個體,基因的每一位發生突變(0變為1,1變為0)的概率為0.001.突變可以增加解空間
二、代碼
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
def b2d(b): #將二進制轉化為十進制 x∈[0,10] t = 0 for j in range(len(b)): t += b[j] * (math.pow(2, j)) t = t * 10 / 1023 return tpopsize = 50 #種群的大小#用遺傳演算法求函數最大值:#f(x)=10*sin(5x)+7*cos(4x) x∈[0,10]chromlength = 10 #基因片段的長度pc = 0.6 #兩個個體交叉的概率pm = 0.001; #基因突變的概率results = [[]]bestindivial = []bestfit = 0fitvalue = []tempop = [[]]pop = [[0, 1, 0, 1, 0, 1, 0, 1, 0, 1] for i in range(popsize)]for i in range(100): #繁殖100代 objvalue = calobjvalue(pop) #計算目標函數值 fitvalue = calfitvalue(objvalue); #計算個體的適應值 [bestindivial, bestfit] = best(pop, fitvalue) #選出最好的個體和最好的函數值 results.append([bestfit,b2d(bestindivial)]) #每次繁殖,將最好的結果記錄下來 selection(pop, fitvalue) #自然選擇,淘汰掉一部分適應性低的個體 crossover(pop, pc) #交叉繁殖 mutation(pop, pc) #基因突變 results.sort() print(results[-1]) #列印函數最大值和對應的
來自CODE的代碼片
GA.py
1
2
3
4
5
6
7
8
9
def best(pop, fitvalue): #找出適應函數值中最大值,和對應的個體 px = len(pop) bestindivial = [] bestfit = fitvalue[0] for i in range(1,px): if(fitvalue[i] > bestfit): bestfit = fitvalue[i] bestindivial = pop[i] return [bestindivial, bestfit]
來自CODE的代碼片
best.py
1
2
3
4
5
6
7
8
9
10
11
def calfitvalue(objvalue):#轉化為適應值,目標函數值越大越好,負值淘汰。 fitvalue = [] temp = 0.0 Cmin = 0; for i in range(len(objvalue)): if(objvalue[i] + Cmin > 0): temp = Cmin + objvalue[i] else: temp = 0.0 fitvalue.append(temp) return fitvalue
來自CODE的代碼片
calfitvalue.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
import mathdef decodechrom(pop): #將種群的二進制基因轉化為十進制(0,1023) temp = []; for i in range(len(pop)): t = 0; for j in range(10): t += pop[i][j] * (math.pow(2, j)) temp.append(t) return tempdef calobjvalue(pop): #計算目標函數值 temp1 = []; objvalue = []; temp1 = decodechrom(pop) for i in range(len(temp1)): x = temp1[i] * 10 / 1023 #(0,1023)轉化為 (0,10) objvalue.append(10 * math.sin(5 * x) + 7 * math.cos(4 * x)) return objvalue #目標函數值objvalue[m] 與個體基因 pop[m] 對應
來自CODE的代碼片
calobjvalue.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
import randomdef crossover(pop, pc): #個體間交叉,實現基因交換 poplen = len(pop) for i in range(poplen - 1): if(random.random() < pc): cpoint = random.randint(0,len(pop[0])) temp1 = [] temp2 = [] temp1.extend(pop[i][0 : cpoint]) temp1.extend(pop[i+1][cpoint : len(pop[i])]) temp2.extend(pop[i+1][0 : cpoint]) temp2.extend(pop[i][cpoint : len(pop[i])]) pop[i] = temp1 pop[i+1] = temp2
來自CODE的代碼片
crossover.py
1
2
3
4
5
6
7
8
9
10
11
12
13
import randomdef mutation(pop, pm): #基因突變 px = len(pop) py = len(pop[0]) for i in range(px): if(random.random() < pm): mpoint = random.randint(0,py-1) if(pop[i][mpoint] == 1): pop[i][mpoint] = 0 else: pop[i][mpoint] = 1
來自CODE的代碼片
mutation.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
import randomdef sum(fitvalue): total = 0 for i in range(len(fitvalue)): total += fitvalue[i] return totaldef cumsum(fitvalue): for i in range(len(fitvalue)): t = 0; j = 0; while(j <= i): t += fitvalue[j] j = j + 1 fitvalue[i] = t;def selection(pop, fitvalue): #自然選擇(輪盤賭演算法) newfitvalue = [] totalfit = sum(fitvalue) for i in range(len(fitvalue)): newfitvalue.append(fitvalue[i] / totalfit) cumsum(newfitvalue) ms = []; poplen = len(pop) for i in range(poplen): ms.append(random.random()) #random float list ms ms.sort() fitin = 0 newin = 0 newpop = pop while newin < poplen: if(ms[newin] < newfitvalue[fitin]): newpop[newin] = pop[fitin] newin = newin + 1 else: fitin = fitin + 1 pop = newpop
3. python使用正則表達式替換txt內容
s='kfhakl,"dasf,fwg,gs,fatg,ta,",fasf,aga,wr,ga,czxv,"fsafa,rqr,cacv,",dasc'
l=[]
quoted=False
forchins:
ifch=='"':
quoted=notquoted
elifch==','andquoted:
l.append(',')
continue
l.append(ch)
s=''.join(l)
print(s)
4. python中ga函數幾個參量什麼意思
計算函數最值的意思
遺傳演算法是一種用於解決最優化的搜索演算法,也是進化演算法的一種。取名遺傳就是因為它借鑒了生物學中的一些概念,比如說遺傳、變異、自然選擇以及雜交等等。
遺傳演算法中的個體可以抽象為染色體,然後使得種群向更好的方向進化。一般來說,染色體可以用一系列0和1的串來表示,通常使用的也就是二進製表示法。
5. python 哪個包里有 遺傳演算法
scikit-opt調研過很多遺傳演算法庫,這個挺好用的。
#目標函數
defdemo_func(x):
x1,x2,x3=x
returnx1**2+(x2-0.05)**2+x3**2
fromgaimportGA
調用遺傳演算法求解:
ga=GA(func=demo_func,lb=[-1,-10,-5],ub=[2,10,2],max_iter=500)
best_x,best_y=ga.fit()
6. python 遺傳演算法問題
遺傳演算法(GA)是最早由美國Holland教授提出的一種基於自然界的「適者生存,優勝劣汰」基本法則的智能搜索演算法。
遺傳演算法也是借鑒該基本法則,通過基於種群的思想,將問題的解通過編碼的方式轉化為種群中的個體,並讓這些個體不斷地通過選擇、交叉和變異運算元模擬生物的進化過程,然後利用「優勝劣汰」法則選擇種群中適應性較強的個體構成子種群,然後讓子種群重復類似的進化過程,直到找到問題的最優解或者到達一定的進化(運算)時間。