644 lines
28 KiB
HTML
644 lines
28 KiB
HTML
<!doctype html>
|
||
<html>
|
||
|
||
<head>
|
||
<meta charset="utf-8">
|
||
<meta name="viewport" content="width=device-width, initial-scale=1.0, maximum-scale=1.0, user-scalable=no">
|
||
|
||
<title>
|
||
Evaluation of the Performance of Randomized FFD Control Grids: Master Thesis
|
||
</title>
|
||
|
||
<link rel="stylesheet" href="./template/revealjs/css/reveal.css">
|
||
|
||
|
||
<!-- Theme of AG CG (derived from reveal's white.css) -->
|
||
<link rel="stylesheet" href="./template/agcg.css">
|
||
|
||
|
||
<!-- font needed for chalkboard buttons -->
|
||
<link rel="stylesheet" href="./template/font-awesome/css/font-awesome.min.css">
|
||
|
||
|
||
<!-- Setup code formatting with highlight.js -->
|
||
<link rel="stylesheet" href="./template/revealjs/css/highlight/xcode.css">
|
||
|
||
|
||
|
||
<!-- Printing and PDF exports -->
|
||
<script>
|
||
var link = document.createElement( 'link' );
|
||
link.rel = 'stylesheet';
|
||
link.type = 'text/css';
|
||
link.href = window.location.search.match( /print-pdf/gi ) ? './template/revealjs/css/print/pdf.css' : './template/revealjs/css/print/paper.css';
|
||
document.getElementsByTagName( 'head' )[0].appendChild( link );
|
||
|
||
// MARIO version
|
||
if (window.location.search.match( /print-pdf/gi ))
|
||
{
|
||
var link = document.createElement( 'link' );
|
||
link.rel = 'stylesheet';
|
||
link.type = 'text/css';
|
||
link.href = './template/agcg-pdf.css';
|
||
document.getElementsByTagName( 'head' )[0].appendChild( link );
|
||
}
|
||
</script>
|
||
|
||
|
||
<!-- MathJax config -->
|
||
<script type="text/x-mathjax-config">
|
||
MathJax.Hub.Config({
|
||
jax: ["input/TeX","output/HTML-CSS"],
|
||
TeX: {
|
||
Macros: {
|
||
R: "{\\mathrm{{I}\\kern-.15em{R}}}",
|
||
abs: ['\\left\\lvert #1 \\right\\rvert', 1],
|
||
norm: ['\\left\\Vert #1 \\right\\Vert', 1],
|
||
iprod: ['\\left\\langle #1 \\right\\rangle', 1],
|
||
vec: ['\\mathbf{#1}', 1],
|
||
mat: ['\\mathbf{#1}', 1],
|
||
trans: ['{#1}\\mkern-1mu^{\\mathsf{T}}', 1],
|
||
matrix: ['\\begin{bmatrix} #1 \\end{bmatrix}', 1],
|
||
vector: ['\\begin{pmatrix} #1 \\end{pmatrix}', 1],
|
||
of: ['\\mkern{-2mu}\\left( #1 \\right\)', 1]
|
||
}
|
||
},
|
||
tex2jax: {
|
||
skipTags: ["script","noscript","style","textarea"],
|
||
},
|
||
"HTML-CSS": {
|
||
styles: { ".reveal section .MathJax_Display": { margin: "0.5em 0em" } },
|
||
styles: { ".reveal table .MathJax_Display": { margin: "0em" } },
|
||
scale: 95
|
||
}
|
||
});
|
||
</script>
|
||
|
||
</head>
|
||
|
||
<body>
|
||
|
||
|
||
<!-- here come the slides -->
|
||
<div class="reveal">
|
||
<div class="slides">
|
||
|
||
|
||
<!-- Title slide -->
|
||
<section class="white-on-blue">
|
||
<div class="title"> Evaluation of the Performance of Randomized FFD Control Grids </div>
|
||
<div class="subtitle"> Master Thesis </div>
|
||
<div class="author"> Stefan Dresselhaus </div>
|
||
<div class="affiliation"> Graphics & Geometry Group </div>
|
||
</section>
|
||
|
||
|
||
<!-- Table of Contents -->
|
||
|
||
|
||
<!-- all the slides from markdown document: DO NOT INDENT THE body LINE!!! -->
|
||
<section id="introduction" class="slide level1">
|
||
<h1>Introduction</h1>
|
||
<ul>
|
||
<li>Many modern industrial design processes require advanced optimization methods due to increased complexity</li>
|
||
<li>Examples are
|
||
<ul>
|
||
<li>physical domains
|
||
<ul>
|
||
<li>aerodynamics (i.e. drag)</li>
|
||
<li>fluid dynamics (i.e. throughput of liquid)</li>
|
||
</ul></li>
|
||
<li>NP-hard problems
|
||
<ul>
|
||
<li>layouting of circuit boards</li>
|
||
<li>stacking of 3D–objects</li>
|
||
</ul></li>
|
||
</ul></li>
|
||
</ul>
|
||
</section>
|
||
<section id="motivation" class="slide level1">
|
||
<h1>Motivation</h1>
|
||
<ul>
|
||
<li>Evolutionary algorithms cope especially well with these problem domains <figure class="" style=""><img src="../arbeit/img/Evo_overview.png" style=""></img><figcaption>Example of the use of evolutionary algorithms in automotive design</figcaption></figure></li>
|
||
<li>But formulation can be tricky</li>
|
||
</ul>
|
||
</section>
|
||
<section id="motivation-1" class="slide level1">
|
||
<h1>Motivation</h1>
|
||
<ul>
|
||
<li>Problems tend to be very complex
|
||
<ul>
|
||
<li>i.e. a surface with <span class="math inline">\(n\)</span> vertices has <span class="math inline">\(3\cdot n\)</span> Degrees of Freedom (DoF).</li>
|
||
</ul></li>
|
||
<li>Need for a small-dimensional representation that manipulates the high-dimensional problem-space.</li>
|
||
<li>We concentrate on smooth deformations (<span class="math inline">\(C^3\)</span>-continuous)</li>
|
||
<li>But what representation is good?</li>
|
||
</ul>
|
||
</section>
|
||
<section id="what-representation-is-good" class="slide level1">
|
||
<h1>What representation is good?</h1>
|
||
<ul>
|
||
<li>In biological evolution this measure is called <em>evolvability</em>.
|
||
<ul>
|
||
<li>no consensus on definition</li>
|
||
<li>meaning varies from context to context</li>
|
||
<li>measurable?</li>
|
||
</ul></li>
|
||
<li>Measure depends on representation as well.</li>
|
||
</ul>
|
||
</section>
|
||
<section id="rbf-and-ffd" class="slide level1">
|
||
<h1>RBF and FFD</h1>
|
||
<ul>
|
||
<li>Andreas Richter uses Radial Basis Functions (RBF) to smoothly deform meshes</li>
|
||
</ul>
|
||
<p><figure class="" style=""><img src="../arbeit/img/deformations.png" style=""></img><figcaption>Example of RBF–based deformation and FFD targeting the same mesh.</figcaption></figure></p>
|
||
</section>
|
||
<section id="rbf-and-ffd-1" class="slide level1">
|
||
<h1>RBF and FFD</h1>
|
||
<ul>
|
||
<li>My master thesis transferred his idea to Freeform-Deformation (FFD)
|
||
<ul>
|
||
<li>same setup</li>
|
||
<li>same measurements</li>
|
||
<li>same results?</li>
|
||
</ul></li>
|
||
</ul>
|
||
<p><figure class="" style=""><img src="../arbeit/img/deformations.png" style=""></img><figcaption>Example of RBF–based deformation and FFD targeting the same mesh.</figcaption></figure></p>
|
||
</section>
|
||
<section id="outline" class="slide level1">
|
||
<h1>Outline</h1>
|
||
<ul>
|
||
<li><strong>What is FFD?</strong></li>
|
||
<li>What is evolutionary optimization?</li>
|
||
<li>How to measure evolvability?</li>
|
||
<li>Scenarios</li>
|
||
<li>Results</li>
|
||
</ul>
|
||
</section>
|
||
<section id="what-is-ffd" class="slide level1">
|
||
<h1>What is FFD?</h1>
|
||
<ul>
|
||
<li>Create a function <span class="math inline">\(s : [0,1[^d \mapsto \mathbb{R}^d\)</span> that is parametrized by some special control–points <span class="math inline">\(p_i\)</span> with coefficient functions <span class="math inline">\(a_i(u)\)</span>: <span class="math display">\[
|
||
s(\vec{u}) = \sum_i a_i(\vec{u}) \vec{p_i}
|
||
\]</span></li>
|
||
<li>All points inside the convex hull of <span class="math inline">\(\vec{p_i}\)</span> accessed by the right <span class="math inline">\(u \in [0,1[^d\)</span>.</li>
|
||
</ul>
|
||
<p><figure class="" style=""><img src="../arbeit/img/B-Splines.png" style=""></img><figcaption>Example of a parametrization of a line with corresponding deformation to generate a deformed objet</figcaption></figure></p>
|
||
</section>
|
||
<section id="definition-b-splines" class="slide level1">
|
||
<h1>Definition B-Splines</h1>
|
||
<ul>
|
||
<li>The coefficient functions <span class="math inline">\(a_i(u)\)</span> in <span class="math inline">\(s(\vec{u}) = \sum_i a_i(\vec{u}) \vec{p_i}\)</span> are different for each control-point</li>
|
||
<li>Given a degree <span class="math inline">\(d\)</span> and position <span class="math inline">\(\tau_i\)</span> for the <span class="math inline">\(i\)</span>th control-point <span class="math inline">\(p_i\)</span> we define <span class="math display">\[\begin{equation}
|
||
N_{i,0,\tau}(u) = \begin{cases} 1, & u \in [\tau_i, \tau_{i+1}[ \\ 0, & \mbox{otherwise} \end{cases}
|
||
\end{equation}\]</span> and <span class="math display">\[\begin{equation} \label{eqn:ffd1d2}
|
||
N_{i,d,\tau}(u) = \frac{u-\tau_i}{\tau_{i+d}} N_{i,d-1,\tau}(u) + \frac{\tau_{i+d+1} - u}{\tau_{i+d+1}-\tau_{i+1}} N_{i+1,d-1,\tau}(u)
|
||
\end{equation}\]</span></li>
|
||
<li>The derivatives of these coefficients are also easy to compute: <span class="math display">\[\frac{\partial}{\partial u} N_{i,d,r}(u) = \frac{d}{\tau_{i+d} - \tau_i} N_{i,d-1,\tau}(u) - \frac{d}{\tau_{i+d+1} - \tau_{i+1}} N_{i+1,d-1,\tau}(u)\]</span></li>
|
||
</ul>
|
||
</section>
|
||
<section id="properties-of-b-splines" class="slide level1">
|
||
<h1>Properties of B-Splines</h1>
|
||
<ul>
|
||
<li>Coefficients vanish after <span class="math inline">\(d\)</span> differentiations</li>
|
||
<li>Coefficients are continuous with respect to <span class="math inline">\(u\)</span></li>
|
||
<li>A change in prototypes only deforms the mapping locally<br />
|
||
(between <span class="math inline">\(p_i\)</span> to <span class="math inline">\(p_{i+d+1}\)</span>)</li>
|
||
</ul>
|
||
<p><figure class="" style=""><img src="../arbeit/img/unity.png" style=""></img><figcaption>Example of Basis-Functions for degree <span class="math inline">\(2\)</span>. [Brunet, 2010]<br /> Note, that Brunet starts his index at <span class="math inline">\(-d\)</span> opposed to our definition, where we start at <span class="math inline">\(0\)</span>.</figcaption></figure></p>
|
||
</section>
|
||
<section id="definition-ffd" class="slide level1">
|
||
<h1>Definition FFD</h1>
|
||
<ul>
|
||
<li>FFD is a space-deformation resulting based on the underlying B-Splines</li>
|
||
<li>Coefficients of space-mapping <span class="math inline">\(s(u) = \sum_j a_j(u) p_j\)</span> for an initial vertex <span class="math inline">\(v_i\)</span> are constant</li>
|
||
<li>Set <span class="math inline">\(u_{i,j}~:=~N_{j,d,\tau}\)</span> for each <span class="math inline">\(v_i\)</span> and <span class="math inline">\(p_j\)</span> to get the projection: <span class="math display">\[
|
||
v_i = \sum_j u_{i,j} \cdot p_j = \vec{u}_i^{T} \vec{p}
|
||
\]</span> or written with matrices: <span class="math display">\[
|
||
\vec{v} = \vec{U} \vec{p}
|
||
\]</span></li>
|
||
<li><span class="math inline">\(\vec{U}\)</span> is called <strong>deformation matrix</strong></li>
|
||
</ul>
|
||
</section>
|
||
<section id="implementation-of-ffd" class="slide level1">
|
||
<h1>Implementation of FFD</h1>
|
||
<ul>
|
||
<li>As we deal with 3D-Models we have to extend the introduced 1D-version</li>
|
||
<li>We get one parameter for each dimension: <span class="math inline">\(u,v,w\)</span> instead of <span class="math inline">\(u\)</span></li>
|
||
<li>Task: Find correct <span class="math inline">\(u,v,w\)</span> for each vertex in our model
|
||
<ul>
|
||
<li>We used a gradient-descent (via the gauss-newton algorithm)</li>
|
||
</ul></li>
|
||
</ul>
|
||
</section>
|
||
<section id="implementation-of-ffd-1" class="slide level1">
|
||
<h1>Implementation of FFD</h1>
|
||
<ul>
|
||
<li>Given <span class="math inline">\(n,m,o\)</span> control-points in <span class="math inline">\(x,y,z\)</span>–direction each Point inside the convex hull is defined by <span class="math display">\[V(u,v,w) = \sum_i \sum_j \sum_k N_{i,d,\tau_i}(u) N_{j,d,\tau_j}(v) N_{k,d,\tau_k}(w) \cdot C_{ijk}.\]</span></li>
|
||
<li>Given a target vertex <span class="math inline">\(\vec{p}^*\)</span> and an initial guess <span class="math inline">\(\vec{p}=V(u,v,w)\)</span> we define the error–function for the gradient–descent as: <span class="math display">\[Err(u,v,w,\vec{p}^{*}) = \vec{p}^{*} - V(u,v,w)\]</span></li>
|
||
</ul>
|
||
</section>
|
||
<section id="implementation-of-ffd-2" class="slide level1">
|
||
<h1>Implementation of FFD</h1>
|
||
<ul>
|
||
<li>Derivation is straightforward <span class="math display">\[
|
||
\scriptsize
|
||
\begin{array}{rl}
|
||
\displaystyle \frac{\partial Err_x}{\partial u} & p^{*}_x - \displaystyle \sum_i \sum_j \sum_k N_{i,d,\tau_i}(u) N_{j,d,\tau_j}(v) N_{k,d,\tau_k}(w) \cdot {c_{ijk}}_x \\
|
||
= & \displaystyle - \sum_i \sum_j \sum_k N'_{i,d,\tau_i}(u) N_{j,d,\tau_j}(v) N_{k,d,\tau_k}(w) \cdot {c_{ijk}}_x
|
||
\end{array}
|
||
\]</span> yielding a Jacobian:</li>
|
||
</ul>
|
||
<p><span class="math display">\[
|
||
\scriptsize
|
||
J(Err(u,v,w)) =
|
||
\left(
|
||
\begin{array}{ccc}
|
||
\frac{\partial Err_x}{\partial u} & \frac{\partial Err_x}{\partial v} & \frac{\partial Err_x}{\partial w} \\
|
||
\frac{\partial Err_y}{\partial u} & \frac{\partial Err_y}{\partial v} & \frac{\partial Err_y}{\partial w} \\
|
||
\frac{\partial Err_z}{\partial u} & \frac{\partial Err_z}{\partial v} & \frac{\partial Err_z}{\partial w}
|
||
\end{array}
|
||
\right)
|
||
\]</span></p>
|
||
</section>
|
||
<section id="implementation-of-ffd-3" class="slide level1">
|
||
<h1>Implementation of FFD</h1>
|
||
<ul>
|
||
<li>Armed with this we iterate the formula <span class="math display">\[J(Err(u,v,w)) \cdot \Delta \left( \begin{array}{c} u \\ v \\ w \end{array} \right) = -Err(u,v,w)\]</span> using Cramer’s rule for inverting the small Jacobian.</li>
|
||
<li>Usually terminates after <span class="math inline">\(3\)</span> to <span class="math inline">\(5\)</span> iteration with an <span class="math inline">\(\epsilon := \vec{p^*} - V(u,v,w) < 10^{-4}\)</span></li>
|
||
<li>self-intersecting grids can invalidate the results
|
||
<ul>
|
||
<li>no problem, as these get not generated and contradict some properties we want (like locality)</li>
|
||
</ul></li>
|
||
</ul>
|
||
</section>
|
||
<section id="outline-1" class="slide level1">
|
||
<h1>Outline</h1>
|
||
<ul>
|
||
<li>What is FFD?</li>
|
||
<li><strong>What is evolutionary optimization?</strong></li>
|
||
<li>How to measure evolvability?</li>
|
||
<li>Scenarios</li>
|
||
<li>Results</li>
|
||
</ul>
|
||
</section>
|
||
<section id="what-is-evolutionary-optimization" class="slide level1">
|
||
<h1>What is evolutionary optimization?</h1>
|
||
<div id="section">
|
||
<div style="width:50%;float:left">
|
||
<pre><code data-noescape data-trim class="" style="">$t := 0$;
|
||
initialize $P(0) := \{\vec{a}_1(0),\dots,\vec{a}_\mu(0)\} \in I^\mu$;
|
||
evaluate $F(0) : \{\Phi(x) | x \in P(0)\}$;
|
||
while($c(F(t)) \neq$ true) {
|
||
recombine: $P’(t) := r(P(t))$;
|
||
mutate: $P''(t) := m(P’(t))$;
|
||
evaluate $F(t) : \{\Phi(x) | x \in P''(t)\}$
|
||
select: $P(t + 1) := s(P''(t) \cup Q,\Phi)$;
|
||
$t := t + 1$;
|
||
}</code></pre>
|
||
</div>
|
||
<div style="width:50%;float:left">
|
||
<pre><code data-noescape data-trim class="" style="">$t$: Iteration-step
|
||
$I$: Set of possible Individuals
|
||
$P$: Population of Individuals
|
||
$F$: Fitness of Individuals
|
||
$Q$: Either set of parents or $\emptyset$
|
||
|
||
$r(..) : I^\mu \mapsto I^\lambda$
|
||
$m(..) : I^\lambda \mapsto I^\lambda$
|
||
$s(..) : I^{\lambda + \mu} \mapsto I^\mu$</code></pre>
|
||
</div>
|
||
<div style="clear: both">
|
||
|
||
</div>
|
||
</div>
|
||
<ul>
|
||
<li>Algorithm to model simple inheritance</li>
|
||
<li>Consists of three main steps
|
||
<ul>
|
||
<li>recombination</li>
|
||
<li>mutation</li>
|
||
<li>selection</li>
|
||
</ul></li>
|
||
<li>An “individual” in our case is the displacement of control-points</li>
|
||
</ul>
|
||
</section>
|
||
<section id="evolutional-loop" class="slide level1">
|
||
<h1>Evolutional loop</h1>
|
||
<ul>
|
||
<li><strong>Recombination</strong> generates <span class="math inline">\(\lambda\)</span> new individuals based on the characteristics of the <span class="math inline">\(\mu\)</span> parents.
|
||
<ul>
|
||
<li>This makes sure that the next guess is close to the old guess.</li>
|
||
</ul></li>
|
||
<li><strong>Mutation</strong> introduces new effects that cannot be produced by mere recombination of the parents.
|
||
<ul>
|
||
<li>Typically these are minor defects to individual members of the population i.e. through added noise</li>
|
||
</ul></li>
|
||
<li><strong>Selection</strong> selects <span class="math inline">\(\mu\)</span> individuals from the children (and optionally the parents) using a <em>fitness–function</em> <span class="math inline">\(\Phi\)</span>.
|
||
<ul>
|
||
<li>Fitness could mean low error, good improvement, etc.</li>
|
||
<li>Fitness not solely determines who survives, there are many possibilities</li>
|
||
</ul></li>
|
||
</ul>
|
||
</section>
|
||
<section id="outline-2" class="slide level1">
|
||
<h1>Outline</h1>
|
||
<ul>
|
||
<li>What is FFD?</li>
|
||
<li>What is evolutionary optimization?</li>
|
||
<li><strong>How to measure evolvability?</strong></li>
|
||
<li>Scenarios</li>
|
||
<li>Results</li>
|
||
</ul>
|
||
</section>
|
||
<section id="how-to-measure-evolvability" class="slide level1">
|
||
<h1>How to measure evolvability?</h1>
|
||
<ul>
|
||
<li>Different (conflicting) optimization targets
|
||
<ul>
|
||
<li>convergence speed?</li>
|
||
<li>convergence quality?</li>
|
||
</ul></li>
|
||
<li>As <span class="math inline">\(\vec{v} = \vec{U}\vec{p}\)</span> is linear, we can also look at <span class="math inline">\(\Delta \vec{v} = \vec{U}\, \Delta \vec{p}\)</span>
|
||
<ul>
|
||
<li>We only change <span class="math inline">\(\Delta \vec{p}\)</span>, so evolvability should only use <span class="math inline">\(\vec{U}\)</span> for predictions</li>
|
||
</ul></li>
|
||
</ul>
|
||
</section>
|
||
<section id="evolvability-criteria" class="slide level1">
|
||
<h1>Evolvability criteria</h1>
|
||
<ul>
|
||
<li><strong>Variability</strong>
|
||
<ul>
|
||
<li>roughly: “How many actual Degrees of Freedom exist?”</li>
|
||
<li>Defined by <span class="math display">\[\mathrm{variability}(\vec{U}) := \frac{\mathrm{rank}(\vec{U})}{n} \in [0..1]\]</span></li>
|
||
<li>in FFD this is <span class="math inline">\(1/\#\textrm{CP}\)</span> for the number of control-points used for parametrization</li>
|
||
</ul></li>
|
||
</ul>
|
||
</section>
|
||
<section id="evolvability-criteria-1" class="slide level1">
|
||
<h1>Evolvability criteria</h1>
|
||
<ul>
|
||
<li><strong>Regularity</strong>
|
||
<ul>
|
||
<li>roughly: “How numerically stable is the optimization?”</li>
|
||
<li>Defined by <span class="math display">\[\mathrm{regularity}(\vec{U}) := \frac{1}{\kappa(\vec{U})} = \frac{\sigma_{min}}{\sigma_{max}} \in [0..1]\]</span> with <span class="math inline">\(\sigma_{min/max}\)</span> being the least/greatest right singular value.</li>
|
||
<li>high, when <span class="math inline">\(\|\vec{Up}\| \propto \|\vec{p}\|\)</span></li>
|
||
</ul></li>
|
||
</ul>
|
||
</section>
|
||
<section id="evolvability-criteria-2" class="slide level1">
|
||
<h1>Evolvability criteria</h1>
|
||
<ul>
|
||
<li><strong>Improvement Potential</strong>
|
||
<ul>
|
||
<li>roughly: “How good can the best fit become?”</li>
|
||
<li>Defined by <span class="math display">\[\mathrm{potential}(\vec{U}) := 1 - \|(\vec{1} - \vec{UU}^+)\vec{G}\|^2_F\]</span> with a unit-normed guessed gradient <span class="math inline">\(\vec{G}\)</span></li>
|
||
</ul></li>
|
||
</ul>
|
||
</section>
|
||
<section id="outline-3" class="slide level1">
|
||
<h1>Outline</h1>
|
||
<ul>
|
||
<li>What is FFD?</li>
|
||
<li>What is evolutionary optimization?</li>
|
||
<li>How to measure evolvability?</li>
|
||
<li><strong>Scenarios</strong></li>
|
||
<li>Results</li>
|
||
</ul>
|
||
</section>
|
||
<section id="scenarios" class="slide level1">
|
||
<h1>Scenarios</h1>
|
||
<ul>
|
||
<li>2 Testing Scenarios</li>
|
||
<li>1-dimensional fit
|
||
<ul>
|
||
<li><span class="math inline">\(xy\)</span>-plane to <span class="math inline">\(xyz\)</span>-model, where only the <span class="math inline">\(z\)</span>-coordinate changes</li>
|
||
<li>can be solved analytically with known global optimum</li>
|
||
</ul></li>
|
||
<li>3-dimensional fit
|
||
<ul>
|
||
<li>fit a parametrized sphere into a face</li>
|
||
<li>cannot be solved analytically</li>
|
||
<li>number of vertices differ between models</li>
|
||
</ul></li>
|
||
</ul>
|
||
</section>
|
||
<section id="d-scenario" class="slide level1">
|
||
<h1>1D-Scenario</h1>
|
||
<p><figure class="" style=""><img src="../arbeit/img/example1d_grid.png" style=""></img><figcaption>Left: A regular <span class="math inline">\(7 \times 4\)</span>–grid<br />Right: The same grid after a random distortion to generate a testcase.</figcaption></figure></p>
|
||
<p><figure class="" style="width:70%;"><img src="../arbeit/img/1dtarget.png" style="width:70%;"></img><figcaption>The target–shape for our 1–dimensional optimization–scenario including a wireframe–overlay of the vertices.</figcaption></figure></p>
|
||
</section>
|
||
<section id="d-scenarios" class="slide level1">
|
||
<h1>3D-Scenarios</h1>
|
||
<p><figure class="" style=""><img src="../arbeit/img/3dtarget.png" style=""></img><figcaption>Left: The sphere we start from with 10 807 vertices<br />Right: The face we want to deform the sphere into with 12 024 vertices.</figcaption></figure></p>
|
||
</section>
|
||
<section id="outline-4" class="slide level1">
|
||
<h1>Outline</h1>
|
||
<ul>
|
||
<li>What is FFD?</li>
|
||
<li>What is evolutionary optimization?</li>
|
||
<li>How to measure evolvability?</li>
|
||
<li>Scenarios</li>
|
||
<li><strong>Results</strong></li>
|
||
</ul>
|
||
</section>
|
||
<section id="variability-1d" class="slide level1">
|
||
<h1>Variability 1D</h1>
|
||
<ul>
|
||
<li>Should measure Degrees of Freedom and thus quality</li>
|
||
</ul>
|
||
<p><figure class="" style=""><img src="../arbeit/img/evolution1d/variability_boxplot.png" style=""></img><figcaption>The squared error for the various grids we examined.<br /> Note that <span class="math inline">\(7 \times 4\)</span> and <span class="math inline">\(4 \times 7\)</span> have the same number of control–points.</figcaption></figure></p>
|
||
<ul>
|
||
<li><span class="math inline">\(5 \times 5\)</span>, <span class="math inline">\(7 \times 7\)</span> and <span class="math inline">\(10 \times 10\)</span> have <em>very strong</em> correlation (<span class="math inline">\(-r_S = 0.94, p = 0\)</span>) between the <em>variability</em> and the evolutionary error.</li>
|
||
</ul>
|
||
</section>
|
||
<section id="variability-3d" class="slide level1">
|
||
<h1>Variability 3D</h1>
|
||
<ul>
|
||
<li>Should measure Degrees of Freedom and thus quality</li>
|
||
</ul>
|
||
<p><figure class="" style=""><img src="../arbeit/img/evolution3d/variability_boxplot.png" style=""></img><figcaption>The fitting error for the various grids we examined.<br />Note that the number of control–points is a product of the resolution, so <span class="math inline">\(X \times 4 \times 4\)</span> and <span class="math inline">\(4 \times 4 \times X\)</span> have the same number of control–points.</figcaption></figure></p>
|
||
<ul>
|
||
<li><span class="math inline">\(4 \times 4 \times 4\)</span>, <span class="math inline">\(5 \times 5 \times 5\)</span> and <span class="math inline">\(6 \times 6 \times 6\)</span> have <em>very strong</em> correlation (<span class="math inline">\(-r_S = 0.91, p = 0\)</span>) between the <em>variability</em> and the evolutionary error.</li>
|
||
</ul>
|
||
</section>
|
||
<section id="varying-variability" class="slide level1">
|
||
<h1>Varying Variability</h1>
|
||
<div id="section-1">
|
||
<div style="width:50%;float:left">
|
||
<p><figure class="" style=""><img src="../arbeit/img/enoughCP.png" style=""></img><figcaption>A high resolution (<span class="math inline">\(10 \times 10\)</span>) of control–points over a circle. Yellow/green points contribute to the parametrization, red points don’t.<br />An Example–point (blue) is solely determined by the position of the green control–points.</figcaption></figure></p>
|
||
</div>
|
||
<div style="width:50%;float:left">
|
||
<p><figure class="" style=""><img src="../arbeit/img/evolution3d/variability2_boxplot.png" style=""></img><figcaption>Histogram of ranks of various <span class="math inline">\(10 \times 10 \times 10\)</span> grids with <span class="math inline">\(1000\)</span> control–points each showing in this case how many control–points are actually used in the calculations.</figcaption></figure></p>
|
||
</div>
|
||
<div style="clear: both">
|
||
|
||
</div>
|
||
</div>
|
||
</section>
|
||
<section id="regularity-1d" class="slide level1">
|
||
<h1>Regularity 1D</h1>
|
||
<ul>
|
||
<li>Should measure convergence speed</li>
|
||
</ul>
|
||
<p><figure class="" style="width:70%;"><img src="../arbeit/img/evolution1d/55_to_1010_steps.png" style="width:70%;"></img><figcaption>Left: <em>Improvement potential</em> against number of iterations until convergence<br />Right: <em>Regularity</em> against number of iterations until convergence<br />Coloured by their grid–resolution, both with a linear fit over the whole dataset.</figcaption></figure></p>
|
||
<ul>
|
||
<li>Not in our scenarios - maybe due to the fact that a better solution simply takes longer to converge, thus dominating.</li>
|
||
</ul>
|
||
</section>
|
||
<section id="regularity-3d" class="slide level1">
|
||
<h1>Regularity 3D</h1>
|
||
<ul>
|
||
<li>Should measure convergence speed</li>
|
||
</ul>
|
||
<p><figure class="" style="width:70%;"><img src="../arbeit/img/evolution3d/regularity_montage.png" style="width:70%;"></img><figcaption>Plots of <em>regularity</em> against number of iterations for various scenarios together with a linear fit to indicate trends.</figcaption></figure></p>
|
||
<ul>
|
||
<li>Only <em>very weak</em> correlation</li>
|
||
<li>Point that contributes the worst dominates regularity by lowering the least right singular value towards 0.</li>
|
||
</ul>
|
||
</section>
|
||
<section id="improvement-potential-in-1d" class="slide level1">
|
||
<h1>Improvement Potential in 1D</h1>
|
||
<ul>
|
||
<li>Should measure expected quality given a gradient</li>
|
||
</ul>
|
||
<p><figure class="" style="width:70%;"><img src="../arbeit/img/evolution1d/55_to_1010_improvement-vs-evo-error.png" style="width:70%;"></img><figcaption><em>Improvement potential</em> plotted against the error yielded by the evolutionary optimization for different grid–resolutions</figcaption></figure></p>
|
||
<ul>
|
||
<li><em>very strong</em> correlation of <span class="math inline">\(- r_S = 1.0, p = 0\)</span>.</li>
|
||
<li>Even with a distorted gradient</li>
|
||
</ul>
|
||
</section>
|
||
<section id="improvement-potential-in-3d" class="slide level1">
|
||
<h1>Improvement Potential in 3D</h1>
|
||
<ul>
|
||
<li>Should measure expected quality given a gradient</li>
|
||
</ul>
|
||
<p><figure class="" style="width:70%;"><img src="../arbeit/img/evolution3d/improvement_montage.png" style="width:70%;"></img><figcaption>Plots of <em>improvement potential</em> against error given by our <em>fitness–function</em> after convergence together with a linear fit of each of the plotted data to indicate trends.</figcaption></figure></p>
|
||
<ul>
|
||
<li><em>weak</em> to <em>moderate</em> correlation within each group.</li>
|
||
</ul>
|
||
</section>
|
||
<section id="summary" class="slide level1">
|
||
<h1>Summary</h1>
|
||
<ul>
|
||
<li><em>Variability</em> and <em>Improvement Potential</em> are good measurements in our cases</li>
|
||
<li><em>Regularity</em> does not work well because of small singular right values
|
||
<ul>
|
||
<li>But optimizing for regularity <em>could</em> still lead to a better grid-setup (not shown, but likely)</li>
|
||
<li>Effect can be dominated by other factors (i.e. better solutions just take longer)</li>
|
||
</ul></li>
|
||
</ul>
|
||
</section>
|
||
<section id="outlook-further-research" class="slide level1">
|
||
<h1>Outlook / Further research</h1>
|
||
<ul>
|
||
<li>Only focused on FFD, but will DM-FFD perform better?
|
||
<ul>
|
||
<li>for RBF the indirect manipulation also performed worse than the direct one</li>
|
||
</ul></li>
|
||
<li>Do grids with high regularity indeed perform better?</li>
|
||
</ul>
|
||
</section>
|
||
<section id="thank-you" class="slide level1">
|
||
<h1>Thank you</h1>
|
||
<p>Any questions?</p>
|
||
</section>
|
||
|
||
|
||
</div>
|
||
</div>
|
||
|
||
|
||
<script src="./template/revealjs/lib/js/head.min.js"></script>
|
||
<script src="./template/revealjs/js/reveal.js"></script>
|
||
|
||
|
||
<script>
|
||
|
||
// More info https://github.com/hakimel/reveal.js#configuration
|
||
Reveal.initialize({
|
||
|
||
|
||
// reveal settings
|
||
controls: false,
|
||
progress: false,
|
||
slideNumber: true,
|
||
history: true,
|
||
center: false,
|
||
transition: 'none',
|
||
viewDistance: 2, // otherwise videos start early
|
||
width: 1280,
|
||
height: 1024,
|
||
minScale: 0.2,
|
||
maxScale: 5, // if this threshold is reached, the chalkboard drawing will be wrongly positioned. hence large threshold!
|
||
|
||
|
||
// use local mathjax installation
|
||
math: { mathjax: './template/mathjax/MathJax.js',
|
||
config: 'TeX-AMS_HTML-full',
|
||
extensions: ["content-mathml.js"]
|
||
},
|
||
|
||
|
||
// setup chalkboard
|
||
chalkboard: {
|
||
src: "presentation.json",
|
||
readOnly: false,
|
||
theme: "chalkboard",
|
||
color: [ 'rgba(255,0,0,1)', 'rgba(255,255,255,1)' ],
|
||
background: [ 'rgba(0,0,0,0)' , './template/my-chalkboard/img/blackboard.png' ],
|
||
pen: [ './template/my-chalkboard/img/boardmarker.png', './template/my-chalkboard/img/chalk.png' ],
|
||
},
|
||
|
||
|
||
// setup reveal-menu
|
||
menu: {
|
||
side: 'right',
|
||
numbers: false,
|
||
titleSelector: 'h1',
|
||
hideMissingTitles: false,
|
||
markers: false,
|
||
custom: false,
|
||
themes: false,
|
||
transitions: false,
|
||
openButton: false,
|
||
openSlideNumber: true,
|
||
keyboard: true
|
||
},
|
||
|
||
|
||
// keyboard shortcuts
|
||
keyboard: {
|
||
40: function() { Reveal.next(); }, // up: next slide
|
||
38: function() { Reveal.prev(); }, // down: prev slide
|
||
67: function() { RevealChalkboard.toggleNotesCanvas() }, // c: draw on slides
|
||
84: function() { RevealChalkboard.toggleChalkboard() }, // t: draw on blackboard
|
||
69: function() { RevealChalkboard.toggleSponge() }, // e: toggle eraser
|
||
8: function() { RevealChalkboard.clear() }, // BACKSPACE: clear chalkboard
|
||
46: function() { RevealChalkboard.reset() }, // DELETE: reset chalkboard
|
||
68: function() { RevealChalkboard.download() }, // d: downlad chalkboard drawing
|
||
},
|
||
|
||
|
||
// load plugins
|
||
dependencies: [
|
||
{ src: './template/revealjs/plugin/math/math.js' },
|
||
{ src: './template/revealjs/plugin/notes/notes.js', async: true },
|
||
/*{ src: './template/revealjs/plugin/highlight/highlight.js', async: true, callback: function() {
|
||
var code_blocks = document.querySelectorAll('code');
|
||
for( var i = 0, len = code_blocks.length; i < len; i++ ) hljs.highlightBlock(code_blocks[i]);
|
||
}},*/
|
||
{ src: './template/revealjs/plugin/menu/menu.js' },
|
||
{ src: './template/my-chalkboard/chalkboard.js' }, // do not load this async ('ready' event is missing, print wont work)
|
||
{ src: './template/my-zoom/zoom.js', async: true },
|
||
]
|
||
|
||
});
|
||
</script>
|
||
|
||
</body>
|
||
|
||
</html>
|