誰かがlgpの個人からイントロンを削除するために使用される特定のアルゴリズムを教えてもらえますか?
ありがとうございました
イントロンの除去に関する限り、私はこの論文を見ていきます:医療データマイニングにおける線形遺伝的プログラミングとニューラルネットワークの比較。
論文の焦点はおそらく興味がないでしょうが、セクションII-B(20-21ページだと思います)。著者は、私が非常に優れた単純なイントロン検出アルゴリズムであると信じていることについて話し合っています。
これはかなり古い論文なので、この論文を引用している論文を検索して、役立つ可能性のある他のアプローチを探すことはおそらく価値があります。
特に、このペーパーで説明されているアルゴリズムのより高度なアプローチをお勧めします。
「線形GP、正準変換、およびその活用における冗長性:画像特徴合成のデモンストレーション」(Evolvable Machines 2011)
この2番目の論文を入手するには、タイトルをGoogleに入力するだけです。最初のリンクはSpringerペイウォールリンクである必要がありますが、[クイックビュー]をクリックすると、Googleキャッシュから問題なく論文を入手できるはずです。(あなたがそれに到達できない場合は私に知らせてください私は助けます)
この機能を備えた遺伝的プログラミングに関するオープンソースプロジェクトを実装しました。線形遺伝的プログラミングの私のJava実装を見てください:
https://github.com/chen0040/java-genetic-programming
評価中の線形計画法のパフォーマンスを向上させるために、ライブラリには、「線形遺伝的プログラミング」の第3章で説明されているイントロン除去手順の実装が含まれています。実装は、Program.markStructuralIntrons()の
markStructuralIntrons()の原理は非常に単純で、以下は本から引用されています。
出典:Brameier、M 2004 On Linear Genetic Programming(thesis)
アルゴリズム3.1(構造イントロンの検出)
以下は、Javaで実装されたProgram.markStructuralIntrons()の手順です。
public void markStructuralIntrons(LGP manager) {
int instruction_count=instructions.size();
for (int i = instruction_count - 1; i >= 0; i--) {
instructions.get(i).setStructuralIntron(true);
}
Set<Integer> Reff = new HashSet<>();
int io_register_count = manager.getRegisterCount();
for (int i = 0; i < io_register_count; ++i) {
Reff.add(i);
}
Instruction current_instruction = null;
Instruction prev_instruction = null; // prev_instruction is the last visited instruction from bottom up of the program
for (int i = instruction_count - 1; i >= 0; i--) {
prev_instruction = current_instruction;
current_instruction = instructions.get(i);
// prev_instruction is not an structural intron and the current_instruction
// is a conditional construct then, the current_instruction is not structural intron either
// this directly follows from Step 3 of Algorithm 3.1
if (current_instruction.getOperator().isConditionalConstruct() && prev_instruction != null) {
if (!prev_instruction.isStructuralIntron()) {
current_instruction.setStructuralIntron(false);
}
} else {
if (Reff.contains(current_instruction.getTargetOperand().getIndex())) {
current_instruction.setStructuralIntron(false);
Reff.remove(current_instruction.getTargetOperand().getIndex());
if (!current_instruction.getOperand1().isConstant()) {
Reff.add(current_instruction.getOperand1().getIndex());
}
if (!current_instruction.getOperand2().isConstant()) {
Reff.add(current_instruction.getOperand2().getIndex());
}
}
}
}
}