标签: genetic-algorithm

Python中遗传算法的哪些数据类型?

我正在用Python实现一个GA,需要存储一个1和0的序列,所以我将我的数据表示为二进制文件.那个最好的数据结构是什么?简单的字符串?

python genetic-algorithm data-structures

3
推荐指数
1
解决办法
865
查看次数

包含所有给定元素的最小数量的容器

假设C引用一组容器{c1,c2,c3....cn},其中每个容器包含一组有限的整数{i1,i2,i3...im}.此外,假设整数可能存在于多个容器中.给定一组有限的整数S {s1,s2,s3...sz},找到C包含所有整数的最小子集的大小S.

请注意,可能有数千个容器,每个容器有数百个整数.因此,蛮力很难解决这个问题.

我尝试使用Greedy算法解决问题.也就是说,每次我选择集合中整数最多的容器时S,我都失败了!

有谁能建议这个问题的快速算法?

algorithm semantic-analysis genetic-algorithm

3
推荐指数
1
解决办法
229
查看次数

如何从遗传算法(genalg)中获得最佳解决方案

我正在使用genalg包进行遗传算法.基因是二元是自然的,结果将指定

基因的长度是269,很难理解哪个是难以理解的.有没有办法从中提取结果并将其放在数据框中?

cat(summary.rbga(GAmodel))

GA Settings
Type                  = binary chromosome
Population size       = 100
Number of Generations = 100
Elitism               = TRUE
Mutation Chance       = 0

Search Domain
Var 1 = [,]
Var 0 = [,]

GA Results
Best Solution : 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 1 0 1 0 0 0 0 0 0 0 0 …
Run Code Online (Sandbox Code Playgroud)

r genetic-algorithm

3
推荐指数
1
解决办法
1483
查看次数

遗传算法选择方法在几代后停留在局部最小值

我正在尝试为 GA 编写代码以最小化系统的成本,问题是该解决方案收敛于局部最小值并陷入其中,因此我无法再改进我的解决方案。

可能是我的选择方法导致了这里的问题,这就是我所拥有的:

%----------------------------selection (fittest half) ----------------

probability=ones(1,population/2);
[,IX]=sort(cost(1:population))
dd=sum(1:population);
probability(1:(population/2))=[1:population/2];
probability=fliplr(probability)/dd;


Indexx=IX(1:population/2);
Run Code Online (Sandbox Code Playgroud)

然后我使用 Indexx 进行交叉等,有人可以提出解决方案吗?

matlab genetic-algorithm

3
推荐指数
2
解决办法
7858
查看次数

GA中的排名选择?

我已经实施Roulette wheel selectionGA.

   TotalFitness=sum(Fitness);
    ProbSelection=zeros(PopLength,1);
    CumProb=zeros(PopLength,1);

    for i=1:PopLength
        ProbSelection(i)=Fitness(i)/TotalFitness;
        if i==1
            CumProb(i)=ProbSelection(i);
        else
            CumProb(i)=CumProb(i-1)+ProbSelection(i);
        end
    end

    SelectInd=rand(PopLength,1);

    for i=1:PopLength
        flag=0;
        for j=1:PopLength
            if(CumProb(j)<SelectInd(i) && CumProb(j+1)>=SelectInd(i))
                SelectedPop(i,1:IndLength)=CurrentPop(j+1,1:IndLength);
                flag=1;
                break;
            end
        end
        if(flag==0)
            SelectedPop(i,1:IndLength)=CurrentPop(1,1:IndLength);
        end
    end
Run Code Online (Sandbox Code Playgroud)

现在我是想实现rank selectionGA.我了解到:

  • 排名选择首先对人群进行排名,然后每个染色体从该排名中获得适应性.

  • 最差的将是健身1,第二差2等等,最好的将具有适应度N(人口中的染色体数量).

我看到了这些link1link2,我理解的是:

  1. 首先,我将对人口的健身价值进行排序.

  2. 然后,如果人口数量是10,那么我将给予人口选择的概率,如0.1,0.2,0.3,...,1.0.

  3. 然后我将计算累积健身像轮盘赌轮.
  4. 接下来的步骤与轮盘赌轮相同.

我的实施:

  NewFitness=sort(Fitness);
    NewPop=round(rand(PopLength,IndLength));

    for i=1:PopLength
        for j=1:PopLength
            if(NewFitness(i)==Fitness(j))
                NewPop(i,1:IndLength)=CurrentPop(j,1:IndLength);
                break;
            end
        end
    end
    CurrentPop=NewPop;

    ProbSelection=zeros(PopLength,1);
    CumProb=zeros(PopLength,1);

    for i=1:PopLength
        ProbSelection(i)=i/PopLength;
        if i==1
            CumProb(i)=ProbSelection(i);
        else
            CumProb(i)=CumProb(i-1)+ProbSelection(i);
        end …
Run Code Online (Sandbox Code Playgroud)

matlab selection genetic-algorithm

3
推荐指数
1
解决办法
1657
查看次数

遗传算法个体与染色体

我正在尝试了解遗传算法原理。我正在关注这个http://www.ai-junkie.com/ga/intro/gat2.html和本教程:第二个教程。这两个教程都提到了搜索空间(可能存在解决方案的空间)中的个体染色体等术语。

在学习第二个教程时,我以某种方式从那里读到个体实际上与染色体相同。那么群体中的解决方案真的是染色体吗?如果是这样,为什么还要使用“个人”这个词呢?

genetic-algorithm

3
推荐指数
1
解决办法
1223
查看次数

如何为 python 中的 deap 包创建一个包含不同范围内的随机数的列表

我正在 Python 中使用 DEAP 包编写一个程序,用于使用进化算法(特别是遗传算法)进行优化。

我需要使用 python 中的列表类型创建染色体。该染色体应该有五个不同范围的浮动基因(等位基因)。

我的主要问题是创造这样的染色体。但是,如果我可以使用 deap 包的 tools.initRepeat 函数来实现这一点,那就更好了。

对于所有基因都在同一范围内的情况,我们可以使用以下代码:

import random

from deap import base
from deap import creator
from deap import tools

creator.create("FitnessMax", base.Fitness, weights=(1.0,))
creator.create("Individual", list, fitness=creator.FitnessMax)

IND_SIZE=10

toolbox = base.Toolbox()
toolbox.register("attr_float", random.random)
toolbox.register("individual", tools.initRepeat, creator.Individual,
                 toolbox.attr_float, n=IND_SIZE)
Run Code Online (Sandbox Code Playgroud)

我从这里得到的。

python genetic-algorithm evolutionary-algorithm deap

3
推荐指数
1
解决办法
1554
查看次数

如何将std :: bitset <64>转换为double?

有没有办法在不使用任何外部库(Boost等)的情况下将std :: bitset <64>转换为double?我使用bitset来表示遗传算法中的基因组,我需要一种方法将一组位转换为double.

c++ genetic-algorithm

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

选择父母在遗传算法中交叉?

首先,这是家庭作业的一部分.

我正在尝试实现遗传算法.我很困惑选择父母交叉.

在我的笔记中(显然有些不对劲)这是作为例子所做的事情;

  1. Pc(交叉的可能性)*种群大小=估计的染色体数量与交叉(如果不均匀,则舍入到最接近的一个)
  2. 为每个染色体选择范围[0,1]中的随机数,如果此数字小于Pc,则选择此染色体作为交叉对.

但是当应用第二步时,选择的染色体计数等于第一步中发现的结果.由于随机性,这并不总是得到保证.

所以这没有任何意义.我搜索选择父母进行交叉,但我发现的是交叉技术(单点,切割和切片等)以及如何在所选父母之间进行交叉(我对这些没有问题).我只是不知道哪个染色体应该选择交叉.有什么建议或简单的例子?

genetic-programming genetic-algorithm

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

优化/矢量化R中的循环,从输入向量中的范围生成random?

问题:

我在R中使用一个循环从两个("父")向量创建一个新向量,为新向量中的每个位置生成一个随机值,该值位于父对象在此位置的值范围内(它是为遗传算法中的交叉阶段).请注意,我不想要x和y的平均值,而是要求各个位置上的值范围内的随机值.

示例代码:

x = c(0.1, 0.7, 1, 0.8)
y = c(0, 0.9, 0.2, 1)
child = rep(NA, length(x))
for(i in 1:length(x)){
  child[i] = sample(seq(min(x[i], y[i]),  
                        max(x[i],y[i]), by=0.01), 1)
}
# This might yield, for example: 0.02 0.83 0.73 0.88 
Run Code Online (Sandbox Code Playgroud)

题:

它工作正常,但我想也许有一种更有效的方法来做到这一点(因为我需要在数千次迭代中的每一次为100-1000个人做这件事).在R,有喜欢漂亮的快捷功能ifelse,colMeans,max.col,match,rollmean,等,在载体的工作,所以我想知道,是否有类似的东西,我的目的呢?(根据apply我的理解,这个团伙可能在这里帮不了多少).或者像这样的循环真的是我能做的最好的?

loops r vector vectorization genetic-algorithm

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