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;
}
Exemple #2
0
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();*/
}