{ "cells": [ { "cell_type": "markdown", "metadata": {}, "source": [ "# Griewangk Problem\n", "\n", "**Global minimum**: 0.0\n", "\n", "Note: In the runs below, you should be able to yield the exact global minimum, but in general, because a stochastic optimization method is being used, you will usually get close to, but not exactly to, the global minimum. You may want to play with the control parameters of the optimization." ] }, { "cell_type": "code", "execution_count": 3, "metadata": {}, "outputs": [], "source": [ "from numpy import sign, exp, cos, sin, sqrt\n", "import json\n", "import PyCEGO\n", "\n", "def Griewangk(x):\n", " sum1 = 0.0\n", " prod1 = 1.0\n", " for i, xi in enumerate(x):\n", " sum1 += pow(x[i].as_double(), 2)/4000.0\n", " prod1 *= cos(x[i].as_double()/sqrt(i+1))\n", " return sum1 - prod1 + 1" ] }, { "cell_type": "code", "execution_count": 4, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "i: 0 best: 48.8269 c: 93.344315, 87.816016, 167.849176, -30.993518, -295.844792, 40.829880, -60.349436, -141.693493, -6.153506, 180.474144, queue: 0\n", "i: 50 best: 1.22206 c: 5.302740, 6.442895, -20.743112, -0.317022, 13.705347, -5.110289, 7.670775, -8.710890, -9.054134, -9.459529, queue: 0\n", "i: 100 best: 0.336582 c: 0.277804, 0.124346, -4.965436, -6.551240, 0.651333, 6.261115, -8.372501, -0.033059, 0.688448, -0.248968, queue: 0\n", "i: 150 best: 0.296128 c: -6.015555, -3.874924, -0.008757, 5.820005, -0.070787, -0.606794, -0.941329, 0.758454, 0.338391, -0.835297, queue: 0\n", "i: 200 best: 0.122394 c: -6.193562, 4.525349, -5.244967, -0.062905, -0.372863, -7.540253, -8.474724, -0.349585, -0.256705, 0.758044, queue: 0\n", "i: 250 best: 0.0724127 c: -6.278381, 0.192243, 5.686078, 6.571507, 0.145226, 0.061242, -0.038097, -0.211315, 0.215450, 0.372811, queue: 0\n", "i: 300 best: 0.0251412 c: 3.149598, -0.005152, 0.087838, 6.534112, 0.013614, 0.013530, -0.118556, -0.086036, 0.032550, -0.159323, queue: 0\n", "i: 350 best: 0.0125254 c: 3.173495, -4.462140, 0.044179, -0.039223, -0.006811, 0.023393, -0.030499, -0.166208, 0.128136, -0.151530, queue: 0\n", "i: 400 best: 0.0016536 c: 0.035623, -0.016881, 0.016078, 0.061475, 0.029679, -0.042829, -0.021045, -0.022230, 0.039746, -0.028065, queue: 0\n", "i: 450 best: 0.000222116 c: -0.015786, -0.009485, 0.003647, 0.016983, -0.004117, -0.000507, -0.005879, 0.018732, -0.009867, -0.009935, queue: 0\n", "i: 500 best: 6.10688e-05 c: 0.003392, 0.007927, -0.012239, 0.007009, -0.000471, 0.004074, 0.007342, -0.004492, 0.005423, 0.002242, queue: 0\n", "i: 550 best: 7.52742e-07 c: -0.000125, 0.000254, 0.000050, 0.001455, -0.000141, -0.001872, -0.000805, 0.000891, 0.000885, -0.000750, queue: 0\n", "i: 600 best: 1.01229e-08 c: 0.000033, 0.000034, -0.000091, 0.000109, -0.000002, 0.000015, 0.000214, -0.000009, 0.000226, -0.000074, queue: 0\n", "i: 650 best: 9.48941e-11 c: 0.000004, -0.000003, -0.000000, -0.000025, 0.000001, 0.000006, 0.000001, -0.000002, -0.000007, -0.000010, queue: 0\n", "final 9.4894092583786e-11\n" ] } ], "source": [ "D = 10\n", "layers = PyCEGO.NumberishLayers(Griewangk, D, D*20, 1, 3)\n", "layers.set_bounds([PyCEGO.Bound(-400.0, 400.0) for _ in range(D)])\n", "layers.set_builtin_evolver(PyCEGO.BuiltinEvolvers.differential_evolution)\n", "\n", "# Change some flags for differential evolution (not strictly needed, illustrative)\n", "fl = json.loads(layers.get_evolver_flags())\n", "fl['Nelite'] = 2\n", "fl['Fmin'] = 0.5\n", "fl['Fmax'] = 0.5\n", "fl['CR'] = 0.2\n", "layers.set_evolver_flags(json.dumps(fl))\n", "\n", "VTR = 1e-10 # Value to reach as acceptable optimization run\n", "for counter in range(1000):\n", " layers.do_generation()\n", " cost, coeffs = layers.get_best()\n", " if counter % 50 == 0:\n", " print(layers.print_diagnostics())\n", " if cost < VTR:\n", " break\n", "\n", "print('final', cost)" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [] } ], "metadata": { "kernelspec": { "display_name": "Python 3", "language": "python", "name": "python3" }, "language_info": { "codemirror_mode": { "name": "ipython", "version": 3 }, "file_extension": ".py", "mimetype": "text/x-python", "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", "version": "3.6.0" } }, "nbformat": 4, "nbformat_minor": 2 }