導航:首頁 > 源碼編譯 > 演算法的演進過程

演算法的演進過程

發布時間:2023-03-25 10:06:19

Ⅰ 進化演算法的起源發展

進化計算包括遺傳演算法(Genetic Algorithms)、遺傳規劃(Genetic Programming)、進化策略(Evolution Strategies)和進化規劃(Evolution Programming)4種典型方法。第一類方法比較成熟,現已廣泛應用,進化策略和進化規劃在科研和實際問題中的應用也越來越廣泛。
遺傳演算法的主要基因操作是選種、交配和突變,而在進化規則、進化策略中,進化機制源於選種和突變。就適應度的角度來說遺傳演算法用於選擇優秀的父代(優秀的父代產生優秀的子代),而進化規則和進化策略則用於選擇子代(優秀的子代才能存在)。
遺傳演算法與遺傳規劃強調的是父代對子代的遺傳鏈,而進化規則和進化策略則著重於子代本身的行為特性,即行為鏈。
進化規則和進化策略一般都不採用編碼,省去了運作過程中的編碼—解碼手續更適用於連續優化問題,但因此也不能進行非數值優化。進化策略可以確定機制產生出用於繁殖的父代,而遺傳演算法和進化規則強調對個體適應度和概率的依賴。
此外,進化規則把編碼結構抽象為種群之間的相似,而進化策略抽象為個體之間的相似。進化策略和進化規則已應用於連續函數優化、模式識別、機器學習、神經網路訓練、系統辨識和智能控制的眾多領域

Ⅱ RSA演算法的原理及演算過程

RSA演算法非常簡單,概述如下:
找兩素數p和q
取n=p*q
取t=(p-1)*(q-1)
取任何一個數e,要求滿足e<t並且e與t互素(就是最大公因數為1)
取d*e%t==1

這樣最終得到三個數: n d e

設消息為數M (M <n)
設c=(M**d)%n就得到了加密後的消息c
設m=(c**e)%n則 m == M,從而完成對c的解密。
註:**表示次方,上面兩式中的d和e可以互換。

在對稱加密中:
n d兩個數構成公鑰,可以告訴別人;
n e兩個數構成私鑰,e自己保留,不讓任何人知道。
給別人發送的信息使用e加密,只要別人能用d解開就證明信息是由你發送的,構成了簽名機制。
別人給你發送信息時使用d加密,這樣只有擁有e的你能夠對其解密。

rsa的安全性在於對於一個大數n,沒有有效的方法能夠將其分解
從而在已知n d的情況下無法獲得e;同樣在已知n e的情況下無法
求得d。

RSA簡潔幽雅,但計算速度比較慢,通常加密中並不是直接使用RSA 來對所有的信息進行加密,
最常見的情況是隨機產生一個對稱加密的密鑰,然後使用對稱加密演算法對信息加密,之後用
RSA對剛才的加密密鑰進行加密。

最後需要說明的是,當前小於1024位的N已經被證明是不安全的
自己使用中不要使用小於1024位的RSA,最好使用2048位的。

Ⅲ 演算法設計的過程一般是什麼樣子

您好,樓主
演算法設計就是把問題的解決步驟通過計算機編程語言來實現。
大概步驟如下:
1.分析問題:輸入什麼/輸出什麼/條件什麼/能用什麼方法
2.用流程圖畫出解決方案:決定程序的結構(有三大結構:順序結構、判斷結構、循環結構)
3.演算法設計:常見的演算法設計方法有:窮舉法/迭代法/遞推法/遞歸法/回溯法/貪婪法/分治法。
4.程序設計:這個就需要變成語言來實現的。

Ⅳ SVG 填色演算法演進實現

SVG 有一個 <path> 標簽,裡面有很多個圖形指令,而如果由多個M(Moveto)構成的,那麼這個<path> 描述的圖形可能會很復雜,比如構成一個圈包圍一個圈,那麼這個時候來了,填色的時候如何填?

比如:下方這兩個圖形,描述他們的形狀是一樣的,局別只在於填色規則是 nonzero 還是 evenodd

恩,看起來好像比較容易理解,但是怎麼實現呢???

針對 nonzero 填色規則,目前我採用的是下方這個動圖所示的填色方案,嗯,在到達這個動圖的填色方案之前,自己瞎搞了好幾個演算法方案,此文主要記錄這些演算法的演進過程:

將待判斷點與每一個填色點(區域,再小的點,加上寬高也是一個區域)進行坐標對比

恩,實際測試是不太行,問題在哪也不太確定,而且會很耗計算量,因此此方案可行

也嘗試過 圖像混合 ,但是這明顯要多個 Graphics 進行處理,DC 會升高,而且好像還比較難實現,因此不可取

總體思路:將Path中所有圖形一個一個處理,每次處理兩個多邊形圖形,然後得到一個新的多邊形圖形和它的繪制方向,然後將這個新的多邊形作衡罩仿為新的輸入與下一個圖形進行處理,依次循環,最後得到一個多邊形,對這個多邊形進行填色即可

經過上面的分析,我們的基本只需要考慮多邊形包含填色處理

在上面的演算法1會出現一種問題

新生成的多邊形會不斷閉合空間,因此當多邊形數量很多的時候,極有可能會出現空間已經很閉合,從而出現找不到一條連線去連接後續的多邊形

因此我們需要改進演算法1:當遇到不能找到連線的時候,往前回滾非同步,生成另外一個新的多邊形,然後重新尋找,知道找到,或者深度遍歷完所有情況都找不到。差不多為下面的步驟

即便在演算法2的補充下,也有情況連不上,像下圖,基本完全閉合的兩個多邊形,基本只有這兩個多邊形相連才能完成所有多邊形相連的目標

很明顯,上面演算法1、2我們好好像走了一條錯路,按照演算法1、2,基本hold不足這種情況的。因此,我們要修正一下我們的思路:

從演算法2中,我們了解到特殊情況下,基本只有相鄰的多邊形才能連接,其他咐纖多邊形基本無法連接過去。

基於 相鄰 這個特徵,我們提出下面演算法:

按照廣度遍歷求出所有相鄰(直線可達且不會和其他多邊形相交的)多邊形,按照深度遍歷連接多邊形

具體差不多是下圖:

按照廣度遍歷求出所有相鄰多邊形 具體操作:

按照深度遍歷連接多邊形 具體操作:

實際一頓操作下來,結果是准確的,但是計算量也是十分龐大,時間復雜度巨大

將填色區域轉換成三角形,三角剖分(悶褲基於耳朵,嘴巴,單調多邊形)

Ⅳ 演算法過程是什麼

Ⅵ YOLO(一) 演算法的原理及演變

第一次接觸到yolo這個演算法是通過吳恩達的教學視頻了解到的,當時其實也算是第一次接觸到目標檢測演算法。這里我們主要介紹下YOLO(You Only Look Once)。現在已經進化到了V3版本了。它不同於Faster RCNN這個分支走的兩部策略先進行前景識別在進行目標檢測,它是直接一步到位進行目標檢測。因此在識別的速度物掘上優於Faster RCNN(5 FPS), 而 YOLO_v1基礎版在Titan X GPU上可以達到45幀/s; 快速版可以達到150幀/s。但是在准確率上YOLO是稍差與Faster RCNN這個在之後會詳細介紹。順便提下如果想了解Faster RCNN原理可以參考 Faster-RCNN的原理及演變 。

我們知道YOLO其實就是 You Only Look Once, 意思是只需要看一眼就知道位置及對象,個人覺得蠻形象的。他不需要Faster RCNN的RPN結構,他其實選取anchor是預訂了候選框,將圖片劃分為7x7的網格,每個網格允許有2個不同的bounding box. 這樣一開始我們就有7x7x2個候選框(bounding box), 大致粗略覆蓋了圖像的整個區域。他的思想就是Faster RCNN在第一階段就算有了回歸框,在第二階段還是需要進行精調,那還不如就先生成大致回歸框就ok了。

下面我們就來好好介紹一下這個模型。

一、模型結構

其實將這個模型簡單話為:

那30又是如何形成的通道大小的呢?

a. 2個bounding box的位置(8個通道)
每個bounding box需要4個數值來表示其位置,(Center_x,Center_y,width,height),即(bounding box的中心點的x坐標,y坐標,bounding box的寬度,高度),2個bounding box共需要彎螞亮8個數值來表示其位置。

b. 2個bounding box 置信度(2個通道)

c. 20分類概率(20個通道)
下面我們來說一下剩下20維度的分類通道。每一個通道代表一個類別的分類概率。因為YOLO支持識別20種不同的對象(人、鳥、貓、汽車、椅子等),所以這里有20個值表示該網格位置存在任一種對象的概率。 但是我們一組圖片只能預測49個對象,可以理解為一個grid2個achor只能有一個預測準的對象(即計算IOU比例最大的那個anchor),所以7x7個對象

圖中將自行車的位置放在bounding box1,但實際上是在訓練過程中等網路輸出以後,比較兩個bounding box與自行車實際位置的IOU,自行車的位置(實際bounding box)放置在IOU比較大的那個bounding box(圖中假設是bounding box1),且該bounding box的置信度設為1

二、 損失函數

總的來說,就是用網路輸出與樣本標簽的各項內容的誤差平埋寬方和作為一個樣本的整體誤差。
損失函數中的幾個項是與輸出的30維向量中的內容相對應的。

三、 YOLO v1 缺陷

注意:

細節:
YOLO的最後一層採用線性激活函數,其它層都是Leaky ReLU。訓練中採用了drop out和數據增強(data augmentation)來防止過擬合。更多細節請參考原論文

在67 FPS,YOLOv2在PASCAL VOC 2007上獲得76.8%的mAP。在40 FPS時,YOLOv2獲得78.6%mAP,這比使用ResNet和SSD 更快的R-CNN更好。憑借如此優異的成績,YOLOv2於2017年CVPR發布並獲得超過1000次引用。YOLO有兩個缺點:一個缺點在於定位不準確,另一個缺點在於和基於region proposal的方法相比召回率較低。因此YOLOv2主要是要在這兩方面做提升。另外YOLOv2並不是通過加深或加寬網路達到效果提升,反而是簡化了網路。

下面主要從兩點來介紹下YOLO v2的提升之處。分別是Better以及Faster.

1、Darknet-19
在YOLO v1中,作者採用的訓練網路是基於GooleNet,這里作者將GooleNet和VGG16做了簡單的對比,GooleNet在計算復雜度上要優於VGG16(8.25 billion operation VS 30.69 billion operation),但是前者在ImageNet上的top-5准確率要稍低於後者(88% VS 90%)。而在YOLO v2中,作者採用了新的分類模型作為基礎網路,那就是Darknet-19。Table6是最後的網路結構:Darknet-19隻需要5.58 billion operation。這個網路包含19個卷積層和5個max pooling層,而在YOLO v1中採用的GooleNet,包含24個卷積層和2個全連接層,因此Darknet-19整體上卷積卷積操作比YOLO v1中用的GoogleNet要少,這是計算量減少的關鍵。最後用average pooling層代替全連接層進行預測。這個網路在ImageNet上取得了top-5的91.2%的准確率。

2、Training for Classification
這里的2和3部分在前面有提到,就是訓練處理的小trick。這里的training for classification都是在ImageNet上進行預訓練,主要分兩步:1、從頭開始訓練Darknet-19,數據集是ImageNet,訓練160個epoch,輸入圖像的大小是224 224,初始學習率為0.1。另外在訓練的時候採用了標準的數據增加方式比如隨機裁剪,旋轉以及色度,亮度的調整等。2、再fine-tuning 網路,這時候採用448 448的輸入,參數的除了epoch和learning rate改變外,其他都沒變,這里learning rate改為0.001,並訓練10個epoch。結果表明fine-tuning後的top-1准確率為76.5%,top-5准確率為93.3%,而如果按照原來的訓練方式,Darknet-19的top-1准確率是72.9%,top-5准確率為91.2%。因此可以看出第1,2兩步分別從網路結構和訓練方式兩方面入手提高了主網路的分類准確率。

3、Training for Detection
在前面第2步之後,就開始把網路移植到detection,並開始基於檢測的數據再進行fine-tuning。首先把最後一個卷積層去掉,然後添加3個3 3的卷積層,每個卷積層有1024個filter,而且每個後面都連接一個1 1的卷積層,1 1卷積的filter個數根據需要檢測的類來定。比如對於VOC數據,由於每個grid cell我們需要預測5個box,每個box有5個坐標值和20個類別值,所以每個grid cell有125個filter(與YOLOv1不同,在YOLOv1中每個grid cell有30個filter,還記得那個7 7 30的矩陣嗎,而且在YOLOv1中,類別概率是由grid cell來預測的,也就是說一個grid cell對應的兩個box的類別概率是一樣的,但是在YOLOv2中,類別概率是屬於box的,每個box對應一個類別概率,而不是由grid cell決定,因此這邊每個box對應25個預測值(5個坐標加20個類別值),而在YOLOv1中一個grid cell的兩個box的20個類別值是一樣的)。另外作者還提到將最後一個3 3*512的卷積層和倒數第二個卷積層相連。最後作者在檢測數據集上fine tune這個預訓練模型160個epoch,學習率採用0.001,並且在第60和90epoch的時候將學習率除以10,weight decay採用0.0005。

這里yolo v3相對於yolo v2有三點:1. 利用多尺度特徵進行對象檢測 2. 調整基礎網路結構

Ⅶ 從演算法到程序這個過程是怎樣的

演算法是理論.
程序是實踐.
先定義好目標,然後設計出演算法. 演算法會指導出程序的控制流和數據流.
然後再根據演算法, 一步步實現出代碼.
如果演算法比較復雜,可以先實現偽代碼,再真正實現編程語言代碼.

Ⅷ 中國算盤的珠算演算法發展歷程

古珠演算法是以手撥算珠搭悔耐進行運算。古珠算只用這十個碼衍化各種演算法,為了便於掌握而編成口訣。到了明代 ( 公元 1368 — 1644 年 ) ,吳敬、王文素、朱載堉、程大位等對古珠演算法進行了總結、規范,應用領域由商貿到科研有了開拓和發展。例如前旁,程大位 (1533 — 1606 年 ) 在《演算法統宗》里,主張上法訣加法、退法訣減法、留頭乘法、歸除法、盤上定位法等。明代規范珠演算法的中心思想是提高機械化程度,盡可能達到不假思索地撥珠得數的自動化目的。
明代完善珠算機械化演算法的直接結果,就是使數學在大眾中空前普及。運用珠算機械化演算法,口誦歌訣,撥珠練習,即便不懂原理,也能掌握珠演算法。不管公學、私塾和家教,以及商工店主授徒,都能夠教學珠演算法,即便小孩子也都能學會和掌握。這種珠演算法一直延續到 20 世紀 50 年代,有些地方甚至直到如今。也正是這個緣故,珠算得以很快傳播,以致傳到海外。
朱載堉(1536 — 1611 年 ) 把珠算用於科學研究,創串聯 ( 或並聯 ) 使用算盤的方法,設計了極其簡捷的演算法程序。在他的科學發現、發明和創造中,靠珠算完成了極其浩繁的計算,導致他發現了「十二平均律」,這是世界頂尖的發現。
過去,對珠算一般只停留在實用方法上,停留在手撥算珠上,未能從基礎處或者說從「基因」上去認識、闡述它的深遠意義和不可替代的價值。因而,在引入西方數學教學體系時,未用它來更換西方數學課程中相應的落後部分,竟然將它從數學課程中排斥出去。結果,學校中學的數學,不能滿足實際需要,才不得不在數學課之外,另開一門珠算課。
中國第一個人造衛星就是靠算盤計算發知春射成功的!

Ⅸ 進化演算法的基本步驟

進化計算是基於自然選擇和自然遺傳等生物進化機制的一種搜索演算法。與普通的搜索方法一樣,進化計算也是一種迭代演算法,不同的是進化計算在最優解的搜索過程中,一般是從原問題的一組解出發改進到另一組較好的解,再從這組改進的解出發進一步改進。而且在進化問題中,要求當原問題的優化模型建立後,還必須對原問題的解進行編碼。進化計算在搜索過程中利用結構化和隨機性的信息,使最滿足目標的決策獲得最大的生存可能,是一種概率型的演算法。
一般來說,進化計算的求解包括以下幾個步驟:給定一組初始解;評價當前這組解的性能;從當前這組解中選擇一定數量的解作為迭代後的解的基礎;再對其進行操作,得到迭代後的解;若這些解滿足要求則停止,否則將這些迭代得到的解作為當前解重新操作。
以遺傳演算法為例,其工作步驟可概括為:
(1) 對工作對象——字元串用二進制的0/1或其它進制字元編碼 。
(2) 根據字元串的長度L,隨即產生L個字元組成初始個體。
(3) 計算適應度。適應度是衡量個體優劣的標志,通常是所研究問題的目標函數。
(4) 通過復制,將優良個體插入下一代新群體中,體現「優勝劣汰」的原則。
(5) 交換字元,產生新個體。交換點的位置是隨機決定的
(6) 對某個字元進行補運算,將字元1變為0,或將0變為1,這是產生新個體的另一種方法,突變字元的位置也是隨機決定的。
(7) 遺傳演算法是一個反復迭代的過程,每次迭代期間,要執行適應度計算、復制、交換、突變等操作,直至滿足終止條件。
將其用形式化語言表達,則為:假設α∈I記為個體,I記為個體空間。適應度函數記為Φ:I→R。在第t代,群體P(t)={a1(t),a2(t),…,an(t)}經過復制r(reproction)、交換c(crossover)及突變m(mutation)轉換成下一代群體。這里r、c、m均指宏運算元,把舊群體變換為新群體。L:I→{True, Flase}記為終止准則。利用上述符號,遺傳演算法可描述為:
t=0
initialize P(0):={ a1(0),a2(0),…,an(0)};
while(l(P(t))≠True) do
evaluate P(t):{ Φ(a1(t)), Φ(a2(t)),…,Φ(an(t))};
reproction: P′(t):=r(P(t));
crossover: P″(t):=c(P′(t));
mutation: P(t+1):= m(P″(t));
t=t+1;
end

閱讀全文

與演算法的演進過程相關的資料

熱點內容
程序員那麼可愛歌曲完整版 瀏覽:904
為什麼購買pdf 瀏覽:43
操作系統代碼編譯 瀏覽:483
程序員東北大學 瀏覽:426
編譯忽略空字元 瀏覽:117
多店鋪阿里雲伺服器教程 瀏覽:378
單片機求初值 瀏覽:420
安卓機如何在電腦備份圖片 瀏覽:925
ca證書加密機價格 瀏覽:798
天乾地支年份演算法 瀏覽:796
程序員打造的視頻 瀏覽:7
java和php通信 瀏覽:680
為什麼黑程序員 瀏覽:163
程序員男生 瀏覽:456
戴爾文件夾內文件怎麼置頂 瀏覽:582
雲伺服器6m網速 瀏覽:722
vivo手機中國聯通伺服器地址 瀏覽:862
工程總控編譯失敗 瀏覽:707
燕趙紅楓app如何下載 瀏覽:867
php查殺軟體 瀏覽:878