私はツリーを設定しようとしています(最終的には "ニューラルネットワーク"で使用するために、できるだけ効率的にセットアップを行おうとしています)残念なことに、ツリーを設定するのに約3分かかります。できるだけ負荷を最小限に抑えるためにポインターを使用しようとしましたが、それでもなお永遠に何が起こっていますか?私は間違っていますか?C++での効率
PSこれは最終的にはTic Tac Toe 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を再生するチック・タック・トゥをどのように実装しているかを見てみましょうか? – GWW
ポインタを使用するように変更するのは悪い考えでした。今はちょっと遅いのではなく遅いです。 –
おそらく512 +ベクトルが作成され、データがプッシュされてすぐに破棄されるという遅さがあります。 –