fix: use extraUsers instead of extraCapacity for unrestricted pseudo-capacity

This commit is contained in:
Wolfgang Witt 2021-03-16 13:21:25 +01:00 committed by Gregor Kleen
parent b5ee9f2c05
commit 2be9d76af2

View File

@ -433,14 +433,6 @@ examAutoOccurrence (hash -> seed) rule ExamAutoOccurrenceConfig{..} occurrences
restrictedSpace :: Natural
restrictedSpace = sum restrictedLengths
extraCapacity :: Natural
extraCapacity
| restrictedSpace > numUnassignedUsers = restrictedSpace - numUnassignedUsers
| otherwise = 0
where
numUnassignedUsers :: Natural
numUnassignedUsers = sum $ view _2 <$> wordLengths
longestLine :: Natural
-- ^ For scaling costs
@ -545,9 +537,18 @@ examAutoOccurrence (hash -> seed) rule ExamAutoOccurrenceConfig{..} occurrences
optimumRatio :: Rational
optimumRatio = ((%) `on` fromIntegral . max 1 . sum) (map (view _2) wordLengths) restrictedLengths
numUnassignedUsers :: Natural
numUnassignedUsers = sum $ view _2 <$> wordLengths
extraUsers :: Natural
extraUsers
| numUnassignedUsers > restrictedSpace = numUnassignedUsers - restrictedSpace
| otherwise = 0
widthCost :: Maybe lineId -> ExamOccurrenceCapacity -> Natural -> Extended Rational
widthCost l Unrestricted w
= Finite ((fromIntegral w - fromIntegral extraCapacity) % List.genericLength unrestrictedLines
= Finite (fromIntegral w
- (fromIntegral extraUsers % List.genericLength unrestrictedLines)
- nudgeRatio * fromIntegral longestLine)^2
where
nudgeRatio :: Rational