user_guide:tutorials:apps_tropical

Differences

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

Link to this comparison view

Next revision
Previous revision
Last revisionBoth sides next revision
tutorial:apps_tropical [2015/10/05 10:29] – created hampeuser_guide:tutorials:apps_tropical [2019/01/25 09:38] – ↷ Page moved from user_guide:apps_tropical to user_guide:tutorials:apps_tropical oroehrig
Line 5: Line 5:
   * Tropical convex hull computations   * Tropical convex hull computations
   * Tropical cycles and hypersurfaces.   * 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! === === 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!  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 ==== ==== Tropical arithmetics ====
Line 40: Line 49:
 </code> </code>
  
-Finally, you can also create tropical polynomials. This can either be done in the [[polynomials_tutorial|usual manner]] or with special parser:+Finally, you can also create tropical polynomials. This can be done with the special toTropicalPolynomial parser:
  
 <code> <code>
-tropical > $r = new Ring<TropicalNumber<Min> >(3); #Tropical polynomial ring in 3 variables +tropical > $q = toTropicalPolynomial("min(2a,b+c)");
-tropical > ($x, $y, $z) = $r->variables; +
-tropical > $p = $x*$x + $y * $z; +
-tropical > print $p; +
-x0^2 + x1*x2 +
-tropical > $q = toTropicalPolynomial("min(2a,y+z)");+
 tropical > print $q; tropical > print $q;
 x0^2 + x1*x2 x0^2 + x1*x2
 </code> </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);
 +1
 +</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.txt
  • Last modified: 2019/02/04 22:55
  • by 127.0.0.1