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