vector<vector<string> > solveNQueens(int n) { this->column = vector<int> (n, 0); this->main_diag = vector<int> (n*2, 0); this->anti_diag = vector<int> (n*2, 0); vector<vector<string> > result; vector<int> q_col(n, 0); // q_col[i] means the ith queen is local at (i, q_col[i]) dfs(q_col, result, 0); return result; }
void playback_exact_CSpace_R3() { C2A_Model* P = NULL; C2A_Model* Q = NULL; readObjFile(P, "../data/models/CupSpoon/Cup.obj"); readObjFile(Q, "../data/models/CupSpoon/Spoon.obj"); P->ComputeRadius(); Q->ComputeRadius(); Collider3D collider(P, Q); C2A_Model* CSpace; readObjFile(CSpace, "../data/cupspoon.obj"); std::vector<ContactSpaceSampleData> contactspace_samples; std::ifstream in("space_test_3d.txt"); asciiReader(in, contactspace_samples); std::ofstream timing_file("timing_exact_R3.txt"); std::ofstream PD_file("PD_exact_R3.txt"); for(std::size_t i = 0; i < contactspace_samples.size(); ++i) { std::cout << i << std::endl; DataVector q_col(6); DataVector q(3); for(std::size_t j = 0; j < 3; ++j) q[j] = contactspace_samples[i].v[j]; for(std::size_t j = 0; j < 6; ++j) q_col[j] = contactspace_samples[i].v[j]; boost::timer t; //aTimer.Reset(); aTimer.Start(); std::pair<DataVector, double> pd_result; if(!collider.isCollide(q_col)) { pd_result.second = 0; } else { pd_result = Minkowski_Cspace_3D::Exact_PD_R3(q, CSpace); } aTimer.Stop(); PD_file << pd_result.second << " "; //timing_file << t.elapsed() << " "; timing_file << aTimer.GetTime() * 1000 << " "; timing_file.flush(); PD_file.flush(); } }
void playback_local_PD_R3() { std::ofstream timing_file("timing_local_PD_R3.txt"); std::ofstream PD_file("PD_local_R3.txt"); std::vector<C2A_Model*> P; std::vector<C2A_Model*> Q; readObjFiles(P, "../data/models/CupSpoon/cup_convex.obj"); readObjFiles(Q, "../data/models/CupSpoon/spoon_convex.obj"); std::vector<ContactSpaceSampleData> contactspace_samples; std::ifstream in("space_test_3d.txt"); asciiReader(in, contactspace_samples); for(std::size_t i = 0; i < contactspace_samples.size(); ++i) { std::cout << i << std::endl; DataVector q_col(6); DataVector q(3); for(std::size_t j = 0; j < 3; ++j) q[j] = contactspace_samples[i].v[j]; for(std::size_t j = 0; j < 6; ++j) q_col[j] = contactspace_samples[i].v[j]; boost::timer t; aTimer.Reset(); aTimer.Start(); double pd = Collider3D::PDt(P, Q, q_col); PD_file << pd << " "; // timing_file << t.elapsed() << " "; timing_file << aTimer.GetTime() * 1000 << " "; timing_file.flush(); PD_file.flush(); } }
void playback_R3() { C2A_Model* P = NULL; C2A_Model* Q = NULL; readObjFile(P, "../data/models/CupSpoon/Cup.obj"); readObjFile(Q, "../data/models/CupSpoon/Spoon.obj"); P->ComputeRadius(); Q->ComputeRadius(); Collider3D collider(P, Q); std::vector<ContactSpaceSampleData> contactspace_samples; std::ifstream in("space_test_3d.txt"); asciiReader(in, contactspace_samples); ContactSpaceR3 contactspace(P, Q, 0.05 * (P->radius + Q->radius)); std::ofstream scaler_file("scaler_3d_rotation_cupspoon.txt"); scaler_file << contactspace.getScaler() << std::endl; std::vector<ContactSpaceSampleData> train_samples = contactspace.uniform_sample(100000); SVMLearner learner; learner.setDim(contactspace.active_data_dim()); learner.setC(20); learner.setScaler(contactspace.getScaler()); learner.setUseScaler(true); learner.setGamma(50); learner.learn(train_samples, contactspace.active_data_dim()); learner.save("model_R3.txt"); // flann::HierarchicalClusteringIndex<ContactSpaceSE3Euler::DistanceType>* query_index = learner.constructIndexOfSupportVectorsForQuery<ContactSpaceSE3Euler, flann::HierarchicalClusteringIndex, flann::HierarchicalClusteringIndexParams>(); std::vector<ContactSpaceSampleData> support_samples; learner.collectSupportVectors(support_samples); ExtendedModel<ContactSpaceR3, flann::Index> extended_model = constructExtendedModelForModelDecisionBoundary<ContactSpaceR3, SVMLearner, flann::Index, flann::KDTreeIndexParams>(contactspace, learner, support_samples, 0.01, 50); std::ofstream timing_file("timing_APD_R3.txt"); std::ofstream PD_file("PD_APD_R3.txt"); for(std::size_t i = 0; i < contactspace_samples.size(); ++i) { std::cout << i << std::endl; DataVector q_col(6); DataVector q(3); for(std::size_t j = 0; j < 3; ++j) q[j] = contactspace_samples[i].v[j]; for(std::size_t j = 0; j < 6; ++j) q_col[j] = contactspace_samples[i].v[j]; boost::timer t; aTimer.Reset(); aTimer.Start(); if(!collider.isCollide(q_col)) { PD_file << 0 << " "; } else { QueryResult pd_result = PD_query(learner, contactspace, extended_model.index, extended_model.samples, q); PD_file << pd_result.PD << " "; } // timing_file << t.elapsed() << " "; timing_file << aTimer.GetTime() * 1000 << " "; timing_file.flush(); PD_file.flush(); } }