# Polymake

Polymake (Eigenschreibweise polymake) ist eine Software zur algorithmischen Behandlung von konvexen Polytopen und Polyedern.
Zunächst konzipiert als Mittel zur Untersuchung der Kombinatorik und Geometrie von konvexen Polytopen und Polyedern, ist Polymake nun in der Lage, Berechnungen mit simplizialen Komplexen, Matroiden, Kegeln, Graphen, tropischen Objekten, Torischen Varietäten und weiteren Objekten durchzuführen. Besonders die Berechnungen von konvexen Hüllen und Gitterpunkten eines Polytops sind von besonderer Bedeutung für verschiedenste anderweitige Forschung.
Polymake wurde in über 300 Artikeln, die beim Zentralblatt MATH registriert sind, zitiert, wie man dem Eintrag in der swMATH-Datenbank entnehmen kann.

## Besonderheiten und Aufbau

Polymake weist ein paar Besonderheiten auf, die es von anderer Software unterscheidet.
Zunächst kann Polymake als Teil eines Perl-Skriptes aufgerufen werden. Dazu können Benutzer Polymake um neue Objekte, Eigenschaften, Regeln und Algorithmen erweitern.
Außerdem weist es ein internes Client-Server-Modell auf, wobei die Sprache Perl für das Objekt-Management und die Schnittstellen und C++ für die Algorithmik gebraucht wird. Der Server speichert Informationen über das Objekt, z. B. ein Polytop, und der Client sendet Anfragen um bestimmte Eigenschaften zu bestimmen. Der Server hat die Aufgabe zu bestimmen, wie jede Anfrage auf Grundlage von bereits bekannten Informationen zu jedem Objekt mithilfe eines regelbasierten Systems abgeschlossen wird. Zum Beispiel gibt es viele Regeln, wie man die Facetten eines Polytops bestimmt. Diese können aus einer Eckenbeschreibung des Polytops und aus einer (möglicherweise redundanten) Ungleichungsbeschreibung berechnet werden. Polymake erstellt einen Abhängigkeitsgraphen, der die Schritte zur Bearbeitung jeder Anfrage modelliert, und wählt den besten Pfad mithilfe eines Dijkstra-Algorithmus aus.
Polymake unterteilt seine Funktionen und Objekte in 10 verschiedene Gruppen, sogenannte applications. Sie verhalten sich ähnlich wie Namensräume in C++. Die application "polytop" ist die größte und die erste, die entwickelt wurde.
* Common: Hilfsfunktionen, die in anderen applications vorkommen.
* Fan: Funktionen für polyedrische Komplexe (die Verallgemeinerung Simplizialen Komplexen), Planaren Darstellungen von 3-Polytopen, Kegeln und Unterteilungen von Punkten oder Vektoren.
* Fulton: Berechnungen von und mit normalen Torischen Varietäten. Die application ist nach William Fulton benannt, dem Autor des Buchs "Introduction to Toric Varieties".
* Graph: Manipulation von gerichteten und unterrichteten Graphen.
* Group: Berechnungen primär für endliche Permutationsgruppen. Grundlegende Eigenschaften einer Gruppe wie die Charaktere und Konjugationsklassen können auch bestimmt werden.
* Ideal: Berechnungen mit Idealen in Polynomringen, dazu zählen Gröbnerbasen, Hilbertpolynome und Radikalideale.
* Matroid: Berechnung von Standardeigenschaften eines Matroiden wie Basen und Kreisen. Diese application kann auch tieferliegende Eigenschaften wie das Tutte-Polynom eines Matroids berechnen und das Matroid mit einem Polytop realisieren.
* Polytope: Hier befinden sich mehr als 230 Funktionen oder Berechnungen, die mit einem Polytop durchgeführt werden können. Diese Funktionen variieren in ihrer Komplexität, angefangen bei einfachen Berechnungen grundlegender Eigenschaften eines Polytop (z. B. Anzahl der Ecken, Anzahl der Facetten, Tests für simpliziale Polytope und Umwandlung einer Eckenbeschreibung in eine Ungleichungsbeschreibung) bis hin zu kombinatorischen oder algebraischen Eigenschaften (z. B. H-Vektoren, Ehrhartpolynome, Hilbertbasen, und Schlegeldiagramme). Es gibt auch viele Möglichkeiten sich Berechnungen visuell auszugeben.
* Topaz: Funktionen, die sich mit simplizialen Komplexen beschäftigen. Viele aufwändige Berechnungen wie die der Homologiegruppe, der Orientierung und der Fundamentalgruppe von simplizialen Komplexen können durchgeführt werden. Außerdem können einige kombinatorische Eigenschaften wie das Hasse-Diagramm oder das sogenannte shelling bestimmt werden.
* Tropical: Berechnungen in der Tropischen Geometrie, allen voran mit tropischen Hyperflächen und tropischen Kegeln.

## Entwicklungsgeschichte

Die Polymake-Version 1.0 erschien erstmals in den Proceedings des DMV-Seminars "Polytopes and Optimization" in Oberwolfach im November 1997. Damals enthielt sie nur die polytope-application, wobei der Aufbau anhand von applications noch nicht angefertigt war. Die Versionen 2.0 und 3.0 wurde im Juli 2003 und 2016 veröffentlicht. Die neueste große Update kam mit Version 4.0 und wurde im Januar 2020 herausgegeben.

## Zusammenspiel mit anderer Software

Polymake weist einen besonders modularen Aufbau auf und besitzt daher viele Schnittstellen mit anderen Softwarepaketen, die für bestimmte Berechnungen spezialisiert sind, wodurch es auch als Schnittstellen zwischen diesen verschiedenen Tools fungieren kann. Ein Benutzer kann problemlos, teils ohne dessen bewusst zu sein, zwischen der Verwendung verschiedener Softwarepakete wechseln, während die Eigenschaften eines Polytops berechnet werden.

### Pakete, die in Polymake enthalten sind

Im Folgenden werden einige externe Softwarepakete angegeben, mit denen Polymake, beim Stand der Version 4.0, interagieren kann. Es ist aber jederzeit möglich Schnittstellen für anderweitige Software durch eigens geschriebene Regeldateien zu erstellen. Einige Pakete werden sehr ähnliche Berechnungen durchführen, z. B. gibt es verschiedene Pakete zum Bestimmen der konvexen Hülle eines Polytops. Da Polymake Regeldateien und einen Abhängigkeitsgraphen für die Berechnung von solchen Eigenschaften verwendet, sind die meisten dieser Softwarepakete optional. Einige sind jedoch für spezialisierte Berechnungen erforderlich.
* 4ti2:Softwarepaket für algebraische, geometrische und kombinatorische Rechnungen auf linearen Räumen
* a-tint: Algorithmische Methoden für Tropische Schnitttheorie
* azove: Aufzählung von 0/1 Ecken
* barvinok: Zählen von ganzzahligen Punkten von parametrisierten und nichtparametrisierten Polytopen
* cdd: Sogenannte "double description method" zum Wechseln zwischen einer Eckenbeschreibung und Ungleichungsbeschreibung eines Polytops.
* Geomview: Interaktives 3D-Visualisierungsprogramm
* Gfan: Gröbnerfächer und tropische Varietäten
* GraphViz: Software zur Visualisierung von Graphen
* homology: Berechnung von Homologiegruppen von simplizialen Komplexen
* LattE (Lattice point Enumeration): Zählen von Gitterpunkten in einem Polytop und Integration darüber
* libnormaliz: Affine Monoide, Vektorkonfigurationen, Gitterpolytope und rationale Kegel
* lrs: Implementierung des Reverse-Search Algorithmus für Fragestellung zum Aufzählen der Ecken und der Berechnung der konvexen Hülle eines Polytops
* mptopcom: Berechnung von Triangulierungen von Punktkonfigurationen und Matroiden mithilfe einer parallelen Rückwärtssuche
* nauty: Automorphismengruppen von Graphen
* plantri: Planare Triangulierungen
* permlib: Berechnungen von Stabilisatoren und Orbits durch Permutationsgruppen
* PORTA: Aufzählen von Gitterpunkten eines Polytops
* ppl: Parma Polyhedra Library
* qhull: Quickhull-Algorithmus für konvexe Hüllen
* singular: Computeralgebrasystem für Rechnungen in Polynomringen mit besonderem Schwerpunkt auf kommutativer und nichtkommutativer Algebra, algebraischer Geometrie und Singularitätstheorie.
* sketch: Zum Zeichnen von 2- oder 3-dimensionalen festen Objekten
* SplitsTree4: Phylogenetische Netzwerke
* sympol: Zum Rechnen mit symmetrischen Polyedern
* threejs: JavaScript-Bibliothek für 3D-Computeranimationen
* tikz: TeX-Paket zum Programmieren von Grafiken
* TropLi: Berechnen von tropischen linearen Räumen von Matroiden
* tosimplex: Dualer Simplexalgorithmus von Thomas Opfer implementiert
* Vinci: Volumina von Polytopen

### Zusammen mit Polymake in Verwendung

* jupyter-Polymake: Zum Benutzen von Polymake in Jupyter-Notebooks.
* OSCAR: Open Source Computer Algebra Research system, was derzeit entwickelt wird
* PolymakeInterface: Paket um Polymake in GAP zu verwenden.
* PolyViewer: GUI-Viewer für Polymake-Dateien.