void ModelComputationMTStaticSchedule::ThreadRun(int64 taskIdBegin, int64 taskIdEnd) {
    for (int64 taskId = taskIdBegin; taskId < taskIdEnd; ++taskId) {
        int uid1 = static_cast<int>((Math::Sqrt(8.0 * taskId + 1) + 1) / 2);
        int uid2 = taskId - (int64)uid1*(uid1-1)/2;
        const UserVec& uv1 = mTrainData->GetUserVector(uid1);
        const UserVec& uv2 = mTrainData->GetUserVector(uid2);
        float sim = ComputeSimilarity(uv1, uv2);
        mModel->Put(uid1, uid2, sim);
    }
}
void ModelComputationST::ComputeModel(const TrainOption *option, RatingMatUsers *trainData,
        Model *model) {
    mTrainOption = option;
    mTrainData = trainData;
    mModel = model;
    AdjustRating();
    for (int uid1 = 0; uid1 < mTrainData->NumUser(); ++uid1) {
        const UserVec& uv1 = trainData->GetUserVector(uid1);
        for (int uid2 = uid1 + 1; uid2 < mTrainData->NumUser(); ++uid2) {
            const UserVec& uv2 = trainData->GetUserVector(uid2);
            float sim = ComputeSimilarity(uv1, uv2);
            mModel->DirectPut(uid2, uid1, sim);
        }
    }
}
void ModelComputationMT::WorkerRun() {
    while (true) {
        TaskBundle *currentBundle = mScheduler->WorkerGetTask();
        if (currentBundle == nullptr) break;
        for (int i = 0; i < currentBundle->size(); ++i) {
            Task& task = currentBundle->at(i);
            const UserVec& uv1 = mTrainData->GetUserVector(task.uid1);
            const UserVec& uv2 = mTrainData->GetUserVector(task.uid2);
            task.sim = ComputeSimilarity(uv1, uv2);
            mModel->DirectPut(task.uid2, task.uid1, task.sim);
        }
        mScheduler->WorkerPutTask(currentBundle);
    }
    mScheduler->WorkerDone();
}
Ejemplo n.º 4
0
void LocalGeometryRef::ComputeSimilarityMatrix(char dis, int k)
{
	this->Normalize();
	//initialize similarity matrix
	this->similarity_matrix.set_size(this->num_row, this->num_row);
	this->similarity_matrix.fill(0);

	//searching for the k nearest neighbours
	//std::vector<std::vector< std::pair<unsigned int, double> > > kNeighborIDs;
	//kNeighborIDs = this->KnnSearch(k);

	//starting compute similarity matrix
	for(int i = 0; i < this->num_row; i++)
	{
		for(int j = i + 1; j < this->num_row; j++)
		{
			vnl_vector<double> dt1 = this->nor_data_matrix.get_row(i);
			vnl_vector<double> dt2 = this->nor_data_matrix.get_row(j);
			double distance = ComputeSimilarity(dt1,dt2,dis);
			similarity_matrix(i,j) = distance;
			similarity_matrix(j,i) = distance;
		}
	}
}