Exemple #1
0
        public List <CandidateClassifier> GetBestClassifierInfo(ParameterdCandidateStrategy parent)
        {
            double[] sum    = new double[Parameters.AllDealTypes.Length];
            double[] oscsum = new double[Parameters.AllDealTypes.Length];

            for (int k = 0; k < Parameters.AllDealTypes.Length; ++k)
            {
                sum[k]    = 0;
                oscsum[k] = 0;
            }
            parent.IterateClassifierInfos2((cc) =>
            {
                sum[WekaUtils.GetDealTypeIdx(cc.DealType)] += cc.Deals.NowScore;
            });

            int oscCnt = 0;

            parent.IterateClassifierInfos((k, i, j, h) =>
            {
                if (TestParameters.EnablePerhourTrain)
                {
                    if (h != parent.CurrentTestHour)
                    {
                        return(true);
                    }
                }
                if (k > 0)
                {
                    return(true);
                }

                if (parent.m_classifierInfoIdxs[0, i, j, h].Deals.NowScore <= 0 && parent.m_classifierInfoIdxs[1, i, j, h].Deals.NowScore <= 0)
                {
                    oscsum[0] += parent.m_classifierInfoIdxs[0, i, j, h].Deals.NowScore;
                    oscsum[1] += parent.m_classifierInfoIdxs[1, i, j, h].Deals.NowScore;
                    oscCnt++;
                }
                return(true);
            });

            //for (int k = 0; k < Parameters.AllDealTypes.Length; ++k)
            //{
            //    sum[k] -= oscsum[k];
            //}
            //double oscsums = oscsum[0] + oscsum[1];

            int selectedDeal = -1;

            if (sum[0] < sum[1] && sum[0] < 0)
            {
                selectedDeal = 0;
            }
            else if (sum[1] < sum[0] && sum[1] < 0)
            {
                selectedDeal = 1;
            }
            if (selectedDeal == -1)
            {
                return(null);
            }

            if (oscCnt > 400)
            {
                return(null);
            }

            //selectedDeal = 1 - selectedDeal;

            List <CandidateClassifier> ret = new List <CandidateClassifier>();

            parent.IterateClassifierInfos((k, i, j, h) =>
            {
                if (k != selectedDeal)
                {
                    return;
                }

                if (TestParameters.EnablePerhourTrain)
                {
                    if (h != parent.CurrentTestHour)
                    {
                        return;
                    }
                }

                switch (m_choiceType)
                {
                case 0:
                    //if (parent.m_classifierInfoIdxs[k, i, j, h].Deals.NowScore < 0)// && parent.m_classifierInfoIdxs[1 - k, i, j, h].Deals.NowScore > 0)
                    {
                        ret.Add(parent.m_classifierInfoIdxs[k, i, j, h]);
                    }
                    break;
                //case 1:
                //    if (parent.m_classifierInfoIdxs[k, i, j, h].Deals.NowScore > 0 && parent.m_classifierInfoIdxs[1 - k, i, j, h].Deals.NowScore > 0)
                //    {
                //        ret.Add(parent.m_classifierInfoIdxs[k, i, j, h]);
                //    }
                //    break;
                //case 2:
                //    if (parent.m_classifierInfoIdxs[k, i, j, h].Deals.NowScore < 0 && parent.m_classifierInfoIdxs[1 - k, i, j, h].Deals.NowScore > 0)
                //    {
                //        ret.Add(parent.m_classifierInfoIdxs[k, i, j, h]);
                //    }
                //    break;
                //case 3:
                //    if (parent.m_classifierInfoIdxs[k, i, j, h].Deals.NowScore > 0 && parent.m_classifierInfoIdxs[1 - k, i, j, h].Deals.NowScore < 0)
                //    {
                //        ret.Add(parent.m_classifierInfoIdxs[k, i, j, h]);
                //    }
                //    break;

                case 4:
                    if (parent.m_classifierInfoIdxs[k, i, j, h].Deals.NowScore < 0 && parent.m_classifierInfoIdxs[1 - k, i, j, h].Deals.NowScore > 0)
                    {
                        ret.Add(parent.m_classifierInfoIdxs[1 - k, i, j, h]);
                    }
                    break;
                    //case 5:
                    //    if (parent.m_classifierInfoIdxs[k, i, j, h].Deals.NowScore > 0 && parent.m_classifierInfoIdxs[1 - k, i, j, h].Deals.NowScore > 0)
                    //    {
                    //        ret.Add(parent.m_classifierInfoIdxs[1 - k, i, j, h]);
                    //    }
                    //    break;
                    //case 6:
                    //    if (parent.m_classifierInfoIdxs[k, i, j, h].Deals.NowScore < 0 && parent.m_classifierInfoIdxs[1 - k, i, j, h].Deals.NowScore > 0)
                    //    {
                    //        ret.Add(parent.m_classifierInfoIdxs[1 - k, i, j, h]);
                    //    }
                    //    break;
                    //case 7:
                    //    if (parent.m_classifierInfoIdxs[k, i, j, h].Deals.NowScore > 0 && parent.m_classifierInfoIdxs[1 - k, i, j, h].Deals.NowScore < 0)
                    //    {
                    //        ret.Add(parent.m_classifierInfoIdxs[1 - k, i, j, h]);
                    //    }
                    //    break;
                }
            });
            return(ret);
        }