When testing, we often need to know how lenient to be when making
comparisons. Trying to figure out just how lenient has been a huge
source of problems, and ultimately, the scaling factor (applied to
ABS_TOL) probably depends on properties of the solution.
This commit adds a new method, epsilon_scale(), that returns a safe
(very lenient) scaling factor. If things are within epsilon_scale()
times ABS_TOL, we consider then equal, or optimal, or whatever.
self._L_specnorm_value = specnorm(self.L())
return self._L_specnorm_value
+ def epsilon_scale(self, solution):
+ # Don't return anything smaller than 1... we can't go below
+ # out "minimum tolerance."
+ norm_p1_opt = norm(solution.player1_optimal())
+ norm_p2_opt = norm(solution.player2_optimal())
+ scale = self._L_specnorm()*(norm_p1_opt + norm_p2_opt)
+ return max(1, scale)
+
+
def solution(self):
"""
Solve this linear game and return a :class:`Solution`.