void Project_Engine::Voting_Algorithm(Node** table){

int						i,j,current_cust,counter;
Sparse_Mat				Movie_Matrix(CUSTOMERS_MAX-1,MOVIES_MAX-1);		//Declare Movie Matrix		(N x F)
double					sum;
MatrixXd				rate_matrix(Cust_classes,MOVIES_MAX);
NodePtr					p;
NodePtr					Class_List	= NULL;	

	Movie_Matrix.reserve(VectorXi::Constant(CUSTOMERS_MAX,Profile_Length));//Reserve memory for a MAX_CUSTOMERS number of vectors (of size 4)		
	for (i=0; i<upRating_Count; i++){ 
			Movie_Matrix.insert(Rating_spec[i].Cust_ID-1,Rating_spec[i].Movie_ID-1) = Rating_spec[i].Rating;
		}
	Movie_Matrix.makeCompressed();	

	for (j=0;j<Cust_classes;j++){
		for (i=1;i<MOVIES_MAX;i++){	
			sum		= 0;
			counter = 0;
			p = table[j];
				while(p!=NULL){
					current_cust = p->Cust_ID;	//0 - 38065
					addToList(current_cust, j, Class_List);				//List showing with which class each user is associated with
						if (Movie_Matrix.coeff(current_cust,i-1)!=0){	//if (Movie_Matrix.coeff(current_cust-1,i-1)!=0){
							sum += Movie_Matrix.coeff(current_cust,i-1);//sum += Movie_Matrix.coeff(current_cust-1,i-1);
							counter++;
						}
					p = p->Next;
				}
				sum = sum/counter;
				if ((sum == 0) || (counter == 0))
					sum = 3.9;
				rate_matrix(j,i) = sum;
		}
	}

	this->Qualify(L"probe.txt", rate_matrix, Class_List, Movie_Matrix);
}
Example #2
0
arma::mat exact_trans2(arma::cube joint_means_trans, Rcpp::List eigen_decomp, double time_int, arma::ivec absorb_states, int start_state, int end_state, int exact_time_index){
	arma::mat rate_matrix=Rcpp::as<arma::mat>(eigen_decomp["rate"]);
	arma::mat out=arma::zeros<arma::mat>(rate_matrix.n_rows,rate_matrix.n_rows);
	
	arma::mat temp=arma::zeros<arma::mat>(rate_matrix.n_rows,rate_matrix.n_rows);
	
	int i=start_state-1;
	int j=end_state-1;
	int k=0;  
	
	bool i_in_A=0;
	bool j_in_A=0;
	
	//std::cout<<absorb_states;
	
	while(i_in_A==0 && k<absorb_states.size()){
		int test=absorb_states[k]-1;
		if(test==i){
			i_in_A=1;
		}
		k++;
	}
	
	k=0;
	while(j_in_A==0 && k<absorb_states.size()){
		int test=absorb_states[k]-1;
		if(test==j){
			j_in_A=1;
		}
		k++;
	}
	
	int in_either=i_in_A+j_in_A;

	
	if(in_either==0){
		for(int l=0;l<absorb_states.size();l++){
			int absorb_state=absorb_states[l]-1;
			temp.col(absorb_state)=rate_matrix.col(absorb_state);
		}
		out=joint_means_trans.slice(exact_time_index)*temp;
	}
	if(i_in_A==0 && j_in_A==1){
		arma::mat prob_mat=mat_exp_eigen_cpp(eigen_decomp,time_int);
		out.col(j)=prob_mat.col(i)*rate_matrix(i,j);
	}
	
	
	return(out);
}