private static void init()
	{
		Random random = new Random();
		// Init P(Z|U);
		for(int i = 0; i < DataInfo.numUsers; i++) {
			double norm = 0;
			for(int j = 0; j < DataInfo.hidVariables; j++) {
				DataInfo.Puz[i][j] = random.nextDouble();
				norm += DataInfo.Puz[i][j];
			}
			
			for(int j = 0; j < DataInfo.hidVariables; j++) {
				DataInfo.Puz[i][j] /= norm;
			}
			
		}
		
		double max_d = (1 + DataInfo.rating) / 2;
		max_d = (1 - max_d) * (1 - max_d);
		
		for(int i = 0; i < DataInfo.numItems; i++) {
			for(int j = 0; j < DataInfo.hidVariables; j++) {
				DataInfo.Psz[i][j][0] = random.nextDouble() * (DataInfo.rating - 1) + 1;
				DataInfo.Psz[i][j][1] = random.nextDouble() * 0.01;
			}
		}
	}