我有一个智能体,它接收状态并返回动作,同时保持状态/动作对的效用的内部表示。我还有一个环境,它接收动作并返回状态/奖励对。
我需要能够使用一个起始状态来设置智能体,然后不断地从智能体 -(动作)-> 环境 -(状态,奖励)-> 智能体 -(动作)->…
但是,内部状态(需要在每次迭代中更新)需要保持私有(即,在智能体或环境内部)。这意味着我不能简单地在智能体中使用状态和动作作为参数来调用环境作为函数。
我是Haskell新手,所以我不确定这是否可能。
回答:
两个问题:
-
如果智能体必须使用状态来计算动作,那么您如何期望对智能体保密状态的表示?
-
如果环境期望根据动作产生状态(和奖励),那么您如何期望对环境保密状态的表示?
这两种情况都是可能的,但每一种都必须涉及某种查询状态或创建状态的抽象。我对这个设计没有好的感觉。
通过以下方式澄清问题会有帮助:
-
提供感兴趣的函数的类型签名
-
确定您希望状态的表示不暴露给哪些函数。
附:这些困难与Haskell完全分离,并且无论选择哪种实现语言,都会出现问题(前提是该实现语言支持某种形式的隐私)。