zoukankan      html  css  js  c++  java
  • Udacity的C++编程练习: Python转C++

    练习 1

    在机器人定位的课程中,Sebastian Thrun 已经带领你了解了一维机器人传感和运动的 Python 代码。最后你得到了一个 sense() 函数,它基于传感器的测量数据来更新概率。你也得到了一个 move() 函数,它根据机器人在网格中的运动更新概率。

    现在请将下面的 Python 代码翻译成 C++ 代码:

    p = [0.2, 0.2, 0.2, 0.2, 0.2]
    world = ['green', 'red', 'red', 'green', 'green']
    measurements = ['red', 'green']
    motions = [1,1]
    pHit = 0.6
    pMiss = 0.2
    pExact = 0.8
    pOvershoot = 0.1
    pUndershoot = 0.1
    
    def sense(p, Z):
        q=[]
        for i in range(len(p)):
            hit = (Z == world[i])
            q.append(p[i] * (hit * pHit + (1-hit) * pMiss))
        s = sum(q)
        for i in range(len(q)):
            q[i] = q[i] / s
        return q
    
    def move(p, U):
        q = []
        for i in range(len(p)):
            s = pExact * p[(i-U) % len(p)]
            s = s + pOvershoot * p[(i-U-1) % len(p)]
            s = s + pUndershoot * p[(i-U+1) % len(p)]
            q.append(s)
        return q
    
    for k in range(len(measurements)):
        p = sense(p, measurements[k])
        p = move(p, motions[k])
    
    print p         

    我改写的C++版本:

    #include <iostream>
    #include <vector>
    
    using namespace std;
    
    vector<float> p(5,0.2);
    vector<string> world = {"green", "red", "red", "green", "green"};
    vector<string> measurements = {"red","green"};
    vector<int> motions = {1,1};
    float pHit,pMiss,pExact,pOvershoot,pUndershoot;
    
    
    vector<float> sense(vector<float> p,string Z){
    
    //    for (int i=0;i<p.size();i++){
    //        cout<<p[i]<<endl;
    //    }
        pHit = 0.6;
        pMiss = 0.2;
    
        vector<float> q;
        int hit;
        for (int i = 0; i < p.size();i++){
            hit = (Z == world[i]);
    //        cout<<hit<<endl;
    //        cout<<p[i]* (hit * pHit + (1-hit) * pMiss)<<endl;
            q.push_back(p[i]* (hit * pHit + (1-hit) * pMiss));
        }
    
    
    
    
        float s = 0;
        for (int i = 0; i < q.size();i++){
            s = s + q[i];
        }
    
        for (int i = 0; i < q.size();i++){
            q[i] = q[i] / s;
        }
    
        return q;
    }
    
    vector<float> move(vector<float> p, int U){
        vector<float> q;
        float s;
        pOvershoot = 0.1;
        pUndershoot = 0.1;
        pExact = 0.8;
        for (int i=0;i<p.size();i++){
            s = pExact * p[(i-U) % p.size()];
            s = s + pOvershoot * p[(i-U-1) % p.size()];
            s = s + pUndershoot * p[(i-U+1) % p.size()];
            q.push_back(s);
    
        }
        return q;
    
    }
    
    int main()
    {
    //    vector<float> p(5,0.2);
    //    vector<string> world = {"green", "red", "red", "green", "green"};
    //    vector<string> measurements = {"red","green"};
    //    vector<int> motions = {1,1};
    //    float pHit,pMiss,pExact,pOvershoot,pUndershoot;
    
        for (int i=0;i<measurements.size();i++){
                p = sense(p,measurements[i]);
                p = move(p,motions[i]);
    
        }
    
        for (int i=0;i<p.size();i++){
            cout<<p[i]<<endl;
        }
    
    //    cout << p << endl;
    
    //    for (int i;i<world.size();i++){
    //        cout<<world[i]<<endl;
    //    }
    //    cout << "Hello world!" << endl;
        return 0;
    }
    

     显示结果:

  • 相关阅读:
    阅读任务
    自我介绍
    学习总结
    第十二周课程总结
    第十一周课程总结
    第十周课程总结
    第九周课程总结&实验报告(七)
    第四周课程总结&实验报告
    第3周Java编程总结
    学习总结
  • 原文地址:https://www.cnblogs.com/wangyarui/p/11232040.html
Copyright © 2011-2022 走看看