(* :Title: TuGames.m 
   :History:
   Version 1.0: without options 
   Version 1.1: with options
   Version 1.3: 
     Minor code revision.

     Some robustness problems with the function family ModifiedNucleolus[]
     have been fixed but it is not completely solved. For convex games or inessential games 
     the solution computed might still be wrong.
      
     Some new functions to compute the pre-kernel, anti-pre-kernel
     and some related functions were incorporated. The function names
     are PreKernelSolution[] and AntiPreKernelSolution[]. 
     These functions are based on an algorithm that relies on the indirect function
     approach to compute pre-kernel solutions. In order to check if the solution is
     an anti-pre-kernel, the functions MinExcessBalanced[], AntiPreKernelQ[]
     and AllAntiSurpluses[] have been added.

   Version 1.5:
     Some code revision.

     The functions DefineGame[], MaxExcessBalanced[], MinExcessBalanced[], 
      KernelImputationQ[], SuperAdditiveQ[] and AvConvex[] have been completely rewritten. 
     For this reason the  functions
             AvSumCheck[]
             ContributionSum[]
      have been deprecated.
     
    The function AverageConvexQ[] is the same as AvConvexQ[], but it allows to issue an option.

    The functions PreKernelQ[] and AntiPreKernelQ[] have been modified.
   
     Some new functions related to unanimity coordinates have been added. 
     For instance
     DetUCoord[] to get the unanimity coordinates from a set of positive coordinates.
     HarsanyiDividends[] provides an alternative approach to compute the 
              unanimity coordinates (Harsanyi dividends) of the game.
     CharacteristicValues[] computes the characteristic values of the game from
              the unanimity coordinates.

     The functions 
     UnanConvexQ[]
     UnanAvConvexQ[]
     provide alternative approaches to check convexity and average-convexity. 
    
    Version 1.6:
     We added some new functions related to the prenucleolus, like BalancedSelectionQ[]. 

     Bug fixes:

     AverageConvexQ[]        - Fix incorrect computation and a precision problem.
     DetUCoord[]             - Fix incorrect computation. 
     UnanAvConvexIffCondQ[]  - Fix incorrect computation and a precision problem.
     AdjustedWorthVectors[]  - Fix incorrect computation. 
     
     Modification:
     
     Some general code revision.

     First code adjustment to use this package in parallel.

     Furthermore, some basic functions can now be called within a running Matlab session while 
     using our Matlab toolbox MatTuGames, which is available from the following URL:
     http://www.mathworks.cn/matlabcentral/fileexchange/35933?product=EL

    Version 1.7:

     Bug fixes:

     PreKernelElement[]        - Fix a precision problem.
     KernelVertices[]          - Fix a precision problem.
     DirectionOfImprovement[]  - Fix a precision problem.   
     MaxExcessBalanced[]       - Fix a precision problem.   
     MinExcessBalanced[]       - Fix a precision problem.
     KernelImputationQ[]       - Fix a precision problem.
     KernelImputationListQ[]   - Fix a precision problem.
     ModifiedNucleolus[]       - Fix incorrect computation with games having empty core.
     ModifiedKernel[]          - Fix incorrect computation with games having empty core.
     LexiCenter[]              - Fix incorrect computation with games having empty core.
     PreNucleolus[]            - Fix incorrect computation with games having empty core.
       
     Modification:

     The parallel mode has been optimized. For more details see the README file and/or
     the notebook file TuGamesParallel.nb in the Documentation folder.
     
     Tested up to 32 SubKernels. For running even the cddmathlink libraries in parallel see
     the explanation in the README file and/or for an example the notebook file 
     TuGamesMovieParaModeV6.nb in the Documentation directory.

     To keep track our package with the new graphic concept of Mathematica 6.x and higher,
     the following functions have been added or modified to depict solutions for three person games:

     AnimationKernelProperty2d[]  - new function, dedicated for Mathematica 6.x and higher only!
     StrongEpsCore2d[]            - new function, dedicated for Mathematica 6.x and higher only!
     FilledCoreV6[]               - is an upgrade of FilledCore[] for version 6.x and higher.

     The graphical functions to plot game solutions for four person games reside in the package 
     IOTuGamesV6.m. To use the old graphic concept one has to load the package IOTuGames.m
     in connection with << Version5`Graphics`. 
     All graphical extensions require the cddmathlink libraries.

    Version 1.8:

     ModifiedNucleolus[]       - Complete code revision to get rid of large round-off errors. 
                                 We use now a fast simplex method instead of an interior point 
                                 method to increase its reliability.
     ModifiedKernel[]          - See ModifiedNucleolus[].
     LexiCenter[]              - See ModifiedNucleolus[].
     PreNucleolus[]            - See ModifiedNucleolus[].

     The behavior of these functions have changed. Options are obsolete now. ModifiedNucleolus[] does
     not compute anymore the pre-nucleolus for inessential games, it returns the empty set instead.


    Version 2.2:
       Transcription of the old option rules to the new ones invented by Mathematica 8.x.
       This package is now exclusively dedicated to Mathematica version 8.x and higher.

       FilledCore[] is deprecated now. Using the old graphic concept Version 1.8 is required. 

    Version 2.3:
       Modification:      
       Change protected command SubsetQ[] to SubSetQ[] from the VertexEnum package. Order is
       reversed to SubsetQ[] which is new in Mathematica version 10.x.
     
       Some minor code revision. 
   
       New Functions:
        MLExtension[]           - Computes the multi-linear extension of the game.
        ShapleyValueML[]        - Computes the Shapley value from the multi-linear extension of the game.
        PreKernel[]             - Computes a pre-kernel point by Algorithm 8.2.1 of Meinhardt (2013).

       Bug fixes:
        FindKernelSolution[] convergence process to the kernel should be now more robust.

    Version 2.4:

       Some minor code revision. 
*)
