]> gitweb.michael.orlitzky.com - dunshire.git/commitdiff
Halve the definition of the condition number of a game.
authorMichael Orlitzky <michael@orlitzky.com>
Sun, 30 Oct 2016 22:51:57 +0000 (18:51 -0400)
committerMichael Orlitzky <michael@orlitzky.com>
Sun, 30 Oct 2016 22:51:57 +0000 (18:51 -0400)
dunshire/errors.py
dunshire/games.py

index 61fe43d243b65d51595baa09c75e797c002fe306..7cd8342ece4f659bfdc3c2378ce6c7774848e2ba 100644 (file)
@@ -91,7 +91,7 @@ class GameUnsolvableException(Exception):
               [0.1000000],
          e2 = [3.0000000]
               [0.1000000],
-         Condition((L, K, e1, e2)) = 8.311277.
+         Condition((L, K, e1, e2)) = 4.155638.
        CVXOPT returned:
          dual infeasibility: None
          dual objective: 1.0
@@ -192,7 +192,7 @@ class PoorScalingException(Exception):
               [0.1000000],
          e2 = [3.0000000]
               [0.1000000],
-         Condition((L, K, e1, e2)) = 8.311277.
+         Condition((L, K, e1, e2)) = 4.155638.
        <BLANKLINE>
     """
     def __init__(self, game):
index 46092c380eca141ff993313bd30ec55989a32ed8..c841caae752b9075ee28030d2a15df5d42354308 100644 (file)
@@ -222,7 +222,7 @@ class SymmetricLinearGame:
           e2 = [ 1]
                [ 2]
                [ 3],
-          Condition((L, K, e1, e2)) = 63.669790.
+          Condition((L, K, e1, e2)) = 31.834895.
 
     Lists can (and probably should) be used for every argument::
 
@@ -241,7 +241,7 @@ class SymmetricLinearGame:
                [ 1],
           e2 = [ 1]
                [ 1],
-          Condition((L, K, e1, e2)) = 3.414214.
+          Condition((L, K, e1, e2)) = 1.707107.
 
     The points ``e1`` and ``e2`` can also be passed as some other
     enumerable type (of the correct length) without much harm, since
@@ -264,7 +264,7 @@ class SymmetricLinearGame:
                [ 1],
           e2 = [ 1]
                [ 1],
-          Condition((L, K, e1, e2)) = 3.414214.
+          Condition((L, K, e1, e2)) = 1.707107.
 
     However, ``L`` will always be intepreted as a list of rows, even
     if it is passed as a :class:`cvxopt.base.matrix` which is
@@ -286,7 +286,7 @@ class SymmetricLinearGame:
                [ 1],
           e2 = [ 1]
                [ 1],
-          Condition((L, K, e1, e2)) = 12.147542.
+          Condition((L, K, e1, e2)) = 6.073771.
         >>> L = cvxopt.matrix(L)
         >>> print(L)
         [ 1  3]
@@ -302,7 +302,7 @@ class SymmetricLinearGame:
                [ 1],
           e2 = [ 1]
                [ 1],
-          Condition((L, K, e1, e2)) = 12.147542.
+          Condition((L, K, e1, e2)) = 6.073771.
 
     """
     def __init__(self, L, K, e1, e2):
@@ -520,11 +520,18 @@ class SymmetricLinearGame:
         In the CVXOPT construction of this game, two matrices ``G`` and
         ``A`` appear. When those matrices are nasty, numerical problems
         can show up. We define the condition number of this game to be
-        the sum of the condition numbers of ``G`` and ``A`` in the
+        the average of the condition numbers of ``G`` and ``A`` in the
         CVXOPT construction. If the condition number of this game is
         high, then you can expect numerical difficulty (such as
         :class:`PoorScalingException`).
 
+        Returns
+        -------
+
+        float
+            A real number greater than or equal to one that measures how
+            bad this game is numerically.
+
         Examples
         --------
 
@@ -535,12 +542,12 @@ class SymmetricLinearGame:
         >>> e2 = e1
         >>> SLG = SymmetricLinearGame(L, K, e1, e2)
         >>> actual = SLG._condition()
-        >>> expected = 3.6180339887498953
+        >>> expected = 1.8090169943749477
         >>> abs(actual - expected) < options.ABS_TOL
         True
 
         """
-        return condition_number(self._G()) + condition_number(self._A())
+        return (condition_number(self._G()) + condition_number(self._A()))/2
 
 
     def dual(self):
@@ -573,7 +580,7 @@ class SymmetricLinearGame:
               e2 = [ 1]
                    [ 1]
                    [ 1],
-              Condition((L, K, e1, e2)) = 88.953530.
+              Condition((L, K, e1, e2)) = 44.476765.
 
         """
         # We pass ``self._L`` right back into the constructor, because