docs: public Predict getBest(Instance inst, int n) {
  		Integer target =null;
  		if(isUseTarget)
  			target = (Integer) inst.getTarget();
  
  		ISparseVector fv = featureGen.getVector(inst);
  
  		//每个类对应的内积
  		float[] sw = new float[alphabet.size()];
  		Callable<Float>[] c= new Multiplesolve[numClass];
  		Future<Float>[] f = new Future[numClass];
  
  		for (int i = 0; i < numClass; i++) {
  			c[i] = new Multiplesolve(fv,i);
  			f[i] = pool.submit(c[i]);
  		}
  
  		//执行任务并获取Future对象
  		for (int i = 0; i < numClass; i++){ 			
  			try {
  				sw[i] = (Float) f[i].get();
  			} catch (Exception e) {
  				e.printStackTrace();
  				return null;
  			}
  		}
  
  		Predict pred = new Predict(n);
  		Predict oracle = null;
  		if(target!=null){
  			oracle = new Predict(n);
  		}
  
  		TIntIterator it = leafs.iterator();
  
  		while(it.hasNext()){
  			
  			float score=0;
  			int i = it.next();
  
  			if(tree!=null){//计算含层次信息的内积
  				int[] anc = tree.getPath(i);
  				for(int j=0;j<anc.length;j++){
  					score += sw[anc[j]];
  				}
  			}else{
  				score = sw[i];
  			}
  
  			//给定目标范围是，只计算目标范围的值
  			if(target!=null&&target.equals(i)){
  				oracle.add(i,score);
  			}else{
  				pred.add(i,score);
  			}
  
  		}
  		if(target!=null){
  			inst.setTempData(oracle);
  		}
  		return pred;
  	}