<html><head></head><body style="word-wrap: break-word; -webkit-nbsp-mode: space; -webkit-line-break: after-white-space; "><font class="Apple-style-span" face="Courier">My question doesn't fit into the framework of general sdp problems, but of a rather specialized&nbsp;</font><span class="Apple-style-span" style="font-family: Courier; ">application.</span><div><font class="Apple-style-span" face="Courier"><br></font></div><div><font class="Apple-style-span" face="Courier">Example: &nbsp;the system matrix (let us call it W, and assume it's nun) is PSD and is therefore the Gramian of points in</font></div><div><font class="Apple-style-span" face="Courier">R^d, &nbsp;W = (vi.vj), 1 &lt;= i, j &lt;= d. &nbsp;(Do a Cholesky decomposition, set the vi = the rows, et voilà!) &nbsp;This is actually my main interest in SDP, &nbsp;since I am optimizing geometric problems, where the objects of interest are the points in R^d.</font></div><div><font class="Apple-style-span" face="Courier"><br></font></div><div><font class="Apple-style-span" face="Courier">Often, some of these points are KNOWN; how to enter them? &nbsp;For example, I have developed a code to intersect a family of closed balls</font></div><div><font class="Apple-style-span" face="Courier"><br></font></div><div><font class="Apple-style-span" face="Courier">&nbsp; &nbsp; &nbsp; &nbsp;||x - ci|| &lt;= ri,</font></div><div><font class="Apple-style-span" face="Courier"><br></font></div><div><font class="Apple-style-span" face="Courier">and also COMPLEMENTS of balls,</font></div><div><font class="Apple-style-span" face="Courier"><br></font></div><div><font class="Apple-style-span" face="Courier">&nbsp; &nbsp; ||x - ci|| &gt;= ri,</font></div><div><font class="Apple-style-span" face="Courier"><br></font></div><div><font class="Apple-style-span" face="Courier">(NOT usually thought of as a convex problem!!) where the centers and radii are known. &nbsp;The optimization problem is either to find the CLOSEST point in the intersection to a given point, or a FARTHEST point. &nbsp;(Same problem, as far as SDP is concerned, except for a switch of sign on the objective function.)</font></div><div><font class="Apple-style-span" face="Courier"><br></font></div><div><font class="Apple-style-span" face="Courier">I thought of two approaches: &nbsp;treat the ci as UNKNOWNS, but recapture them (up to SO(n)) by including as constraints</font></div><div><font class="Apple-style-span" face="Courier"><br></font></div><div><font class="Apple-style-span" face="Courier">&nbsp; &nbsp; &nbsp; &nbsp;ci.cj = (known value for the known points).</font></div><div><font class="Apple-style-span" face="Courier"><br></font></div><div><font class="Apple-style-span" face="Courier">But this adds QUADRATICALLY to the number of constraints. &nbsp;The other, which I haven't seen used before, is to treat the standard ON basis of R^d as unknowns: &nbsp;the ei. &nbsp;They're unknown, but we recapture them by adding d(d+1)/2 constraints</font></div><div><font class="Apple-style-span" face="Courier"><br></font></div><div><font class="Apple-style-span" face="Courier">&nbsp; &nbsp; &nbsp; ei.ej = delta_{ij} &nbsp; (Kronecker delta).</font></div><div><font class="Apple-style-span" face="Courier"><br></font></div><div><font class="Apple-style-span" face="Courier">This is quadratic in the dimension, but that's often very small (2 or 3, commonly) in my problems. &nbsp;We then append ONE MORE unknown x and set up the constraints for whatever the problem is in terms of x.x and the x.ei. &nbsp;And there's the linear term I'm interested in: &nbsp;x.ei is the i-th coordinate of x, which is usually impossible to access.</font></div><div><font class="Apple-style-span" face="Courier"><br></font></div><div><font class="Apple-style-span" face="Courier">For example, for the intersection of balls, the constraint ||x-c|| &lt;= r is rephrased as &nbsp;||x - sum(c_i e_i)||^2 &lt;= r^2, or</font></div><div><font class="Apple-style-span" face="Courier"><br></font></div><div><font class="Apple-style-span" face="Courier">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; x.x - 2 sum(c_i x.e_i) &lt;= r^2 - sum_i c_i^2,</font></div><div><font class="Apple-style-span" face="Courier"><br></font></div><div><font class="Apple-style-span" face="Courier">where the RHS is known and all the terms on the left are elements of the system matrix (the coefficients ci are KNOWN, remember).</font></div><div><font class="Apple-style-span" face="Courier"><br></font></div><div><font class="Apple-style-span" face="Courier">Now I'm trying to solve the generalization of the (very old!) problem of finding a circle (or sphere, etc.) of minimal radius which includes each of a given family of spheres. &nbsp;For points (spheres of radius 0) Welzl has an elegant solution which is O(n) in time, and VERY intuitive (blow up a balloon, then gradually shrink it), and I don't think quadratic programming has much to say about it. &nbsp;For REAL spheres (not points), quadratic programming can certainly solve it (and it is a convex problem),&nbsp;</font><span class="Apple-style-span" style="font-family: Courier; ">because the condition</span></div><div><font class="Apple-style-span" face="Courier"><br></font></div><div><font class="Apple-style-span" face="Courier">&nbsp; &nbsp; B(c_i, r_i) \subset B(x, rho)</font></div><div><font class="Apple-style-span" face="Courier"><br></font></div><div><font class="Apple-style-span" face="Courier">is equivalent to</font></div><div><font class="Apple-style-span" face="Courier"><br></font></div><div><font class="Apple-style-span" face="Courier">&nbsp; &nbsp; ||x - c_i|| + r_i &lt;= rho,</font></div><div><font class="Apple-style-span" face="Courier"><br></font></div><div><font class="Apple-style-span" face="Courier">which quadraticizes to</font></div><div><font class="Apple-style-span" face="Courier"><br></font></div><div><font class="Apple-style-span" face="Courier">(*) &nbsp; &nbsp;||x-c_i||^2 &lt;= (rho - r_i)^2 for all i, &nbsp; &nbsp;and rho &gt;= max_i r_i (to keep rho from being negative).</font></div><div><font class="Apple-style-span" face="Courier"><br></font></div><div><font class="Apple-style-span" face="Courier">We minimize rho over these constraints.</font></div><div><font class="Apple-style-span" face="Courier"><br></font></div><div><font class="Apple-style-span" face="Courier">But I'm having difficulties turning this into an SDP problem. &nbsp;My first thought was to treat the e_i as unknowns again, which handles&nbsp;</font><span class="Apple-style-span" style="font-family: Courier; ">the c_i; introduce an unknown x to minimize over; but how to handle rho? &nbsp;There's a quadratic term in rho, but there are also linear terms. &nbsp;I thought of introducing a second VECTOR, call it "r", and stipulate that r.e_i = r.e_j for all i, j (that only involves d-1 constraints). &nbsp;The r_i*rho term which appears in (*) can then be taken to be r_i * (r.e1), HOPING that the vector r doesn't interact with x.</span></div><div><font class="Apple-style-span" face="Courier"><br></font></div><div><font class="Apple-style-span" face="Courier">The disadvantage of these methods is that we increase the dimension of the problem: &nbsp;one for x, and one for r. &nbsp;The system matrix looks&nbsp;</font><span class="Apple-style-span" style="font-family: Courier; ">like</span></div><div><font class="Apple-style-span" face="Courier"><br></font></div><div><font class="Apple-style-span" face="Courier">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;e1 &nbsp; &nbsp;e2 &nbsp; &nbsp;... &nbsp; ed &nbsp; &nbsp; &nbsp; x &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;r</font></div><div><span class="Apple-style-span" style="font-family: Courier; ">------------------------------------------------</span></div><div><span class="Apple-style-span" style="font-family: Courier; ">e1 &nbsp;| &nbsp; &nbsp; 1 &nbsp; &nbsp; 0 &nbsp; &nbsp;... &nbsp; &nbsp;0 &nbsp; &nbsp; x_1 &nbsp; &nbsp; &nbsp; &nbsp;r_1</span></div><div><font class="Apple-style-span" face="Courier">e2 &nbsp;| &nbsp; &nbsp; 0 &nbsp; &nbsp; 1 &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; 0 &nbsp; &nbsp; x_2 &nbsp; &nbsp; &nbsp; &nbsp;r_2</font></div><div><span class="Apple-style-span" style="font-family: Courier; ">,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,</span></div><div><span class="Apple-style-span" style="font-family: Courier; ">ed &nbsp;| &nbsp; &nbsp; 0 &nbsp; &nbsp; 0 &nbsp;…….. &nbsp; &nbsp; 1 &nbsp; &nbsp; x_d &nbsp; &nbsp; &nbsp; &nbsp;r_d</span></div><div><font class="Apple-style-span" face="Courier">x &nbsp; | &nbsp; x_1 &nbsp; x_2 ….. &nbsp; &nbsp; x_d &nbsp; &nbsp; x.x &nbsp; &nbsp; &nbsp; &nbsp;x.r &nbsp;</font></div><div><font class="Apple-style-span" face="Courier">r &nbsp; } &nbsp; r_1 &nbsp; r_2 &nbsp; &nbsp; &nbsp; &nbsp; r_d &nbsp; &nbsp; r.x &nbsp; &nbsp; &nbsp; &nbsp;r.r &nbsp;</font></div><div><font class="Apple-style-span" face="Courier"><br></font></div><div><font class="Apple-style-span" face="Courier"><br></font></div><div><font class="Apple-style-span" face="Courier">As part of the constraint's we're sure that r_1 = r_2 = … = r_d. &nbsp;But the x.x, x.r and r.r terms are</font></div><div><font class="Apple-style-span" face="Courier">problematic, and in fact we DON'T get the optimal solution, but one too large. &nbsp;(And that puzzles me.)</font></div><div><font class="Apple-style-span" face="Courier"><br></font></div><div><font class="Apple-style-span" face="Courier">This trick works well in the intersection-of-balls problem, perfectly in the convex case (no complements of balls involved); even when complements of balls are included, and the solution strays into that extra dimension, it does so only very rarely (probably because the solution sets are 'thin', i.e. nowhere-dense, but there's more to it than that). &nbsp;And a small perturbation of the centers of the balls fixes the problem because of that thinness.</font></div><div><font class="Apple-style-span" face="Courier"><br></font></div><div><font class="Apple-style-span" face="Courier">Has anyone seen techniques like these used elsewhere? &nbsp;And can anyone phrase the smallest-enclosing-sphere problem in terms of SDP?</font></div><div><font class="Apple-style-span" face="Courier">If you want to see my code, I've made it available on my website: &nbsp;go to &lt;<a href="http://imperator.usc.edu/~bruck/sdp">http://imperator.usc.edu/~bruck/sdp</a>&gt;.</font></div><div><font class="Apple-style-span" face="Courier"><br></font></div><div><font class="Apple-style-span" face="Courier">Best wishes,</font></div><div><font class="Apple-style-span" face="Courier"><br></font></div><div><font class="Apple-style-span" face="Courier">--Ron Bruck</font></div><div><font class="Apple-style-span" face="Courier"><br></font></div><div><font class="Apple-style-span" face="Courier">&nbsp;</font></div><div><br></div></body></html>