将伪代码转换为C++
Converting Pseudocode to C++
我正在尝试了解马尔可夫决策问题,并得到了价值迭代的算法,但我对如何将它们转化为实际的C++代码感到困惑。主要是发生求和等的部分。这是算法:
function VALUE-ITERATION(P;R) returns a utility matrix
inputs: P, a transition-probability matrix
R, a reward matrix
local variables: U, utility matrix, initially identical to R
U', utility matrix, initially identical toR
repeat
U <- U'
for each state i do
U'(s_i) <- R(s_i) + max_a Summation_j P^a_ij*U(s_j)
end
until max_(s_i) |U(s_i) - U'(s_i)| < e
return U
这对我来说看起来像象形文字,有没有更简单的算法对我更有帮助?或者有人能为我把它弄傻吗?
我很容易找到这篇文章:马尔可夫决策问题的价值迭代和策略迭代算法[PDF文件]。它解释了更多正在发生的事情。
从概念上讲,您有一个可以处于多种状态的系统,从一种状态转换到另一种状态的奖励,以及有时可能导致状态转换的操作。基本思想是不断迭代,直到你得到一个不会改变的实用程序矩阵这就是最终测试max_(s_i) | U(s_i) - U'(s_i)| < e
寻找的。(在这里,e
是epsilon的缩写,是一个很小的数字,可能应该是一个额外的输入。
对于每次迭代,您希望对每个状态采取最佳操作。最好的行动是产生最大回报的行动,按概率加权。这就是max_a Summation_j P^a_ij*U(s_j)
所做的:找到产生最佳奖励的行动,按概率加权。
我可以翻译零碎的内容,但是您的代码中有很多信息仅在上下文中有意义,我们无法知道该上下文。此外,似乎在此过程中丢失了一些格式,因为 P^a_ij 看起来它曾经是 P 的 a_i 次 j 的幂。大卫似乎知道如何解释这个疯狂的位子。
条件循环在伪代码中使用|
也很奇怪,但我从字面上理解了它。
utility_matrix VALUE_ITERATION(const probability_matrix& P,
const reward_matrix& R)
{
utility_matrix U(R);
utility_matrix UP(R);
do {
U = UP;
for(int s_i : ????) //for each state in what?
UP[s_i] = R[s_i] + ???? //max_a Summation_j P^a_ij*U(s_j)
while(max(s_i) ???? std::abs(U[s_i] - UP[s_i])<e);
return U;
}
正如 akira 所说,可以理解的部分很简单,如果你做不到这些,你可能需要在解决这个问题之前了解更多关于C++的信息。
根据您的评论,我在这里发现了与您的算法模糊相似的 C 代码。(第 62-76 行)
相关文章:
- 防止主数据类型C++的隐式转换
- 模板参数替换失败,并且未完成隐式转换
- 努力将整数转换为链表。不知道我在这里做错了什么
- HEX值到wchar_t字符(UTF-8)的转换
- lambda参数转换为constexpr技巧,然后获取带链接的数组
- 将 Qvector<uint8_t> 转换为 QString
- 如何在cuSparse中使用cusparseXcoo2csr从coo转换为csc
- 有关插入适配器的错误。[错误]请求从 'back_insert_iterator<vector<>>' 类型转换为非标量类型
- 在c++中使用nlohmann从类到json的转换
- 从"int*"强制转换为"unsigned int"会丢失精度错误
- 将Integer转换为4字节的unsined字符矢量(按大端字节顺序)
- 处理小于cpu数据总线的数据类型.(c++转换为机器代码)
- 如何使用OpenCV将RBG图像转换为HSV,并将H、S和V值保存为C++中的3个独立图像
- 复制列表初始化的隐式转换的等级是多少
- 正在将指针转换为范围
- 如何防止 c++ 在从浮点型转换为双精度型(不适用于 IO)时添加额外的小数?
- 将"打开的CV图像"中的"颜色"转换为整数格式
- 是否可以从int转换为enum类类型
- 了解 GLM- openGL 中的相机转换
- 将无符号char*转换为std::istream*C++