gpt4 book ai didi

java - Robocode 机器人与 Drools Expert

转载 作者:太空宇宙 更新时间:2023-11-04 08:34:44 27 4
gpt4 key购买 nike

我有一个类(class)作业,要使用 Drools 作为推理机来创建机器人。然而,我的大多数规则都表现得很奇怪,因为它们不会为该类而触发,而是为其父类(super class)而触发。像这样的事情:

我的规则:

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)

我希望规则一和规则三应该被触发,但是规则二和规则三被触发。为什么它将该实例识别为 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();

最佳答案

Robocode 引擎将机器人加载到安全类加载器中。加载到机器人类加载器中的类对于 robocode 进程中的其余类加载器不可见。我想你必须将 drools 加载到与机器人相同的 classLoader 中(最简单的方法是将机器人上的类合并到 classPath 并添加 drools .class 文件或合并 jar)。我不确定 drools 是否仍然可以在 robocode 的安全限制下工作,因此您可能需要关闭 robocode 安全性。

关于java - Robocode 机器人与 Drools Expert,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6664196/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com