Пример #1
0
    private void CalculateProcessAuthorshipScore(Process process, Player author)
    {
        if (process.Author.Equals(author.Username))
        {
            #region Expected number of activities (Poisson Distribution)
            float poissonFactor = (float)(process.score *
                CalculateModPoissonValue(process.CalculateNumberActivities(),
                    int.Parse(PaintServerPanels.ExpectedNumActivities)));
            author.bonusMalus[0] += poissonFactor;
            process.bonusMalus[0] = poissonFactor;
            #endregion

            #region Quality voting
            float votingFactor = 0;

            if (process.QualityVotes.Count == 0) votingFactor = 0;
            else if (process.posVotes > process.negVotes)
                votingFactor = process.score*(((float)process.posVotes/process.QualityVotes.Count)/4);
            else
                votingFactor = -process.score*(((float)process.negVotes/process.QualityVotes.Count)/4);

            author.bonusMalus[0] += votingFactor;
            process.bonusMalus[1] = votingFactor;
            #endregion

            #region Process marked as a duplicate
            float duplicationFactor = 0;

            if (process.markedDuplication && (process.posDuplicationVotes > process.negDuplicationVotes))
                duplicationFactor = - process.score*0.25f;
            else if (process.markedDuplication && (process.posDuplicationVotes < process.negDuplicationVotes))
                duplicationFactor = process.score*0.1f;

            author.bonusMalus[0] += duplicationFactor;
            process.bonusMalus[2] = duplicationFactor;
            #endregion

            #region Best Percentage of Positive Votes (PPV) in process tree
            int PVID = 0;
            float bestPPV = 0f;
            float bestVoteRateFactor = 0;
            foreach (ProcessVersion version in process.Versions)
                if (version.QualityVotes.Count != 0 &&
                    (version.posVotes/version.QualityVotes.Count) > bestPPV)
                {
                    bestPPV = version.posVotes/version.QualityVotes.Count;
                    PVID = version.PVID;
                }

            if (PVID == 0) bestVoteRateFactor = process.score*0.1f;
            else bestVoteRateFactor = - process.score*0.05f;

            author.bonusMalus[0] += bestVoteRateFactor;
            process.bonusMalus[3] = bestVoteRateFactor;
            #endregion
        }
    }