Skip to content

Commit 51f0d1c

Browse files
Deployed 3321394 with MkDocs version: 1.6.0
1 parent 5d8aa3c commit 51f0d1c

5 files changed

Lines changed: 378 additions & 140 deletions

File tree

objects.inv

6 Bytes
Binary file not shown.

reference/spotpython/utils/sampling/index.html

Lines changed: 238 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4748,6 +4748,15 @@
47484748
</span>
47494749
</a>
47504750

4751+
</li>
4752+
4753+
<li class="md-nav__item">
4754+
<a href="#spotpython.utils.sampling.mmphi_intensive_update" class="md-nav__link">
4755+
<span class="md-ellipsis">
4756+
mmphi_intensive_update
4757+
</span>
4758+
</a>
4759+
47514760
</li>
47524761

47534762
<li class="md-nav__item">
@@ -5148,6 +5157,15 @@
51485157
</span>
51495158
</a>
51505159

5160+
</li>
5161+
5162+
<li class="md-nav__item">
5163+
<a href="#spotpython.utils.sampling.mmphi_intensive_update" class="md-nav__link">
5164+
<span class="md-ellipsis">
5165+
mmphi_intensive_update
5166+
</span>
5167+
</a>
5168+
51515169
</li>
51525170

51535171
<li class="md-nav__item">
@@ -7463,6 +7481,226 @@ <h2 id="spotpython.utils.sampling.mmphi_intensive" class="doc doc-heading">
74637481
<div class="doc doc-object doc-function">
74647482

74657483

7484+
<h2 id="spotpython.utils.sampling.mmphi_intensive_update" class="doc doc-heading">
7485+
<code class="highlight language-python"><span class="n">mmphi_intensive_update</span><span class="p">(</span><span class="n">X</span><span class="p">,</span> <span class="n">new_point</span><span class="p">,</span> <span class="n">J</span><span class="p">,</span> <span class="n">d</span><span class="p">,</span> <span class="n">q</span><span class="o">=</span><span class="mf">2.0</span><span class="p">,</span> <span class="n">p</span><span class="o">=</span><span class="mf">2.0</span><span class="p">)</span></code>
7486+
7487+
<a href="#spotpython.utils.sampling.mmphi_intensive_update" class="headerlink" title="Permanent link">&para;</a></h2>
7488+
7489+
7490+
<div class="doc doc-contents ">
7491+
7492+
<p>Updates the Morris-Mitchell intensive criterion for n+1 points by adding a new point to the design.</p>
7493+
7494+
7495+
<p><span class="doc-section-title">Parameters:</span></p>
7496+
<table>
7497+
<thead>
7498+
<tr>
7499+
<th>Name</th>
7500+
<th>Type</th>
7501+
<th>Description</th>
7502+
<th>Default</th>
7503+
</tr>
7504+
</thead>
7505+
<tbody>
7506+
<tr class="doc-section-item">
7507+
<td><code>X</code></td>
7508+
<td>
7509+
<code><span title="numpy.ndarray">ndarray</span></code>
7510+
</td>
7511+
<td>
7512+
<div class="doc-md-description">
7513+
<p>Existing sampling plan (shape: (n, d)).</p>
7514+
</div>
7515+
</td>
7516+
<td>
7517+
<em>required</em>
7518+
</td>
7519+
</tr>
7520+
<tr class="doc-section-item">
7521+
<td><code>new_point</code></td>
7522+
<td>
7523+
<code><span title="numpy.ndarray">ndarray</span></code>
7524+
</td>
7525+
<td>
7526+
<div class="doc-md-description">
7527+
<p>New point to add (shape: (d,)).</p>
7528+
</div>
7529+
</td>
7530+
<td>
7531+
<em>required</em>
7532+
</td>
7533+
</tr>
7534+
<tr class="doc-section-item">
7535+
<td><code>J</code></td>
7536+
<td>
7537+
<code><span title="numpy.ndarray">ndarray</span></code>
7538+
</td>
7539+
<td>
7540+
<div class="doc-md-description">
7541+
<p>Multiplicities of distances for the existing design.</p>
7542+
</div>
7543+
</td>
7544+
<td>
7545+
<em>required</em>
7546+
</td>
7547+
</tr>
7548+
<tr class="doc-section-item">
7549+
<td><code>d</code></td>
7550+
<td>
7551+
<code><span title="numpy.ndarray">ndarray</span></code>
7552+
</td>
7553+
<td>
7554+
<div class="doc-md-description">
7555+
<p>Unique distances for the existing design.</p>
7556+
</div>
7557+
</td>
7558+
<td>
7559+
<em>required</em>
7560+
</td>
7561+
</tr>
7562+
<tr class="doc-section-item">
7563+
<td><code>q</code></td>
7564+
<td>
7565+
<code>float</code>
7566+
</td>
7567+
<td>
7568+
<div class="doc-md-description">
7569+
<p>Exponent used in the computation of the metric. Defaults to 2.0.</p>
7570+
</div>
7571+
</td>
7572+
<td>
7573+
<code>2.0</code>
7574+
</td>
7575+
</tr>
7576+
<tr class="doc-section-item">
7577+
<td><code>p</code></td>
7578+
<td>
7579+
<code>float</code>
7580+
</td>
7581+
<td>
7582+
<div class="doc-md-description">
7583+
<p>Distance norm to use (e.g., p=1 for Manhattan, p=2 for Euclidean). Defaults to 2.0.</p>
7584+
</div>
7585+
</td>
7586+
<td>
7587+
<code>2.0</code>
7588+
</td>
7589+
</tr>
7590+
</tbody>
7591+
</table>
7592+
7593+
7594+
<p><span class="doc-section-title">Returns:</span></p>
7595+
<table>
7596+
<thead>
7597+
<tr>
7598+
<th>Type</th>
7599+
<th>Description</th>
7600+
</tr>
7601+
</thead>
7602+
<tbody>
7603+
<tr class="doc-section-item">
7604+
<td>
7605+
<code>tuple[float, <span title="numpy.ndarray">ndarray</span>, <span title="numpy.ndarray">ndarray</span>]</code>
7606+
</td>
7607+
<td>
7608+
<div class="doc-md-description">
7609+
<p>tuple[float, np.ndarray, np.ndarray]: Updated intensive_phiq, updated_J, updated_d.</p>
7610+
</div>
7611+
</td>
7612+
</tr>
7613+
</tbody>
7614+
</table>
7615+
7616+
<details class="quote">
7617+
<summary>Source code in <code>spotpython/utils/sampling.py</code></summary>
7618+
<div class="highlight"><table class="highlighttable"><tr><td class="linenos"><div class="linenodiv"><pre><span></span><span class="normal">956</span>
7619+
<span class="normal">957</span>
7620+
<span class="normal">958</span>
7621+
<span class="normal">959</span>
7622+
<span class="normal">960</span>
7623+
<span class="normal">961</span>
7624+
<span class="normal">962</span>
7625+
<span class="normal">963</span>
7626+
<span class="normal">964</span>
7627+
<span class="normal">965</span>
7628+
<span class="normal">966</span>
7629+
<span class="normal">967</span>
7630+
<span class="normal">968</span>
7631+
<span class="normal">969</span>
7632+
<span class="normal">970</span>
7633+
<span class="normal">971</span>
7634+
<span class="normal">972</span>
7635+
<span class="normal">973</span>
7636+
<span class="normal">974</span>
7637+
<span class="normal">975</span>
7638+
<span class="normal">976</span>
7639+
<span class="normal">977</span>
7640+
<span class="normal">978</span>
7641+
<span class="normal">979</span>
7642+
<span class="normal">980</span>
7643+
<span class="normal">981</span>
7644+
<span class="normal">982</span>
7645+
<span class="normal">983</span>
7646+
<span class="normal">984</span>
7647+
<span class="normal">985</span>
7648+
<span class="normal">986</span>
7649+
<span class="normal">987</span>
7650+
<span class="normal">988</span>
7651+
<span class="normal">989</span>
7652+
<span class="normal">990</span>
7653+
<span class="normal">991</span>
7654+
<span class="normal">992</span>
7655+
<span class="normal">993</span>
7656+
<span class="normal">994</span></pre></div></td><td class="code"><div><pre><span></span><code><span class="k">def</span> <span class="nf">mmphi_intensive_update</span><span class="p">(</span><span class="n">X</span><span class="p">:</span> <span class="n">np</span><span class="o">.</span><span class="n">ndarray</span><span class="p">,</span> <span class="n">new_point</span><span class="p">:</span> <span class="n">np</span><span class="o">.</span><span class="n">ndarray</span><span class="p">,</span> <span class="n">J</span><span class="p">:</span> <span class="n">np</span><span class="o">.</span><span class="n">ndarray</span><span class="p">,</span> <span class="n">d</span><span class="p">:</span> <span class="n">np</span><span class="o">.</span><span class="n">ndarray</span><span class="p">,</span> <span class="n">q</span><span class="p">:</span> <span class="nb">float</span> <span class="o">=</span> <span class="mf">2.0</span><span class="p">,</span> <span class="n">p</span><span class="p">:</span> <span class="nb">float</span> <span class="o">=</span> <span class="mf">2.0</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">tuple</span><span class="p">[</span><span class="nb">float</span><span class="p">,</span> <span class="n">np</span><span class="o">.</span><span class="n">ndarray</span><span class="p">,</span> <span class="n">np</span><span class="o">.</span><span class="n">ndarray</span><span class="p">]:</span>
7657+
<span class="w"> </span><span class="sd">&quot;&quot;&quot;</span>
7658+
<span class="sd"> Updates the Morris-Mitchell intensive criterion for n+1 points by adding a new point to the design.</span>
7659+
7660+
<span class="sd"> Args:</span>
7661+
<span class="sd"> X (np.ndarray): Existing sampling plan (shape: (n, d)).</span>
7662+
<span class="sd"> new_point (np.ndarray): New point to add (shape: (d,)).</span>
7663+
<span class="sd"> J (np.ndarray): Multiplicities of distances for the existing design.</span>
7664+
<span class="sd"> d (np.ndarray): Unique distances for the existing design.</span>
7665+
<span class="sd"> q (float): Exponent used in the computation of the metric. Defaults to 2.0.</span>
7666+
<span class="sd"> p (float): Distance norm to use (e.g., p=1 for Manhattan, p=2 for Euclidean). Defaults to 2.0.</span>
7667+
7668+
<span class="sd"> Returns:</span>
7669+
<span class="sd"> tuple[float, np.ndarray, np.ndarray]: Updated intensive_phiq, updated_J, updated_d.</span>
7670+
<span class="sd"> &quot;&quot;&quot;</span>
7671+
<span class="n">n_points</span> <span class="o">=</span> <span class="n">X</span><span class="o">.</span><span class="n">shape</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span>
7672+
<span class="k">if</span> <span class="n">n_points</span> <span class="o">&lt;</span> <span class="mi">1</span><span class="p">:</span>
7673+
<span class="k">raise</span> <span class="ne">ValueError</span><span class="p">(</span><span class="s2">&quot;The existing design must contain at least one point.&quot;</span><span class="p">)</span>
7674+
7675+
<span class="c1"># Compute distances between the new point and all existing points</span>
7676+
<span class="n">new_distances</span> <span class="o">=</span> <span class="n">np</span><span class="o">.</span><span class="n">array</span><span class="p">([</span><span class="n">np</span><span class="o">.</span><span class="n">linalg</span><span class="o">.</span><span class="n">norm</span><span class="p">(</span><span class="n">new_point</span> <span class="o">-</span> <span class="n">X</span><span class="p">[</span><span class="n">i</span><span class="p">],</span> <span class="nb">ord</span><span class="o">=</span><span class="n">p</span><span class="p">)</span> <span class="k">for</span> <span class="n">i</span> <span class="ow">in</span> <span class="nb">range</span><span class="p">(</span><span class="n">n_points</span><span class="p">)])</span>
7677+
7678+
<span class="c1"># Combine old distances and new distances into a single list</span>
7679+
<span class="n">all_distances</span> <span class="o">=</span> <span class="p">[]</span>
7680+
<span class="k">for</span> <span class="n">dist</span><span class="p">,</span> <span class="n">count</span> <span class="ow">in</span> <span class="nb">zip</span><span class="p">(</span><span class="n">d</span><span class="p">,</span> <span class="n">J</span><span class="p">):</span>
7681+
<span class="n">all_distances</span><span class="o">.</span><span class="n">extend</span><span class="p">([</span><span class="n">dist</span><span class="p">]</span> <span class="o">*</span> <span class="n">count</span><span class="p">)</span>
7682+
<span class="n">all_distances</span><span class="o">.</span><span class="n">extend</span><span class="p">(</span><span class="n">new_distances</span><span class="p">)</span>
7683+
7684+
<span class="c1"># Find unique distances and their counts</span>
7685+
<span class="n">updated_d</span><span class="p">,</span> <span class="n">updated_J</span> <span class="o">=</span> <span class="n">np</span><span class="o">.</span><span class="n">unique</span><span class="p">(</span><span class="n">all_distances</span><span class="p">,</span> <span class="n">return_counts</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>
7686+
7687+
<span class="c1"># Calculate the number of unique pairs of points</span>
7688+
<span class="n">M</span> <span class="o">=</span> <span class="p">(</span><span class="n">n_points</span> <span class="o">+</span> <span class="mi">1</span><span class="p">)</span> <span class="o">*</span> <span class="n">n_points</span> <span class="o">/</span> <span class="mi">2</span>
7689+
7690+
<span class="c1"># Compute the updated intensive_phiq</span>
7691+
<span class="n">sum_term</span> <span class="o">=</span> <span class="n">np</span><span class="o">.</span><span class="n">sum</span><span class="p">(</span><span class="n">updated_J</span> <span class="o">*</span> <span class="p">(</span><span class="n">updated_d</span> <span class="o">**</span> <span class="p">(</span><span class="o">-</span><span class="n">q</span><span class="p">)))</span>
7692+
<span class="n">intensive_phiq</span> <span class="o">=</span> <span class="p">(</span><span class="n">sum_term</span> <span class="o">/</span> <span class="n">M</span><span class="p">)</span> <span class="o">**</span> <span class="p">(</span><span class="mf">1.0</span> <span class="o">/</span> <span class="n">q</span><span class="p">)</span>
7693+
7694+
<span class="k">return</span> <span class="n">intensive_phiq</span><span class="p">,</span> <span class="n">updated_J</span><span class="p">,</span> <span class="n">updated_d</span>
7695+
</code></pre></div></td></tr></table></div>
7696+
</details>
7697+
</div>
7698+
7699+
</div>
7700+
7701+
<div class="doc doc-object doc-function">
7702+
7703+
74667704
<h2 id="spotpython.utils.sampling.mmsort" class="doc doc-heading">
74677705
<code class="highlight language-python"><span class="n">mmsort</span><span class="p">(</span><span class="n">X3D</span><span class="p">,</span> <span class="n">p</span><span class="o">=</span><span class="mf">1.0</span><span class="p">)</span></code>
74687706

search/search_index.json

Lines changed: 1 addition & 1 deletion
Large diffs are not rendered by default.

0 commit comments

Comments
 (0)