void TopicDetection (vector<Story> &corpus, int &numOfTopics) { cout << "> Start TopicDetection......" << endl; numOfTopics = 6; KMeans (corpus, numOfTopics); //NaiveClustering (corpus, numOfTopics, 0.5); cout << "> TopicDetection Done." << endl; }
void inline unitTestKMeansRandomly(Group &test, std::ofstream &output) { // 数据归一化 // normaliztion(test); // 输出读入的数据 // puts("Print Input Data:"); // puts("====================================="); // test.display(); // puts("=====================================\n"); // k 值 const unsigned k = 3; /** 准备测试数据 */ // KMeans++ // std::vector<Group> centroid = buildInitialPointRandomly(k, test); // Kmeans + Density initialize // std::vector<Group> centroid = buildInitialPointDensity(k, test); // KMeans // std::vector<Group> centroid = buildInitialPoint(k, test); output << "===============================================" << std::endl; output << "buildInitialPointRandomly" << std::endl; output << "===============================================" << std::endl; // 重复运行测试 std::vector<Group> result; std::vector<double> avg(k); double SSE = 0; // 记录每次的 SSE 值 std::vector<double> vecSSE; time_t start = std::clock(); // 重复实验的次数 for (unsigned i = 0; i < TIMES; ++i) { printf("running: %d\r", i); result = KMeans(test, k, buildInitialPointRandomly(k, test), false); SSE = 0; for (unsigned j = 0; j < result.size(); ++j) { SSE += result[j].getSumOfEuclideanDistance(); vecSSE.push_back(SSE / result.size()); } } time_t end = std::clock(); output << "The average of SSE = " << getAverage(vecSSE) << std::endl; output << "The variance of SSE = " << getVariance(vecSSE) << std::endl; output << "The running time is: " << double(end - start) / CLOCKS_PER_SEC << std::endl; // printf("The average of SSE = %lf\n", getAverage(vecSSE)); // printf("The variance of SSE = %lf\n", getVariance(vecSSE)); printf("the running time is : %f\n", double(end - start) / CLOCKS_PER_SEC); output << "===============================================" << std::endl; // puts("==============================================="); // KMedoids(test, k, centroid); }
void ConstrainedFire::Init(ObjReader * obj) { FireVertex vertex; FireTriangle triangle; int end; //存储模型顶点 end = (int)obj->Positions.size(); for(int i=0;i<end;i++) { vertex.position = obj->Positions[i]*2.6; m_Vertices.push_back(vertex); } //存储模型面信息 end = (int) obj->m_Object[0]->posIndices.size(); for(int i=0;i<end;) { triangle.index[0] = obj->m_Object[0]->posIndices[i++]; triangle.index[1] = obj->m_Object[0]->posIndices[i++]; triangle.index[2] = obj->m_Object[0]->posIndices[i++]; triangle.area = TriangleArea(triangle.index[0],triangle.index[1],triangle.index[2]); m_Faces.push_back(triangle); } Normalize();//归一化顶点数据 Subdivide();//细分模型 objectImported =true; objVertexNum = (int)m_Vertices.size(); numParticlesSecondExp=m_Vertices.size()*1.8; KMeans(m_K);//聚类操作 GenerateQuadrantByKMean();//生成发射区域 //8个二次爆炸的粒子发生器的位置限制,注意顺序要与对象顶点分区编号对应 /*Point3f expP; expP=modelCenter(m_Quadrant0); expEmitter[0].pos.X()=expP.X(); expEmitter[0].pos.Y()=expP.Y(); expEmitter[0].pos.Z()=expP.Z(); expP=modelCenter(m_Quadrant1); expEmitter[1].pos.X()=expP.X(); expEmitter[1].pos.Y()=expP.Y(); expEmitter[1].pos.Z()=expP.Z(); expP=modelCenter(m_Quadrant2); expEmitter[2].pos.X()=expP.X(); expEmitter[2].pos.Y()=expP.Y(); expEmitter[2].pos.Z()=expP.Z(); expP=modelCenter(m_Quadrant3); expEmitter[3].pos.X()=expP.X(); expEmitter[3].pos.Y()=expP.Y(); expEmitter[3].pos.Z()=expP.Z(); expP=modelCenter(m_Quadrant4); expEmitter[4].pos.X()=expP.X(); expEmitter[4].pos.Y()=expP.Y(); expEmitter[4].pos.Z()=expP.Z(); expP=modelCenter(m_Quadrant5); expEmitter[5].pos.X()=expP.X(); expEmitter[5].pos.Y()=expP.Y(); expEmitter[5].pos.Z()=expP.Z(); expP=modelCenter(m_Quadrant6); expEmitter[6].pos.X()=expP.X(); expEmitter[6].pos.Y()=expP.Y(); expEmitter[6].pos.Z()=expP.Z(); expP=modelCenter(m_Quadrant7); expEmitter[7].pos.X()=expP.X(); expEmitter[7].pos.Y()=expP.Y(); expEmitter[7].pos.Z()=expP.Z();*/ }