diff --git a/server/queues/scoring.coffee b/server/queues/scoring.coffee index fac34b59f..a48c4d0eb 100644 --- a/server/queues/scoring.coffee +++ b/server/queues/scoring.coffee @@ -54,30 +54,30 @@ addPairwiseTaskToQueue = (taskPair, cb) -> sendEachTaskPairToTheQueue taskPairs, (taskPairError) -> if taskPairError? then return cb taskPairError,false cb null, true - + module.exports.resimulateAllSessions = (req, res) -> unless isUserAdmin req then return errors.unauthorized res, "Unauthorized. Even if you are authorized, you shouldn't do this" - + originalLevelID = req.body.originalLevelID levelMajorVersion = parseInt(req.body.levelMajorVersion) - + findParameters = submitted: true - level: + level: original: originalLevelID - majorVersion: levelMajorVersion + majorVersion: levelMajorVersion query = LevelSession .find(findParameters) .lean() - + query.exec (err, result) -> if err? then return errors.serverError res, err result = _.sample result, 10 async.each result, resimulateSession.bind(@,originalLevelID,levelMajorVersion), (err) -> if err? then return errors.serverError res, err sendResponseObject req, res, {"message":"All task pairs were succesfully sent to the queue"} - + resimulateSession = (originalLevelID, levelMajorVersion, session, cb) => sessionUpdateObject = submitted: true @@ -250,7 +250,7 @@ determineIfSessionShouldContinueAndUpdateLog = (sessionID, sessionRank, cb) -> cb null, true else ratio = (updatedSession.numberOfLosses) / (totalNumberOfGamesPlayed) - if ratio > 0.2 + if ratio > 0.33 cb null, false console.log "Ratio(#{ratio}) is bad, ending simulation" else @@ -264,7 +264,7 @@ findNearestBetterSessionID = (levelOriginalID, levelMajorVersion, sessionID, ses queryParameters = totalScore: - $gt:opponentSessionTotalScore + $gt: opponentSessionTotalScore _id: $nin: opponentSessionIDs "level.original": levelOriginalID @@ -275,7 +275,9 @@ findNearestBetterSessionID = (levelOriginalID, levelMajorVersion, sessionID, ses team: opposingTeam if opponentSessionTotalScore < 30 - queryParameters["totalScore"]["$gt"] = opponentSessionTotalScore + 2 + # Don't play a ton of matches at low scores--skip some in proportion to how close to 30 we are. + # TODO: this could be made a lot more flexible. + queryParameters["totalScore"]["$gt"] = opponentSessionTotalScore + 2 * (30 - opponentSessionTotalScore) / 20 limitNumber = 1