- iOS/Objective-C 元类和类别
- objective-c - -1001 错误,当 NSURLSession 通过 httpproxy 和/etc/hosts
- java - 使用网络类获取 url 地址
- ios - 推送通知中不播放声音
我已经阅读了很多关于 Markov Decision Processes (using value iteration) 的内容最近,但我根本无法理解它们。我在互联网/书籍上找到了很多资源,但它们都使用了对我的能力来说太复杂的数学公式。
由于这是我上大学的第一年,我发现网上提供的解释和公式使用的概念/术语对我来说太复杂了,而且他们假设读者知道某些我只是简单了解的事情没听说过。
我想在 2D 网格上使用它(充满墙壁(无法到达)、硬币(理想)和移动的敌人(必须不惜一切代价避免))。整个目标是在不接触敌人的情况下收集所有硬币,我想使用马尔可夫决策过程 (MDP) 为主要玩家创建一个 AI。下面是它的部分样子(请注意,与游戏相关的方面在这里并不是一个很重要的问题。我真的很想总体上了解 MDP):
据我所知,MDP 的粗略简化是它们可以创建一个网格,该网格包含我们需要前进的方向(类似于“箭头”网格,指向我们需要去的地方走,从网格上的特定位置开始)以达到特定目标并避开特定障碍。具体到我的情况,这意味着它可以让玩家知道去哪个方向收集硬币并避开敌人。
现在,使用 MDP 术语,这意味着它创建了一个状态集合(网格),其中包含某些策略(要采取的操作 -> 上、下、右、左)对于某个状态(网格上的一个位置)。这些政策由每个州的“效用”值决定,这些值本身是通过评估到达那里在短期和长期内会带来多少好处来计算的。
这是正确的吗?还是我完全走错了路?
我至少想知道以下等式中的变量在我的情况下代表什么:
(摘自 Russell & Norvig 的《人工智能——现代方法》一书)
我知道 s
将是网格中所有方 block 的列表,a
将是一个特定的 Action (上/下/右/左),但是剩下的呢?
如何实现奖励和效用函数?
如果有人知道一个简单的链接,它显示伪代码以非常缓慢的方式实现与我的情况相似的基本版本,那就太好了,因为我什至不知道从哪里开始。
感谢您抽出宝贵的时间。
(注意:请随意添加/删除标签或在评论中告诉我是否应该提供有关某事或类似事情的更多详细信息。)
最佳答案
是的,数学符号可以让它看起来比实际上复杂得多。真的,这是一个非常简单的想法。我有一个实现 value iteration demo applet你可以玩玩以获得更好的想法。
基本上,假设您有一个二维网格,其中有一个机器人。机器人可以尝试向北、向南、向东、向西移动(这些是 Action a)但是,因为它的左轮很滑,当它向北移动时,它最终到达正方形的概率只有 0.9在它的北边,而它有 0.1 的概率会在它的西边的方格处结束(对于其他 3 个 Action 也是如此)。这些概率由 T() 函数捕获。也就是说,T(s,A,s') 看起来像:
s A s' T //x=0,y=0 is at the top-left of the screen
x,y North x,y+1 .9 //we do move north
x,y North x-1,y .1 //wheels slipped, so we move West
x,y East x+1,y .9
x,y East x,y-1 .1
x,y South x,y+1 .9
x,y South x-1,y .1
x,y West x-1,y .9
x,y West x,y+1 .1
然后,您将所有状态的奖励设置为 0,但目标状态(即您希望机器人到达的位置)设置为 100。
值迭代的作用是首先为目标状态提供 100 的效用,为所有其他状态提供 0。然后在第一次迭代中,这 100 个效用会从目标返回 1 步,因此所有可以在 1 步内到达目标状态的状态(紧邻它的所有 4 个方 block )都将获得一些效用。即,他们将获得一个效用,该效用等于从该状态我们可以达到所述目标的概率。然后我们继续迭代,在每一步我们将实用程序从目标移回 1 步。
在上面的示例中,假设您从 R(5,5)= 100 开始,对于所有其他状态,R(.) = 0。所以目标是达到 5,5。
在我们设置的第一次迭代中
R(5,6) = Gamma * (.9 * 100) + Gamma * (.1 * 100)
因为在 5,6 上,如果您向北走,则有 0.9 的概率以 5,5 结束,而如果您向西走,则以 0.1 的概率以 5,5 结束。
与 (5,4)、(4,5)、(6,5) 类似。
所有其他状态在值迭代的第一次迭代后保持 U = 0。
关于algorithm - Markov Decision Process : value iteration, 它是如何工作的?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8337417/
关闭。这个问题是opinion-based .它目前不接受答案。 想改善这个问题吗?更新问题,以便可以通过 editing this post 用事实和引文回答问题. 5年前关闭。 Improve t
我是一名设计老师,试图帮助学生应对编程挑战,所以我编码是为了好玩,但我不是专家。 她需要找到 mode (最常见的值)在使用耦合到 Arduino 的传感器的数据构建的数据集中,然后根据结果激活一些功
我正在开发一个应用程序,该应用程序提供 CPU 使用率最高的 5 个应用程序名称。目前,我通过以下代码获得了排名前 5 的应用程序: var _ = require('lodash');
互联网上很少有例子涉及这个问题的所有三个问题——即 set-process-sentinel ; set-process-filter ;和 start-process . 我尝试了几种不同的方法来微
如 this post 中所述,在 C# 中有两种调用另一个进程的方法。 Process.Start("hello"); 和 Process p = new Process(); p.StartInf
我试图让我的桨从白色变为渐变(线性),并使球具有径向渐变。感谢您的帮助!您可以在 void drawPaddle 中找到桨的代码。 这是我的目标: 这是我的代码: //球 int ballX = 50
考虑:流程(a)根据我的文字: A process is first entered at the time of simulation, at which time it is executed u
我真的希望 Processing 有用于处理数组的 push 和 pop 方法,但由于它没有,我不得不试图找出删除数组中特定位置的对象的最佳方法。我相信这对很多人来说都是基本的,但我可以使用一些帮助,
关闭。这个问题是off-topic .它目前不接受答案。 想改进这个问题吗? Update the question所以它是on-topic用于堆栈溢出。 关闭 10 年前。 Improve thi
以编程方式,我如何确定 Windows 10 中的 3 个类别 应用 后台进程 Windows 服务 就像任务管理器一样? 即我需要一些 C# 代码,我可以确定应用程序列表与后台进程列表。检查 Win
当我导入 node:process它工作正常。但是,当我尝试要求相同时,它会出错。 这工作正常: import process from 'node:process'; 但是当我尝试要求相同时,它会引
我正在上一门使用处理的类(class)。 我在理解 map() 函数时遇到问题。 根据它的文档( http://www.processing.org/reference/map_.html ): Re
我试图执行: composer.phar update 并收到: Fatal error: Allowed memory size of 94371840 bytes exhausted (tried
给定一堆二维图像,如何使用 Processing/Processing.js 产生体积渲染效果? 目前我的想法是使用 java(类似于 imageJ)进行体积渲染 -> 获取体积渲染图像的面作为单独的
这是代码示例 var startInfo = new ProcessStartInfo { Arguments = commandStr, FileName = @"C:\Window
当我在 Processing(草图 > 导入库 > 添加库)中添加库时,它安装在哪里? 最佳答案 它们安装在您的 中速写本位置 . 您可以通过转到"file">“首选项”来查看和更改您的速写本位置。草
无聊的好奇... 我正在查看当前进程的一些属性: using(Process p = Process.GetCurrentProcess()) { // Inspect properties
我正在尝试在同一页面上运行多个草图。 初始化脚本指定: /* * This code searches for all the * in your page and loads each scrip
Process.Kill 后是否需要使用 Process.WaitForExit? 如果调用进程在调用 Process.Kill 后立即退出怎么办? 这会导致 Process.Kill 失败吗? 编辑
我尝试使用处理从麦克风获取频率。我混合了文档中的两个示例,但“最高”并不是真正的赫兹(a 是 440 赫兹)。 你知道如何拥有比这更好的东西吗? import ddf.minim.*; import
我是一名优秀的程序员,十分优秀!