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 * @og.rev 8.5.4.2 (2024/01/12) PMD 7.0.0 LongVariable 対応 064 * 065 * @param chromosome 染色体表現 066 * @param copyList newを利用してクローンするかどうか 067 * @return クローン 068 */ 069// public AbstractListChromosome<HybsGAObject> clone(final List<HybsGAObject> chromosomeRepresentation, final boolean copyList) { 070 public AbstractListChromosome<HybsGAObject> clone(final List<HybsGAObject> chromosome, final boolean copyList) { 071// checkValidity(chromosomeRepresentation); 072// return newFixedLengthChromosome(copyList ? new ArrayList<HybsGAObject>(chromosomeRepresentation) : chromosomeRepresentation); 073 checkValidity(chromosome); 074 // 8.5.4.2 (2024/01/12) PMD 7.0.0 UseDiamondOperator 対応 075// return newFixedLengthChromosome(copyList ? new ArrayList<HybsGAObject>(chromosome) : chromosome); 076 return newFixedLengthChromosome(copyList ? new ArrayList<>(chromosome) : chromosome); 077 } 078 079 /** 080 * 初期化用のsetter。 081 * 082 * @og.rev 8.5.4.2 (2024/01/12) PMD 7.0.0 LongVariable 対応 083 * 084// * @param chromosomeRepresentation 染色体表現 085 * @param chromosome 染色体表現 086 * @return クローン 087 * @throws InvalidRepresentationException 染色体の表現が無効であることを示す例外 088 */ 089 // 8.5.4.2 (2024/01/12) PMD 7.0.0 LongVariable 対応 090// public AbstractListChromosome<HybsGAObject> clone(final List<HybsGAObject> chromosomeRepresentation) throws InvalidRepresentationException { 091 public AbstractListChromosome<HybsGAObject> clone(final List<HybsGAObject> chromosome) throws InvalidRepresentationException { 092// return clone( chromosomeRepresentation, true ); 093 return clone( chromosome, true ); 094 } 095 096 /** 097 * 自分と同じクラスを作成するメソッド。 098 * 各クラスで実装する。 099 * 必要に応じてoptionDataをセットすること。 100 * 101 * @param repr 作成する際に渡す染色体 102 * @return 作成されたクラス 103 */ 104 @Override 105 abstract public AbstractHybsGAChromosome newFixedLengthChromosome(final List<HybsGAObject> repr); 106 107 /** 108 * 染色体配列を返す。 109 * 110 * @return 染色体配列 111 */ 112 public List<HybsGAObject> getThisRepresentation() { 113 return getRepresentation(); 114 } 115 116 /** 117 * オプション情報を渡す場合に利用。 118 * 119 * @param option オプション情報 120 */ 121 public void setOptionData( final Object option ) { 122 this.optionData = option; 123 } 124}