Привет, у меня проблемы с его кодом C ++, разработанным с помощью Code Blockers.Он реализует смысл и движение робота (очень простой), есть вектор p вероятностей, которые меняют меня. Я применяю смысл и двигаюсь в своей основной функции.
Есть функция чувств и функция перемещения ниже, которые в основном меняют мой вектор вероятностей p .
Я вызываю их в своем главномфункция, но она, похоже, не работает, возвращает 5 нан. значений.
#include <iostream>
#include <vector>
#include <string>
using namespace std;
vector<float> p (5);
vector<string> world (5);
vector<string> measurements (2);
vector<int> motions (2);
float pHit;
float pMiss;
float pExact;
float pOvershoot;
float pUndershoot;
vector<float> sense(vector<float> p, string Z);
vector<float> move(vector<float> p, int U);
int main(){
vector<float> p = {0.2, 0.2, 0.2, 0.2, 0.2};
vector<string> world = {"green", "red", "red", "green", "green"};
vector<string> measurements = {"red", "green"};
//string measurements = "red";
vector<int> motions = {1,1};
float pHit = 0.6;
float pMiss = 0.2;
float pExact = 0.8;
float p0vershoot = 0.1;
float pUndershoot = 0.1;
vector<float> sense(vector<float> p, string Z);
vector<float> moves(vector<float> p, int U);
for(int i=0; i<measurements.size(); i++){
p = sense(p, measurements[i]);
p = moves(p, motions[i]);
}
for(int i=0; i<p.size(); i++){
cout << p[i] << " ";
}
return 0;
}
vector<float> sense(vector<float> p, string Z){
vector<float> q;
// q.reserve(p.size());
for(int i=0; i<p.size(); i++){
bool hit = (Z == world[i]);
q.push_back(p[i] * (hit * pHit + (1-hit) * pMiss));
}
float s = 0.0;
for(int i=0; i<q.size(); i++){
s += q[i];
}
for(int i=0; i<q.size(); i++){
q[i] /= s;
}
return q;
}
vector<float> moves(vector<float> p, int U){
vector<float> q;
// q.reserve(p.size());
for(int i=0; i<p.size(); i++){
float 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;
}