21 #ifndef _GRADIENT_PROJECTION_H 22 #define _GRADIENT_PROJECTION_H 28 #include "libvpsc/solve_VPSC.h" 29 #include "libvpsc/variable.h" 30 #include "libvpsc/constraint.h" 31 #include "libvpsc/rectangle.h" 32 #include "libcola/commondefs.h" 33 #include "libcola/compound_constraints.h" 34 #include "libcola/cluster.h" 35 #include "libcola/sparse_matrix.h" 36 #ifdef MOSEK_AVAILABLE 37 #include "libvpsc/mosek_quad_solve.h" 45 enum SolveWithMosek { Off, Inner, Outer };
47 class GradientProjection {
62 std::valarray<double> *denseQ,
64 const unsigned max_iterations,
67 NonOverlapConstraintsMode nonOverlapConstraints = None,
68 RootCluster* clusterHierarchy =
nullptr,
70 const bool scaling =
false,
71 SolveWithMosek solveWithMosek = Off);
72 static void dumpSquareMatrix(std::valarray<double>
const &L) {
73 unsigned n=
static_cast<unsigned>(floor(sqrt(static_cast<double>(L.size()))));
74 printf(
"Matrix %dX%d\n{",n,n);
75 for(
unsigned i=0;i<n;i++) {
77 for(
unsigned j=0;j<n;j++) {
78 char c=j==n-1?
'}':
',';
79 printf(
"%f%c",1. * L[i*n+j],c);
81 char c=i==n-1?
'}':
',';
86 unsigned getNumStaticVars()
const {
89 ~GradientProjection() {
91 for(vpsc::Constraints::iterator i(gcs.begin()); i!=gcs.end(); i++) {
95 for(
unsigned i=0;i<vars.size();i++) {
99 unsigned solve(std::valarray<double>
const & b, std::valarray<double> & x);
100 void unfixPos(
unsigned i) {
101 if(vars[i]->fixedDesiredPosition) {
103 vars[i]->fixedDesiredPosition=
false;
106 void fixPos(
const unsigned i,
const double pos) {
107 vars[i]->weight=100000.;
108 vars[i]->desiredPosition=pos;
109 vars[i]->fixedDesiredPosition=
true;
115 cola::SparseMatrix
const * Q,
116 std::vector<SeparationConstraint*>
const & ccs,
117 std::vector<straightener::Node*>
const & snodes);
118 std::valarray<double>
const & getFullResult()
const {
123 double computeCost(std::valarray<double>
const &b,
124 std::valarray<double>
const &x)
const;
125 double computeSteepestDescentVector(
126 std::valarray<double>
const &b, std::valarray<double>
const &place,
127 std::valarray<double> &g)
const;
128 double computeScaledSteepestDescentVector(
129 std::valarray<double>
const &b, std::valarray<double>
const &place,
130 std::valarray<double> &g)
const;
131 double computeStepSize(
132 std::valarray<double>
const & g, std::valarray<double>
const & d)
const;
133 bool runSolver(std::valarray<double> & result);
136 unsigned numStaticVars;
138 const unsigned denseSize;
139 std::valarray<double> *denseQ;
140 std::valarray<double> scaledDenseQ;
141 std::vector<vpsc::Rectangle*>* rs;
144 NonOverlapConstraintsMode nonOverlapConstraints;
145 Cluster* clusterHierarchy;
147 unsigned max_iterations;
148 cola::SparseMatrix
const * sparseQ;
155 std::valarray<double> result;
156 #ifdef MOSEK_AVAILABLE 160 SolveWithMosek solveWithMosek;
162 std::vector<OrthogonalEdgeConstraint*> orthogonalEdges;
Incremental solver for Variable Placement with Separation Constraints problem instance.
Definition: solve_VPSC.h:105
ProjectionResult solve(vpsc::Variables &vs, vpsc::Constraints &cs, vpsc::Rectangles &rs, unsigned debugLevel=0)
Constructs a solver and attempts to solve the passed constraints on the passed vars.
Definition: gradient_projection.h:40
libvpsc: Variable Placement with Separation Constraints quadratic program solver library.
Definition: assertions.h:61
std::vector< Variable * > Variables
A vector of pointers to Variable objects.
Definition: constraint.h:38
std::vector< Constraint * > Constraints
A vector of pointers to Constraint objects.
Definition: constraint.h:125
std::vector< Rectangle * > Rectangles
A vector of pointers to Rectangle objects.
Definition: rectangle.h:246
libcola: Force-directed network layout subject to separation constraints library. ...
Definition: box.cpp:25
Dim
Indicates the x- or y-dimension.
Definition: rectangle.h:41
std::vector< UnsatisfiableConstraintInfo * > UnsatisfiableConstraintInfos
A vector of pointers to UnsatisfiableConstraintInfo objects.
Definition: compound_constraints.h:826
std::vector< CompoundConstraint * > CompoundConstraints
A vector of pointers to CompoundConstraint objects.
Definition: compound_constraints.h:259