У меня есть задание на создание робота с использованием 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
внутри метода run() Роботоникку, который вызывается симулятором Robocode, я вставляю экземпляр как факт:
ksession.insert(this)
я ожидаю, что правила 1 и 3 должны сработать, но правила 2 и 3 сработают. Почему он распознает экземпляр как TeamRobot, а не как Robotonicku?
заранее спасибо.
код загрузки:
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();