public void train()
    {
        training = true;
        BHypothesis.training = true;
        BHypothesis.MARGIN_RATE = 48D;
        for(int i = 0; i < maxRound; i++)
        {
            for(int j = 0; j < sample.size(); j++)
            {
                System.err.println((new StringBuilder()).append("Sentence ").append(j).toString());
                curSenID = j;
                BLinTagSample blintagsample = (BLinTagSample)sample.get(j);
                Vector vector = new Vector();
                Vector vector1 = new Vector();
                int k = 0;
                int l = -1;
                int i1 = 0;
                initCands(vector1, blintagsample);
                do
                {
                    if(vector1.size() <= 0)
                        break;
                    inner++;
                    if(k == l)
                    {
                        if(++i1 >= 50)
                            break;
                    } else
                    {
                        l = k;
                        i1 = 0;
                    }
                    BLinIsland blinisland = selectCand(vector1);
                    boolean flag = checkCand(blinisland);
                    if(flag)
                    {
                        applyCand(vector, vector1, blinisland, blintagsample);
                        k++;
                    } else
                    {
                        vector1.clear();
                        if(vector.size() == 0)
                            initCands(vector1, blintagsample);
                        else
                            genAllCands(vector1, vector, blintagsample);
                    }
                } while(true);
                if(k < blintagsample.words.length)
                    System.err.println((new StringBuilder()).append("LOOP: ").append(j).toString());
            }

            feat.saveWeight((new StringBuilder()).append(proj).append(".").append(i).append(".fea").toString(), inner);
        }

    }