小编Abd*_*had的帖子

多线程galib247遗传算法卡在局部最大值

我为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();
}
Run Code Online (Sandbox Code Playgroud)

c++ multithreading genetic-algorithm

7
推荐指数
1
解决办法
266
查看次数

是否可以在C++中从程序集中调用内置函数

考虑以下汇编代码循环:

#include <iostream>

#define ADD_LOOP(i, n, v)       \
asm volatile (                  \
    "movw %1, %%cx      ;"      \
    "movq %2, %%rax     ;"      \
    "movq $0, %%rbx     ;"      \
    "for:               ;"      \
    "addq %%rax, %%rbx  ;"      \
    "decw %%cx          ;"      \
    "jnz for            ;"      \
    "movq %%rbx, %0     ;"      \
    : "=x"(v)                   \
    : "n"(i), "x"(n)            \
    : "%cx", "%rax", "%rbx"     \
);

int main() {
    uint16_t iter(10000);
    uint64_t num(5);
    uint64_t val;

    ADD_LOOP(iter, num, val)

    std::cout << val << std::endl;

    return 0; …
Run Code Online (Sandbox Code Playgroud)

c++ assembly gcc inline-assembly built-in

2
推荐指数
1
解决办法
702
查看次数