Files
pj2/doc/edu/rit/numeric/MDMinimizationDownhillSimplex.html
2016-04-27 01:07:35 -04:00

506 lines
22 KiB
HTML

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<!-- NewPage -->
<html lang="en">
<head>
<!-- Generated by javadoc (version 1.7.0_51) on Wed Apr 06 13:11:04 EDT 2016 -->
<title>MDMinimizationDownhillSimplex (Parallel Java 2 Library Documentation)</title>
<meta name="date" content="2016-04-06">
<link rel="stylesheet" type="text/css" href="../../../stylesheet.css" title="Style">
</head>
<body>
<script type="text/javascript"><!--
if (location.href.indexOf('is-external=true') == -1) {
parent.document.title="MDMinimizationDownhillSimplex (Parallel Java 2 Library Documentation)";
}
//-->
</script>
<noscript>
<div>JavaScript is disabled on your browser.</div>
</noscript>
<!-- ========= START OF TOP NAVBAR ======= -->
<div class="topNav"><a name="navbar_top">
<!-- -->
</a><a href="#skip-navbar_top" title="Skip navigation links"></a><a name="navbar_top_firstrow">
<!-- -->
</a>
<ul class="navList" title="Navigation">
<li><a href="../../../overview-summary.html">Overview</a></li>
<li><a href="package-summary.html">Package</a></li>
<li class="navBarCell1Rev">Class</li>
<li><a href="class-use/MDMinimizationDownhillSimplex.html">Use</a></li>
<li><a href="package-tree.html">Tree</a></li>
<li><a href="../../../deprecated-list.html">Deprecated</a></li>
<li><a href="../../../index-files/index-1.html">Index</a></li>
<li><a href="../../../help-doc.html">Help</a></li>
</ul>
</div>
<div class="subNav">
<ul class="navList">
<li><a href="../../../edu/rit/numeric/MDFunction.html" title="interface in edu.rit.numeric"><span class="strong">Prev Class</span></a></li>
<li><a href="../../../edu/rit/numeric/NonLinearLeastSquares.html" title="class in edu.rit.numeric"><span class="strong">Next Class</span></a></li>
</ul>
<ul class="navList">
<li><a href="../../../index.html?edu/rit/numeric/MDMinimizationDownhillSimplex.html" target="_top">Frames</a></li>
<li><a href="MDMinimizationDownhillSimplex.html" target="_top">No Frames</a></li>
</ul>
<ul class="navList" id="allclasses_navbar_top">
<li><a href="../../../allclasses-noframe.html">All Classes</a></li>
</ul>
<div>
<script type="text/javascript"><!--
allClassesLink = document.getElementById("allclasses_navbar_top");
if(window==top) {
allClassesLink.style.display = "block";
}
else {
allClassesLink.style.display = "none";
}
//-->
</script>
</div>
<div>
<ul class="subNavList">
<li>Summary:&nbsp;</li>
<li>Nested&nbsp;|&nbsp;</li>
<li><a href="#field_summary">Field</a>&nbsp;|&nbsp;</li>
<li><a href="#constructor_summary">Constr</a>&nbsp;|&nbsp;</li>
<li><a href="#method_summary">Method</a></li>
</ul>
<ul class="subNavList">
<li>Detail:&nbsp;</li>
<li><a href="#field_detail">Field</a>&nbsp;|&nbsp;</li>
<li><a href="#constructor_detail">Constr</a>&nbsp;|&nbsp;</li>
<li><a href="#method_detail">Method</a></li>
</ul>
</div>
<a name="skip-navbar_top">
<!-- -->
</a></div>
<!-- ========= END OF TOP NAVBAR ========= -->
<!-- ======== START OF CLASS DATA ======== -->
<div class="header">
<div class="subTitle">edu.rit.numeric</div>
<h2 title="Class MDMinimizationDownhillSimplex" class="title">Class MDMinimizationDownhillSimplex</h2>
</div>
<div class="contentContainer">
<ul class="inheritance">
<li><a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">java.lang.Object</a></li>
<li>
<ul class="inheritance">
<li>edu.rit.numeric.MDMinimizationDownhillSimplex</li>
</ul>
</li>
</ul>
<div class="description">
<ul class="blockList">
<li class="blockList">
<hr>
<br>
<pre>public class <span class="strong">MDMinimizationDownhillSimplex</span>
extends <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</a></pre>
<div class="block">Class MDMinimizationDownhillSimplex finds a minimum of a multidimensional
function using the downhill simplex method of Nelder and Mead. The function
has <I>N</I> inputs and is represented by an object that implements interface
<a href="../../../edu/rit/numeric/MDFunction.html" title="interface in edu.rit.numeric">MDFunction</a>. The <TT>minimize()</TT> method finds a (local)
minimum in the function. The input to the <TT>minimize()</TT> method is an
<I>N</I>-dimensional <I>simplex,</I> namely a group of <I>N</I>+1 points in
<I>N</I> dimensions, each point different from all the others. Typically, one
point of the simplex is an initial guess for the solution, and the other
points of the simplex are perturbations of the initial guess. The
<TT>minimize()</TT> method evaluates the function at each point of the
simplex and moves the simplex through <I>N</I>-dimensional space to minimize
the smallest function value of any point in the simplex, stopping when the
relative difference between the smallest and largest function values of any
points in the simplex falls below a tolerance. The output from the
<TT>minimize()</TT> method is the final simplex, with the
smallest-function-value point at position 0. The inputs to and outputs from
the <TT>minimize()</TT> method are stored in the fields of an instance of
class MDMinimizationDownhillSimplex.</div>
</li>
</ul>
</div>
<div class="summary">
<ul class="blockList">
<li class="blockList">
<!-- =========== FIELD SUMMARY =========== -->
<ul class="blockList">
<li class="blockList"><a name="field_summary">
<!-- -->
</a>
<h3>Field Summary</h3>
<table class="overviewSummary" border="0" cellpadding="3" cellspacing="0" summary="Field Summary table, listing fields, and an explanation">
<caption><span>Fields</span><span class="tabEnd">&nbsp;</span></caption>
<tr>
<th class="colFirst" scope="col">Modifier and Type</th>
<th class="colLast" scope="col">Field and Description</th>
</tr>
<tr class="altColor">
<td class="colFirst"><code>boolean</code></td>
<td class="colLast"><code><strong><a href="../../../edu/rit/numeric/MDMinimizationDownhillSimplex.html#debug">debug</a></strong></code>
<div class="block">Debug flag.</div>
</td>
</tr>
<tr class="rowColor">
<td class="colFirst"><code>double[]</code></td>
<td class="colLast"><code><strong><a href="../../../edu/rit/numeric/MDMinimizationDownhillSimplex.html#f">f</a></strong></code>
<div class="block">Function values of the simplex points.</div>
</td>
</tr>
<tr class="altColor">
<td class="colFirst"><code><a href="../../../edu/rit/numeric/MDFunction.html" title="interface in edu.rit.numeric">MDFunction</a></code></td>
<td class="colLast"><code><strong><a href="../../../edu/rit/numeric/MDMinimizationDownhillSimplex.html#fcn">fcn</a></strong></code>
<div class="block">The multidimensional function to be minimized.</div>
</td>
</tr>
<tr class="rowColor">
<td class="colFirst"><code>int</code></td>
<td class="colLast"><code><strong><a href="../../../edu/rit/numeric/MDMinimizationDownhillSimplex.html#N">N</a></strong></code>
<div class="block">The number of function arguments.</div>
</td>
</tr>
<tr class="altColor">
<td class="colFirst"><code>double</code></td>
<td class="colLast"><code><strong><a href="../../../edu/rit/numeric/MDMinimizationDownhillSimplex.html#tol">tol</a></strong></code>
<div class="block">Tolerance.</div>
</td>
</tr>
<tr class="rowColor">
<td class="colFirst"><code>double[][]</code></td>
<td class="colLast"><code><strong><a href="../../../edu/rit/numeric/MDMinimizationDownhillSimplex.html#x">x</a></strong></code>
<div class="block">The simplex.</div>
</td>
</tr>
</table>
</li>
</ul>
<!-- ======== CONSTRUCTOR SUMMARY ======== -->
<ul class="blockList">
<li class="blockList"><a name="constructor_summary">
<!-- -->
</a>
<h3>Constructor Summary</h3>
<table class="overviewSummary" border="0" cellpadding="3" cellspacing="0" summary="Constructor Summary table, listing constructors, and an explanation">
<caption><span>Constructors</span><span class="tabEnd">&nbsp;</span></caption>
<tr>
<th class="colOne" scope="col">Constructor and Description</th>
</tr>
<tr class="altColor">
<td class="colOne"><code><strong><a href="../../../edu/rit/numeric/MDMinimizationDownhillSimplex.html#MDMinimizationDownhillSimplex(edu.rit.numeric.MDFunction)">MDMinimizationDownhillSimplex</a></strong>(<a href="../../../edu/rit/numeric/MDFunction.html" title="interface in edu.rit.numeric">MDFunction</a>&nbsp;theFunction)</code>
<div class="block">Construct a new multidimensional minimization object for the given
function.</div>
</td>
</tr>
</table>
</li>
</ul>
<!-- ========== METHOD SUMMARY =========== -->
<ul class="blockList">
<li class="blockList"><a name="method_summary">
<!-- -->
</a>
<h3>Method Summary</h3>
<table class="overviewSummary" border="0" cellpadding="3" cellspacing="0" summary="Method Summary table, listing methods, and an explanation">
<caption><span>Methods</span><span class="tabEnd">&nbsp;</span></caption>
<tr>
<th class="colFirst" scope="col">Modifier and Type</th>
<th class="colLast" scope="col">Method and Description</th>
</tr>
<tr class="altColor">
<td class="colFirst"><code>void</code></td>
<td class="colLast"><code><strong><a href="../../../edu/rit/numeric/MDMinimizationDownhillSimplex.html#minimize()">minimize</a></strong>()</code>
<div class="block">Minimize the multidimensional function.</div>
</td>
</tr>
<tr class="rowColor">
<td class="colFirst"><code>void</code></td>
<td class="colLast"><code><strong><a href="../../../edu/rit/numeric/MDMinimizationDownhillSimplex.html#setSimplex(double[], double)">setSimplex</a></strong>(double[]&nbsp;x,
double&nbsp;delta)</code>
<div class="block">Set the simplex to the given point plus the same perturbation along each
dimension.</div>
</td>
</tr>
<tr class="altColor">
<td class="colFirst"><code>void</code></td>
<td class="colLast"><code><strong><a href="../../../edu/rit/numeric/MDMinimizationDownhillSimplex.html#setSimplex(double[], double[])">setSimplex</a></strong>(double[]&nbsp;x,
double[]&nbsp;delta)</code>
<div class="block">Set the simplex to the given point plus a different perturbation along
each dimension.</div>
</td>
</tr>
<tr class="rowColor">
<td class="colFirst"><code>protected void</code></td>
<td class="colLast"><code><strong><a href="../../../edu/rit/numeric/MDMinimizationDownhillSimplex.html#subclassDebug(int, int)">subclassDebug</a></strong>(int&nbsp;iter,
int&nbsp;eval)</code>
<div class="block">Do debugging.</div>
</td>
</tr>
</table>
<ul class="blockList">
<li class="blockList"><a name="methods_inherited_from_class_java.lang.Object">
<!-- -->
</a>
<h3>Methods inherited from class&nbsp;java.lang.<a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</a></h3>
<code><a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Object.html?is-external=true#clone()" title="class or interface in java.lang">clone</a>, <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Object.html?is-external=true#equals(java.lang.Object)" title="class or interface in java.lang">equals</a>, <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Object.html?is-external=true#finalize()" title="class or interface in java.lang">finalize</a>, <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Object.html?is-external=true#getClass()" title="class or interface in java.lang">getClass</a>, <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Object.html?is-external=true#hashCode()" title="class or interface in java.lang">hashCode</a>, <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Object.html?is-external=true#notify()" title="class or interface in java.lang">notify</a>, <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Object.html?is-external=true#notifyAll()" title="class or interface in java.lang">notifyAll</a>, <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Object.html?is-external=true#toString()" title="class or interface in java.lang">toString</a>, <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Object.html?is-external=true#wait()" title="class or interface in java.lang">wait</a>, <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Object.html?is-external=true#wait(long)" title="class or interface in java.lang">wait</a>, <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Object.html?is-external=true#wait(long, int)" title="class or interface in java.lang">wait</a></code></li>
</ul>
</li>
</ul>
</li>
</ul>
</div>
<div class="details">
<ul class="blockList">
<li class="blockList">
<!-- ============ FIELD DETAIL =========== -->
<ul class="blockList">
<li class="blockList"><a name="field_detail">
<!-- -->
</a>
<h3>Field Detail</h3>
<a name="fcn">
<!-- -->
</a>
<ul class="blockList">
<li class="blockList">
<h4>fcn</h4>
<pre>public final&nbsp;<a href="../../../edu/rit/numeric/MDFunction.html" title="interface in edu.rit.numeric">MDFunction</a> fcn</pre>
<div class="block">The multidimensional function to be minimized.</div>
</li>
</ul>
<a name="N">
<!-- -->
</a>
<ul class="blockList">
<li class="blockList">
<h4>N</h4>
<pre>public final&nbsp;int N</pre>
<div class="block">The number of function arguments.</div>
</li>
</ul>
<a name="x">
<!-- -->
</a>
<ul class="blockList">
<li class="blockList">
<h4>x</h4>
<pre>public final&nbsp;double[][] x</pre>
<div class="block">The simplex. This is an <I>N</I>+1-element array of <I>N</I>-element
points. On input to the <TT>minimize()</TT> method, <TT>x</TT> contains a
simplex with an initial estimate of the solution. On output from the
<TT>minimize()</TT> method, <TT>x</TT> contains the final simplex, and
<TT>x[0]</TT> contains the solution, namely the simplex point with the
smallest function value.</div>
</li>
</ul>
<a name="f">
<!-- -->
</a>
<ul class="blockList">
<li class="blockList">
<h4>f</h4>
<pre>public final&nbsp;double[] f</pre>
<div class="block">Function values of the simplex points. An <I>N</I>+1-element array. On
output from the <TT>minimize()</TT> method, <TT>f[i]</TT> contains the
function value for simplex point <TT>x[i]</TT>, 0 &le; <TT>i</TT> &le;
<I>N</I>&minus;1. In particular, <TT>f[0]</TT> contains the minimized
function value for the solution.</div>
</li>
</ul>
<a name="tol">
<!-- -->
</a>
<ul class="blockList">
<li class="blockList">
<h4>tol</h4>
<pre>public&nbsp;double tol</pre>
<div class="block">Tolerance. An input to the <TT>minimize()</TT> method. Must be &gt; 0.
Termination occurs when the relative difference between the smallest and
largest function values of points in the simplex is less than the
tolerance. The default tolerance is 1&times;10<SUP>&minus;6</SUP>.</div>
</li>
</ul>
<a name="debug">
<!-- -->
</a>
<ul class="blockListLast">
<li class="blockList">
<h4>debug</h4>
<pre>public&nbsp;boolean debug</pre>
<div class="block">Debug flag. An input to the <TT>minimize()</TT> method. If true, the
<TT>subclassDebug()</TT> method is called at the beginning of every
iteration. The default setting is false.</div>
</li>
</ul>
</li>
</ul>
<!-- ========= CONSTRUCTOR DETAIL ======== -->
<ul class="blockList">
<li class="blockList"><a name="constructor_detail">
<!-- -->
</a>
<h3>Constructor Detail</h3>
<a name="MDMinimizationDownhillSimplex(edu.rit.numeric.MDFunction)">
<!-- -->
</a>
<ul class="blockListLast">
<li class="blockList">
<h4>MDMinimizationDownhillSimplex</h4>
<pre>public&nbsp;MDMinimizationDownhillSimplex(<a href="../../../edu/rit/numeric/MDFunction.html" title="interface in edu.rit.numeric">MDFunction</a>&nbsp;theFunction)</pre>
<div class="block">Construct a new multidimensional minimization object for the given
function. Field <TT>fcn</TT> is set to <TT>theFunction</TT>. Field
<TT>N</TT> is set by calling the function's <TT>argumentLength()</TT>
method. Field <TT>x</TT>, the simplex, is allocated with the proper size;
all simplex points are initially 0. Field <TT>f</TT>, the function
values, is allocated with the proper size.</div>
<dl><dt><span class="strong">Parameters:</span></dt><dd><code>theFunction</code> - Multidimensional function to be minimized.</dd>
<dt><span class="strong">Throws:</span></dt>
<dd><code><a href="http://docs.oracle.com/javase/7/docs/api/java/lang/NullPointerException.html?is-external=true" title="class or interface in java.lang">NullPointerException</a></code> - (unchecked exception) Thrown if <TT>theFunction</TT> is null.</dd></dl>
</li>
</ul>
</li>
</ul>
<!-- ============ METHOD DETAIL ========== -->
<ul class="blockList">
<li class="blockList"><a name="method_detail">
<!-- -->
</a>
<h3>Method Detail</h3>
<a name="setSimplex(double[], double)">
<!-- -->
</a>
<ul class="blockList">
<li class="blockList">
<h4>setSimplex</h4>
<pre>public&nbsp;void&nbsp;setSimplex(double[]&nbsp;x,
double&nbsp;delta)</pre>
<div class="block">Set the simplex to the given point plus the same perturbation along each
dimension. The field <TT>x[0]</TT> is set to <TT>x</TT>; the field
<TT>x[1]</TT> is set to <TT>x</TT> with <TT>delta</TT> added to element
0; the field <TT>x[2]</TT> is set to <TT>x</TT> with <TT>delta</TT> added
to element 1; and so on.</div>
<dl><dt><span class="strong">Parameters:</span></dt><dd><code>x</code> - Simplex point. Must be an <I>N</I>-element array.</dd><dd><code>delta</code> - Perturbation along every dimension. Must be nonzero.</dd></dl>
</li>
</ul>
<a name="setSimplex(double[], double[])">
<!-- -->
</a>
<ul class="blockList">
<li class="blockList">
<h4>setSimplex</h4>
<pre>public&nbsp;void&nbsp;setSimplex(double[]&nbsp;x,
double[]&nbsp;delta)</pre>
<div class="block">Set the simplex to the given point plus a different perturbation along
each dimension. The field <TT>x[0]</TT> is set to <TT>x</TT>; the field
<TT>x[1]</TT> is set to <TT>x</TT> with <TT>delta[0]</TT> added to
element 0; the field <TT>x[2]</TT> is set to <TT>x</TT> with
<TT>delta[1]</TT> added to element 1; and so on.</div>
<dl><dt><span class="strong">Parameters:</span></dt><dd><code>x</code> - Simplex point. Must be an <I>N</I>-element array.</dd><dd><code>delta</code> - Perturbations along each dimension. All must be nonzero.</dd></dl>
</li>
</ul>
<a name="minimize()">
<!-- -->
</a>
<ul class="blockList">
<li class="blockList">
<h4>minimize</h4>
<pre>public&nbsp;void&nbsp;minimize()</pre>
<div class="block">Minimize the multidimensional function. On input, the field <TT>x</TT>
must be filled in with an initial simplex, and the field <TT>tol</TT>
must be set to the desired tolerance. On output, the field <TT>x</TT>
contains the solution. For further information, see the documentation for
each field.</div>
<dl><dt><span class="strong">Throws:</span></dt>
<dd><code><a href="http://docs.oracle.com/javase/7/docs/api/java/lang/IllegalArgumentException.html?is-external=true" title="class or interface in java.lang">IllegalArgumentException</a></code> - (unchecked exception) Thrown if <TT>tol</TT> &le; 0.</dd>
<dd><code><a href="../../../edu/rit/numeric/TooManyIterationsException.html" title="class in edu.rit.numeric">TooManyIterationsException</a></code> - (unchecked exception) Thrown if too many function evaluations (5,000)
occurred without finding a minimum.</dd></dl>
</li>
</ul>
<a name="subclassDebug(int, int)">
<!-- -->
</a>
<ul class="blockListLast">
<li class="blockList">
<h4>subclassDebug</h4>
<pre>protected&nbsp;void&nbsp;subclassDebug(int&nbsp;iter,
int&nbsp;eval)</pre>
<div class="block">Do debugging. If the <TT>debug</TT> field is true, the
<TT>subclassDebug()</TT> method is called at the beginning of every
iteration. The fields of this object contain the current state of the
algorithm. The fields of this object must not be altered.
<P>
The default implementation of the <TT>subclassDebug()</TT> method does
nothing. A subclass can override the <TT>subclassDebug()</TT> method to
do something, such as print debugging information.</div>
<dl><dt><span class="strong">Parameters:</span></dt><dd><code>iter</code> - Iteration number.</dd><dd><code>eval</code> - Number of function evaluations.</dd></dl>
</li>
</ul>
</li>
</ul>
</li>
</ul>
</div>
</div>
<!-- ========= END OF CLASS DATA ========= -->
<!-- ======= START OF BOTTOM NAVBAR ====== -->
<div class="bottomNav"><a name="navbar_bottom">
<!-- -->
</a><a href="#skip-navbar_bottom" title="Skip navigation links"></a><a name="navbar_bottom_firstrow">
<!-- -->
</a>
<ul class="navList" title="Navigation">
<li><a href="../../../overview-summary.html">Overview</a></li>
<li><a href="package-summary.html">Package</a></li>
<li class="navBarCell1Rev">Class</li>
<li><a href="class-use/MDMinimizationDownhillSimplex.html">Use</a></li>
<li><a href="package-tree.html">Tree</a></li>
<li><a href="../../../deprecated-list.html">Deprecated</a></li>
<li><a href="../../../index-files/index-1.html">Index</a></li>
<li><a href="../../../help-doc.html">Help</a></li>
</ul>
</div>
<div class="subNav">
<ul class="navList">
<li><a href="../../../edu/rit/numeric/MDFunction.html" title="interface in edu.rit.numeric"><span class="strong">Prev Class</span></a></li>
<li><a href="../../../edu/rit/numeric/NonLinearLeastSquares.html" title="class in edu.rit.numeric"><span class="strong">Next Class</span></a></li>
</ul>
<ul class="navList">
<li><a href="../../../index.html?edu/rit/numeric/MDMinimizationDownhillSimplex.html" target="_top">Frames</a></li>
<li><a href="MDMinimizationDownhillSimplex.html" target="_top">No Frames</a></li>
</ul>
<ul class="navList" id="allclasses_navbar_bottom">
<li><a href="../../../allclasses-noframe.html">All Classes</a></li>
</ul>
<div>
<script type="text/javascript"><!--
allClassesLink = document.getElementById("allclasses_navbar_bottom");
if(window==top) {
allClassesLink.style.display = "block";
}
else {
allClassesLink.style.display = "none";
}
//-->
</script>
</div>
<div>
<ul class="subNavList">
<li>Summary:&nbsp;</li>
<li>Nested&nbsp;|&nbsp;</li>
<li><a href="#field_summary">Field</a>&nbsp;|&nbsp;</li>
<li><a href="#constructor_summary">Constr</a>&nbsp;|&nbsp;</li>
<li><a href="#method_summary">Method</a></li>
</ul>
<ul class="subNavList">
<li>Detail:&nbsp;</li>
<li><a href="#field_detail">Field</a>&nbsp;|&nbsp;</li>
<li><a href="#constructor_detail">Constr</a>&nbsp;|&nbsp;</li>
<li><a href="#method_detail">Method</a></li>
</ul>
</div>
<a name="skip-navbar_bottom">
<!-- -->
</a></div>
<!-- ======== END OF BOTTOM NAVBAR ======= -->
<p class="legalCopy"><small><FONT SIZE="-2">Copyright &copy; 2013&ndash;2016 by Alan Kaminsky. All rights reserved. Send comments to ark</FONT><FONT SIZE="1" COLOR="#FFFFFF">&shy;</FONT><FONT SIZE="-2">&#64;</FONT><FONT SIZE="1" COLOR="#FFFFFF">&shy;</FONT><FONT SIZE="-2">cs.rit.edu.</FONT></small></p>
</body>
</html>