c++ - c ++神经网络路径查找不动
问题描述
我正在用c ++制作一个神经网络来遍历迷宫,知道玩家在哪里,它可以移动的2d方向(上,下,左,右)以及目标在哪里,我可以随时获得距离球员也达到目标
到目前为止,这是我的代码
std::string NeuralNetwork::evolve(player p)
{
openMoves = p.getMoves();
playerPos = p.getListPos();
goalPos = p.getGoalPos();
values.clear();
for (auto item : openMoves)
values.push_back(item);
values.push_back(playerPos.x);
values.push_back(playerPos.y);
if (outputs.size() == 0)
outputs.resize(4);
if (inputs.size() == 0)
inputs.resize(values.size());
for (int i = 0; i < inputs.size(); i++)
{
inputs[i].srcValue = values[i];
if (inputs[i].weightList.size() == 0)
{
for (int j = 0; j < outputs.size(); j++)
{
inputs[i].weightList.push_back(dist(100) / 100.0f);
}
}
}
for (int i = 0; i < outputs.size(); i++)
{
outputs[i].out = 0;
if (outputs[i].theta == NULL)
outputs[i].theta = dist(-100, 100) / 100.0f;//rand funct to produce int between -100-100 then divide by 100 to get theta between -1 and 1
for (auto a : inputs)
{
outputs[i].out += (a.srcValue * a.weightList[i]);
}
outputs[i].finalOut = outputs[i].out / (1.0f + fabs(outputs[i].out));
//outputs[i].finalOut = 1 / (1 + std::pow(exp(1), -(outputs[i].out - outputs[i].theta)));
}
for (int i = 0; i < outputs.size(); i++)//backwards prop
{
float e = 1 - outputs[i].finalOut;
float delta = outputs[i].finalOut * (1 - outputs[i].finalOut)*e;
for (int j = 0; j < inputs.size(); j++)
{
inputs[j].weightList[i] += alpha * inputs[j].srcValue * delta;
}
outputs[i].theta += alpha * (-1)*delta;
}
神经网络是一个每帧都调用的函数,玩家从左上角开始,目标在右下角,该函数返回玩家移动的方向。但是,使用反向传播,每个输出最终都不会是 1这是我用来确定其方向的
for (int i = 0; i < outputs.size(); i++)
{
if (outputs[0].finalOut == 1)//left
{
return "01";
}
else if (outputs[1].finalOut == 1)//up
{
return "10";
}
else if (outputs[2].finalOut == 1)//down
{
return "11";
}
else if (outputs[3].finalOut == 1)//right
{
return "00";
}
}
return "";}
但是该函数始终根本不返回任何动作,我不知道为什么,即使等待几分钟后,网络也没有隐藏层我开始很简单,输入直接链接到输出我不确定如果我的错误计算是正确的然后调整权重。我不确定我应该使用什么来让人工智能确定如何移动
解决方案
推荐阅读
- python - Django中的三元模型关联
- hadoop - 无法从 Apache Nifi 连接到 Docker 中的 Hadoop
- python - Python 2.** 从列表中查找两个列表组合的所有可能交集的并集
- c# - 如何在 foreach 循环中并行执行方法或 DML 以加快执行时间?
- python - 添加函数来计算数据框中的“最佳”行
- ios - 我应该在哪里从 UIViewController 中的 firebase 加载数据
- angular - 如何获取新项目ngrx的ID
- php - RegEx - 匹配括号中所有未引用的字符串,除非它们都是大写字母
- sql - 用于选择列中具有一个值但缺少另一个值的记录的 SQL 查询
- python - 如何删除给出这个的vscode自动完成?