Example #1
0
        /* Определяет, пора ли пересчитывать параметры Mean и Deviation для заданной задачи.
         * В конфигурации для этого есть специальный параметр configuration.StatisticsAnalyzing.RecalculateStatisticsAfterSubmisionsCount.
         * Если он равен, например, 1000, то параметры будут пересчитываться после каждого тысячного решения по этой задаче.
         * Если решений пока меньше 1000, то параметры будут пересчитываться после 1-го, 2-го, 4-го, 8-го, 16-го, 32-го решения и так далее.
         */
        private async Task <bool> NeedToRecalculateTaskStatistics(int clientId, Guid taskId)
        {
            var submissionsCount = await submissionsRepo.GetSubmissionsCountAsync(clientId, taskId);

            var oldSubmissionsCount = (await tasksRepo.FindTaskStatisticsParametersAsync(taskId))?.SubmissionsCount ?? 0;
            var recalculateStatisticsAfterSubmisionsCount = configuration.StatisticsAnalyzing.RecalculateStatisticsAfterSubmisionsCount;

            logger.Information($"Определяю, надо ли пересчитать статистические параметры задачи (TaskStatisticsParameters, параметры Mean и Deviation), задача {taskId}. " +
                               $"Старое количество решений {oldSubmissionsCount}, новое {submissionsCount}, параметр recalculateStatisticsAfterSubmisionsCount={recalculateStatisticsAfterSubmisionsCount}.");

            if (submissionsCount < recalculateStatisticsAfterSubmisionsCount)
            {
                return(submissionsCount >= 2 * oldSubmissionsCount);
            }

            return(submissionsCount - oldSubmissionsCount >= recalculateStatisticsAfterSubmisionsCount);
        }
Example #2
0
        private async Task <SuspicionLevels> GetSuspicionLevelsAsync(Guid taskId)
        {
            var taskStatisticsParameters = await tasksRepo.FindTaskStatisticsParametersAsync(taskId).ConfigureAwait(false);

            var manualSuspicionLevels = await manualSuspicionLevelsRepo.GetManualSuspicionLevelsAsync(taskId);

            var automaticFaintSuspicion  = configuration.AntiPlagiarism.StatisticsAnalyzing.MaxFaintSuspicionLevel;
            var automaticStrongSuspicion = configuration.AntiPlagiarism.StatisticsAnalyzing.MaxStrongSuspicionLevel;

            if (taskStatisticsParameters != null)
            {
                (automaticFaintSuspicion, automaticStrongSuspicion) = GetAutomaticSuspicionLevels(taskStatisticsParameters);
            }

            return(new SuspicionLevels
            {
                AutomaticFaintSuspicion = automaticFaintSuspicion,
                AutomaticStrongSuspicion = automaticStrongSuspicion,
                ManualFaintSuspicion = manualSuspicionLevels?.FaintSuspicion,
                ManualStrongSuspicion = manualSuspicionLevels?.StrongSuspicion,
                FaintSuspicion = manualSuspicionLevels?.FaintSuspicion ?? automaticFaintSuspicion,
                StrongSuspicion = manualSuspicionLevels?.StrongSuspicion ?? automaticStrongSuspicion,
            });
        }