Graph 给定无限游动的图生成算法

Graph 给定无限游动的图生成算法,graph,machine-learning,mapping,graph-algorithm,mud,Graph,Machine Learning,Mapping,Graph Algorithm,Mud,我需要帮助写一个弹性,映射(图形构建)算法。问题是: 假设你有一个面向文本的虚拟现实(TORG/MUD),你可以通过telnet发送移动命令(n、s、w、e、上、下、in、out…等等),将角色从一个房间移动到另一个房间。服务器在每个移动步骤后返回相应的房间描述。您的任务是生成一个表示底层映射结构的图,这样您就可以简单地在客户端执行DFS,以了解如何从一个房间到另一个房间。此外,您还希望设计系统,以使所需的用户输入最少 以下是假设: 服务器上的基础图形拓扑从未更改 房间描述不是唯一的。大多数房

我需要帮助写一个弹性,映射(图形构建)算法。问题是:

假设你有一个面向文本的虚拟现实(TORG/MUD),你可以通过telnet发送移动命令(n、s、w、e、上、下、in、out…等等),将角色从一个房间移动到另一个房间。服务器在每个移动步骤后返回相应的房间描述。您的任务是生成一个表示底层映射结构的图,这样您就可以简单地在客户端执行DFS,以了解如何从一个房间到另一个房间。此外,您还希望设计系统,以使所需的用户输入最少

以下是假设:

  • 服务器上的基础图形拓扑从未更改

  • 房间描述不是唯一的。大多数房间都有不同的描述,但有些房间有完全相同的描述。房间描述每隔一段时间(几天或几周)会略有更改

  • 您的移动可能会以很小的概率随机失败,并且您将收到一条错误消息,而不是新的房间描述,例如“您停下来等待马车通过”,“门已锁定”,并且您的角色仍将在当前房间中

  • 不能假定每个运动的单位空间距离。例如,您可能具有如下所示的拓扑,因此假设每个相邻房间的单位距离并为每个房间指定硬坐标是行不通的。但是,您可以假设相对方向是一致的,即沿X(西、东)和Y(南、北)的拓扑排序中不会有循环

  • 目标:给定您以前访问过的目的地,该算法保证最终将您移动到该位置,并在大多数情况下找到最短路径。错误是允许的,但是算法应该能够实时检测和纠正错误

示例图:

A--B---B
|      | <- k
C--D-E-F
这个简单的解决方案在构建图形时需要人工输入检测循环。例如,在上图中,假设相同的字母表示相同的房间描述。如果从第一个B开始映射,然后向左、向下、向右……直到执行移动k,现在您再次看到B,但映射器无法确定它是否是以前看到的B

简而言之,我希望能够编写一个弹性图构建算法,在一个隐藏的目标图中行走(可能是无限的),并生成(并不断更新)一个与目标图类似的图。然后,我们使用生成的图来帮助在目标图中导航。这类问题是否有一个现有的算法

我也考虑过用一些机器学习技术来解决这个问题,但我无法写出一个具体的模型。我的思路是为我们看到的每个房间定义一个特征列表(房间描述、出口、相邻节点),每次我们看到一个房间时,我们都试图根据一些更新规则(如Winnow或Perceptron)找到最适合这些特征的图形节点根据一些错误检测指标更新我们看到的描述


如有任何想法/建议,将不胜感激

许多MU*将为您提供获取房间唯一标识符的方法。(关于MUSH及其分支,即
思考%L
)其他人可能会被设置为以缩写形式描述您已经去过的房间。如果没有,你需要一些方法来确定你以前是否在房间里。一种简单的方法是计算每个房间的足够信息的散列,以获得唯一的密钥。然而,可能会故意设置一个迷宫来欺骗你,使你认为自己在不同的位置。魔法特别是设计用来让那些绘制地下城地图的老派玩家在意识到他们的地图一定是错的时候撕掉他们的头发,而Zork系列有一个谜题,当你在其他地方时,你在迷宫中标记自己位置的物体会被移动。实际上,编写工具来解决这些难题不太值得

您应该能够记忆一个包含所有对最短路径的表,并在搜索新出口时更新它以匹配您所探索的子图。这可以实现为一个N×N表,其中第i行第j列告诉您从位置i到位置j的最短路径的下一步。通常,对于有向图。即使每次运行Dijkstra的算法也应该足够了,但实际上,每次移动都会在地图上增加一个房间,而不会在许多其他房间之间增加一条较短的路径。您可能也希望自动映射您已经去过的房间之间的连接(除非它们被隐藏),而不是强迫资源管理器乏味地遍历每个单独的出口并返回以查看它的去向

如果你可以设计地图,你也可以布置这些区域,使它们易于在之间导航,然后你可以保持你的表格小:每个表格只需要包含你特意布置为迷宫的各个区域的地图就可以了。也就是说,如果你想从一个地牢到另一个地牢,你只需要查找最近的出口,然后在世界地图上查找地牢之间的方向,而不是一个巨大的表,它会随着整个游戏中的位置数量二次增长。例如,如果将世界布局为嵌套的层次结构,其中一个房间位于一个城市附近的街道上,一个国家的某个地区,一个大陆的某个星球上,则可以将位置存储为一棵树,从一个区域导航到另一个区域,只需沿着树走到通往目的地的道路上的一根树枝

我不确定用神经网络或类似的方法进行机器学习会有什么帮助;如果你想要的是一个房间
"node": [
        {
            "description": "You are standing in the heart of the Example city. There is a fountain with large marble statue in it...",
            "exits": {
                "east": -1,
                "north": 31,
                "south": 574,
                "west": 42
            },
            "id": 0,
            "name": "cot",
            "tags": [],
            "title": "Center of Town",
            "title_color": "\u001b[1m\u001b[36m Center of Town\u001b[0;37;40m"
        },
        {
        ...