user_guide:tutorials:apps_tropical

Differences

This shows you the differences between two versions of the page.

Link to this comparison view

Both sides previous revision Previous revision
Next revision
Previous revision
user_guide:tutorials:apps_tropical [2017/07/06 20:43]
oroehrig [Tropical convex hull computations] renamed CONE_COVECTOR_DECOMP into POLYTOPE_...
user_guide:tutorials:apps_tropical [2019/02/04 22:55] (current)
Line 1: Line 1:
-====== Tutorial: Tropical arithmetics and tropical geometry ====== +{{page>.:latest:@FILEID@}}
- +
-This tutorial showcases the main features of application tropical, such as +
-  * Tropical arithmetics +
-  * Tropical convex hull computations +
-  * Tropical cycles and hypersurfaces. +
- +
-To use the full palette of tools for tropical geometry, switch to the corresponding application by typing the following in the ''​polymake''​ shell: +
-<​code>​ +
-> application '​tropical';​ +
-</​code>​ +
- +
-=== Disclaimer: Min or Max - you have to choose! === +
- +
-Most objects and data types related to tropical computations have a template parameter which tells it whether Min or Max is used as tropical addition. There is **no default** for this, so you have to choose!  +
- +
-=== Disclaimer 2: Newest version required === +
- +
-Most of the features described here only work in polymake version 3.0 or newer. +
- +
-==== Tropical arithmetics ==== +
- +
-You can create an element of the tropical semiring (over the rationals) simply by writing something like this: +
-<​code>​ +
-tropical > $a = new TropicalNumber<​Max>​(4);​ +
-tropical > $b = new TropicalNumber<​Min>​(4);​ +
-tropical > $c = new TropicalNumber<​Min>​("​inf"​);​ +
-</​code>​ +
-You can now do basic arithmetic - that is **tropical** addition and multiplication with these. Note that tropical numbers with different tropical additions don't mix! +
-<​code>​ +
-tropical > print $a * $a; +
-+
-tropical > print $b + $c*$b; +
-+
-tropical > #print $a + $b; This won't work! +
-</​code>​ +
-Tropical vector/​matrix arithmetics also work - you can even ask for the tropical determinant! +
-<​code>​ +
-tropical > $m = new Matrix<​TropicalNumber<​Max>​ >​([[0,​1,​2],​[0,"​-inf",​3],​[0,​0,"​-inf"​]]);​ +
-tropical > $v = new Vector<​TropicalNumber<​Max>​ >​(1,​1,​2);​ +
-tropical > print $m + $m; +
-0 1 2 +
-0 -inf 3 +
-0 0 -inf +
-tropical > print $m * $v; +
-4 5 1 +
-tropical > print tdet($m); +
-+
-</​code>​ +
- +
-Finally, you can also create tropical polynomials. This can be done with the special toTropicalPolynomial parser: +
- +
-<​code>​ +
-tropical > $q = toTropicalPolynomial("​min(2a,​b+c)"​);​ +
-tropical > print $q; +
-x0^2 + x1*x2 +
-</​code>​ +
- +
-==== Tropical convex hull computations ==== +
- +
-The basic object for tropical convex hull computations is ''​Polytope''​ (**Careful:​** If you're not in application tropical, be sure to use the namespace identifier ''​tropical::​Polytope''​ to distinguish it from the ''​polytope::​Polytope''​). +
- +
-A tropical polytope should always be created via ''​POINTS''​ (i.e. not ''​VERTICES''​),​ since they determine the combinatorial structure. The following creates a tropical line segment in the tropical projective plane. Note that the point (0,1,1) is not a vertex, as it is in the tropical convex hull of the other two points. However, it does play a role when computing the corresponding subdivision of the tropical projective torus into covector cells (see the [[apps_tropical#​A note on coordinates|note]] below to understand the different coordinates):​ +
-<​code>​ +
-tropical > $c = new Polytope<​Min>​(POINTS=>​[[0,​0,​0],​[0,​1,​1],​[0,​2,​1]]);​ +
-tropical > print $c->​VERTICES;​ +
-0 0 0 +
-0 2 1 +
-tropical > print rows_labeled($c->​PSEUDOVERTICES);​ +
-0:0 0 1 1 +
-1:0 0 -1 0 +
-2:0 0 0 -1 +
-3:1 0 0 0 +
-4:1 0 1 1 +
-5:1 0 2 1 +
-tropical > print $c->​MAXIMAL_COVECTOR_CELLS;​ #Sets of PSEUDOVERTICES. They are maximal cells of the induced subdivision of the torus. +
-{0 1 4} +
-{0 2 5} +
-{0 4 5} +
-{1 2 3} +
-{1 3 4} +
-{2 3 4} +
-{2 4 5} +
-tropical ​print $c->​POLYTOPE_MAXIMAL_COVECTOR_CELLS;​ +
-{3 4} +
-{4 5} +
-tropical > $c->​VISUAL_SUBDIVISION;​ +
-</​code>​ +
- +
-In case you're just interested in either the subdivision of the full torus, or the polyhedral structure of the tropical polytope, the following will give you those structures as ''​fan::​PolyhedralComplex''​ objects in //affine// coordinates:​ +
-<​code>​ +
-tropical > $t = $c->​torus_subdivision_as_complex;​ +
-tropical > $p = $c->​polytope_subdivision_as_complex;​ +
-tropical > print $p->​VERTICES;​ +
-1 0 0 +
-1 1 1 +
-1 2 1 +
-tropical > print $p->​MAXIMAL_POLYTOPES;​ +
-{0 1} +
-{1 2} +
-</​code>​ +
-Note that by default, the affine chart is {x_0 = 0}You can choose any chart {x_i = 0} by passing i as an argument to ''​.._subdivision_as_complex''​. +
- +
-Polymake computes the full subdivision of both the torus and the polytope as a ''​CovectorLattice'',​ which is just a ''​FaceLattice''​ with an additional map that attaches to each cell in the subdivision its covector. For more details on this data structure see the [[http://​polymake.org/​release_docs/​snapshot/​tropical.html | reference documentation]]. You can visualize the covector lattice with +
-<​code>​ +
-tropical > $c->​TORUS_COVECTOR_DECOMPOSITION->​VISUAL;​ +
-tropical > $c->​POLYTOPE_COVECTOR_DECOMPOSITION->​VISUAL;​ +
-</​code>​ +
-Each node in the lattice is a cell of the subdivision. The top row describes the vertices and rays of the subdivision. The bottom row is the covector of that cell with respect to the ''​POINTS''​. +
- +
-==== Tropical cycles ====  +
- +
-The main object here is ''​Cycle'',​ which represents a weighted and balanced, rational pure polyhedral complex in the tropical projective torus (see the [[apps_tropical#​A note on coordinates|note]] below, if you're confused by coordinates in the following examples). +
- +
-A tropical cycle can be created, like a ''​PolyhedralComplex'',​ by specifying its vertices and maximal cells (and possibly a lineality space). The only additional data are the weights on the maximal cells. +
-<​code>​ +
-tropical > $x = new Cycle<​Max>​(PROJECTIVE_VERTICES=>​[[1,​0,​0,​0],​[0,​-1,​0,​0],​[0,​0,​-1,​0],​[0,​0,​0,​-1]],​MAXIMAL_POLYTOPES=>​[[0,​1],​[0,​2],​[0,​3]],​WEIGHTS=>​[1,​1,​1]);​ +
-</​code>​ +
-This creates the standard tropical (max-)line in the plane. There are two caveats to observe here: +
-  - The use of ''​POINTS''​ and ''​INPUT_POLYTOPES''​ is strongly discouraged. ''​WEIGHTS''​ always refer to ''​MAXIMAL_POLYTOPES''​ and the order of the latter can be different from the order in ''​INPUT_POLYTOPES''​. +
-  - You can also define a cycle using ''​VERTICES''​ instead of ''​PROJECTIVE_VERTICES''​. However, in that case all vertices have to be normalized such that the second coordinate (i.e. the one after the leading 0/1, see [[apps_tropical#​A note on coordinates|note]]) is 0. I.e. in the above example, the point (0,-1,0,0) would have to be replaced by (0,​0,​1,​1). +
- +
-Entering projective coordinates can be a little tedious, since it usually just means adding a zero in front of your affine coordinates. There is a convenience function that does this for you. The following creates the excact same cycle as above: +
-<​code>​ +
-tropical > $x = new Cycle<​Max>​(VERTICES=>​thomog([[1,​0,​0],​[0,​1,​1],​[0,​-1,​0],​[0,​0,​-1]]),​MAXIMAL_POLYTOPES=>​[[0,​1],​[0,​2],​[0,​3]],​WEIGHTS=>​[1,​1,​1]);​ +
-</​code>​ +
- +
-One can now ask for basic properties of the cycle, e.g., if it's balanced: +
-<​code>​ +
-tropical > print is_balanced($x);​ +
-+
-</​code>​ +
- +
-=== Hypersurfaces === +
- +
-Most of the time you probably won't want to input your tropical cycle directly as above. Polymake has a special data type ''​Hypersurface''​ for hypersurfaces of //​homogeneous//​ tropical polynomials. The following creates the standard tropical min-line in the plane: +
-<​code>​ +
-tropical > $H = new Hypersurface<​Min>​(POLYNOMIAL=>​toTropicalPolynomial("​min(a,​b,​c)"​));​ +
-tropical > print $H->​VERTICES;​ +
-0 0 -1 -1 +
-0 0 1 0 +
-0 0 0 1 +
-1 0 0 0 +
-tropical > print $H->​MAXIMAL_POLYTOPES;​ +
-{2 3} +
-{1 3} +
-{0 3} +
-tropical > print $H->​WEIGHTS;​ +
-1 1 1 +
-</​code>​ +
- +
-=== Tropical intersection theory (and much more): a-tint === +
- +
-As of version 2.15-beta3, polymake comes bundled with the extension [[https://​github.com/​simonhampe/​atint | a-tint]] by Simon Hampe, which specializes in (but is not limited to) tropical intersection theory. You can find a non-comprehensive list of features [[ https://​github.com/​simonhampe/​atint/​wiki/​Feature-list|here]] and a user manual and some basic tutorials on [[https://​github.com/​simonhampe/​atint/​wiki/​User-Manual|this page]].  +
- +
-==== A note on coordinates ==== +
- +
-Coordinates of tropical cones and cycles all live in //tropical projective space//, i.e. TP<​sup>​n-1</​sup>​ = (T<​sup>​n</​sup>​ \ 0) / (1,..,1), where T is the tropical semiring R union +/- infinity. Every element of projective space has a unique representative such that its first non-tropical-zero entry is 0 and polymake will usually normalize your input to this form.  +
- +
-When describing polyhedral complexes in tropical projective space, polymake uses vectors in TP<​sup>​n-1</​sup>,​ but with an additional 1 or 0 in front, indicating whether it is a vertex or a ray (see also the page on [[coordinates|homogeneous coordinates]]). ​+
  
  • user_guide/tutorials/apps_tropical.1499373782.txt.gz
  • Last modified: 2017/07/06 20:43
  • by oroehrig