Python中表格Sarsa算法的伪代码

时间:2019-01-24 20:35:15

标签: python arrays algorithm pseudocode sarsa

因此,我试图通过Python中的资格跟踪来更改Tabular Sarsa算法。 This是我遵循的算法。

在我的情况下,我只有一个状态和五个动作。因此,由于我从不切换状态,因此我的Q(s,a)只是Q(a),e(s,a)只是e(a)。据我了解,该算法会更新Q值,然后会更新资格跟踪。所以我的想法是拥有两个一维数组并将它们一起更新。我的Q(s,a)将是Q(a1,a2,a3,a4,a5),而我的e(s,a)将是e(a1,a2,a3,a4,a5)。我遇到的麻烦是如何基于表格sarsa算法更新这两个数组。我可以为学习率,奖励等设置值以插入公式,但是我无法掌握这些数组将如何更新的概念,甚至无法从如何设置这些伪代码的地方开始。到目前为止,我只是将我的值设置为零,而且我知道需要更新数组。

此算法将链接到我正在创建的机器人的神经网络。神经网络已经完成,我只需要有关如何实现此算法的帮助。我目前在此方面的唯一进展是将值设置为等于算法将其设置为的值。

const filter = {address: 'England', name: 'Mark'};
console.log( 
  users.filter(and(map(propMatches)(filter)))
)

function propMatches<T>(property: string, value: any) {
  return (item: T): boolean => item[property] === value
}

function map<T>(mapper: (key: string, value: any, obj: T) => (item:T) => any) {
  return (obj: T) => {
    return Object.keys(obj).map((key) => {
      return mapper(key, obj[key], obj)
    });
  }
}

export function and<T>(predicates: ((item: T) => boolean)[]) {
  return (item: T) =>
    predicates.reduce(
        (acc: boolean, predicate: (item: T) => boolean) => {
            if (acc === undefined) {
                return !!predicate(item);
            }
            return !!predicate(item) && acc;
        },
        undefined // initial accumulator value
    );
}

预期结果应使最新动作最多,而对第一动作最少。因此,如果我的机器人正确执行某项操作,则将对最后完成的操作进行奖励和更新,并且到达该步骤的先前操作也将按降序进行更新。如果我的机器人执行了错误的操作,则最后一个操作将受到最多的处罚,而先前的操作也将受到处罚。

0 个答案:

没有答案