|
|
5仿真币
对这个算法最直观的理解是这样的:
( F0 I9 g3 o: x S, q( U5 F7 b3 w! f7 i& [) K0 z, J
一个agent在一天的开始时观察这个世界(获得information, 这个information是binary的,比如:天有没有下雨;家里的食物储备多不多),之后根据他获得的information,随机地选择一个action(比如:吃储备着的粮食)。在一天结束(即第二天开始)后,他计算了他的效用(就是满意度),如果效用较初始效用上升,他就会使选择这个action的概率上升一个单位。即整个算法是从information map到probability的一个过程。
7 z% y: J6 G u. P
' g0 F. e) z/ e) ]! o- Z以下是对编程有用的具体的算法:" Q1 s3 R. n, s$ }, V+ b! O
! m9 D- m$ v# O2 R假设现在有2个information, 所以列出所有的排列为[[0 0][0 1][1 0][1 1]]。$ X9 G, {+ T+ ?8 I
]. D0 q( o9 z, z" [ T# D3 r假设有4个actions: a1, a2, a3, a4。每个action所发生的概率分别为p1,p2,p3,p4。
# }8 I2 w2 T# V+ U) h# B4 T5 I
" J# r# C9 p" h% t- k每一个information vector都对应actions的一个概率分布。初始状态下的对应关系是这样的:
/ `: F. ~+ B6 s0 J
) A. }" {6 X5 `1 w. G [ [0 0] -> [0.25 0.25 0.25 0.25]
: E4 i1 Y) H+ s S/ Y3 O& ^ [0 1] -> [0.25 0.25 0.25 0.25]
' E: a" ~& O: `/ J [1 0] -> [0.25 0.25 0.25 0.25]
( W- @ o+ ~$ g) ^ [1 1] -> [0.25 0.25 0.25 0.25]
2 Y' L. y& t8 W0 ^, y8 M ]" z$ q, \6 M2 D p* w0 s2 d
- Q6 U. }3 K' S4 |
好,现在agent开始获得information,比如[0 0],这时,agent就用第一行的[0.25 0.25 0.25 0.25],来随机选择一个行为,假设他选择的是a2。在他做出了这个action之后,假设第二天他发现他的效用上升了,所以他就把a2发生的概率p2上调w,所以概率矩阵的第一行就变成[0.25-w/3 0.25+w 0.25-w/3 0.25-w/3]。9 ]+ w3 o+ j O2 w& \: G' R1 i1 J9 Y
3 N3 r# g: v, k1 P# v1 c% T2 O
他在第二天的开始又获得information,如果还是[0 0],那么就用[0.25-w/3 0.25+w 0.25-w/3 0.25-w/3]来随机选择一个action。但如果是[0 1],那么就还是要用第二行的[0.25 0.25 0.25 0.25]来随机选择一个action。选择完action之后就比较前一天的效用,然后再调整概率。
4 p+ I, Y* \0 A" P5 d6 J; l1 S3 T+ ]4 [! V3 p r; o, I
整个算法都在这里了,现在的问题是我根本就不知道从何下手,也不知道这个算法跟模型库中的哪些算法比较相似。
& c1 [9 E6 Z$ W$ z) V- e" E A0 z$ b1 L, g! W
恳请高人教导! |
|