我有一個課堂作業,創建一個機器人使用Drools作爲推理機器。然而,我的大部分規則表現奇怪,因爲他們不爲班級開火,而是因爲超級班而開火。事情是這樣的:Robocode機器人與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
Robotonikku的run()方法是通過的Robocode的模擬器叫我插入的實例作爲事實中:
ksession.insert(this)
我認爲規則一和三應該是火,但規則二和三是f紅外發光二極管。爲什麼它將實例識別爲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();
它可能是由同樣的事情引起的。當我用Query從Drools中獲取某些東西並嘗試將它轉換爲java中的正確類時,它給了我(類加載器如何工作?可以流口水和robocode使用不同的類加載器嗎?):Exception:java.lang.ClassCastException:drools_robocode。無法將操作轉換爲drools_robocode.Action –
您能否包含顯示您如何創建知識庫和會話的代碼?因爲我用你所描述的基本班級來嘗試你的DRL,並且按照預期來管理一,三次火災。 – Perception
Hello Perception,在某些機器上工作。我們無法弄清楚它們的區別(相同的drools,jdk,jre和robocode版本號),只是那些工作的是32位而不是64位的。不確定情況如何。 –