Skip to content

Commit

Permalink
Filip Bártek: Handle invalid neighbors in local search gracefully (#773)
Browse files Browse the repository at this point in the history
  • Loading branch information
Github Actions committed Sep 23, 2021
1 parent ce75bfa commit 9ad451f
Show file tree
Hide file tree
Showing 62 changed files with 376 additions and 209 deletions.
2 changes: 1 addition & 1 deletion development/.buildinfo
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
# Sphinx build info version 1
# This file hashes the configuration used when building these files. When it is not found, a full rebuild will be done.
config: d277f879cd0fb755e914f4b656dea9a9
config: dfff4dbe53748b403b896743f289097f
tags: 645f666f9bcd5a90fca523b33c5a78b7
Original file line number Diff line number Diff line change
Expand Up @@ -46,7 +46,7 @@
"name": "python",
"nbconvert_exporter": "python",
"pygments_lexer": "ipython3",
"version": "3.8.11"
"version": "3.8.12"
}
},
"nbformat": 4,
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -46,7 +46,7 @@
"name": "python",
"nbconvert_exporter": "python",
"pygments_lexer": "ipython3",
"version": "3.8.11"
"version": "3.8.12"
}
},
"nbformat": 4,
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -200,7 +200,7 @@
"name": "python",
"nbconvert_exporter": "python",
"pygments_lexer": "ipython3",
"version": "3.8.11"
"version": "3.8.12"
}
},
"nbformat": 4,
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -46,7 +46,7 @@
"name": "python",
"nbconvert_exporter": "python",
"pygments_lexer": "ipython3",
"version": "3.8.11"
"version": "3.8.12"
}
},
"nbformat": 4,
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -46,7 +46,7 @@
"name": "python",
"nbconvert_exporter": "python",
"pygments_lexer": "ipython3",
"version": "3.8.11"
"version": "3.8.12"
}
},
"nbformat": 4,
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -46,7 +46,7 @@
"name": "python",
"nbconvert_exporter": "python",
"pygments_lexer": "ipython3",
"version": "3.8.11"
"version": "3.8.12"
}
},
"nbformat": 4,
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -46,7 +46,7 @@
"name": "python",
"nbconvert_exporter": "python",
"pygments_lexer": "ipython3",
"version": "3.8.11"
"version": "3.8.12"
}
},
"nbformat": 4,
Expand Down
Binary file not shown.
Binary file not shown.
Original file line number Diff line number Diff line change
Expand Up @@ -46,7 +46,7 @@
"name": "python",
"nbconvert_exporter": "python",
"pygments_lexer": "ipython3",
"version": "3.8.11"
"version": "3.8.12"
}
},
"nbformat": 4,
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -46,7 +46,7 @@
"name": "python",
"nbconvert_exporter": "python",
"pygments_lexer": "ipython3",
"version": "3.8.11"
"version": "3.8.12"
}
},
"nbformat": 4,
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -46,7 +46,7 @@
"name": "python",
"nbconvert_exporter": "python",
"pygments_lexer": "ipython3",
"version": "3.8.11"
"version": "3.8.12"
}
},
"nbformat": 4,
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -46,7 +46,7 @@
"name": "python",
"nbconvert_exporter": "python",
"pygments_lexer": "ipython3",
"version": "3.8.11"
"version": "3.8.12"
}
},
"nbformat": 4,
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -46,7 +46,7 @@
"name": "python",
"nbconvert_exporter": "python",
"pygments_lexer": "ipython3",
"version": "3.8.11"
"version": "3.8.12"
}
},
"nbformat": 4,
Expand Down
225 changes: 225 additions & 0 deletions development/_modules/ConfigSpace/exceptions.html

Large diffs are not rendered by default.

1 change: 1 addition & 0 deletions development/_modules/index.html
Original file line number Diff line number Diff line change
Expand Up @@ -192,6 +192,7 @@
<h1>All modules for which code is available</h1>
<ul><li><a href="ConfigSpace/conditions.html">ConfigSpace.conditions</a></li>
<li><a href="ConfigSpace/configuration_space.html">ConfigSpace.configuration_space</a></li>
<li><a href="ConfigSpace/exceptions.html">ConfigSpace.exceptions</a></li>
<li><a href="ConfigSpace/hyperparameters.html">ConfigSpace.hyperparameters</a></li>
<li><a href="smac/callbacks.html">smac.callbacks</a></li>
<li><a href="smac/configspace/util.html">smac.configspace.util</a></li>
Expand Down
39 changes: 26 additions & 13 deletions development/_modules/smac/optimizer/ei_optimization.html
Original file line number Diff line number Diff line change
Expand Up @@ -205,6 +205,7 @@ <h1>Source code for smac.optimizer.ei_optimization</h1><div class="highlight"><p
<span class="n">Configuration</span><span class="p">,</span>
<span class="n">ConfigurationSpace</span><span class="p">,</span>
<span class="n">convert_configurations_to_array</span><span class="p">,</span>
<span class="n">ForbiddenValueError</span><span class="p">,</span>
<span class="p">)</span>
<span class="kn">from</span> <span class="nn">smac.runhistory.runhistory</span> <span class="kn">import</span> <span class="n">RunHistory</span>
<span class="kn">from</span> <span class="nn">smac.stats.stats</span> <span class="kn">import</span> <span class="n">Stats</span>
Expand Down Expand Up @@ -560,10 +561,15 @@ <h1>Source code for smac.optimizer.ei_optimization</h1><div class="highlight"><p
<span class="n">n</span> <span class="o">=</span> <span class="nb">next</span><span class="p">(</span><span class="n">neighborhood_iterator</span><span class="p">)</span>
<span class="n">neighbors_generated</span><span class="p">[</span><span class="n">i</span><span class="p">]</span> <span class="o">+=</span> <span class="mi">1</span>
<span class="n">neighbors_for_i</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="n">n</span><span class="p">)</span>
<span class="k">except</span> <span class="ne">ValueError</span> <span class="k">as</span> <span class="n">e</span><span class="p">:</span>
<span class="c1"># `neighborhood_iterator` raises `ValueError` with some probability when it reaches</span>
<span class="c1"># an invalid configuration.</span>
<span class="bp">self</span><span class="o">.</span><span class="n">logger</span><span class="o">.</span><span class="n">debug</span><span class="p">(</span><span class="n">e</span><span class="p">)</span>
<span class="n">new_neighborhood</span><span class="p">[</span><span class="n">i</span><span class="p">]</span> <span class="o">=</span> <span class="kc">True</span>
<span class="k">except</span> <span class="ne">StopIteration</span><span class="p">:</span>
<span class="n">obtain_n</span><span class="p">[</span><span class="n">i</span><span class="p">]</span> <span class="o">=</span> <span class="nb">len</span><span class="p">(</span><span class="n">neighbors_for_i</span><span class="p">)</span>
<span class="n">new_neighborhood</span><span class="p">[</span><span class="n">i</span><span class="p">]</span> <span class="o">=</span> <span class="kc">True</span>
<span class="k">break</span>
<span class="n">obtain_n</span><span class="p">[</span><span class="n">i</span><span class="p">]</span> <span class="o">=</span> <span class="nb">len</span><span class="p">(</span><span class="n">neighbors_for_i</span><span class="p">)</span>
<span class="n">neighbors</span><span class="o">.</span><span class="n">extend</span><span class="p">(</span><span class="n">neighbors_for_i</span><span class="p">)</span>

<span class="k">if</span> <span class="nb">len</span><span class="p">(</span><span class="n">neighbors</span><span class="p">)</span> <span class="o">!=</span> <span class="mi">0</span><span class="p">:</span>
Expand Down Expand Up @@ -591,18 +597,25 @@ <h1>Source code for smac.optimizer.ei_optimization</h1><div class="highlight"><p

<span class="c1"># Found a better configuration</span>
<span class="k">if</span> <span class="n">acq_val</span><span class="p">[</span><span class="n">acq_index</span><span class="p">]</span> <span class="o">&gt;</span> <span class="n">acq_val_candidates</span><span class="p">[</span><span class="n">i</span><span class="p">]:</span>
<span class="bp">self</span><span class="o">.</span><span class="n">logger</span><span class="o">.</span><span class="n">debug</span><span class="p">(</span>
<span class="s2">&quot;Local search </span><span class="si">%d</span><span class="s2">: Switch to one of the neighbors (after </span><span class="si">%d</span><span class="s2"> configurations).&quot;</span><span class="p">,</span>
<span class="n">i</span><span class="p">,</span>
<span class="n">neighbors_looked_at</span><span class="p">[</span><span class="n">i</span><span class="p">],</span>
<span class="p">)</span>
<span class="n">candidates</span><span class="p">[</span><span class="n">i</span><span class="p">]</span> <span class="o">=</span> <span class="n">neighbors</span><span class="p">[</span><span class="n">acq_index</span><span class="p">]</span>
<span class="n">acq_val_candidates</span><span class="p">[</span><span class="n">i</span><span class="p">]</span> <span class="o">=</span> <span class="n">acq_val</span><span class="p">[</span><span class="n">acq_index</span><span class="p">]</span>
<span class="n">new_neighborhood</span><span class="p">[</span><span class="n">i</span><span class="p">]</span> <span class="o">=</span> <span class="kc">True</span>
<span class="n">improved</span><span class="p">[</span><span class="n">i</span><span class="p">]</span> <span class="o">=</span> <span class="kc">True</span>
<span class="n">local_search_steps</span><span class="p">[</span><span class="n">i</span><span class="p">]</span> <span class="o">+=</span> <span class="mi">1</span>
<span class="n">neighbors_w_equal_acq</span><span class="p">[</span><span class="n">i</span><span class="p">]</span> <span class="o">=</span> <span class="p">[]</span>
<span class="n">obtain_n</span><span class="p">[</span><span class="n">i</span><span class="p">]</span> <span class="o">=</span> <span class="mi">1</span>
<span class="n">is_valid</span> <span class="o">=</span> <span class="kc">False</span>
<span class="k">try</span><span class="p">:</span>
<span class="n">neighbors</span><span class="p">[</span><span class="n">acq_index</span><span class="p">]</span><span class="o">.</span><span class="n">is_valid_configuration</span><span class="p">()</span>
<span class="n">is_valid</span> <span class="o">=</span> <span class="kc">True</span>
<span class="k">except</span> <span class="p">(</span><span class="ne">ValueError</span><span class="p">,</span> <span class="n">ForbiddenValueError</span><span class="p">)</span> <span class="k">as</span> <span class="n">e</span><span class="p">:</span>
<span class="bp">self</span><span class="o">.</span><span class="n">logger</span><span class="o">.</span><span class="n">debug</span><span class="p">(</span><span class="s2">&quot;Local search </span><span class="si">%d</span><span class="s2">: </span><span class="si">%s</span><span class="s2">&quot;</span><span class="p">,</span> <span class="n">i</span><span class="p">,</span> <span class="n">e</span><span class="p">)</span>
<span class="k">if</span> <span class="n">is_valid</span><span class="p">:</span>
<span class="bp">self</span><span class="o">.</span><span class="n">logger</span><span class="o">.</span><span class="n">debug</span><span class="p">(</span>
<span class="s2">&quot;Local search </span><span class="si">%d</span><span class="s2">: Switch to one of the neighbors (after </span><span class="si">%d</span><span class="s2"> configurations).&quot;</span><span class="p">,</span>
<span class="n">i</span><span class="p">,</span>
<span class="n">neighbors_looked_at</span><span class="p">[</span><span class="n">i</span><span class="p">],</span>
<span class="p">)</span>
<span class="n">candidates</span><span class="p">[</span><span class="n">i</span><span class="p">]</span> <span class="o">=</span> <span class="n">neighbors</span><span class="p">[</span><span class="n">acq_index</span><span class="p">]</span>
<span class="n">acq_val_candidates</span><span class="p">[</span><span class="n">i</span><span class="p">]</span> <span class="o">=</span> <span class="n">acq_val</span><span class="p">[</span><span class="n">acq_index</span><span class="p">]</span>
<span class="n">new_neighborhood</span><span class="p">[</span><span class="n">i</span><span class="p">]</span> <span class="o">=</span> <span class="kc">True</span>
<span class="n">improved</span><span class="p">[</span><span class="n">i</span><span class="p">]</span> <span class="o">=</span> <span class="kc">True</span>
<span class="n">local_search_steps</span><span class="p">[</span><span class="n">i</span><span class="p">]</span> <span class="o">+=</span> <span class="mi">1</span>
<span class="n">neighbors_w_equal_acq</span><span class="p">[</span><span class="n">i</span><span class="p">]</span> <span class="o">=</span> <span class="p">[]</span>
<span class="n">obtain_n</span><span class="p">[</span><span class="n">i</span><span class="p">]</span> <span class="o">=</span> <span class="mi">1</span>
<span class="c1"># Found an equally well performing configuration, keeping it for plateau walking</span>
<span class="k">elif</span> <span class="n">acq_val</span><span class="p">[</span><span class="n">acq_index</span><span class="p">]</span> <span class="o">==</span> <span class="n">acq_val_candidates</span><span class="p">[</span><span class="n">i</span><span class="p">]:</span>
<span class="n">neighbors_w_equal_acq</span><span class="p">[</span><span class="n">i</span><span class="p">]</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="n">neighbors</span><span class="p">[</span><span class="n">acq_index</span><span class="p">])</span>
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -95,7 +95,7 @@ Using the black-box optimization interface of SMAC
.. rst-class:: sphx-glr-timing

**Total running time of the script:** ( 0 minutes 14.192 seconds)
**Total running time of the script:** ( 0 minutes 21.648 seconds)


.. _sphx_glr_download_examples_SMAC4BB_SMAC4BB_rosenbrock_example.py:
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -5,8 +5,8 @@

Computation times
=================
**00:14.192** total execution time for **examples_SMAC4BB** files:
**00:21.648** total execution time for **examples_SMAC4BB** files:

+----------------------------------------------------------------------------------------------------+-----------+--------+
| :ref:`sphx_glr_examples_SMAC4BB_SMAC4BB_rosenbrock_example.py` (``SMAC4BB_rosenbrock_example.py``) | 00:14.192 | 0.0 MB |
| :ref:`sphx_glr_examples_SMAC4BB_SMAC4BB_rosenbrock_example.py` (``SMAC4BB_rosenbrock_example.py``) | 00:21.648 | 0.0 MB |
+----------------------------------------------------------------------------------------------------+-----------+--------+
Original file line number Diff line number Diff line change
Expand Up @@ -109,7 +109,7 @@ Changing the acquisition function
.. rst-class:: sphx-glr-timing

**Total running time of the script:** ( 0 minutes 3.146 seconds)
**Total running time of the script:** ( 0 minutes 3.886 seconds)


.. _sphx_glr_download_examples_SMAC4HPO_SMAC4HPO_acq_rosenbrock_example.py:
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -25,7 +25,7 @@ We optimize a GradientBoosting on an artificially created binary classification
default cross validation score: 0.06
default test score: 0.06
/opt/hostedtoolcache/Python/3.8.11/x64/lib/python3.8/site-packages/scipy/stats/_qmc.py:1078: UserWarning: The balance properties of Sobol' points require n to be a power of 2.
/opt/hostedtoolcache/Python/3.8.12/x64/lib/python3.8/site-packages/scipy/stats/_qmc.py:1078: UserWarning: The balance properties of Sobol' points require n to be a power of 2.
warnings.warn("The balance properties of Sobol' points require"
Score on test set: 0.06
Expand Down Expand Up @@ -118,7 +118,7 @@ We optimize a GradientBoosting on an artificially created binary classification
.. rst-class:: sphx-glr-timing

**Total running time of the script:** ( 2 minutes 10.646 seconds)
**Total running time of the script:** ( 2 minutes 14.663 seconds)


.. _sphx_glr_download_examples_SMAC4HPO_SMAC4HPO_gradientboosting_example.py:
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -96,7 +96,7 @@ Using SMAC tuned for HPO for black-box optimization
.. rst-class:: sphx-glr-timing

**Total running time of the script:** ( 0 minutes 2.941 seconds)
**Total running time of the script:** ( 0 minutes 3.924 seconds)


.. _sphx_glr_download_examples_SMAC4HPO_SMAC4HPO_rosenbrock_example.py:
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -27,9 +27,9 @@ Note: SMAC-documentation uses linenumbers to generate docs from this file.
Default Value: 0.03
Optimizing! Depending on your machine, this might take a few minutes.
/opt/hostedtoolcache/Python/3.8.11/x64/lib/python3.8/site-packages/scipy/stats/_qmc.py:1078: UserWarning: The balance properties of Sobol' points require n to be a power of 2.
/opt/hostedtoolcache/Python/3.8.12/x64/lib/python3.8/site-packages/scipy/stats/_qmc.py:1078: UserWarning: The balance properties of Sobol' points require n to be a power of 2.
warnings.warn("The balance properties of Sobol' points require"
Optimized Value: 0.01
Optimized Value: 0.02
Expand Down Expand Up @@ -163,7 +163,7 @@ Note: SMAC-documentation uses linenumbers to generate docs from this file.
.. rst-class:: sphx-glr-timing

**Total running time of the script:** ( 0 minutes 23.053 seconds)
**Total running time of the script:** ( 0 minutes 27.751 seconds)


.. _sphx_glr_download_examples_SMAC4HPO_SMAC4HPO_svm_example.py:
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -5,14 +5,14 @@

Computation times
=================
**02:39.787** total execution time for **examples_SMAC4HPO** files:
**02:50.224** total execution time for **examples_SMAC4HPO** files:

+-------------------------------------------------------------------------------------------------------------------+-----------+--------+
| :ref:`sphx_glr_examples_SMAC4HPO_SMAC4HPO_gradientboosting_example.py` (``SMAC4HPO_gradientboosting_example.py``) | 02:10.646 | 0.0 MB |
| :ref:`sphx_glr_examples_SMAC4HPO_SMAC4HPO_gradientboosting_example.py` (``SMAC4HPO_gradientboosting_example.py``) | 02:14.663 | 0.0 MB |
+-------------------------------------------------------------------------------------------------------------------+-----------+--------+
| :ref:`sphx_glr_examples_SMAC4HPO_SMAC4HPO_svm_example.py` (``SMAC4HPO_svm_example.py``) | 00:23.053 | 0.0 MB |
| :ref:`sphx_glr_examples_SMAC4HPO_SMAC4HPO_svm_example.py` (``SMAC4HPO_svm_example.py``) | 00:27.751 | 0.0 MB |
+-------------------------------------------------------------------------------------------------------------------+-----------+--------+
| :ref:`sphx_glr_examples_SMAC4HPO_SMAC4HPO_acq_rosenbrock_example.py` (``SMAC4HPO_acq_rosenbrock_example.py``) | 00:03.146 | 0.0 MB |
| :ref:`sphx_glr_examples_SMAC4HPO_SMAC4HPO_rosenbrock_example.py` (``SMAC4HPO_rosenbrock_example.py``) | 00:03.924 | 0.0 MB |
+-------------------------------------------------------------------------------------------------------------------+-----------+--------+
| :ref:`sphx_glr_examples_SMAC4HPO_SMAC4HPO_rosenbrock_example.py` (``SMAC4HPO_rosenbrock_example.py``) | 00:02.941 | 0.0 MB |
| :ref:`sphx_glr_examples_SMAC4HPO_SMAC4HPO_acq_rosenbrock_example.py` (``SMAC4HPO_acq_rosenbrock_example.py``) | 00:03.886 | 0.0 MB |
+-------------------------------------------------------------------------------------------------------------------+-----------+--------+
Loading

0 comments on commit 9ad451f

Please sign in to comment.