public double CircleCombine(Instances train,Classifier[] cfsArray,List<Integer>[] classifyResult,List<Double> correctRateArray,double initCorrectRate, double interval,List<Double> currentResult,List<Integer> ClassifierNo,String CCAlgorithm)throws Exception{
		Logger logger = Logger.getLogger(SeletiveAlgorithm.class);
		PropertyConfigurator.configure("log4j.properties");
		
		//List<Integer> ClassifierNo=new ArrayList();//用来存放选到的分类器
		//List<Double> currentResult=new ArrayList();//用来存放最近一次循环得到的结果,currentResult.get[0]表示差异性,currentResult.get[1]表示正确率,currentResult.get[2]表示当前的分类器个数
		List<Integer> OptimalNo=new ArrayList();
		List<Double> optimalResult=new ArrayList();//用来存放全部最优的结果,optimalResult.get[0]表示差异性,optimalResult.get[1]表示正确率
		//
		//currentResult.add(Double.MAX_VALUE);
		//currentResult.add((double)0);
		//currentResult.add((double)0);
		//
		optimalResult.add(Double.MAX_VALUE);
		optimalResult.add((double)0);
		//
		int circle=0;
		int i;
		int position;
		double maxCorrectRate;
		
		//
		DecimalFormat df = new DecimalFormat("0.00000");
		//
		while(initCorrectRate>=0){
			//
			System.out.println();
			System.out.println();
			//
//			System.out.println("Circle:"+circle+"	当前最优精度:"+df.format(optimalResult.get(1))+"	当前目标精度:"+df.format(initCorrectRate));
			logger.info("Circle:"+circle+"	best precision now:"+df.format(optimalResult.get(1))+"	target precision:"+df.format(initCorrectRate));
			//
			if(CCAlgorithm.equals("HCNRR"))
				HCNRR(train,cfsArray,classifyResult,correctRateArray,initCorrectRate,currentResult,ClassifierNo);
			else if(CCAlgorithm.equals("HCRR"))
				HCRR(train,cfsArray,classifyResult,correctRateArray,initCorrectRate,currentResult,ClassifierNo);
			else if(CCAlgorithm.equals("EBSS"))
				EBSS(train,cfsArray,classifyResult,correctRateArray,initCorrectRate,currentResult,ClassifierNo);
			else if(CCAlgorithm.equals("EFSS"))
				EFSS(train,cfsArray,classifyResult,correctRateArray,initCorrectRate,currentResult,ClassifierNo);
			else throw new Exception ("Could not find selective algorithm:"+CCAlgorithm);
			
			
			//HCNRR(train,cfsArray,classifyResult,correctRateArray,initCorrectRate,currentResult,ClassifierNo);
			//HCRR(train,cfsArray,classifyResult,correctRateArray,initCorrectRate,currentResult,ClassifierNo);
			//EBSS(train,cfsArray,classifyResult,correctRateArray,initCorrectRate,currentResult,ClassifierNo);
			//EFSS(train,cfsArray,classifyResult,correctRateArray,initCorrectRate,currentResult,ClassifierNo);
			//DS(train,cfsArray,classifyResult,correctRateArray,initCorrectRate,currentResult,ClassifierNo);
			//
			if(currentResult.get(1)>optimalResult.get(1)){
				optimalResult.clear();
				optimalResult.add(currentResult.get(0));
				optimalResult.add(currentResult.get(1));
				OptimalNo.clear();
				OptimalNo.addAll(ClassifierNo);
			}
			//
			String strClassifierNo = "[";
			if(optimalResult.get(1)>=initCorrectRate){
				//System.out.println();
				//
				//System.out.print(initCorrectRate+"	");
				//System.out.print(currentResult.get(1)+"	");
//				System.out.println(ClassifierNo);
			
				for(int ii = 0; ii < ClassifierNo.size(); ii++){
					strClassifierNo += InitClassifiers.classifiersName[ClassifierNo.get(ii)] + ", ";
				}
				//
				/*System.out.print(initCorrectRate+"	");
				System.out.print(optimalResult.get(1)+"	");
				System.out.println(OptimalNo);*/
				break;
			}else{
				//System.out.println();
				//
				//System.out.print(initCorrectRate+"	");
				//System.out.print(currentResult.get(1)+"	");
//				System.out.println(ClassifierNo);

				for(int ii = 0; ii < ClassifierNo.size(); ii++){
					strClassifierNo += InitClassifiers.classifiersName[ClassifierNo.get(ii)] + ", ";
				}
				//
				/*System.out.print(initCorrectRate+"	");
				System.out.print(optimalResult.get(1)+"	");
				System.out.println(OptimalNo);*/
				initCorrectRate=initCorrectRate-interval;	
			}
			/*if(currentResult.get(1)>=initCorrectRate){
				System.out.println("initCorrectRate:"+initCorrectRate);
				System.out.println("currentCorrectRate:"+currentResult.get(1));
				System.out.println("ClassifierNo:"+ClassifierNo);
				break;
			}else{
				System.out.println("initCorrectRate:"+initCorrectRate);
				System.out.println("currentCorrectRate:"+currentResult.get(1));
				System.out.println("ClassifierNo:"+ClassifierNo);
				initCorrectRate=initCorrectRate-interval;
			}*/
			//
			circle++;
			strClassifierNo += "]";
			logger.info(strClassifierNo);
		}
		
		
		System.out.println();
		//System.out.println("所得精度："+df.format(optimalResult.get(1)));
		//System.out.println("对应分类器组合："+OptimalNo);
		//System.out.println(bestMatrixString);
		
		
		return optimalResult.get(1);
		
	}