Drools を推論マシンとして使用してロボットを作成するクラスの割り当てがあります。ただし、私のルールのほとんどは、クラスに対して発火するのではなく、スーパークラスに対して発火するため、奇妙な動作をします。このようなもの:
私のルール:
import the.manifested.Robotonikku;
import the.manifested.Strategy;
import the.manifested.Action;
import robocode.TeamRobot;
rule "One"
when
Robotonikku();
then
System.out.println("roboto is present");
end
rule "Two"
when
not Robotonikku();
then
System.out.println("roboto is not present");
end
rule "Three"
when
TeamRobot();
then
System.out.println("robot is present");
end
rule "Four"
when
not TeamRobot();
then
System.out.println("robot is not present");
end
そして予想通り
public class Robotonikku extends TeamRobot
Robocode のシミュレーターによって呼び出される Robotonikku の run() メソッド内に、インスタンスをファクトとして挿入します。
ksession.insert(this)
ルール 1 と 3 が実行されるはずですが、ルール 2 と 3 が実行されます。インスタンスがロボトニックではなくチームロボットとして認識されるのはなぜですか?
前もって感謝します。
コードの読み込み:
String ficheroReglas = System.getProperty("robot.reglas", RobotDrools.FICHERO_REGLAS);
kbuilder = KnowledgeBuilderFactory.newKnowledgeBuilder();
kbuilder.add(ResourceFactory.newClassPathResource(ficheroReglas, RobotDrools.class), ResourceType.DRL);
if (kbuilder.hasErrors()) {
System.err.println(kbuilder.getErrors().toString());
}
kbase = KnowledgeBaseFactory.newKnowledgeBase();
kbase.addKnowledgePackages(kbuilder.getKnowledgePackages());
ksession = kbase.newStatefulKnowledgeSession();