Functions
tropicalTraversal.cc File Reference
#include <bbcone.h>
#include <groebnerCone.h>
#include <tropicalCurves.h>

Go to the source code of this file.

Functions

std::vector< bool > checkNecessaryTropicalFlips (const groebnerCones &tropicalVariety, const groebnerCones &workingList, const gfan::ZVector &interiorPoint, const gfan::ZMatrix &normalVectors)
 
groebnerCones tropicalTraversalMinimizingFlips (const groebnerCone startingCone)
 
std::vector< bool > checkNecessaryGroebnerFlips (const groebnerCones &groebnerFan, const groebnerCones &workingList, const gfan::ZMatrix &interiorPoints)
 
groebnerCones groebnerTraversal (const groebnerCone startingCone)
 

Function Documentation

std::vector<bool> checkNecessaryGroebnerFlips ( const groebnerCones groebnerFan,
const groebnerCones workingList,
const gfan::ZMatrix &  interiorPoints 
)

Definition at line 98 of file tropicalTraversal.cc.

100 {
101  int k = interiorPoints.getHeight();
102  std::vector<bool> needToFlip(k,true);
103 
104  for (groebnerCones::iterator sigma = groebnerFan.begin(); sigma!=groebnerFan.end(); sigma++)
105  {
106  for (int i=0; i<k; i++)
107  {
108  if (needToFlip[i] && sigma->contains(interiorPoints[i]))
109  needToFlip[i] = false;
110  }
111  }
112 
113  for (groebnerCones::iterator sigma = workingList.begin(); sigma!=workingList.end(); sigma++)
114  {
115  for (int i=0; i<k; i++)
116  {
117  if (needToFlip[i] && sigma->contains(interiorPoints[i]))
118  needToFlip[i] = false;
119  }
120  }
121 
122  return needToFlip;
123 }
gfan::ZFan * groebnerFan(const tropicalStrategy currentStrategy)
Definition: groebnerFan.cc:28
int k
Definition: cfEzgcd.cc:93
int i
Definition: cfEzgcd.cc:123
std::vector<bool> checkNecessaryTropicalFlips ( const groebnerCones tropicalVariety,
const groebnerCones workingList,
const gfan::ZVector &  interiorPoint,
const gfan::ZMatrix &  normalVectors 
)

Definition at line 5 of file tropicalTraversal.cc.

7 {
8  int k = normalVectors.getHeight();
9  std::vector<bool> needToFlip(k,true);
10 
11  int n = normalVectors.getWidth();
12  gfan::ZMatrix testVectors(k,n);
13  gfan::ZVector bigInteriorPoint = 1000*interiorPoint;
14  for (int i=0; i<k; i++)
15  testVectors[i] = bigInteriorPoint+normalVectors[i];
16 
17  for (groebnerCones::iterator sigma = tropicalVariety.begin(); sigma!=tropicalVariety.end(); sigma++)
18  {
19  if (sigma->contains(interiorPoint))
20  {
21  for (int i=0; i<k; i++)
22  {
23  if (needToFlip[i] && sigma->contains(testVectors[i]))
24  needToFlip[i] = false;
25  }
26  }
27  }
28 
29  for (groebnerCones::iterator sigma = workingList.begin(); sigma!=workingList.end(); sigma++)
30  {
31  if (sigma->contains(interiorPoint))
32  {
33  for (int i=0; i<k; i++)
34  {
35  if (needToFlip[i] && sigma->contains(testVectors[i]))
36  needToFlip[i] = false;
37  }
38  }
39  }
40 
41  return needToFlip;
42 }
const CanonicalForm CFMap CFMap int &both_non_zero int n
Definition: cfEzgcd.cc:52
int k
Definition: cfEzgcd.cc:93
BOOLEAN tropicalVariety(leftv res, leftv args)
int i
Definition: cfEzgcd.cc:123
groebnerCones groebnerTraversal ( const groebnerCone  startingCone)

Pick a maximal Groebner cone from the working list and compute interior points on its facets as well as outer facet normals

Definition at line 126 of file tropicalTraversal.cc.

127 {
128  const tropicalStrategy* currentStrategy = startingCone.getTropicalStrategy();
129 
131  groebnerCones workingList;
132  workingList.insert(startingCone);
133  std::set<gfan::ZVector> finishedInteriorPoints;
134  bool onlyLowerHalfSpace = !currentStrategy->isValuationTrivial();
135 
136  while(!workingList.empty())
137  {
138  /**
139  * Pick a maximal Groebner cone from the working list
140  * and compute interior points on its facets as well as outer facet normals
141  */
142  groebnerCone sigma=*(workingList.begin());
143  workingList.erase(workingList.begin());
144 
145  std::pair<gfan::ZMatrix,gfan::ZMatrix> interiorPointsAndOuterFacetNormals = interiorPointsAndNormalsOfFacets(sigma.getPolyhedralCone(), finishedInteriorPoints, onlyLowerHalfSpace);
146  gfan::ZMatrix interiorPoints = interiorPointsAndOuterFacetNormals.first;
147  gfan::ZMatrix outerFacetNormals = interiorPointsAndOuterFacetNormals.second;
148  std::vector<bool> needToFlip = checkNecessaryGroebnerFlips(groebnerFan,workingList, interiorPoints);
149 
150  for (int i=0; i<interiorPoints.getHeight(); i++)
151  {
152  gfan::ZVector interiorPoint = interiorPoints[i];
153 
154  if (needToFlip[i]==true)
155  {
156  groebnerCone neighbour = sigma.flipCone(interiorPoint,outerFacetNormals[i]);
157  workingList.insert(neighbour);
158  }
159  finishedInteriorPoints.insert(interiorPoints[i]);
160  }
161 
162  sigma.deletePolynomialData();
163  groebnerFan.insert(sigma);
164  if (printlevel > 0)
165  Print("cones finished: %lu cones in working list: %lu\n",
166  (unsigned long)groebnerFan.size(), (unsigned long)workingList.size());
167  }
168  return groebnerFan;
169 }
const tropicalStrategy * getTropicalStrategy() const
Definition: groebnerCone.h:67
#define Print
Definition: emacs.cc:83
groebnerCone flipCone(const gfan::ZVector &interiorPoint, const gfan::ZVector &facetNormal) const
Given an interior point on the facet and the outer normal factor on the facet, returns the adjacent g...
gfan::ZFan * groebnerFan(const tropicalStrategy currentStrategy)
Definition: groebnerFan.cc:28
gfan::ZCone getPolyhedralCone() const
Definition: groebnerCone.h:65
std::pair< gfan::ZMatrix, gfan::ZMatrix > interiorPointsAndNormalsOfFacets(const gfan::ZCone zc, const std::set< gfan::ZVector > &exceptThesePoints, const bool onlyLowerHalfSpace)
Definition: bbcone.cc:1674
std::set< groebnerCone, groebnerCone_compare > groebnerCones
Definition: groebnerCone.h:24
void deletePolynomialData()
Definition: groebnerCone.h:54
int i
Definition: cfEzgcd.cc:123
std::vector< bool > checkNecessaryGroebnerFlips(const groebnerCones &groebnerFan, const groebnerCones &workingList, const gfan::ZMatrix &interiorPoints)
int printlevel
Definition: febase.cc:42
bool isValuationTrivial() const
groebnerCones tropicalTraversalMinimizingFlips ( const groebnerCone  startingCone)

Pick an element the working list and compute interior points on its facets

For each interior point, compute the rays of the tropical star in that point

Definition at line 44 of file tropicalTraversal.cc.

45 {
47  groebnerCones workingList;
48  workingList.insert(startingCone);
49  const tropicalStrategy* currentStrategy=startingCone.getTropicalStrategy();
50  std::set<gfan::ZVector> finishedInteriorPoints;
51  while(!workingList.empty())
52  {
53  /**
54  * Pick an element the working list and compute interior points on its facets
55  */
56  groebnerCone sigma=*(workingList.begin());
57  gfan::ZMatrix interiorPoints = interiorPointsOfFacets(sigma.getPolyhedralCone(),finishedInteriorPoints);
58 
59  for (int i=0; i<interiorPoints.getHeight(); i++)
60  {
61  /**
62  * For each interior point, compute the rays of the tropical star in that point
63  */
64  gfan::ZVector interiorPoint = interiorPoints[i];
65  if (!(currentStrategy->restrictToLowerHalfSpace() && interiorPoint[0].sign()==0))
66  {
67  ideal inI = initial(sigma.getPolynomialIdeal(),sigma.getPolynomialRing(),interiorPoint);
68  gfan::ZMatrix normalVectors = raysOfTropicalStar(inI,
69  sigma.getPolynomialRing(),
70  interiorPoint,
71  sigma.getTropicalStrategy());
72  id_Delete(&inI,sigma.getPolynomialRing());
73 
74  std::vector<bool> needToFlip = checkNecessaryTropicalFlips(tropicalVariety,workingList,interiorPoint,normalVectors);
75  for (int j=0; j<normalVectors.getHeight(); j++)
76  {
77  if (needToFlip[j])
78  {
79  groebnerCone neighbour = sigma.flipCone(interiorPoint,normalVectors[j]);
80  workingList.insert(neighbour);
81  }
82  }
83  }
84  finishedInteriorPoints.insert(interiorPoint);
85  }
86 
87  sigma.deletePolynomialData();
88  workingList.erase(sigma);
89  tropicalVariety.insert(sigma);
90  if (printlevel > 0)
91  Print("cones finished: %lu cones in working list: %lu\n",
92  (unsigned long)tropicalVariety.size(), (unsigned long)workingList.size());
93  }
94  return tropicalVariety;
95 }
const tropicalStrategy * getTropicalStrategy() const
Definition: groebnerCone.h:67
#define Print
Definition: emacs.cc:83
groebnerCone flipCone(const gfan::ZVector &interiorPoint, const gfan::ZVector &facetNormal) const
Given an interior point on the facet and the outer normal factor on the facet, returns the adjacent g...
const ideal
Definition: gb_hack.h:42
std::vector< bool > checkNecessaryTropicalFlips(const groebnerCones &tropicalVariety, const groebnerCones &workingList, const gfan::ZVector &interiorPoint, const gfan::ZMatrix &normalVectors)
void id_Delete(ideal *h, ring r)
gfan::ZCone getPolyhedralCone() const
Definition: groebnerCone.h:65
std::set< groebnerCone, groebnerCone_compare > groebnerCones
Definition: groebnerCone.h:24
void deletePolynomialData()
Definition: groebnerCone.h:54
poly initial(const poly p, const ring r, const gfan::ZVector w)
Returns the initial form of p with respect to w.
Definition: initial.cc:32
int j
Definition: myNF.cc:70
BOOLEAN tropicalVariety(leftv res, leftv args)
ideal getPolynomialIdeal() const
Definition: groebnerCone.h:63
int i
Definition: cfEzgcd.cc:123
bool restrictToLowerHalfSpace() const
returns true, if valuation non-trivial, false otherwise
ring getPolynomialRing() const
Definition: groebnerCone.h:64
int printlevel
Definition: febase.cc:42
gfan::ZMatrix raysOfTropicalStar(ideal I, const ring r, const gfan::ZVector &u, const tropicalStrategy *currentStrategy)
gfan::ZMatrix interiorPointsOfFacets(const gfan::ZCone &zc, const std::set< gfan::ZVector > &exceptThese)
Definition: bbcone.cc:1620