<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd"> <html> <head> <title></title> <meta http-equiv="content-type" content="text/html; charset=UTF-8"> <style type="text/css"> td.linenos { background-color: #f0f0f0; padding-right: 10px; } span.lineno { background-color: #f0f0f0; padding: 0 5px 0 5px; } pre { line-height: 125%; } body .hll { background-color: #ffffcc } body { background: #ffffff; } body .c { color: #008000 } /* Comment */ body .err { border: 1px solid #FF0000 } /* Error */ body .k { color: #0000ff } /* Keyword */ body .ch { color: #008000 } /* Comment.Hashbang */ body .cm { color: #008000 } /* Comment.Multiline */ body .cp { color: #0000ff } /* Comment.Preproc */ body .cpf { color: #008000 } /* Comment.PreprocFile */ body .c1 { color: #008000 } /* Comment.Single */ body .cs { color: #008000 } /* Comment.Special */ body .ge { font-style: italic } /* Generic.Emph */ body .gh { font-weight: bold } /* Generic.Heading */ body .gp { font-weight: bold } /* Generic.Prompt */ body .gs { font-weight: bold } /* Generic.Strong */ body .gu { font-weight: bold } /* Generic.Subheading */ body .kc { color: #0000ff } /* Keyword.Constant */ body .kd { color: #0000ff } /* Keyword.Declaration */ body .kn { color: #0000ff } /* Keyword.Namespace */ body .kp { color: #0000ff } /* Keyword.Pseudo */ body .kr { color: #0000ff } /* Keyword.Reserved */ body .kt { color: #2b91af } /* Keyword.Type */ body .s { color: #a31515 } /* Literal.String */ body .nc { color: #2b91af } /* Name.Class */ body .ow { color: #0000ff } /* Operator.Word */ body .sa { color: #a31515 } /* Literal.String.Affix */ body .sb { color: #a31515 } /* Literal.String.Backtick */ body .sc { color: #a31515 } /* Literal.String.Char */ body .dl { color: #a31515 } /* Literal.String.Delimiter */ body .sd { color: #a31515 } /* Literal.String.Doc */ body .s2 { color: #a31515 } /* Literal.String.Double */ body .se { color: #a31515 } /* Literal.String.Escape */ body .sh { color: #a31515 } /* Literal.String.Heredoc */ body .si { color: #a31515 } /* Literal.String.Interpol */ body .sx { color: #a31515 } /* Literal.String.Other */ body .sr { color: #a31515 } /* Literal.String.Regex */ body .s1 { color: #a31515 } /* Literal.String.Single */ body .ss { color: #a31515 } /* Literal.String.Symbol */ </style> </head> <body> <h2></h2> <div class="highlight"><pre><span></span><span class="ch">#!/usr/bin/python</span> <span class="c1"># The contents of this file are in the public domain. See LICENSE_FOR_EXAMPLE_PROGRAMS.txt</span> <span class="c1">#</span> <span class="c1"># </span> <span class="c1"># This is an example illustrating the use of the global optimization routine,</span> <span class="c1"># find_min_global(), from the dlib C++ Library. This is a tool for finding the</span> <span class="c1"># inputs to a function that result in the function giving its minimal output.</span> <span class="c1"># This is a very useful tool for hyper parameter search when applying machine</span> <span class="c1"># learning methods. There are also many other applications for this kind of</span> <span class="c1"># general derivative free optimization. However, in this example program, we</span> <span class="c1"># simply show how to call the method. For that, we use a common global</span> <span class="c1"># optimization test function, as you can see below.</span> <span class="c1">#</span> <span class="c1">#</span> <span class="c1"># COMPILING/INSTALLING THE DLIB PYTHON INTERFACE</span> <span class="c1"># You can install dlib using the command:</span> <span class="c1"># pip install dlib</span> <span class="c1">#</span> <span class="c1"># Alternatively, if you want to compile dlib yourself then go into the dlib</span> <span class="c1"># root folder and run:</span> <span class="c1"># python setup.py install</span> <span class="c1">#</span> <span class="c1"># Compiling dlib should work on any operating system so long as you have</span> <span class="c1"># CMake installed. On Ubuntu, this can be done easily by running the</span> <span class="c1"># command:</span> <span class="c1"># sudo apt-get install cmake</span> <span class="c1">#</span> <span class="kn">import</span> <span class="nn">dlib</span> <span class="kn">from</span> <span class="nn">math</span> <span class="kn">import</span> <span class="n">sin</span><span class="p">,</span><span class="n">cos</span><span class="p">,</span><span class="n">pi</span><span class="p">,</span><span class="n">exp</span><span class="p">,</span><span class="n">sqrt</span> <span class="c1"># This is a standard test function for these kinds of optimization problems.</span> <span class="c1"># It has a bunch of local minima, with the global minimum resulting in</span> <span class="c1"># holder_table()==-19.2085025679. </span> <span class="k">def</span> <span class="nf">holder_table</span><span class="p">(</span><span class="n">x0</span><span class="p">,</span><span class="n">x1</span><span class="p">):</span> <span class="k">return</span> <span class="o">-</span><span class="nb">abs</span><span class="p">(</span><span class="n">sin</span><span class="p">(</span><span class="n">x0</span><span class="p">)</span><span class="o">*</span><span class="n">cos</span><span class="p">(</span><span class="n">x1</span><span class="p">)</span><span class="o">*</span><span class="n">exp</span><span class="p">(</span><span class="nb">abs</span><span class="p">(</span><span class="mi">1</span><span class="o">-</span><span class="n">sqrt</span><span class="p">(</span><span class="n">x0</span><span class="o">*</span><span class="n">x0</span><span class="o">+</span><span class="n">x1</span><span class="o">*</span><span class="n">x1</span><span class="p">)</span><span class="o">/</span><span class="n">pi</span><span class="p">)))</span> <span class="c1"># Find the optimal inputs to holder_table(). The print statements that follow</span> <span class="c1"># show that find_min_global() finds the optimal settings to high precision.</span> <span class="n">x</span><span class="p">,</span><span class="n">y</span> <span class="o">=</span> <span class="n">dlib</span><span class="o">.</span><span class="n">find_min_global</span><span class="p">(</span><span class="n">holder_table</span><span class="p">,</span> <span class="p">[</span><span class="o">-</span><span class="mi">10</span><span class="p">,</span><span class="o">-</span><span class="mi">10</span><span class="p">],</span> <span class="c1"># Lower bound constraints on x0 and x1 respectively</span> <span class="p">[</span><span class="mi">10</span><span class="p">,</span><span class="mi">10</span><span class="p">],</span> <span class="c1"># Upper bound constraints on x0 and x1 respectively</span> <span class="mi">80</span><span class="p">)</span> <span class="c1"># The number of times find_min_global() will call holder_table()</span> <span class="k">print</span><span class="p">(</span><span class="s2">"optimal inputs: {}"</span><span class="o">.</span><span class="n">format</span><span class="p">(</span><span class="n">x</span><span class="p">));</span> <span class="k">print</span><span class="p">(</span><span class="s2">"optimal output: {}"</span><span class="o">.</span><span class="n">format</span><span class="p">(</span><span class="n">y</span><span class="p">));</span> </pre></div> </body> </html>