ECJ(進化的アルゴリズムパッケージ)を使用していますが、拡張クラスの特定の変数を呼び出したいのですが、問題クラスからどのように取得するのか分かりません。ECJの親クラスの拡張クラス変数を呼び出す
以下の問題クラスでわかるように、NetworkGeneクラスで変数xを呼び出せますが、変数yを呼び出すことができるVectorGeneクラスになってしまいます。
class Problem {
double fitness = 0;
public void evaluate(final Individual ind){
if(!(ind. instanceOf GeneVectorIndividual)){
state.output.fatal("Not a GeneVectorIndividual",null);
}
fitness = 0;
for(){
fitness += ind.genome[i].x;
}
}
}
public abstrabct class VectorIndividual extends Individual{
}
public class GeneVectorIndividual extends VectorIndividual{
VectorGene[] genome;
}
public abstract class VectorGene implements Prototype {
double y;
}
public class NetworkGene extends VectorGene{
double x;
}
私は標準パッケージを使用しています。彼らは多くの継承関係を使用して、プログラムをあらゆる種類の問題に適用できるようにしました。 VectorGeneオブジェクトはパッケージ内の標準オブジェクトであり、NetworkGeneオブジェクトは私が作成したオブジェクトです。これはマニュアルの標準的な方法です。パラメータファイルは、NetworkGeneオブジェクトを使用するようにプログラムに指示します。私は全体のプログラムが非常に混乱していることがわかり、実装方法のためにすべてがどのように継承されているかわかりません。 – Danielle
ああ、フレームワークの喜び。 OK、その場合、NetworkGeneが 'getFitness()'のように実装できる抽象メソッドで設計されていない場合は、私が提案した素早く汚れた解決策以外のことはあまりありません。 –
この素早く汚れたメソッドを追加しても、シンボル(x変数)が見つからないというエラーメッセージが表示されます。これらの変数は、問題を説明するための単なるダミーです。 – Danielle