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