001package org.opengion.penguin.math.ga; 002 003import java.util.ArrayList; 004import java.util.List; 005import org.apache.commons.math3.genetics.AbstractListChromosome; 006import org.apache.commons.math3.genetics.InvalidRepresentationException; 007 008/** 009 * HybsGeneticAlgorithmで利用するChromosomeインターフェースです。 010 * 011 * AbstractListChromosomeだと少し使いにくいので、AbstractListChromosomeを継承して 012 * 独自にAbstractクラスを作成しています。 013 * (大半はAbstractListChromosomeそのものです) 014 * 015 */ 016public abstract class AbstractHybsGAChromosome extends AbstractListChromosome<HybsGAObject> { 017 018 /** 染色体に何らかのオプション情報を持たせる場合に利用 */ 019 protected Object optionData; 020 021 /** 022 * デフォルトコンストラクタ。 023 * 024 * 空の染色体配列を持つインスタンスを作成する。 025 * newInstanceメソッドでインスタンスを作成するために、若干トリッキーな事をする。 026 * このコンストラクタを利用する場合はcloneで染色体セットし、増殖させて利用する。 027 * 028 * @throws InvalidRepresentationException 染色体の表現が無効であることを示す例外 029 */ 030 public AbstractHybsGAChromosome() throws InvalidRepresentationException { 031 super( new HybsGAObject[] {} ); 032 } 033 034 /** 035 * 染色体のリストを引数に持つコンストラクタ。 036 * 037 * @param representation 染色体表現のリスト 038 * @throws InvalidRepresentationException 染色体の表現が無効であることを示す例外 039 */ 040 public AbstractHybsGAChromosome(final List<HybsGAObject> representation) throws InvalidRepresentationException { 041 super(representation); 042 } 043 044 /** 045 * 初期化用のsetter。 046 * 通常、copyListにはtrueをセットして染色体表現のインスタンスを新たに作成する。 047 * 048 * @param chromosomeRepresentation 染色体表現 049 * @param copyList newを利用してクローンするかどうか 050 * @return クローン 051 */ 052 public AbstractListChromosome<HybsGAObject> clone(final List<HybsGAObject> chromosomeRepresentation, final boolean copyList) { 053 checkValidity(chromosomeRepresentation); 054 return newFixedLengthChromosome(copyList ? new ArrayList<HybsGAObject>(chromosomeRepresentation) : chromosomeRepresentation); 055 } 056 057 /** 058 * 初期化用のsetter。 059 * 060 * @param chromosomeRepresentation 染色体表現 061 * @return クローン 062 * @throws InvalidRepresentationException 染色体の表現が無効であることを示す例外 063 */ 064 public AbstractListChromosome<HybsGAObject> clone(final List<HybsGAObject> chromosomeRepresentation) throws InvalidRepresentationException { 065 return clone( chromosomeRepresentation, true ); 066 } 067 068 /** 069 * 自分と同じクラスを作成するメソッド。 070 * 各クラスで実装する。 071 * 必要に応じてoptionDataをセットすること。 072 * 073 * @param repr 作成する際に渡す染色体 074 * @return 作成されたクラス 075 */ 076 @Override 077 abstract public AbstractHybsGAChromosome newFixedLengthChromosome(final List<HybsGAObject> repr); 078 079 /** 080 * 染色体配列を返す。 081 * 082 * @return 染色体配列 083 */ 084 public List<HybsGAObject> getThisRepresentation() { 085 return getRepresentation(); 086 } 087 088 /** 089 * オプション情報を渡す場合に利用。 090 * 091 * @param option オプション情報 092 */ 093 public void setOptionData( final Object option ) { 094 this.optionData = option; 095 } 096}