    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}