void Test(TopSpin &tse, const char *prefix) { TopSpinState s(16, 4); TopSpinState g(16, 4); g.Reset(); tse.StoreGoal(g); tse.SetPruneSuccessors(true); IDAStar<TopSpinState, TopSpinAction> ida; ida.SetUseBDPathMax(true); std::vector<TopSpinAction> path1; TopSpinState start; Timer t1; t1.StartTimer(); uint64_t nodes = 0; double totaltime = 0; for (int x = 0; x < 100; x++) { s = GetInstance(x, tse.GetWeighted()); g.Reset(); printf("Problem %d of %d\n", x+1, 100); std::cout << "Searching from: " << std::endl << s << std::endl << g << std::endl; Timer t; t.StartTimer(); ida.GetPath(&tse, s, g, path1); t.EndTimer(); totaltime += t.GetElapsedTime(); std::cout << "Path found, length " << path1.size() << " time:" << t.GetElapsedTime() << std::endl; nodes += ida.GetNodesExpanded(); } printf("%s: %1.2fs elapsed; %llu nodes expanded\n", prefix, t1.EndTimer(), nodes); }
void STPTest(unsigned long , tKeyboardModifier , char) { MNPuzzleState tmp(4, 4); mnp->StoreGoal(tmp); IDAStar<MNPuzzleState, slideDir> ida; std::vector<slideDir> path1; MNPuzzleState s(4, 4); MNPuzzleState g(4, 4); //ida.SetUseBDPathMax(true); Timer t; t.StartTimer(); uint64_t nodes = 0; for (int x = 0; x < 100; x++) { s = GetKorfInstance(x); g.Reset(); std::cout << "Searching from: " << std::endl << s << std::endl << g << std::endl; Timer t; t.StartTimer(); ida.GetPath(mnp, s, g, path1); t.EndTimer(); std::cout << "Path found, length " << path1.size() << " time:" << t.GetElapsedTime() << std::endl; nodes += ida.GetNodesExpanded(); } printf("%1.2fs elapsed; %llu nodes expanded\n", t.EndTimer(), nodes); // for (int x = 0; x < mnp->histogram.size(); x++) // { // printf("%2d %d\n", x, mnp->histogram[x]); // } // // mnp->PrintHStats(); }
void MyDisplayHandler(unsigned long windowID, tKeyboardModifier mod, char key) { switch (key) { case 'r': recording = !recording; break; case '0': case '1': case '2': case '3': case '4': case '5': case '6': case '7': case '8': case '9': ts->ApplyAction(s, key-'0'); break; case '\t': if (mod != kShiftDown) SetActivePort(windowID, (GetActivePort(windowID)+1)%GetNumPorts(windowID)); else { SetNumPorts(windowID, 1+(GetNumPorts(windowID)%MAXPORTS)); } break; case 'p': break; case 'o': { if (!ts) break; if (mod == kShiftDown) { IDAStar<TopSpinState, TopSpinAction> ida; std::vector<TopSpinAction> path1; std::vector<TopSpinState> path2; TopSpinState s(4, 4); TopSpinState g(4, 4); for (unsigned int x = 0; x < 500; x++) { std::vector<TopSpinAction> acts; ts->GetActions(s, acts); ts->ApplyAction(s, acts[random()%acts.size()]); } std::cout << "Searching from: " << std::endl << s << std::endl << g << std::endl; Timer t; t.StartTimer(); ida.GetPath(ts, s, g, path1); t.EndTimer(); std::cout << "Path found, length " << path1.size() << " time:" << t.GetElapsedTime() << std::endl; } } break; default: break; } }
void TSTest(unsigned long , tKeyboardModifier , char) { int N = 16, k = 4; std::vector<int> tiles; TopSpin tse(N, k); TopSpinState s(N, k); TopSpinState g(N, k); // if (ts->PDB.size() == 0) // { // tse.Load_Regular_PDB("/Users/nathanst/Desktop/TS_0-5.pdb", g, true); // tse.Load_Regular_PDB("/Users/nathanst/Desktop/TS_12-15.pdb", g, true); // tse.Load_Regular_PDB("/Users/nathanst/Desktop/TS_6-11.pdb", g, true); // tse.lookups.push_back({kMaxNode, 3, 1, 0}); // tse.lookups.push_back({kLeafNode, 0, 0, 0}); // tse.lookups.push_back({kLeafNode, 0, 0, 1}); // tse.lookups.push_back({kLeafNode, 0, 0, 2}); // } if (ts->PDB.size() == 0) { tse.Load_Regular_PDB("/Users/nathanst/Desktop/TS_0-3.pdb", g, true); tse.Load_Regular_PDB("/Users/nathanst/Desktop/TS_0-5+.pdb", g, true); tse.Load_Regular_PDB("/Users/nathanst/Desktop/TS_6-9.pdb", g, true); tse.Load_Regular_PDB("/Users/nathanst/Desktop/TS_6-11+.pdb", g, true); tse.Load_Regular_PDB("/Users/nathanst/Desktop/TS_12-15.pdb", g, true); tse.lookups.push_back({kMaxNode, 3, 1, 0}); tse.lookups.push_back({kAddNode, 2, 4, 0}); tse.lookups.push_back({kAddNode, 2, 6, 0}); tse.lookups.push_back({kLeafNode, 0, 0, 4}); tse.lookups.push_back({kLeafNode, 0, 0, 0}); tse.lookups.push_back({kLeafNode, 0, 0, 1}); tse.lookups.push_back({kLeafNode, 0, 0, 2}); tse.lookups.push_back({kLeafNode, 0, 0, 3}); } IDAStar<TopSpinState, TopSpinAction> ida; std::vector<TopSpinAction> path1; tse.SetPruneSuccessors(true); for (int x = 0; x < 100; x++) { GetTSInstance(tse, s, x); std::cout << "Problem " << x << std::endl; std::cout << "Searching from: " << std::endl << s << std::endl << g << std::endl; Timer t; t.StartTimer(); ida.GetPath(&tse, s, g, path1); t.EndTimer(); std::cout << "Path found, length " << path1.size() << " time:" << t.GetElapsedTime() << " "; std::cout << ida.GetNodesExpanded() << " nodes expanded" << std::endl; // for (int x = 0; x < ts->histogram.size(); x++) // { // printf("%2d %d\n", x, ts->histogram[x]); // } // tse.PrintHStats(); } }