📄 reference.htm
字号:
| ID| Constraint| Type|
+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
| #1| Numeric value| Matrix inequality (quadratic) 2x2|
+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++</font></pre>
</td>
</tr>
</table>
<p>The only difference is that this constraint will not be used in
the upper bound problem in the branch & bound procudure. The constraint
will thus only be used to improve the relaxations. See the examples
in <a target="topic" href="globalbmi.htm">global solutions of bilinear
programs</a>.</p>
</td>
</tr>
<tr>
<th class="doc" valign="top" nowrap align="left" bgcolor="#eeeeee" rowspan="2">
Related commands</th>
</tr>
<tr>
<td class="tabxpl"><a href="reference.htm#set">set</a></td>
</tr>
</table>
</td>
</tr>
</table>
<p> </p>
<table border="1" cellpadding="0" cellspacing="0" style="border-collapse: collapse" width="100%" bordercolor="#FF9933" id="table69">
<tr>
<td class="tableheader">
<p class="tableheader"><a name="dissect">DISSECT</a></p>
</td>
</tr>
<tr>
<td>
<table cellspacing="0" cellpadding="4" width="100%" border="0" id="table70">
<tr>
<th class="doc" valign="top" nowrap align="left" bgcolor="#eeeeee" rowspan="2">
Syntax<p> </p>
</th>
<td class="code" valign="top" nowrap width="100%"><code>F =
dissect(X)</code></td>
</tr>
<tr>
<td class="tabxpl">
<table border="0" id="table71">
<tr>
<td>
<p align="right"><font face="Courier New" size="2">F:</font></p>
</td>
<td>set object</td>
</tr>
<tr>
<td>
<p align="right"><font face="Courier New" size="2">X:</font></p>
</td>
<td>set object</td>
</tr>
</table>
</td>
</tr>
<tr>
<th class="doc" valign="top" nowrap align="left" bgcolor="#eeeeee" rowspan="2">
Description</th>
</tr>
<tr>
<td class="tabxpl">dissect can be used to transform extremely
large sparse and structured SDP constraints to a set of smaller
SDP constraints, at the price of introducing more variables.</td>
</tr>
<tr>
<th class="doc" valign="top" nowrap align="left" bgcolor="#eeeeee" rowspan="2">
Example</th>
</tr>
<tr>
<td class="tabxpl">NOTE : For the examples below to work, you need
to have
<a target="_blank" href="http://www-users.cs.umn.edu/~karypis/metis/">METIS</a> installed.
<p>Let us begin by defining a large but low bandwidth SDP
constraint.</p>
<table cellpadding="10" width="100%" id="table72">
<tr>
<td class="xmpcode">
<pre>n = 500;
r = 3;
B = randn(n,r+1);
S = spdiags(B,0:r,n,n);S = S+S';
x = sdpvar(n,1);
X = diag(x)-S;
F = set(X > 0)<font color="#000000">
+++++++++++++++++++++++++++++++++++++++++++++++++++++
| ID| Constraint| Type|
+++++++++++++++++++++++++++++++++++++++++++++++++++++
| #1| Numeric value| Matrix inequality 500x500|
+++++++++++++++++++++++++++++++++++++++++++++++++++++</font></pre>
</td>
</tr>
</table>
<p>Applying the dissect command simplifies the constraint to a set
of two smaller SDP constraints, at the price of introducing 6
additional variables.</p>
<table cellpadding="10" width="100%" id="table73">
<tr>
<td class="xmpcode">
<pre>dissect(F)
<font color="#000000">+++++++++++++++++++++++++++++++++++++++++++++++++++++
| ID| Constraint| Type|
+++++++++++++++++++++++++++++++++++++++++++++++++++++
| #1| Numeric value| Matrix inequality 252x252|
| #2| Numeric value| Matrix inequality 251x251|
+++++++++++++++++++++++++++++++++++++++++++++++++++++</font>
length(getvariables(dissect(F)))
<font color="#000000">ans =</font></pre>
<pre><font color="#000000"> 506</font></pre>
</td>
</tr>
</table>
<p>The procedure can be recursively applied.</p>
<table cellpadding="10" width="100%" id="table74">
<tr>
<td class="xmpcode">
<pre>dissect(dissect(F))
<font color="#000000">+++++++++++++++++++++++++++++++++++++++++++++++++++++
| ID| Constraint| Type|
+++++++++++++++++++++++++++++++++++++++++++++++++++++
| #1| Numeric value| Matrix inequality 128x128|
| #2| Numeric value| Matrix inequality 127x127|
| #3| Numeric value| Matrix inequality 127x127|
| #4| Numeric value| Matrix inequality 127x127|
+++++++++++++++++++++++++++++++++++++++++++++++++++++</font>
length(getvariables(dissect((dissect(F)))))
<font color="#000000">ans =</font></pre>
<pre><font color="#000000"> 518</font></pre>
</td>
</tr>
</table>
<p>To see the impact of the dissection, let us solve an SDP
problem for various levels of dissection</p>
<table cellpadding="10" width="100%" id="table75">
<tr>
<td class="xmpcode">
<pre>sol = solvesdp(F,trace(X));sol.solvertime
<font color="#000000">ans =</font></pre>
<pre><font color="#000000"> 123.2810
</font>F = dissect(F);
sol = solvesdp(F,trace(X));sol.solvertime
<font color="#000000">ans =</font></pre>
<pre><font color="#000000"> 36.0940
</font>F = dissect(F);
sol = solvesdp(F,trace(X));sol.solvertime
<font color="#000000">ans =</font></pre>
<pre><font color="#000000"> 11.9070</font></pre>
<pre>F = dissect(F);
sol = solvesdp(F,trace(X));sol.solvertime
<font color="#000000">ans =</font></pre>
<pre><font color="#000000"> 4.6410</font></pre>
<pre>F = dissect(F);
sol = solvesdp(F,trace(X));sol.solvertime
<font color="#000000">ans =</font></pre>
<pre><font color="#000000"> 3.8430</font></pre>
<pre>F = dissect(F);
sol = solvesdp(F,trace(X));sol.solvertime
<font color="#000000">ans =</font></pre>
<pre><font color="#000000"> 3.9370</font></pre>
</td>
</tr>
</table>
<p>Note that the dissection command can be applied to arbitrary
SDP problems in YALMIP (nonlinear problems, mixed semidefinite
and second order cone problems etc).</p>
<p>The algorithm in the command is based on finding a vertex
separator of the matrix in the SDP constraint, applying a
Dulmage-Mendelsohn permutation to detect corresponding blocks,
followed by a series of Schur completions. Details will be available in an
accompanying report soon...
</td>
</tr>
<tr>
<th class="doc" valign="top" nowrap align="left" bgcolor="#eeeeee" rowspan="2">
Related commands</th>
</tr>
<tr>
<td class="tabxpl"><a href="reference.htm#set">set</a>, <a href="reference.htm#unblkdiag">unblkdiag</a></td>
</tr>
</table>
</td>
</tr>
</table>
<p> </p>
<table border="1" cellpadding="0" cellspacing="0" style="border-collapse: collapse" width="100%" bordercolor="#FF9933">
<tr>
<td class="tableheader">
<p class="tableheader"><a name="double">DOUBLE</a></p>
</td>
</tr>
<tr>
<td>
<table cellspacing="0" cellpadding="4" width="100%" border="0">
<tr>
<th class="doc" valign="top" nowrap align="left" bgcolor="#eeeeee" rowspan="2">
Syntax</th>
<td class="code" valign="top" nowrap width="100%"><code>Y = double(X)</code></td>
</tr>
<tr>
<td class="tabxpl">
<table border="0">
<tr>
<td>
<p align="right"><font face="Courier New" size="2">Y:</font></p>
</td>
<td>double</td>
</tr>
<tr>
<td>
<p align="right"><font face="Courier New" size="2">X:</font></p>
</td>
<td>sdpvar or set object</td>
</tr>
</table>
</td>
</tr>
<tr>
<th class="doc" valign="top" nowrap align="left" bgcolor="#eeeeee" rowspan="2">
Description</th>
</tr>
<tr>
<td class="tabxpl">double is used to extract the numerical value of
a decision variable, or the residual of a constraint</td>
</tr>
<tr>
<th class="doc" valign="top" nowrap align="left" bgcolor="#eeeeee" rowspan="2">
Examples</th>
</tr>
<tr>
<td class="tabxpl"><p>After solving an optimization problem we might,
e.g., extract the optimal objective value.</p><table cellpadding="10" width="100%">
<tr>
<td class="xmpcode">
<pre>solvesdp(F,obj);
optobj = double(obj);</pre>
</td>
</tr>
</table>
<p>It can also be used to extract the residual of a constraint </p>
<table cellpadding="10" width="100%">
<tr>
<td class="xmpcode">
<pre>solvesdp(F,obj);
res = double(F(1));</pre>
</td>
</tr>
</table>
</td>
</tr>
<tr>
<th class="doc" valign="top" nowrap align="left" bgcolor="#eeeeee" rowspan="2">
Related commands</th>
</tr>
<tr>
<td class="tabxpl"><a href="reference.htm#sdpvar">sdpvar</a>,
<a href="reference.htm#solvesdp">solvesdp</a>,
<a href="reference.htm#assign">assign</a></td>
</tr>
</table>
</td>
</tr>
</table>
<p> </p>
<table border="1" cellpadding="0" cellspacing="0" style="border-collapse: collapse" width="100%" bordercolor="#FF9933">
<tr>
<td class="tableheader">
<p class="tableheader"><a name="dual">DUAL</a></p>
</td>
</tr>
<tr>
<td>
<table cellspacing="0" cellpadding="4" width="100%" border="0">
<tr>
<th class="doc" valign="top" nowrap align="left" bgcolor="#eeeeee" rowspan="2">
Syntax</th>
<td class="code" valign="top" nowrap width="100%"><code>Z = dual(F)</code></td>
</tr>
<tr>
<td class="tabxpl">
<table border="0">
<tr>
<td>
<p align="right"><font face="Courier New" size="2">Z:</font></p>
</td>
<td>double</td>
</tr>
<tr>
<td>
<p align="right"><font face="Courier New" size="2">F:</font></p>
</td>
<td>set object (with one constraint)</td>
</tr>
</table>
</td>
</tr>
<tr>
<th class="doc" valign="top" nowrap align="left" bgcolor="#eeeeee" rowspan="2">
Description</th>
</tr>
<tr>
<td class="tabxpl">dual is used to extract the dual variable related
to a constraint</td>
</tr>
<tr>
<th class="doc" valign="top" nowrap align="left" bgcolor="#eeeeee" rowspan="2">
Examples</th>
</tr>
<tr>
<td class="tabxpl"><p>After solving an optimization problem we might,
e.g., extract the dual variable of the 2nd constraint.</p><table cellpadding="10" width="100%">
<tr>
<td class="xmpcode">
<pre>solvesdp(F,obj);
Z2 = dual(F(2));</pre>
</td>
</tr>
</table>
<p>If the constraints in the set object have been tagged, we can use
the tag instead </p>
<table cellpadding="10" width="100%">
<tr>
<td class="xmpcode">
<pre>solvesdp(F,obj);
Z2 = dual(F('Lyapunov constraint'));</pre>
</td>
</tr>
</table>
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -