2016-03-28 14 views
1

私は真の価値のある遺伝的アルゴリズムを実装するためにpyevolveを使用しようとしています。 (実施例ドキュメントはここで与えられる:http://pyevolve.sourceforge.net/examples.html#example-2-real-numbers-gaussian-mutatorPyevolveを使用して、実数値染色体内の異なるパラメータ範囲を設定する方法は?

次のようにパラメータ(この例では20)の範囲がsetParamsを使用して設定することができる。

# Genome instance genome = G1DList.G1DList(20) genome.setParams(rangemin=-6.0, rangemax=6.0)

しかし、同じ範囲が全てに適用されます20.私はパラメータの範囲を変えたいと思っています。私がそれをやろうとしたのは、Initializatorsファイルを変更することでした。

ファイル内の元の関連するセクションがある:

def G1DListInitializatorReal(genome, **args): 
     """ Real initialization function of G1DList 

     This initializator accepts the *rangemin* and *rangemax* genome parameters. 

     """ 
     genome.clearList() 

     for i in xrange(genome.listSize): 
      randomReal = rand_uniform(genome.getParam("rangein", 0), 
          genome.getParam("rangemax", 100)) 
      genome.append(randomReal) 

私の修飾は(最初の15は1つの範囲を有し、最後の5は、別の範囲を持っていると仮定して)これです:

 def G1DListInitializatorReal(genome, **args): 

     genome.clearList() 

     for i in xrange(0,15): 
      print i 
      randomReal = rand_uniform(genome.getParam("rangein_1", 0), 
          genome.getParam("rangemax_1", 100)) 
      genome.append(randomReal) 
     for j in xrange(15,20): 
      print j 
      randomReal2 = rand_uniform(genome.getParam("rangein_2", 0), 
          genome.getParam("rangemax_2", 100)) 
      genome.append(randomReal2) 

Iインデックスiとjの印刷を追加して、これが呼び出されていることを確認します。私は変更されたInitializatorsファイルを自分のコードと同じフォルダに入れましたが、実行すると元のものが他の場所から呼び出されます。私はpyevolveで行う必要があるより多くの変更が欠けているように感じる、または私はInitializatorsを正しく呼んでいない、または...私は知らない。

pyevolveの染色体パラメーターの範囲を変更するにはどうすればよいですか?

ありがとうございます。

+0

そこに誰もが知っていますか? – user3625380

答えて

1

アレルを使用できます(exampleを参照)。

alleles.add(GAllele.GAlleleRange(range_min, range_max)) 

パラメータを設定:

genome.setParams(alleles) 

は、次のコードは、 "データ" と呼ばれるリストを使用しています

alleles = GAllele.GAlleles() 

は、各パラメータの範囲を作成します。

対立遺伝子を作成します範囲を定義します。

from pyevolve import GAllele 
from pyevolve import G1DList 
from pyevolve import GSimpleGA 
from pyevolve import Crossovers 
from pyevolve import Initializators 
from pyevolve import Mutators 
from pyevolve import Scaling 

# data values are the [min, max] for each parameter 
data=[ [0,99], [1,10], [1,10], [90,110], [1,10], 
[1,10], [1,10], [1,10], [1,10], [1,10], 
[1,10], [5,10], [1,10], [1,10], [50,100], 
[50,100], [50,100], [50,100], [50,100], [7,77] ] 

def Grid_Constructor(a=data): 
    alleles = GAllele.GAlleles() 
    for i in range(0, 20): 
     alleles.add(GAllele.GAlleleRange(a[i][0], a[i][1], real=True)) 
    return alleles 

# set the params, initializator and mutator 
genome = G1DList.G1DList(20) 
genome.setParams(allele=Grid_Constructor()) 
genome.initializator.set(Initializators.G1DListInitializatorAllele) 
genome.mutator.set(Mutators.G1DListMutatorAllele) 
ga = GSimpleGA.GSimpleGA(genome) 
print(Grid_Constructor()) 
#ga.evolve(freq_stats=10) 

このコードの出力は次のとおりです。

- GAlleles 
    Homogeneous:  False 
    List size: 20 
    Alleles: 

Allele for 0 position: 
- GAlleleRange 
    Real:  True 
    Ranges Count: 1 
    Range List: 
      Range from [0] to [99] 

Allele for 1 position: 
- GAlleleRange 
    Real:  True 
    Ranges Count: 1 
    Range List: 
      Range from [1] to [10] 

Allele for 2 position: 
- GAlleleRange 
    Real:  True 
    Ranges Count: 1 
    Range List: 
      Range from [1] to [10] 

. 
. 
. 

Allele for 19 position: 
- GAlleleRange 
    Real:  True 
    Ranges Count: 1 
    Range List: 
      Range from [7] to [77] 




------------------ 
(program exited with code: 0) 
Press return to continue 
+0

ありがとう! :) – user3625380

関連する問題