Ich versuche, einen Baum zu erstellen (eventuell für den Einsatz in einem "neuronalen Netzwerk" und versuchen, nur das Setup so effizient wie möglich zu machen. Leider dauert sogar die Einrichtung des Baumes ca. 3 Minuten und Ich kann nicht herausfinden, was es macht es so ineffizient. Ich versuchte, Zeiger wo immer möglich zu verwenden, um die Last zu minimieren, aber es dauert immer noch. Was mache ich falsch?Effizienz in C++
PS. Dies ist schließlich für eine Tic Tac Toe AI (ja, ich weiß, dass es nur durch das blöde Spiel gelöst werden kann, aber ich wollte es als einfache KI machen, um mir selbst beizubringen.
Jeder Ast des Baumes würde 9 Knoten haben, mit jedem Knoten verzweigt, um einen anderen zu machen 9. Das gibt der letzten Reihe von Zweigen ungefähr 400 Millionen Knoten. Gibt es eine Möglichkeit, diesen Code effizienter zu machen?
#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;
}
Haben Sie versucht, dies über einen Profiler auszuführen? oder sah, wie andere Leute einen Tic-Tac-Toe implementiert haben, der KI spielt? – GWW
es zu ändern, Zeiger zu verwenden, war eine schlechte Idee. Jetzt ist es langsam _und_ falsch, anstatt nur langsam. –
Die Langsamkeit ist wahrscheinlich die 512+ Vektoren erstellt werden, mit Daten in sie hineingestoßen und dann sofort zerstört werden. –