001/* 002 * Copyright (c) 2009 The openGion Project. 003 * 004 * Licensed under the Apache License, Version 2.0 (the "License"); 005 * you may not use this file except in compliance with the License. 006 * You may obtain a copy of the License at 007 * 008 * http://www.apache.org/licenses/LICENSE-2.0 009 * 010 * Unless required by applicable law or agreed to in writing, software 011 * distributed under the License is distributed on an "AS IS" BASIS, 012 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, 013 * either express or implied. See the License for the specific language 014 * governing permissions and limitations under the License. 015 */ 016package org.opengion.penguin.math.ga; 017 018import java.util.ArrayList; 019import java.util.List; 020import org.apache.commons.math3.genetics.AbstractListChromosome; 021import org.apache.commons.math3.genetics.InvalidRepresentationException; 022 023/** 024 * HybsGeneticAlgorithmで利用するChromosomeインターフェースです。 025 * 026 * AbstractListChromosomeだと少し使いにくいので、AbstractListChromosomeを継承して 027 * 独自にAbstractクラスを作成しています。 028 * (大半はAbstractListChromosomeそのものです) 029 * 030 */ 031public abstract class AbstractHybsGAChromosome extends AbstractListChromosome<HybsGAObject> { 032 033 /** 染色体に何らかのオプション情報を持たせる場合に利用 */ 034 protected Object optionData; 035 036 /** 037 * デフォルトコンストラクタ。 038 * 039 * 空の染色体配列を持つインスタンスを作成する。 040 * newInstanceメソッドでインスタンスを作成するために、若干トリッキーな事をする。 041 * このコンストラクタを利用する場合はcloneで染色体セットし、増殖させて利用する。 042 * 043 * @throws InvalidRepresentationException 染色体の表現が無効であることを示す例外 044 */ 045 public AbstractHybsGAChromosome() throws InvalidRepresentationException { 046 super( new HybsGAObject[] {} ); 047 } 048 049 /** 050 * 染色体のリストを引数に持つコンストラクタ。 051 * 052 * @param representation 染色体表現のリスト 053 * @throws InvalidRepresentationException 染色体の表現が無効であることを示す例外 054 */ 055 public AbstractHybsGAChromosome(final List<HybsGAObject> representation) throws InvalidRepresentationException { 056 super(representation); 057 } 058 059 /** 060 * 初期化用のsetter。 061 * 通常、copyListにはtrueをセットして染色体表現のインスタンスを新たに作成する。 062 * 063 * @param chromosomeRepresentation 染色体表現 064 * @param copyList newを利用してクローンするかどうか 065 * @return クローン 066 */ 067 public AbstractListChromosome<HybsGAObject> clone(final List<HybsGAObject> chromosomeRepresentation, final boolean copyList) { 068 checkValidity(chromosomeRepresentation); 069 return newFixedLengthChromosome(copyList ? new ArrayList<HybsGAObject>(chromosomeRepresentation) : chromosomeRepresentation); 070 } 071 072 /** 073 * 初期化用のsetter。 074 * 075 * @param chromosomeRepresentation 染色体表現 076 * @return クローン 077 * @throws InvalidRepresentationException 染色体の表現が無効であることを示す例外 078 */ 079 public AbstractListChromosome<HybsGAObject> clone(final List<HybsGAObject> chromosomeRepresentation) throws InvalidRepresentationException { 080 return clone( chromosomeRepresentation, true ); 081 } 082 083 /** 084 * 自分と同じクラスを作成するメソッド。 085 * 各クラスで実装する。 086 * 必要に応じてoptionDataをセットすること。 087 * 088 * @param repr 作成する際に渡す染色体 089 * @return 作成されたクラス 090 */ 091 @Override 092 abstract public AbstractHybsGAChromosome newFixedLengthChromosome(final List<HybsGAObject> repr); 093 094 /** 095 * 染色体配列を返す。 096 * 097 * @return 染色体配列 098 */ 099 public List<HybsGAObject> getThisRepresentation() { 100 return getRepresentation(); 101 } 102 103 /** 104 * オプション情報を渡す場合に利用。 105 * 106 * @param option オプション情報 107 */ 108 public void setOptionData( final Object option ) { 109 this.optionData = option; 110 } 111}