簡體   English   中英

多線程galib247遺傳算法卡在局部最大值

[英]Multithreaded galib247 genetic algorithm stuck in local maxima

我為galib247(下面)添加了多線程支持,但我仍然看到解決方案陷入局部最大值的問題。

也許這是遺傳算法的一個缺點。 如果有人有任何建議,請告訴我。 我已經嘗試過運行1000個獨立人群,根據最近人口找到更好的解決方案的優先次序,我仍然認為它沒有找到最佳解決方案。

我也試過修改mutator。 也許解決方案設置太復雜,有很多局部最大值。 它通常在1000個池池中的每一個池中找到不同的局部最大值,但偶爾會有一個池池找到更好的答案並且優先用於調度。

我正在嘗試做的是根據一組不斷變化的歷史價格,為FX交易信號發生器生成一個最佳技術分析指標列表,其中包含參數。 幾年前有一本關於它的書,我認為作者的名字是卡茨。

我正在測試結果與第二個歷史價格集的差異,但基本上,真正的考驗是它是否可以預測未來的價格。

GAPopulation.C( http://lancet.mit.edu/ga/Copyright.html ):

#include <boost/thread.hpp>
#include <boost/threadpool.hpp>

boost::threadpool::pool GAPopulation::thpool(5);

void GAPopulationEvaluatorWorker(void* individual_ptr) {
    ((GAGenome*) individual_ptr)->evaluate();
    boost::this_thread::yield();
}

void GAPopulation::DefaultEvaluator(GAPopulation& p) {
    for(int i = 0; i < p.size(); i++) {
        thpool.schedule(boost::bind(GAPopulationEvaluatorWorker, p.individual_ptr(i)));
    }

    thpool.wait();
}

您認為您的問題是由多線程引起的嗎? 我不這么認為......

GA始終存在克服局部最大值的問題。 我被教導說,隨着程序時間的推移,你應該降低突變率以防止跳躍。 但最近,我做了一個GA,根據人口中遺傳多樣性的缺乏,提高了突變率。 (不得不提出一個可以計算多樣性的函數)。

有了GA,你需要做很多事情:#1,有一個可以很快執行的計算適應性的可靠方法。 這很難解決很多問題。 #2,用一組基因描述你的問題。 同樣,這真的很難做到。 #3,誰來繁殖以及如何繁殖它們。 我寧願擁有一個多樣化的繁殖池,其中中等表現的基因可以持續幾代,特別是如果你的問題是克服局部最大值。 當然,#4,你的變異策略。 僅僅0.1%的幾率翻轉1位可能還不夠。 或者它可能太多了。 你如何繁殖或改變像浮點數這樣的東西? 翻轉1位a)會發生劇烈變化,b)對健身沒有明顯的影響(取決於其他位,可能有好有壞)。

因此使用GA需要大量調整。 評估#1和#2並確保您對此感到滿意。 繁殖實驗。 “殺死你的父母”可能有所幫助。 也許留下一些父母,但培養每個人,但最低的25%。 這樣就不太可能跳下來了,但是一個好基因有機會經歷一些可能最終產生更好基因的亞突變。

我聽說你可以使用GA設置神經網絡的初始權重。 我一直想嘗試,但我還沒有去寫神經網絡。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM