我目前正在阅读Wiley和Woolridge的《多代理系统导论》,希望有人能帮我澄清以下内容。作者在谈到效用函数时提到:
效用是一个数值,表示状态的“好坏”:效用越高,状态越好。
代理的任务是实现最大化效用的状态 – 我们不向代理指定如何实现这一点。在这种方法中,任务规格将简单地是一个函数
u:E -> R
它将每个环境状态与一个实数值相关联。
有了这样的性能度量,我们就可以用几种不同的方式来定义代理在某个特定环境中的整体效用。一种(悲观的)方式是将代理的效用定义为代理可能遇到的最差状态的效用;另一种方式可能是将整体效用定义为代理遇到的所有状态的平均效用。没有对错之分:度量取决于你希望代理执行的任务类型。
这种方法的主要缺点是它为局部状态分配效用;在为单个状态分配效用时,难以指定一个长期视角。
我对这个缺点和局部状态的具体含义感到困惑。有人能解释一下吗?
回答:
我将在这里展示一个例子来解释这个概念。希望对你有帮助。有关详细信息,请参阅幻灯片。
问题:
这是一个经典问题,称为Tile World
(瓷砖世界)。
- 二维网格世界,其中有代理、瓷砖、障碍物和洞穴。
- 代理可以向四个方向移动(上、下、左、右),如果它位于瓷砖旁边,它可以将瓷砖推向相应的方向。
- 代理需要用瓷砖填满洞穴。
- 目标是用瓷砖填满所有洞穴。
环境状态
环境的状态可以使用以下变量来描述:
- 代理的当前位置
(a_x, a_y)
- 四个瓷砖的当前位置
(t1_x, t1_y)
,(t2_x, t2_y)
,(t3_x, t3_y)
,(t4_x, t4_y)
状态转移
假设在当前状态下,如果代理将下方的瓷砖向下推,系统状态将转移到下一个状态,在这个状态中,除了代理的当前位置和被推动的瓷砖的位置外,其他变量保持不变。
效用函数
我们的效用函数可以定义为填满的洞穴百分比,即:
已填满的洞穴数 u = ------------------------- 总洞穴数
显然:
- 如果代理填满所有洞穴,效用 = 1
- 如果代理填满零个洞穴,效用 = 0
关联效用函数
现在看看下面的两个状态。
很容易看出:
- 两个状态的效用值相同,为
1/3
(因为1个洞穴中的3个被填满) - 左侧(状态
s1
)是一个死位置,在这个位置你无法将所有瓷砖移动到洞穴中 - 右侧(状态
s2
)是一个好位置,在这个位置你有机会将剩余的两个瓷砖移动到洞穴中。
因此,得出的结论是:
-
如果你只将效用函数关联到局部状态,例如
u(s1)
或u(s2)
,你实际上无法在效用方面区分它们。u(s1)=u(s2)=1/3
。 -
你需要对状态有一个全局或长期的视角,这可以通过运行来表示,运行是一系列交错的环境状态和代理采取的行动的序列。
-
你可以不为单个状态分配效用,而是为运行分配效用。这种方法本质上采取了长期视角。
u: run -> 实数值
-
在这种设置下,代理的最佳策略是最大化期望效用,这并不意味着它会是最好的,但平均来说我们可以期望它表现最佳。
期望效用 = 求和( u(r) x Prob(r) )
请参考你提到的书或相应的幻灯片了解更多详情。