【发布时间】:2012-11-15 00:41:38
【问题描述】:
我正在尝试设置一棵树(最终用于“神经网络”,并尝试使设置尽可能高效。不幸的是,即使设置树也需要大约 3 分钟,但我不能不知道是什么让它如此低效。我试图尽可能使用指针来最小化负载,但它仍然需要永远。我做错了什么?
PS。这最终适用于井字游戏 AI(是的,我知道这可以通过查看愚蠢的游戏来解决,但我想将其作为一个简单的 AI 来自学。
树的每个分支将有 9 个节点,每个节点分支出另外 9 个节点。这使得最后一组分支大约有 4 亿个节点。有什么方法可以更有效地执行此代码吗?
#include <iostream>
#include <vector>
using namespace std;
class Node;
class Set;
class Node {
public:
Node(double, Set*);
Node();
double value;
Set * nextSet;
};
class Set {
public:
Set(vector<Node *>);
Set();
vector<Node *> nodes;
};
class NeuralNet {
public:
Set * firstSet;
};
Node::Node(double val, Set * newSet){
value = val;
nextSet = newSet;
}
Set::Set(vector<Node *> input){
nodes = input;
}
Node::Node(){
Set temp;
nextSet = &temp;
}
Set::Set(){
vector<Node *> temp;
nodes = temp;
}
void setUpNeuralNetRecursive(Set * curSet, int curDepth){
if(curDepth<9){
for(int i=0;i<9;i++){
Set newSet;
Node newNode(1,&newSet);
(*curSet).nodes.push_back(&newNode);
setUpNeuralNetRecursive(&newSet, curDepth+1);
}
}
}
void setUpNeuralNet(NeuralNet net){
Set newSet;
net.firstSet=&newSet;
setUpNeuralNetRecursive(&newSet, 0);
}
int main()
{
cout << "Setting up neural network. This may take up to 3 minutes." << endl;
NeuralNet net;
setUpNeuralNet(net);
cout << "Setup ended." << endl;
return 0;
}
【问题讨论】:
-
您是否尝试过通过分析器运行它?或查看其他人如何实现井字游戏 AI?
-
将其更改为使用指针是个坏主意。现在它变慢了和错误,而不仅仅是慢。
-
缓慢可能是创建了 512+ 个向量,将数据推入其中,然后立即销毁。
-
看起来您正在创建一个完整的游戏树,而不是用于玩游戏的神经网络。这里的目标是什么?
标签: c++ performance artificial-intelligence