polymake interactive shell の使い方

--> perl + C++ like な言語

起動法

polymake

終わり方

polytope > exit;

変数は $変数名 (perl like)

polytope > $a=1;
polytope > $b=2;
polytope > print $a+$b;
3

多面体を定義 (C++ like)

polytope > $p = new Polytope<Rational>;

多面体の点を入力

polytope > $p->POINTS=<<".";
polytope (2)> 1 0 0 0
polytope (3)> 1 1 0 0
polytope (4)> 1 0 1 0
polytope (5)> 1 1 1 0
polytope (6)> 1 0 0 1
polytope (7)> 1 1 0 1
polytope (8)> 1 0 1 1
polytope (9)> 1 1 1 1 
polytope (10)> .

多面体の各メンバーにアクセス 頂点を出力

polytope > print $p->VERTICES;
1 0 0 0
1 1 0 0
1 0 1 0
1 1 1 0
1 0 0 1
1 1 0 1
1 0 1 1
1 1 1 1

ファセットの数を出力

polytope > print $p->N_FACETS;
6

ファセットを出力

polytope > print $p->FACETS;
0 0 0 1
0 1 0 0
0 0 1 0
1 0 0 -1
1 0 -1 0
1 -1 0 0

ファセットにのっている頂点を出力

polytope > print $p->VERTICES_IN_FACETS;
{0 1 2 3}
{0 2 4 6}
{0 1 4 5}
{4 5 6 7}
{2 3 6 7}
{1 3 5 7}

3 次元立方体(0 --> 座標値が 0 or 1)

polytope > $p = cube(3,0);
polytope > print $p->VERTICES;
1 0 0 0
1 1 0 0
1 0 1 0
1 1 1 0
1 0 0 1
1 1 0 1
1 0 1 1
1 1 1 1

4 次元立方体(0 --> 座標値が 0 or 1)

polytope > $p = cube(4,0);
polytope > print $p->VERTICES;
1 0 0 0 0
1 1 0 0 0
1 0 1 0 0
1 1 1 0 0
1 0 0 1 0
1 1 0 1 0
1 0 1 1 0
1 1 1 1 0
1 0 0 0 1
1 1 0 0 1
1 0 1 0 1
1 1 1 0 1
1 0 0 1 1
1 1 0 1 1
1 0 1 1 1
1 1 1 1 1

置換多面体

polytope > $p = permutahedron(2);
polytope > print $p->VERTICES;
1 1 2 3
1 1 3 2
1 2 1 3
1 2 3 1
1 3 1 2
1 3 2 1

Birkhoff 多面体

polytope > $p = birkhoff(2);
polytope > print $p->FACETS;
1 -1 0 0 0
0 1 0 0 0
polytope > print $p->VERTICES;
1 1 0 0 1
1 0 1 1 0

Minkowski 和

polytope > $p = cube(3,0);
polytope > $q = cube(3,0);
polytope > $r=minkowski_sum($p,$q);
polytope > print $r->VERTICES;
1 0 0 0
1 2 0 0
1 0 2 0
1 2 2 0
1 0 0 2
1 2 0 2
1 0 2 2
1 2 2 2

多面体の視覚化

polytope > $r=cube(3,0);
polytope > $r->VISUAL;

多倍長整数の取扱い(GMP)

polytope > $a = new Integer(1);
polytope > for ($i = new Integer(1); $i < 100; $i++) {
polytope (2)> $a = $a * $i;
polytope (3)> }
polytope > print $a;
933262154439441526816992388562667004907159682643816214685929638952175999932299156089414639761565182862536979208272237582511852109168640000000000000000000000

初期化は文字列で

polytope > $b = new Integer("38401382480340810324808132488123481832480123481302840124898312480324823141241000000000000000000");
polytope > print $b;
38401382480340810324808132488123481832480123481302840124898312480324823141241000000000000000000

昔のバージョンの使い方もできる ただし出力されるファイルが XML 形式になっている

knoppix@Microknoppix:~/polymake$ polymake cube.p FACETS
polymake: used package cddlib
  Implementation of the double description method of Motzkin et al.
  Copyright by Komei Fukuda.
  http://www.ifor.math.ethz.ch/~fukuda/cdd_home/cdd.html

FACETS
0 0 0 1
0 1 0 0
0 0 1 0
1 0 0 -1
1 0 -1 0
1 -1 0 0


knoppix@Microknoppix:~/polymake$ 
<?xml version="1.0" encoding="utf-8"?>
<?pm chk="4e321628"?>

<object name="cube.p" type="polytope::Polytope<;Rational>;" version="2.9.9" xmlns="http://www.math.tu-berlin.de/polymake/#3">
  <credit product="cddlib"><![CDATA[
Copyright by Komei Fukuda.
http://www.ifor.math.ethz.ch/~fukuda/cdd_home/cdd.html
]]></credit>
  <property name="POINTS">
    <m>
      <v>1 0 0 0</v>
      <v>1 1 0 0</v>
      <v>1 0 1 0</v>
      <v>1 1 1 0</v>
      <v>1 0 0 1</v>
      <v>1 1 0 1</v>
      <v>1 0 1 1</v>
      <v>1 1 1 1</v>
    </m>
  </property>
  <property name="N_POINTS" value="8" />
  <property name="FEASIBLE" value="true" />
  <property name="BOUNDED" value="true" />
  <property name="DIM" value="3" />
  <property name="AMBIENT_DIM" value="3" />
  <property name="FACETS">
    <m>
      <v>0 0 0 1</v>
      <v>0 1 0 0</v>
      <v>0 0 1 0</v>
      <v>1 0 0 -1</v>
      <v>1 0 -1 0</v>
      <v>1 -1 0 0</v>
    </m>
  </property>
  <property name="AFFINE_HULL">
    <m />
  </property>
</object>

perl 言語 配列 @変数名, 各要素はスカラーだから $変数名[インデックス] でアクセス

polytope > @a = (1,2,3,4,5);
polytope > print $a[0];
1
polytope > print $a[4];
5
polytope > 

ハッシュ %変数名, 各要素は $変数名{インデックス} でアクセス

polytope > %b = {};
polytope > $b{"zero"} = 0;
polytope > $b{"one"} = 1;
polytope > $b{"two"} = 2;
polytope > print $b{"two"};
2
polytope > print $b{"zero"};
0

Reference

http://polymake.org/doku.php/documentation
この文書は上記の文書から適当に抜きだして日本語に翻訳したものである