6 const gfan::ZVector &interiorPoint,
const gfan::ZMatrix &normalVectors)
8 int k = normalVectors.getHeight();
9 std::vector<bool> needToFlip(k,
true);
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];
17 for (groebnerCones::iterator sigma = tropicalVariety.begin(); sigma!=tropicalVariety.end(); sigma++)
19 if (sigma->contains(interiorPoint))
21 for (
int i=0;
i<
k;
i++)
23 if (needToFlip[
i] && sigma->contains(testVectors[
i]))
24 needToFlip[i] =
false;
29 for (groebnerCones::iterator sigma = workingList.begin(); sigma!=workingList.end(); sigma++)
31 if (sigma->contains(interiorPoint))
33 for (
int i=0;
i<
k;
i++)
35 if (needToFlip[
i] && sigma->contains(testVectors[
i]))
36 needToFlip[i] =
false;
48 workingList.insert(startingCone);
50 std::set<gfan::ZVector> finishedInteriorPoints;
51 while(!workingList.empty())
59 for (
int i=0;
i<interiorPoints.getHeight();
i++)
64 gfan::ZVector interiorPoint = interiorPoints[
i];
75 for (
int j=0;
j<normalVectors.getHeight();
j++)
80 workingList.insert(neighbour);
84 finishedInteriorPoints.insert(interiorPoint);
88 workingList.erase(sigma);
89 tropicalVariety.insert(sigma);
91 Print(
"cones finished: %lu cones in working list: %lu\n",
92 (
unsigned long)tropicalVariety.size(), (
unsigned long)workingList.size());
99 const gfan::ZMatrix &interiorPoints)
101 int k = interiorPoints.getHeight();
102 std::vector<bool> needToFlip(k,
true);
104 for (groebnerCones::iterator sigma = groebnerFan.begin(); sigma!=groebnerFan.end(); sigma++)
106 for (
int i=0;
i<
k;
i++)
108 if (needToFlip[
i] && sigma->contains(interiorPoints[
i]))
109 needToFlip[i] =
false;
113 for (groebnerCones::iterator sigma = workingList.begin(); sigma!=workingList.end(); sigma++)
115 for (
int i=0;
i<
k;
i++)
117 if (needToFlip[
i] && sigma->contains(interiorPoints[
i]))
118 needToFlip[i] =
false;
132 workingList.insert(startingCone);
133 std::set<gfan::ZVector> finishedInteriorPoints;
136 while(!workingList.empty())
143 workingList.erase(workingList.begin());
146 gfan::ZMatrix interiorPoints = interiorPointsAndOuterFacetNormals.first;
147 gfan::ZMatrix outerFacetNormals = interiorPointsAndOuterFacetNormals.second;
150 for (
int i=0;
i<interiorPoints.getHeight();
i++)
152 gfan::ZVector interiorPoint = interiorPoints[
i];
154 if (needToFlip[
i]==
true)
157 workingList.insert(neighbour);
159 finishedInteriorPoints.insert(interiorPoints[
i]);
163 groebnerFan.insert(sigma);
165 Print(
"cones finished: %lu cones in working list: %lu\n",
166 (
unsigned long)groebnerFan.size(), (
unsigned long)workingList.size());
const tropicalStrategy * getTropicalStrategy() const
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)
const CanonicalForm CFMap CFMap int &both_non_zero int n
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
std::pair< gfan::ZMatrix, gfan::ZMatrix > interiorPointsAndNormalsOfFacets(const gfan::ZCone zc, const std::set< gfan::ZVector > &exceptThesePoints, const bool onlyLowerHalfSpace)
groebnerCones groebnerTraversal(const groebnerCone startingCone)
std::set< groebnerCone, groebnerCone_compare > groebnerCones
void deletePolynomialData()
groebnerCones tropicalTraversalMinimizingFlips(const groebnerCone startingCone)
poly initial(const poly p, const ring r, const gfan::ZVector w)
Returns the initial form of p with respect to w.
BOOLEAN tropicalVariety(leftv res, leftv args)
ideal getPolynomialIdeal() const
bool restrictToLowerHalfSpace() const
returns true, if valuation non-trivial, false otherwise
implementation of the class groebnerCone
ring getPolynomialRing() const
std::vector< bool > checkNecessaryGroebnerFlips(const groebnerCones &groebnerFan, const groebnerCones &workingList, const gfan::ZMatrix &interiorPoints)
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)
bool isValuationTrivial() const