马尔可夫决策过程:导致不同状态的相同行为

时间:2016-03-28 01:05:39

标签: hidden-markov-models markov-chains markov markov-models

上周我读过一篇论文,建议将MDP作为推荐系统的替代解决方案, 该论文的核心是MDP方面的推荐过程,即状态,行动,转换概率,奖励函数等。

如果我们假设单用户系统简单,那么状态看起来像k-tuples (x1, x2, .. , xk),其中最后一个元素xk代表用户购买的最后一个项目。 例如,假设我们当前状态为(x1, x2, x3),这意味着用户按时间顺序购买了x1,然后是x2,然后是x3。现在如果他购买x4,新状态将是(x2, x3, x4)

现在,本文建议的是,这些状态转换是由动作触发的,其中动作是“向用户推荐项目x_i”。但问题是这样的行动可能导致不止一个州。

例如,如果我们当前的状态是(x1, x2, x3),并且操作是“向用户推荐x4”,则可能的结果可能是两个中的一个:

用户接受x4的推荐,新状态为(x2, x3, x4)
  用户忽略x4的推荐(即购买其他东西),新状态将是任何状态(x2, x3, xi),其中xi!= x4

我的问题是,MDP实际上是否支持触发两个或更多不同状态的相同操作?

更新。我认为行动应该被表述为“得到项目x_i的推荐并接受它”和“获得项目x_i的推荐并拒绝它”而不是简单地“得到项目x_i的推荐”

1 个答案:

答案 0 :(得分:0)

基于this Wikipedia article,是的,确实如此。

我不是这方面的专家,因为我只是查看了这个概念,但看起来好像一组状态和一组动作没有固有的关系。因此,多个状态可以链接到任何动作(或不链接),反之亦然。因此,一个动作可以导致两种或更多种不同的状态,并且每种结果都有一个特定的概率。

请注意,在您的示例中,您可能必须拥有一组所有可能的状态(似乎它可能是无限的)。进一步......基于我所阅读的内容,你的州也许不应该记录过去的历史。似乎你可以通过保留链本身的记录来记录历史记录 - 而不是//Model class Person : INotifyPropertyChanged { //Properties with notification } //Views abstract class View { //Base class for all views public abstract void SetDataSource(object source); protected virtual void Refresh(); public abstract void Show(); } //Data grid view class DataGridView : View { private Controller _controller = null; private System.Windows.Forms.DataGrid _grid = new System.Windows.Forms.DataGrid(); public DataGridView(Controller controller) { _controller = controller; } public override void SetDataSource(object dataSource) { _grid.DataSource = dataSource; } public override void Show() { } protected override void Refresh { _grid.Refresh(); } } //Controllers abstract class Controller { //Base controller public abstract void Init(); public abstract void Show(); public abstract void ViewChanged(object args);//To receive view changes } //Person presenter class PersonGridController : Controller { private DataGridView _view = new DataGridView(this); private BindingList<Person> _persons = new BindingList<Person>(); public override void Init() { //Initialize persons //Optional, start thread/timer to update persons in background } public override void Show() { _view.SetDataSource(_persons); _view.Show(); } public override void ViewChanged(object args) { //Based on arguments, perform filter, edit, save, etc. } } 作为一个状态,你有更像(x1, x2, x3, xi)的东西 - 通过动作链接的四个状态。 (抱歉这个符号。我希望这个概念有意义。)这样,你的州代表购买的选择(因此是有限的)。