parse a pdf in c# : Bookmarks in pdf SDK control service wpf web page azure dnn CVX7-part1417

The CVX Users’ Guide, Release 2.1
In rare cases, users have discovered that certain models were rejected with Disciplined convex
programming error messages even though they satisfied theDCPruleset. We have not received a
bug report of this type in quite a long time, however, so we suspect our users have helped us iron out these
issues.
10.4 Handling numerical issues
No developer likes to tell their customers that their software may not work for them. Alas, we have no
choice. The fact is that we cannot guarantee that CVX will be able to solve your problem, even if it is
formulated properly, even if it avoids the use of integer or binary variables, even if it is of reasonable size,
even if it avoids the use of our experimentalexponentialconesupport.
We blame the solvers—but we must come to their defense, too. Even the best and mostmature solvers will
struggle with a particular problem that seems straightforward. Another solver may have no difficulty with
that one, but fail to find an accurate solution on another. While sometimes these challenges are due to bugs
inthesolver’simplementation,quite oftenit issimplyduetolimits imposedby thenature of finite numerical
precision computation. And different problems push those limits to different degrees. So the fact is thatno
solver is perfect, but no solver can be.
When we considermixed-integerproblems, the situation is even worse. Solvers must perform what is
effectively an exhaustivesearch among the integer variables todetermine the correct solution. Yes, there are
some intelligent and innovative ways to speed up that search, and the performance of mixed-integer solvers
has improved dramatically over the years. But there will always be models for which the exhaustive search
willsimply take toolong.
None of this is much comfortif itis your model the solver is struggling with. Here are some practical tips if
youencounter this problem:
Try a different solver. Use the cvx_solver command for this. If youare using Gurobior MOSEK, don’t
hesitate to try one of the free solvers if they are compatible with your problem.
Reduce the precision. Consider inserting cvx_precision medium or even cvx_precision low
into your problem to see if that allows the solver to exit successfully. Of course, if it does succeed,
make sure to check the results to see if they are acceptable for your application. If they are not,
consider some of the other advice here to see if the solvability of your modelmay be improved.
Remove constraints. If you think thatone or more of the constraints might not be active atthe solution, try
removing them. If the solver terminates, you can confirm that your guess was correct by examining
the solution to the modified problem.
Add constraints. Consider adding simple bounds to the constraints to reduce the size of the feasible set.
This will sometimes improve the numerical conditioning of the problem. Make them as tight as you
can without impinging on the optimal set. If this modified problem is successfully solved, check the
solution to see if any of the added bounds are active. If they are, relaxthem, andtry again.
Watch for scaling issues. Scaling issues are the most vexing problems for numerical solvers to deal with.
Solvers will often re-scale the problem to reduce the dynamic range of the numerical coefficients, but
doing so sometimes leads to undesirable effects on the solution. It is better to avoid scaling issues
during the modeling process. Don’t mix values of wildly different magnitudes, such as 1e-3 and
10.4. Handling numerical issues
65
Bookmarks in pdf - add, remove, update PDF bookmarks in C#.net, ASP.NET, MVC, Ajax, WinForms, WPF
Empower Your C# Project with Rapid PDF Internal Navigation Via Bookmark and Outline
add bookmarks to pdf reader; how to create bookmarks in pdf file
Bookmarks in pdf - VB.NET PDF bookmark library: add, remove, update PDF bookmarks in vb.net, ASP.NET, MVC, Ajax, WinForms, WPF
Empower Your VB.NET Project with Rapid PDF Internal Navigation Via Bookmark and Outline
adding bookmarks in pdf; convert excel to pdf with bookmarks
The CVX Users’ Guide, Release 2.1
1e20. Even better, try to avoid any numerical values (both in fixed parameters and likely values of
the variables) that exceed 1e8 inabsolute value.
Try equivalent reformulations. It is quite likely that your model can be expressed in a variety of different
ways. Certainly, youshould begin with themostobviousandnaturalformulation; butif you encounter
numerical issues, a reformulation may often solve them. One reformulation we highly recommend is
to eliminate quadratic forms;seethissection for more details.
Reachout tothe CVX Forum. Share your struggles with thelargerCVXcommunity! Perhaps they will
have concrete suggestions for improving the solvability of your model.
10.5 CVX Professional support
Paid CVX Professional users will receive support through a trouble-ticket support system, so that they can
have confidence that their issues are being addressed promptly. This infrastructure is still under develop-
ment; we will update this section and the Web site with more information once it has been completed.
66
Chapter 10. Support
VB.NET PDF File Compress Library: Compress reduce PDF size in vb.
document file. Remove bookmarks, annotations, watermark, page labels and article threads from PDF while compressing. Also a preview
how to add bookmark in pdf; adding bookmarks to a pdf
C# PDF File Split Library: Split, seperate PDF into multiple files
Split PDF file by top level bookmarks. The following C# codes explain how to split a PDF file into multiple ones by PDF bookmarks or outlines.
creating bookmarks pdf files; how to add bookmarks to pdf files
CHAPTER
ELEVEN
ADVANCED TOPICS
Note: Inthis sectionwe describea number of the more advanced capabilities of CVX. We recommendthat
youskip this section at first, untilyou are comfortable with the basic capabilities described above.
11.1 Eliminating quadratic forms
One particular reformulation that we strongly encourage is to eliminate quadratic forms—thatis, functions
like sum_square, sum(square(.)) or quad_form—whenever itis possible to construct equivalent
models using norm instead. Our experience tells us that quadratic forms often pose a numerical challenge
for the underlying solvers that CVX uses.
We acknowledge that this advice goes against conventional wisdom: quadratic forms are the prototypical
smooth convex function, while norms are nonsmooth and therefore unwieldy. But with the conic solvers
that CVX uses, this wisdom is exactly backwards. It is the norm that is best suited for conic formulation
and solution. Quadratic forms are handled by converting them to a conic form—using norms, in fact! This
conversion process poses some interesting scaling challenges. It is better if the modeler can eliminate the
need to perform this conversion.
For a simple example of such a change, consider the objective
minimize( sum_square( A
*
x - b ) )
In exact arithmetic, this is precisely equivalent to
minimize( square_pos( norm( A
*
x - b ) ) )
But equivalence is alsopreserved if we eliminate the square altogether:
minimize( norm( A
*
x - b ) )
The optimal value of x is identical in all three cases, but this last version is likely to produce more accurate
results. Of course, if you need the value of the squared norm, you can always recover it by squaring the
norm after the fact.
Conversions using quad_form can sometimes be a bit more difficult. For instance, consider
quad_form( A
*
x - b, Q ) <= 1
67
VB.NET PDF File Split Library: Split, seperate PDF into multiple
Demo Code in VB.NET. The following VB.NET codes explain how to split a PDF file into multiple ones by PDF bookmarks or outlines.
export pdf bookmarks to text; how to bookmark a pdf in reader
C# PDF File Compress Library: Compress reduce PDF size in C#.net
NET framework. Remove bookmarks, annotations, watermark, page labels and article threads from PDF while compressing. C# class demo
create bookmark pdf file; export excel to pdf with bookmarks
The CVX Users’ Guide, Release 2.1
where Q is a positive definite matrix. The equivalentnorm version is
norm( Qsqrt
*
( A
*
x - b ) ) <= 1
where Qsqrt is an appropriate matrixsquarerootof Q. One option is tocompute the symmetricsquare root
Qsqrt = sqrtm(Q), but this computation destroys sparsity. If Q is sparse, itis likely worth the effort to
compute a sparse Cholesky-based square root:
[ Qsqrt, p, S
] = chol( Q );
Qsqrt = Qsqrt
*
S;
Sometimes an effective reformulation requires a practical understanding of what it means for problems to
be equivalent. For instance, suppose we wanted to add an ‘
1
regularization term to the objective above,
weighted by some fixed, positive lambda:
minimize( sum_square( A
*
x - b ) + lambda
*
norm( x, 1 ) )
In this case, we typically do not care about the specific values of lambda; rather we are varying it over a
range to study the tradeoff between the residual of A
*
x-b and the 1-norm of x. The same tradeoff can be
studied by examining this modified model:
minimize( norm( A
*
x - b ) + lambda2
*
norm( x, 1 ) )
This is not precisely the same model; setting lambda and lambda2 to the same value will not yield
identical values of x. But both models do trace the same tradeoff curve—only the second form is likely to
produce more accurate results.
11.2 Indexed dual variables
In some models, the number of constraints depends on the model parameters—not just their sizes. It is
straightforward tobuildsuchmodelsin CVX using, say, a Matlab for loop. In order toassign each of these
constraints a separate dual variable, we must find a way to adjust the number of dual variables as well. For
this reason, CVX supports indexed dual variables. In reality, they are simply standard Matlab cell arrays
whose entries are CVX dual variable objects.
Let us illustratebyexample how todeclare and use indexed dualvariables. Consider the following semidef-
inite program from theSeDuMiexamples:
minimize
P
n
i=1
(n   i)X
ii
subjectto
P
n
i=1
X
i;i+k
=b
k
;k = 1;2;:::;n
X 0
This problem minimizes a weighted sum of the main diagonal of a positive semidefinite matrix, while
holding the sums along each diagonal constant. The parameters of the problem are the elements of the
vector b 2 R
n
,and the optimization variable is a symmetric matrix X 2 R
nn
. The CVX version of this
model is
cvx_begin
variable X( n, n ) symmetric
minimize( ( n - 1 : -1 : 0 )
*
diag( X ) );
for k = 0 : n-1,
68
Chapter 11. Advanced topics
.NET PDF SDK - Description of All PDF Processing Control Feastures
Fully featured PDF Viewer in HTML5; Outstanding rendering of PDF documents; Full page navigation, zooming & rotation; Outlines, bookmarks, & thumbnail display;
bookmarks pdf reader; add bookmarks to pdf file
XDoc.Word for .NET, Advanced .NET Word Processing Features
& rotation; Outlines, bookmarks, & thumbnail display; Integrated annotation; More about Web Viewer ▶. Conversion. Word Create. Create Word from PDF; Create Word
add bookmarks pdf; add bookmarks to pdf preview
The CVX Users’ Guide, Release 2.1
sum( diag( X, k ) ) == b( k+1 );
end
X == semidefinite(n);
cvx_end
If we wish to obtain dual information for the n simple equality constraints, we need a way to assign each
constraint in the for loop a separate dual variable. This is accomplished as follows:
cvx_begin
variable X( n, n ) symmetric
dual variables y{n}
minimize( ( n - 1 : -1 : 0 )
*
diag( X ) );
for k = 0 : n-1,
sum( diag( X, k ) ) == b( k+1 ) : y{k+1};
end
X == semidefinite(n);
cvx_end
The statement dual variables y{n} allocates a cell array of n dual variables, and stores the result
in the Matlab variable Z. The equality constraint in the for loop has been augmented with a reference to
y{k+1}, so that each constraint is assigned a separate dual variable. When the cvx_end command is
issued, CVX will compute the optimal values of these dual variables, and deposit them into an n-element
cell array y.
This example admittedly is a bit simplistic. With a bit of careful arrangement, it is possible to rewrite this
model so that the n equality constraints canbecombined into asinglevector constraint, which inturn would
require only a single vector dual variable.
1
For a more complex example that is not amenable to such a
simplification, see the file
examples/cvxbook/Ch07_statistical_estim/cheb.m
in the CVX distribution. In that problem, each constraint in the for loop is a linear matrix inequality, not a
scalar linear equation; so the indexed dual variables are symmetric matrices, not scalars.
11.3 The successive approximation method
Note: If you were referredto this web pagebyCVX’s warningmessage: welcome! Pleaseread this section
carefully to fully understand why using functions like log, exp, etc. within CVX models requires special
care.
Prior to version 1.2, the functions exp, log, log_det, and other functions from the exponential family
could not be used within CVX. Unfortunately, CVX utilizes symmetric primal/dual solvers that simply
cannotsupport those functions natively
2
,and a variety of factors prevent us from incorporating other types
1
Indeed,a future versionofCVXwillsupportthe use ofthe Matlabfunctionspdiags,whichwillreducetheentire forloop
tothesingleconstraint spdiags(X,0:n-1)==b.
2
Technicallythere are a couple of exceptions here. Firstof all, SDPT3does, in fact,support the existence oflogarithms and
log_detterms intheobjective function. However,itdoesn’tsupport suchterms withinconstraints. Unfortunately,becauseCVX
does not differentiate between objective terms and constraint terms internally, it is not able to utilize this capability of SDPT3.
Secondly, this section was written before the inclusion of MOSEK support in CVX, and CVX does indeed provide support for
11.3. The successive approximation method
69
XDoc.Excel for .NET, Comprehensive .NET Excel Imaging Features
zooming & rotation; Outlines, bookmarks, & thumbnail display; Integrated annotation; More about Web Viewer ▶. Excel Convert. Convert Excel to PDF; Convert Excel
bookmarks pdf file; export bookmarks from pdf to excel
XDoc.PowerPoint for .NET, All Mature Features Introductions
& rotation; Outlines, bookmarks, & thumbnail display; Integrated annotation; More about Web Viewer ▶. PowerPoint Convert. Convert PowerPoint to PDF; Convert
bookmarks in pdf reader; create bookmark pdf
The CVX Users’ Guide, Release 2.1
of solvers into CVX.
Nevertheless, support for these functions was requested quite frequently. For this reason, we constructed a
successive approximationheuristic thatallows the symmetric primal/dual solvers to supportthe exponential
family of functions. A precise description of the approach is beyond the scope of this text, but roughly
speaking, the method proceeds as follows:
1. Choose an initial approximation centerpoint x
c
=0.
2. Construct a polynomial approximation for each log/exp/entropy term which is accurate in the neigh-
borhoodof x
c
.
3. Solve this approximate model to obtain its optimalpoint x.
4. If x satisfies the optimality conditions for the orignal model to sufficientprecision, exit.
5. Otherwise, shift x
c
towards x, and repeat steps 2-5.
Again, this is a highly simplified description of the approach; for instance, we actually employ both the
primal and dual solutions to guide our judgements for shiftingx
c
and terminating.
This approach has proven surprisingly effective for many problems. However, as with many heuristic ap-
proaches, it is not perfect. It will sometimes fail to converge even for problems known to have solutions.
Even when it does converge, it is severaltimes slower than the standard solver, due to its iterative approach.
Therefore, itis best to use itsparingly and carefully. Here are some specific usage tips:
• First, confirm that the log/exp/entropy terms are truly necessary for your model. In many cases, an
exactly equivalent model can be constructed without them, and that should always be preferred. For
instance, the constraint
sum_log(x) >= 10
can be expressed in terms of the geo_mean function as
geo_mean(x) >= log(10)^(1/length(x))
Many determinant maximization problems are commonly written using log_det, but in fact that is
often unnecessary. For instance, consider the objective
minimize( log_det(X) )
CVX actually converts this internally to this:
minimize( n
*
log(det_rootn(X)) )
So whatyou can do instead is simply remove the logarithm, and solve this instead:
minimize( det_rootn(X) )
The value of log_det(X) can simply be computed after the model is completed. Unfortunately,
this only works if log_det is the only term in the objective; so, for instance, this function cannot,
unfortunately, be converted in a similar fashion:
smoothnonlinearitiesinits solver. Butthiscapabilityis noteasytouseinMATLAB.
70
Chapter 11. Advanced topics
The CVX Users’ Guide, Release 2.1
minimize( log_det(X) + trace(C
*
X) )
• Second, try different solvers. For instance, SeDuMi and MOSEK tend to be more effective with the
successive approximation method than SDPT3. So if the default solver choice fails to give a solution
to your model, try switching to one of these solvers.
• Third, try smaller instances of your problem. If they succeed where the larger instance fails, then at
leastyou canconfirm if the model is behaving as you hope beforeconsidering alternative options like
adifferent solver.
The bottom line, unfortunately, is that we cannotguaranteethat the successive approximation approachwill
successfullyhandleyour specific models. If youencounter problems, youareinvitedtosubmita bug report,
but we will not be able to promise a fix.
11.3.1 Suppressing the warning
Because of all of these caveats, we believe that it is necessary to issue a warning when it is used so that
users understandits experimental nature. This warningappears the firsttimeyou attempt tospecify a model
in CVX that uses an function thatrequires the successive approximation method. In fact, that warning may
very well have broughtyou to this section of the manual.
If you wish to suppress this warning in the future, simply issue the command
cvx_expert true
before you construct your model. If you wish to suppress this message for all future sessions of MATLAB,
follow this command with the cvx_save_prefs command.
11.4 Power functions and p-norms
In order to implement the convex or concave branches of the power function x
p
and p-norms kxk
p
for
general values of p, CVX uses an enhanced version of the SDP/SOCP conversion method described by
[AG00].Thisapproachisexact—aslongastheexponentpisrational.Todetermineintegralvaluesp
n
;p
d
such thatp
n
=p
d
=p, CVX uses Matlab’s rat functionwithits default toleranceof 10
6
.There iscurrently
no way to change this tolerance. See theMATLABdocumentationfor the rat function for more details.
The complexityof the resultingmodeldepends roughlyonthesize of the values p
n
andp
d
.Let us introduce
amore precise measure of this complexity. For p = 2, a constraintx
p
y can be represented with exactly
one 2 2 LMI:
x
2
y
()
y x
x 1
0:
For other values of p = p
n
=p
d
,CVX generates a number of 2  2 LMIs that depends on both p
n
and p
d
;
we denote this number by k(p
n
;p
d
). (In some cases additional linear constraints are also generated, but we
ignore them for this analysis.) For instance, for p = 3=1, we have
x
3
y;x  0
()
9z
z x
x 1
0:
y z
z x
0:
11.4. Power functions and p-norms
71
The CVX Users’ Guide, Release 2.1
So k(3;1) = 2. An empirical study has shown that for p = p
n
=p
d
>1, we have
k(p
n
;p
d
) log
2
p
n
+(p
n
)
where the(p
n
)termgrows veryslowly comparedtothe log
2
term. Indeed, for p
n
4096, we have verified
that(p
n
)is usually 1 or 2, but occasionally 0 or 3. Similar results are obtained for 0 < p < 1 and p < 0.
The cost of this SDP representation is relatively small for nearly all useful values of p. Nevertheless,
CVX issues a warning whenever k(p
n
;p
d
) > 10 to insure that the user is not surprised by any unex-
pected slowdown. In the event that this threshold does not suit you, you may change it using the com-
mand cvx_power_warning(thresh), where thresh is the desired cutoff value. Setting the thresh-
old to Inf disables it completely. As with the command cvx_precision, you can place a call to
cvx_power_warning within a model to change the threshold for a single model; or outside of a model
to make a global change. The command always returns the previous value of the threshold, so you can save
it and restore it upon completion of your model, if you wish. You can query the current value by calling
cvx_power_warning withno arguments.
11.5 Overdetermined problems
The status message Overdetermined commonlyoccurs whenstructurein avariableorsetisnotproperly
recognized. For example, consider the problem of finding the smallest diagonal addition to a matrix W 2
R
nn
to make it positive semidefinite:
minimize Tr(D)
subject to W + D  0
Ddiagonal
In CVX, this problem might be expressed as follows:
n = size(W,1);
cvx_begin
variable D(n,n) diagonal;
minimize( trace( D ) );
subject to
W + D == semidefinite(n);
cvx_end
If we apply this specification to the matrix W=randn(5,5), a warning is issued,
Warning: Overdetermined equality constraints;
problem is likely infeasible.
and the variable cvx_status is setto Overdetermined.
What has happened here is that the unnamed variable returned by statement semidefinite(n) is sym-
metric, but W is fixed and unsymmetric. Thus the problem, as stated, is infeasible. But there are also n
2
equality constraints here, and only n + n  (n + 1)=2 unique degrees of freedom—thus the problem is
overdetermined. We cancorrectthis problem byreplacing the equality constraint with
72
Chapter 11. Advanced topics
The CVX Users’ Guide, Release 2.1
sym( W ) + D == semidefinite(n);
sym is afunction wehave providedthat extracts the symmetric part of its argument;thatis, sym(W) equals
0.5
*
( W + W’ ).
11.6 Adding new functions to the atom library
CVX allows new convex and concave functions to be defined and added to the atom library, in two ways,
described in this section. The first method is simple, and can (and should) be used by many users of CVX,
since it requires only a knowledge of the basic DCP ruleset. The second method is very powerful, but a bit
complicated, and should be considered an advanced technique, to be attempted only by those who are truly
comfortable withconvex analysis, disciplined convex programming, and CVX in its current state.
Please let us know if you have implemented a convex or concave function thatyou thinkwould be useful to
other users; we will be happy to incorporate it in a future release.
11.6.1 New functions via the DCP ruleset
The simplest way to construct a new function that works within CVX is to construct it using expressions
thatfully conformtothe DCP ruleset. Consider, for instance, the deadzone function
f(x) = maxfjxj  1;0g =
(
0
jxj  1
 1 x > 1
To implementthis function in CVX, simplycreate a file deadzone.m containing
function y = deadzone( x )
y = max( abs( x ) - 1, 0 )
This function works just as you expect it would outside of CVX — thatis, when its argument is numerical.
Butthanks toMatlab’s operator overloading capability, itwillalso work withinCVX if called with anaffine
argument. CVX willproperly conclude that the function is convex, because allof the operations carriedout
conform to the rules of DCP: abs is recognized as a convex function; we can subtract a constant from it,
and we can take the maximum of the result and 0, which yields a convex function. So we are free to use
deadzone anywhere in a CVX specification that we might use abs, for example, because CVX knows
thatit is a convex function.
Let us emphasize that when defining a function this way, the expressions you use must conform to the DCP
ruleset, just as they would if they had been inserted directly into a CVX model. For example, if we replace
max with min above; e.g.,
function y = deadzone_bad( x )
y = min( abs( x ) - 1, 0 )
then the modified function fails to satisfy the DCP ruleset. The function will work outside of a CVX
specification, happily computing the value minfjxj  1;0g for a numerical argument x. But inside a CVX
specification, invoked with a nonconstant argument, itwill generate an error.
11.6. Adding new functions to the atom library
73
The CVX Users’ Guide, Release 2.1
11.6.2 New functions via partially specified problems
Amore advanced method for defining new functions in CVX relies on the following basic result of convex
analysis. Suppose that S  R
n
R
m
is a convex set and g : (R
n
R
m
) ! (R [ +1) is a convex
function. Then
f: R
n
!(R [ +1); f(x) , inf fg(x;y) j 9y; (x;y) 2 S g
is also a convex function. (This rule is sometimes called the partialminimization rule.) We can thinkof the
convexfunctionf as theoptimalvalue of afamily of convexoptimizationproblems, indexedor parametrized
by x,
minimize g(x;y)
subjectto (x;y) 2 S
withoptimization variable y.
One special case should be very familiar: if m = 1 and g(x;y) , y, then
f(x) , inf fy j 9y; (x;y) 2 S g
gives the classic epigraph representation of f:
epif = S + (f0g R
+
);
where 0 2 R
n
.
InCVX you candefine aconvexfunction inthisverymanner, thatis, astheoptimalvalue of a parameterized
familyof disciplined convex programs. We call the underlying convex program in such cases an incomplete
specification—so named because the parameters (that is, the function inputs) are unknown when the speci-
fication is constructed. The conceptof incomplete specifications canatfirst seem a bit complicated, but itis
very powerful mechanism thatallows CVX to supporta wide variety of functions.
Let us look atan example to see how this works. Consider the unit-halfwidthHuber penalty function h(x):
h: R ! R; h(x) ,
(
x
2
jxj  1
2jxj 1 jxj  1
:
We canexpress the Huber function in terms of the following familyof convex QPs, parameterized by x:
minimize 2v +w
2
subjectto jxj  v+ w
w 1; v  0
withscalar variables v and w. The optimal value of this simple QP is equal to the Huber penalty function of
x. We note thatthe objective and constraint functions inthis QPare (jointly) convex in v, w and x.
We canimplementthe Huber penalty function in CVX as follows:
function cvx_optval = huber( x )
cvx_begin
variables w v;
minimize( w^2 + 2
*
v );
subject to
abs( x ) <= w + v;
w <= 1; v >= 0;
cvx_end
74
Chapter 11. Advanced topics
Documents you may be interested
Documents you may be interested