Java:位于“world”对象内的“agent”对象如何获取关于“world”的信息?

对不起,这个问题的措辞有些奇怪,但我刚开始接触面向代理的思考方式(这些是“模式”吗?),对Java的了解也仅比新手稍多一点,我正为一个看似非常基础的问题而挣扎。

我更多的是在凭直觉(也就是盲目地)做这些,而不是试图理解别人的代码——部分原因是我难以理解那些“超出我水平”的代码,但也因为我希望按照“我的方式”做会帮助我后来更好地理解正确的方法。

基本上,我正在模拟一个环境中的代理(一个机器人吸尘器)。一个House包含一个房间集合(HashMap)。House有一个方法getRoom(int key),它返回与给定键匹配的房间。Agent有一个状态,目前它跟踪一个房间ID(这也是House中的键),这是机器人为了导航世界而“在”的房间;状态还描述了房间是否已知脏。当代理被构造时,它会用一个ID进行初始化(它必须在某个房间中创建),但不会给出房间的脏/clean状态。我希望代理可以检查脏物——这将涉及调用House中的getRoom()方法。然而,根据我目前学到的Java知识,我不知道如何做到这一点。我知道我可以通过在Java中创建一个House来访问那个方法,或者通过使该方法成为静态的,但这些方法都不行——代理需要知道内存中那个特定的House,那个已经被房间初始化的House。

简而言之:一个Agent对象如何获得存储在另一个环境对象内部的HashMap中的对象的引用?

P.S. 这是我想象的这种方法启用的“更高层次”视角的模型:我有点直觉地希望代理完全负责自己的感知和行为,这样更高层次的代码看起来会更像这样:

agent.percieve()                           //代理检查它认为自己所在的房间是否有脏物并退出if (agent.gotDirt()) agent.clean()         //如果在这个房间发现脏物,代理启动其清洁设备if (agent.gotDirt() == false) agent.move() //代理选择一个出口并离开房间


回答:

吸尘器(也就是你所说的“代理”,但为什么要这样命名,因为它实际上是一个吸尘器?)只需要一个它所属的House对象的引用:

// 构造一个HouseHouse house = new House(); // 省略:向房子中添加房间...// 为房子创建第一个吸尘器。给这个清洁器一个房子的引用VacuumCleaner vacuumCleaner = new VacuumCleaner(house);System.out(vacuumCleaner.isRoomClean(2)); // 打印false,因为房间2充满了脏物vacuumCleaner.cleanRoom(2);System.out(vacuumCleaner.isRoomClean(2)); // 打印true,因为吸尘器已经从房间2中清除了脏物// 现在让我们为同一个房子创建第二个吸尘器VacuumCleaner vacuumCleaner2 = new VacuumCleaner(house);System.out(vacuumCleaner2.isRoomClean(2)); // 打印true,因为房间2没有脏物:之前第一个吸尘器已经从房间中清除了脏物。

编辑

这是VacuumCleaner类的样子:

public class VacuumCleaner    /**     * 这个吸尘器清洁的房子      */    private House house;    public VacuumCleaner(House houseToClean) {        this.house = houseToClean;    }    public boolean isRoomDirty(int roomId) {        // 在房子里找到房间,并查看它是否包含脏物    }    public void cleanRoom(int roomId) {        // 在房子里找到房间,并从中清除脏物    }}

Related Posts

L1-L2正则化的不同系数

我想对网络的权重同时应用L1和L2正则化。然而,我找不…

使用scikit-learn的无监督方法将列表分类成不同组别,有没有办法?

我有一系列实例,每个实例都有一份列表,代表它所遵循的不…

f1_score metric in lightgbm

我想使用自定义指标f1_score来训练一个lgb模型…

通过相关系数矩阵进行特征选择

我在测试不同的算法时,如逻辑回归、高斯朴素贝叶斯、随机…

可以将机器学习库用于流式输入和输出吗?

已关闭。此问题需要更加聚焦。目前不接受回答。 想要改进…

在TensorFlow中,queue.dequeue_up_to()方法的用途是什么?

我对这个方法感到非常困惑,特别是当我发现这个令人费解的…

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注