Description
Many of the core functions of this package allow the user to fine tune the strategy of how submatrices are selected. Different strategies yield markedly different performance or results on these examples. These are controlled by specifying a
Strategy => option, pointing to a
HashTable. This HashTable should have the following keys.
-
GRevLexLargest: try to find submatrices where each row and column has a large entry with respect to a random GRevLexorder.
-
GRevLexSmallest: try to find submatrices where each row and column has a small entry with respect to a random GRevLexorder.
-
GRevLexSmallestTerm: find submatrices where each row and column has an entry with a small term with respect to a random GRevLexorder.
-
LexLargest: try to find submatrices where each row and column has a large entry with respect to a random Lexorder.
-
LexSmallest: try to find submatrices where each row and column has a small entry with respect to a random Lexorder.
-
LexSmallestTerm: find submatrices where each row and column has an entry with a small term with respect to a random Lexorder.
-
Random: find random submatrices
-
RandomNonzero: find random submatrices that have nonzero rows and columns
-
Points: find submatrices that are not singular at the given ideal by finding a point where that ideal vanishes, and evaluating the matrix at that point (via the package RandomRationalPoints). If working over a characteristic zero field, this will select random submatrices.
Each such key should point to an integer.
Functions such as
chooseGoodMinors will select a number of random submatrices based on the values of those keys. For example, if
LexSmallest and
LexLargest are set to
50 approximately the submatrics will be smallest with respect to
Lex and the other half will be largest with respect to
Lex.The values do not need to add up to 100.
These functions all work by finding the optimal entry with respect to the given strategy, removing that row and column, and then choosing the next optimal entry. This is done until a submatrix of the desired size has been found.
In some functions, the
GRevLex versions of this strategy will modify the working matrix in a loop, repeatedly lowering/raising the degree of elementsso as to ensure that different choices are made.
This package comes with several default strategies exported to the user.
-
StrategyDefault: 16% of the matrices are LexSmallest, LexSmallestTerm, GRevLexSmallest, GRevLexLargest, Random, and RandomNonZero each
-
StrategyDefaultNonRandom: 25% of the matrices are LexSmallest, LexSmallestTerm, GRevLexSmallest and, GRevLexLargest each
-
StrategyLexSmallest: 50% of the matrices are LexSmallest and 50% are LexSmallestTerm
-
StrategyGRevLexSmallest: 50% of the matrices are GRevLexSmallest and 50% are GRevLexLargest
-
StrategyRandom: chooses 100% random submatrices.
-
StrategyPoints: choose all submatrices via Points.
-
StrategyDefaultWithPoints: like StrategyDefault but replaces the Random and RandomNonZero submatrices as with matrices chosen as in Points.
Additionally, a
MutableHashTable named
StrategyCurrent is also exported. It begins as the default strategy, but the user can modify it.