{ "cells": [ { "cell_type": "code", "execution_count": 1, "metadata": {}, "outputs": [], "source": [ "from pathlib import Path\n", "import pickle" ] }, { "cell_type": "code", "execution_count": 2, "metadata": {}, "outputs": [], "source": [ "import numpy as np\n", "import pandas as pd" ] }, { "cell_type": "code", "execution_count": 3, "metadata": {}, "outputs": [], "source": [ "import gpflow\n", "import tensorflow as tf" ] }, { "cell_type": "code", "execution_count": 4, "metadata": {}, "outputs": [], "source": [ "from gpflow.utilities import print_summary\n", "gpflow.config.set_default_summary_fmt(\"notebook\")" ] }, { "cell_type": "code", "execution_count": 5, "metadata": {}, "outputs": [], "source": [ "import casadi as cs" ] }, { "cell_type": "code", "execution_count": 6, "metadata": {}, "outputs": [], "source": [ "import matplotlib.pyplot as plt" ] }, { "cell_type": "code", "execution_count": 7, "metadata": {}, "outputs": [], "source": [ "%matplotlib inline\n", "plt.rcParams[\"figure.figsize\"] = (20, 6)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## GP model" ] }, { "cell_type": "code", "execution_count": 8, "metadata": {}, "outputs": [], "source": [ "size = 500" ] }, { "cell_type": "code", "execution_count": 9, "metadata": {}, "outputs": [], "source": [ "X = np.linspace(-2, 2, num = size)\n", "# x^4 + 3*sin(x)\n", "Y =3 * X ** 2\n", "Y = X**4 + 3*np.sin(X)" ] }, { "cell_type": "code", "execution_count": 10, "metadata": {}, "outputs": [], "source": [ "df_func = pd.DataFrame({\n", " 'X': X,\n", " 'Y': Y\n", "})" ] }, { "cell_type": "code", "execution_count": 11, "metadata": {}, "outputs": [], "source": [ "n_sampl = 55" ] }, { "cell_type": "code", "execution_count": 12, "metadata": {}, "outputs": [], "source": [ "df_sampled = df_func.sample(n_sampl)\n", "X_sampled = df_sampled['X'].to_numpy().reshape(-1, 1)" ] }, { "cell_type": "code", "execution_count": 13, "metadata": {}, "outputs": [], "source": [ "Y_sampled = df_sampled['Y'].to_numpy().reshape(-1, 1)\n", "\n", "# Add noise to the output\n", "mean, var = 0, 0.25\n", "noise = np.random.normal(mean, var, size = Y_sampled.shape)\n", "\n", "Y_sampled = Y_sampled + noise" ] }, { "cell_type": "code", "execution_count": 14, "metadata": {}, "outputs": [ { "data": { "image/png": "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\n", "text/plain": [ "
" ] }, "metadata": { "needs_background": "light" }, "output_type": "display_data" } ], "source": [ "plt.figure()\n", "plt.plot(X, Y)\n", "plt.plot(X_sampled, Y_sampled, '.')\n", "plt.show()" ] }, { "cell_type": "code", "execution_count": 15, "metadata": {}, "outputs": [], "source": [ "variance = tf.math.reduce_variance(X_sampled)" ] }, { "cell_type": "code", "execution_count": 16, "metadata": {}, "outputs": [], "source": [ "k = gpflow.kernels.SquaredExponential(variance = variance, lengthscales = 0.5)" ] }, { "cell_type": "code", "execution_count": 17, "metadata": {}, "outputs": [ { "data": { "text/html": [ "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "
name class transform prior trainable shape dtype value
SquaredExponential.variance ParameterSoftplus True () float641.39191
SquaredExponential.lengthscalesParameterSoftplus True () float640.5
" ], "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "print_summary(k)" ] }, { "cell_type": "code", "execution_count": 18, "metadata": {}, "outputs": [ { "data": { "text/html": [ "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "
name class transform prior trainable shape dtype value
GPR.kernel.variance ParameterSoftplus True () float641.39191
GPR.kernel.lengthscalesParameterSoftplus True () float640.5
GPR.likelihood.varianceParameterSoftplus + Shift True () float641
" ], "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "model = gpflow.models.GPR(\n", " data = (X_sampled, Y_sampled), \n", " kernel = k, \n", " mean_function = None\n", " )\n", "print_summary(model)" ] }, { "cell_type": "code", "execution_count": 19, "metadata": {}, "outputs": [], "source": [ "from datetime import datetime" ] }, { "cell_type": "code", "execution_count": 20, "metadata": {}, "outputs": [], "source": [ "opt = gpflow.optimizers.Scipy()" ] }, { "cell_type": "code", "execution_count": 21, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Finished fitting in 0:00:01.539795\n" ] }, { "data": { "text/html": [ "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "
name class transform prior trainable shape dtype value
GPR.kernel.variance ParameterSoftplus True () float649174.9
GPR.kernel.lengthscalesParameterSoftplus True () float64 2.34738
GPR.likelihood.varianceParameterSoftplus + Shift True () float64 0.0645004
" ], "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "start_time = datetime.now()\n", "opt.minimize(model.training_loss, model.trainable_variables)\n", "print(f\"Finished fitting in {datetime.now() - start_time}\")\n", "print_summary(model)" ] }, { "cell_type": "code", "execution_count": 22, "metadata": {}, "outputs": [ { "data": { "image/png": "iVBORw0KGgoAAAANSUhEUgAABH4AAAFlCAYAAACdnC/mAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjQuMSwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy/Z1A+gAAAACXBIWXMAAAsTAAALEwEAmpwYAACEhklEQVR4nOzdd3iU95X28e8zvaqPehcCIWSwMXFvuJfYKTZOdbzZlE1iUt5k03dTN3F6tZzuxGlOTOzEvQf3Ci4gRO8ISTPq0+vz/iEhN8AYgySk+3NdXCDNaJ4jGSPNPed3jmGaJiIiIiIiIiIiMv1YJrsAERERERERERE5PBT8iIiIiIiIiIhMUwp+RERERERERESmKQU/IiIiIiIiIiLTlIIfEREREREREZFpSsGPiIiIiIiIiMg0ZZvIi5WUlJj19fUTeUkRERERERERkWlt5cqVfaZpBvZ224QGP/X19axYsWIiLykiIiIiIiIiMq0ZhrF9X7fpqJeIiIiIiIiIyDSl4EdEREREREREZJpS8CMiIiIiIiIiMk0p+BERERERERERmaYU/IiIiIiIiIiITFMKfkREREREREREpikFPyIiIiIiIiIi05SCHxERERERERGRaUrBj4iIiIiIiIjINKXgR0RERERERERkmlLwIyIiIiIiIiIyTSn4ERERERERERGZphT8iIiIiIiIiIgcoUzTBMNi3dftCn5ERERERERERI5Qz+8YwrC73Pu6XcGPiIiIiIiIiMgRKJxIc82Dm8AwjH3dR8GPiIiIiIiIiMgRJpcz+en9G6nIc+33frYJqkdERERERERERA6RRzf10R9NsnL74H7vp+BHREREREREROQIMhRLcf3j2+gLJwn49t/xo6NeIiIiIiIiIiJHiFzO5Af3rMfvtBFJZbBb9x/tKPgRERERERERETlC3LOmh0Qmy4odg8wtz+PJrf37vb+OeomIiIiIiIiIHAGCIwn+sXIXOwaiNBR5uKuj+zU/Rh0/IiIiIiIiIiJTXC5n8r171mFgYjEM1gfDZE1w23XUS0RERERERETkiHbTszsxTVjXG6Esz0kwnALgSxfO3e/H6aiXiIiIiIiIiMgU1jUY4741QTYEwzSXelm+vg+Ai+dXcFRVwX4/Vh0/IiIiIiIiIiJTVDZn8t271zEcT+F32Xhi8+gw58oCFx84pZFsztzvxyv4ERERERERERGZov74xDYwoWckSSqTI5ExsVngm5e0YbUY3Lhi534/XsGPiIiIiIiIiMgUtCkY5qkt/azcMUR9sZv1vREAli5upjTPxaOb+phV6tvvYyj4ERERERERERGZYjLZHD+8dwM7+2OU+R08vHH0iNfx9UWcNbeMrsE4XUNxjqktAMx9nvdS8CMiIiIiIiIiMsX88qHNZHI54pkcW/qimECey8Z/nzeHRDrLbat28/ZjqhhJpDHTycS+HkfBj4iIiIiIiIjIFLK6a4g1u4dZ0zWC32VjKJ4B4GuXzMNlt/L3Z3ay5NhqhuIpGku8kMtm9vVYWucuIiIiIiIiIjJFxFMZfvbARjYHI1QVunhm2xAA73xTDc2lfv69rpcFNQXYrAb5Hge1Rd79Pp46fkREREREREREpojv3bOeeCqLzWLh+R1DADSWeHnXcbVs64syFEszp8yP1WIwu8yPxWLs9/EU/IiIiIiIiIiITAH3dHTTO5xgW1+UaDJNOgcOq8HXLplHIp3lnjU9XHRUBdFUhnlV+Tht1td8zNcMfgzDqDEMY7lhGGsNw1hjGMYnx95fZBjGfYZhbBz7vfAQfI4iIiIiIiIiIjNOz3Ccf6zcxfM7BynNc9A1nATgs+e2UOC2c8PTO7l8UTUjiTRzy/3kuewH9LgH0vGTAT5jmuZc4ATgKsMwWoEvAA+YptkMPDD2toiIiIiIiIiIvA65XI6r71pH11CCEp+TZ3eMALB4TiknNBVzz5peTmgsIgdUF7kpL3Af8GO/ZvBjmma3aZrPjv05DKwFqoC3ANeP3e164K2v55MSERERERERERH4zSNbGYmnSWaybOgNA1DstfPxM2exsTdMKpujtsiD32WjKeB/XY/9umb8GIZRDxwDPAWUmabZDaPhEFC6j4/5sGEYKwzDWBEKhV5XcSIiIiIiIiIi09mqXUOs3D7A+p4w6UyWRMbEasC33noUyXSOBzeEOLe1lKxp0lqRj/U1hjm/0gEHP4Zh+ICbgE+ZpjlyoB9nmuavTdNcZJrmokAg8LqKExERERERERGZrmKpDO3/3kTn7hGKPHZ2DCYAuGpxM5UFbm54ZgeXH1tDOJGhrTIft+O1hzm/0gEFP4Zh2BkNff5imubNY+/uNQyjYuz2CiD4uq8uIiIiIiIiIjJDffeudfQMx/E7bXR0jx7xOrGxiHNay7h9VTdnzA6QymWZVeqj0Os4qGscyFYvA/gdsNY0zR+95KZbgSvH/nwlcMtBVSAiIiIiIiIiMsPc/sJudvTHGIqn2dIfBaDI6+Cz57WwZvcwdquFgN9Jmd9FTZHnoK9zIB0/JwNXAGcahvH82K8Lge8A5xiGsRE4Z+xtERERERERERHZj66hGP96vou1PSMkM1mSY3N9rn77UYQTGZ7cMsCpzcXYbRaay/yM9uQcHNtr3cE0zUeBfV3hrIO+soiIiIiIiIjIDJPL5fjuXevY0BvG57SxKTTa7fPxM5sJ+Jz89tGtvPf4WhKZHIvqi3DYXtderld5Yx8tIiIiIiIiIiIH7BcPbmbnYAybxRgPfU5uKuasuWXcuGInlyyoIJ7O0lqRh8/5mv06r+mNP4KIiIiIiIiIiLymZ3cMsGL7IL3DSULh0Q1exV4Hnzl3Dg+uDzKn3I/TZqWu2ENpnuuQXFMdPyIiIiIiIiIih1k0keEXyzezpmuYVCZHOgdWA77z9qPYMRBjIJpiVqmPEr+D+mLvIbuugh8RERERERERkcPsu3evY1MwgsNmoS+aAuBTZ8/G47Dx73VBzp1Xht1qYU5ZHhbLwQ9zfiUFPyIiIiIiIiIih9GNK3aytnuEdDbHrqHRI16nNZdwanOAG57ewZJjq0llchxVlf+Ghzm/koIfEREREREREZHDZG33CHet7mbnYIzekSQAJT4H/+/s2dz87C7OnVdOKptjXmUe3kMwzPmVNNxZREREREREROQwiCUz/Oi+9azZPUwykyWdM7Fa4LuXzueZ7YNUFrjxuaw0lfgo8R+aYc6vpI4fEREREREREZHD4Oq71rKxN4wFGI5nAfjMOXNIZnLs6I/SWplHmd9FbbHnsNWg4EdERERERERE5BC74akddHQNk8zk6AmPDnM+Y3YJx9YVcueqbs5vq8BttzC73I9hHLphzq+k4EdERERERERE5BDq7B7mztXd7B5OEBoLfcrzXHzyrNn89akdvG1hFaZpMq8qH7v18EYzmvEjIiIiIiIiInKIxJIZfnzvBtb2DBNNZsjkTBxWg+9fNp87VndzanMJBtBWlY/HcfhjGXX8iIiIiIiIiIi8Ae3t7QSDQQC+dUcnq3cOMBKJEU+bAHzjkja29EXxOW0UeZ00l/kp9DompDYFPyIiIiIiIiIiB6m9vZ2lS5eyePFifnHvap7eHKSnN0TStALwvuNrKfI56Nw9wjG1BVQUuKgudE9YfQp+REREREREREQO0pIlS2htbWVjMMo3f3Mj67btIufyYxgW5pa5uWhBJbc8v5uL5pfjddloLvUd1mHOr6TgR0RERERERETkIJWWlnL73fdRcuq7MIobMJx+LFYbeS4r33jr0fz5ye28/ZgqLBaDtsp8bId5mPMrKfgRERERERERETlIpmny04d2YAk0YXF6sThcmNk0Xz2nllte2M2ZLaVYLAbzqwtw2a0TXp+CHxERERERERGRg3Ttvav51/IV4HBjdfswTZPgzd/is1/5JsW2NHkeO/Mq88hz2SelPgU/IiIiIiIiIiIHYdWuIf780BoyrnxsnjwAzptTRGWgkL6ROFufuptZJT5K81yTVuPhXxgvIiIiIiIiIjLNjMRT/PCe9cQcRdj9KUwsNAW8vOvEJizG13BufZiPfPRj1BZ7JrVOBT8iIiIiIiIiIq9DLmfytVs7Wd01TDydwcSCx2Hh65fM469P7+QdJ8wi78yWCd/gtTc66iUiIiIiIiIi8jq0P7iJp7f2E01mSGXBYsAPLlvATc92ccn8Chx2C/MmYYPX3kx+BSIiIiIiIiIiR4j7Onu4a9VuBqJJklkTgE+eOYvndg5xQkMRLoeV+dX5k7LBa2901EtERERERERE5ABs7Yvy64e3sH0gRiw9GvqcMTuAz2XHsFgo8Ttpq8zDP0kbvPZGHT8iIiIiIiIiIq8hlsrw9Vs7WLt7hEQ6B0BVgYu3L6xia1+Utsp8mkt9lPgnb4PX3ij4ERERERERERHZD9M0+eota3h+5xCpbJasCR67ha9dPI/7Ons5s6WUykIXNUWTu8FrbxT8iIiIiIiIiIjsx68f3sLDG0PEXjLM+XuXzedfz+/mkqMrKfI5aS71T/oGr71R8CMiIiIiIiIisg8PbQiybMVOhmIpUqMnvPjC+XN4cH0f584rw++0MbfCj9Uy9UIf0HBnEREREREREZG92jUQ4yf3bWDHQJRUdvR9lx1bTTCc4pjaAgrcdtqqC3DapsYGr71R8CMiIiIiIiIi8gqJdJYv/2s1nbuHyYx1+syvyqcp4COby1FR4GJ+dQE+59SOVnTUS0RERERERETkJUzT5Ou3rWHFtkGyJuRMKPY6ePfxtYTCCeZW5NFankeh1zHZpb4mBT8iIiIiIiIiIi9x/ePbuKejh1QmSyYHDqvB/1w0l2e2DXDyrBKaAl7KC9yTXeYBUfAjIiIiIiIiIjLm6a39XPfoVsLJNOkcGMDXL57H/WuDnH9UGVWFbuqKvZNd5gGb2gfRREREREREREQmSHAkwTdu62T3cHx8rs9Vixt5dHM/Fy+ooNTnnrJr2/dFHT8iIiIiIiIiMuMl0lk+/ffnWdczMh76nNtaRvdwknNbyyj2OphbkTdl17bvizp+RERERERERGRGM02TL928ime2DZAbC31mlXipKnAzq9RHsd9BW1UBDtuR1z+j4EdEREREREREZrSfPbCRe9b0kjVNckCey8YlR1dhsxpUFbqZX12A22Gd7DIPyoRGVZmcOZGXExERERERERHZr9te6OIPj28b3+BltRh84sxmRhJpWsr9HFWVT57LPtllHrQJDX6CI4mJvJyIiIiIiIiIyD6t2jnE1XeuI5rMjG/w+vQ5s1jXG+bEpiJayvMo9jknu8w3ZEKDH6vF4M5VuyfykiIiIiIiIiIirxIcSfDpZc8TDCdIZUdPKH34tAbW7o5wXlspDSU+Kgvdk1zlGzehwY/NYnDrqm7CifREXlZEREREREREZFwineWjf17Jtr7o+Aavt8yvYOdggovml1OV76GhxDu5RR4iExr89EdTnNUS4Mf3bZjIy4qIiIiIiIiIAKMbvP7f359j1a6h8dBnYW0BpmFwwbwyyvPdzC7zYxhH1tr2fZnQ4MdutfDCzmGSmRwrtg1M5KVFRERERERERPjBvet5YG3veOhTXeCiKeDjtOYSyvNdzKvMx2Y98ta278uEfibpbI6ntvZzYmMRv31kC6k9X2URERERERERkcPsX8/t4vePbiOTAxPwO22cObeM+dX5VBa6Oaq6AIdt+oQ+MMHBD0BNoYffPrqNExqL+dVDmyf68iIiIiIiIiIyA63aOcRXb1lDKpslZ4LdavDu42qozHdTX+xlQXUBLrt1sss85Ca448dkS18Up9VCXyTFlr4om4ORiSxBRERERERERGaY4EiCD/1xBZFkhkwOLAZ84OQG7DYrLRV+5tcU4HXaJrvMw2KCO35Mkpks/dEkd3V0c/acAD99YCOmaU5sGSIiIiIiIiIyIyTSWd792ycZiCQZ29rO+06sI5HOsrC2gKOq8sl32ye3yMNoQoOfnAmxZBaLxaDM7+QvT++kKeDj70/vnMgyRERERERERGQGME2T9//+abb3RUmPhT5vObqSaDLLKbNLaK3Io9jnnNwiD7MJn/EznMjQM5ygayhOOJHG67Dy8KYQoXBioksRERERERERkWns0zc+z8rtA6THdkud1FhELmdy3rwy5pTlUV7gntwCJ8CEBj97WqfSmSyJTI5oKssNz+zg/Hll/Oi+DRNZioiIiIiIiIhMY9+/Zx13ruomlR19u6nES77HwZsXVFBf4qO6cPqHPjDBwU+Bx05tkYd4xiSeymIYJn6XndtWdeNx2Fi+LjiR5YiIiIiIiIjINPS3p7dz3SNbSY0N9Sn02JlT7uei+RXUFnlpCngxDGOSq5wYExr8GBh84YIWrIbBSCJDKJxiIJpkayjKnFIvf3tmB9FkZiJLEhEREREREZFp5NENQb5x21oSmRwm4LZbOKmphLNby6gr9jC7zD9jQh+Y8OHOJjWFHt5/cj0A8VSGeCpLOmvym0e3csbsAD97YONEliQiIiIiIiIi08TGnhE+8pdniaezmIDdYnBeaxmnNpdQV+yhpTwPq2XmhD4wwcHPcDwNwMULKplb7iedg3g6i2GA1TBYuWOIwViKVbuGJrIsERERERERETnC9YcTXParJ4ilRkMfiwFvXlDB0bVFNJR4aavKx26d8B1Xk+41P2PDMK4zDCNoGEbHS973NcMwugzDeH7s14UHcjGXzcJjm/qwGAafPa8Fp9UgkszSF0kSTWV5ems/JzUW8YsHN5PN5t7I5yUiIiIiIiIi01R7ezvB4Itzgnd0dXPqt+8mksiQM8EALp5fwdyKPJrLfMyvLsBps05ewZPoQKKuPwDn7+X9PzZN8+ixX3ceyMXcDhtb+6L0R5IE/E4+tngWAPFkllgqCyb8+pGtHFtXyG8f3XrAn4SIiIiIiIiIzAzt7e0sXbqUxYsXEwwG6enp4bRv30U4kWFsljMXtJXTXOpnbkUeR9cU4HbMzNAHDiD4MU3zYWDgUFzMbjU4u7WUfzy7i5xpsnhOKcfVF5IF4ukMJhBNZukdTtLZPcLWvsihuKyIiIiIiIiITBNLliyhtbWVzs5O2traWPSFv5G1+7E6R9ezn9USoDHgY35NPkfXFOB12ia54sn1Rg63LTUMY9XYUbDCfd3JMIwPG4axwjCMFeGhAfwuOyc1FXNXRw+GYfDJs2bjc1qJpXIMxFJkTZM7Vu/m3JYyfnjvBh35EhEREREREZFxpaWlLF++nEAggHnyhzAKKrG6PACc2FhEU8DPovpCFtQU4nfZJ7nayXewwc8vgCbgaKAb+OG+7mia5q9N01xkmuaiQCDAvMo8KvLdJNJZtvdHyXPb+cy5c4DRbp9YMoNhwG8e3cK8qjyuf2L7QZYoIiIiIiIiItOV/fh346qdj8U5Gvq0BJzMLvNzYlMxC6oLyHcr9IGDDH5M0+w1TTNrmmYO+A1w3IF+rN9lp6Xcz6mzirmzo5t0NseiuiLOnlsKQDSZJmdCMJwknszywq4htvdHD6ZMEREREREREZlmgsEgJ33gK1iaTsTi8mAYBomezax/6BaOKjI5qiqPQq9jssucMg4q+DEMo+Ilb74N6NjXffemPN9FZaGHM+eUcvOzuwD48KlNFHsdJLMwEk9hsRj8/ZkdnDO3lB/cs15HvkRERERERESEr/z+DpKNi7E6PBiGhWK3FdfwNrbddg0bn3qAEr9rskucUg5knfsNwBPAHMMwdhmG8QHge4ZhrDYMYxWwGPh/r+eihmEwq9RHbbGHPJed1buGcDusfOH8FgwgmsoRSaSxWy388qEtzK3088cndeRLREREREREZCa7u6ObR2MVWN0esFjIc9k4sbmU7336/Xzrez/ii//9qckuccp5zdHWpmm+ay/v/t0bvbDdamFeZT6xVJabVu6iIeCjpSKPty+s4qZnu4gmMzhsVnqHE0QTGdZ2hzmzpZS6Yu8bvbSIiIiIiIiIHGEe2RDks8tWEUlmAQsum4UTm4q5ZH4FLRV5XH7q6+pJmTHeyFavN8zrtNFakcc5rWXcuGInAO85vo7qQjfpHEQSaRx2Czc8vZPz5pbxg3t15EtERERERERkplmxtZ+lNzxPOJkBwG4xOLmpiLceXUVzuZ9aNYns06QGPwCleS5aKvw0Bbw8vCGE3WrhSxfMxWoxiKVzhBMZPE4bP1++iZZyP39+asdklywiIiIiIiIiE6Sja5gP/WklI/E0ADYLnDyrmLcvqqa51Ee9Qp/9mvTgB6CxxMcJjcVs7osQDCeoKfLwX6c2AhBOZIglM/RFkgzH0qzYNsCOAW35EhEREREREZnuNvSGef/vn2Y4lsYErAac1FTCpQtraAr4aSr1YRjGZJc5pU2J4MdmtdBamccF88r5x8pd5EyT89vKWVRXiMnokS+bxcLfn9nJ2S1l/OCe9eRy5mSXLSIiIiIiIiKHydZQhCuve5r+SIocowHGCU3FXHZsNU2lXmaX+hX6HIApEfwAeBw2jq4t4LiGIm5ftRvDMPj0ObPJc9lI5SCSzOBz2fjJvzfQXObjLzryJSIiIiIiInLEa29vJxgMjr8dDAb59k9/xZW/f5rgSIIcYADHNxTxjkU1zCr10VKeh8Wi0OdATJngByDgd3Fqc4BoMsPWvgh+l50vXDAXgGgqSziRYTiepi+c5Kmt/ewajE1yxSIiIiIiIiJysNrb21m6dCmLFy8mGAwSDAY5/YK38vMX0uwciJAdO+zzpvoi3nF8DU0BH3MU+rwuUyr4AWgo8fLWY6q4fVU3iXSWo6ryWbKwGoBoMgMm/GPlLs6cHeD7d+vIl4iIiIiIiMiRasmSJbS2ttLZ2UlbWxttbzqZwXlLcBZWYmIFYFFtIe8+vobmgJ+WijysCn1elykX/FgtBkdVFfDm+RXc8PToca53H19LQ7GXrAnxdBa/y873711PU6mXvz69fZIrFhEREREREZGDUVpayvLlywkEAvRHUxgnfxBHSS3YnQAsqM7jvSfW0lTqU+hzkKZc8APgdlg5eVYJtUUeHlofxGa18KWL5mK3GsTTOSLJDKlsju39UZ7Y3E+XjnyJiIiIiIiIHLmcXkou/iyOsiYsDhcAbZV5/MdJDTSV+phbrtDnYE3J4Aeg2OfkbcdUsbkvQvdwnPI8F584sxmASDJLOpvj7o4eTp1Vwve05UtERERERETkiBMMBjnjvDfD8VfirJiN1enGNE0Ibebt8/JoDIyGPjbrlI0vprwp/ZWrKfJwxYl1/H3FTtLZHGfMKeW05hIA4sksLruNH9y3nuZSL396ctvkFisiIiIiIiIir8sf/nYTfU3n46mdh8XpAcAY2M6uf/wfG5+4l3mVCn3eqCn91bNYDNoqC7hkQSV/e2Z03s9Vi2dR7HWQNiGWymKasGrXCCu3D7EpGJnkikVERERERETkQARHEqz1H0verGPBMRr6NJR4+Mo7TuGzn/0s3/ziZxT6HAJT/ivosFk4a24ZJT4nT27px+Ow8aUL52IYo4Oek+kcj23q49iaAn5473rSmdxklywiIiIiIiIi+9EznODzN73AE1v6yWADoKbQzdIzZrFwTh3fUOhzyBwRX0Wf08aVJ9bz/M5B+iIJZpf5ueL4OgCiqSw2i8EP71vPoroCfr580yRXKyIiIiIiIiL70jUU58v/XM0TWwZIpEebN+qK3HzyrGYaAl7mVeZhV+hzyBwxX8myfBcfPb2JPz+1g2zO5NJjq5lb4ccEEpksdruVm57tomc4zsrtA5NdroiIiIiIiIi8ws6BGF+7pYPHNvW9IvSZTWPAS1tVgUKfQ+yI+mrOrczn4vkV3LhiJxbD4PPnteC2W0hmTOKpLF2DcXxOG798aAuRRGayyxURERERERGRMTv6Y3zrjjU8sjFEIvNi6POps2fTWOrjqOoCHLYjKqY4IhxRX1GrxeD8tgrcDgvP7Rik2Ofkv8+dA4wOes7kTG58ZgcnNBTy/XvWja6AExEREREREZFJtbUvytV3reHB9X0kMqPP1euK3HzmvDk0Bnw63nUYHXFfVZfdyscXN/Po5j6GYimOayjmkvkVAMRTWQzDwq8f3ophwP2dvZNcrYiIiIiIiMjMtjkU4Qf3rOPf617s9GkodvPZ81poKNFMn8PtiPzKFngd/L+zm/njE9vJ5XK8/+QGGku85IBUNkc8k2VrKMqylbvoCycnu1wRERERERGRGWljb5if3r+BB9b2khzr9Gkq9vDfY6FPa0W+tncdZkfsV7elPI8Ljirnn891YbNa+PJFc3HbLCQzOVLpHCu3DzKr1MvVd60ll9ORLxEREREREZGJtK5nhGsf3MQ9a3rGj3c1lXj47/NHQ5+WijysFmOSq5z+jtjgxzAMLl5QiWEYdOweptTv4rPntwCQyOTImiZ/eWo7RV4Hf3tmxyRXKyIiIiIiIjJzPLtjkOse2cqdq7vHO31mlXr57Pkt1Jd4aSlX6DNRjtjgB8ButfCZc2ezfF0vw/EUb6ov4m3HVAKQSOfIZOHBdUEe3djH1r7IJFcrIiIiIiIiMv09urGPfzyzi1te6BoPfWaX+vjc+XNoKPEyp8yPRaHPhDmigx8An8vO586bw/VPbCeTzfG+E+qZVerDZHTeT/dwAqth8P2715POZCe7XBEREREREZFp6+6Obu5es5t/PLtzPPRpKffz3+fPpr7YS3OpQp+JdsQHPwCzyvK49Jgqlj27c3Tez4VzcdstpLMmqWyOBzcGCeQ5+eXDWya7VBEREREREZFp6R8rd/HE5j7+9vQuUtnR0GdehZ/PnDuHxmKfQp9JMi2CH4Dz2sop8Tp5fHMfJT4nnz9/LgCprEkqnePeNT2s7xnh+R2Dk1ypiIiIiIiIyPRy/ePbWLVriD8/tYPM2IKlY2sL+fS5c2gKeGkq9WEYCn0mw7QJfgzDYOmZs+jcPcLOwRjH1hVy6cIqYDT8GYym6R1Jcs3yTUST6UmuVkREREREROTIZ5om7cs3sTkY5s9PbiebG33/4jkBPra4kaaAl4YSr0KfSTRtgh8Ah83KVy5u5eZndxFNprnihHrmlI3O+8nkcnTuHsHjsPL9e9ZjmlrxLiIiIiIiInKwsjmTH9y7nl0DMf705A5yJhjAWxZU8N4T65hTnkd9iTp9Jtu0Cn4Ain1OPn7mLP6+YicAX7xgLh6HlUwOkpkcT2zuYzCW5rYXdk9ypSIiIiIiIiJHplQmx9V3rqV3JMENz+zEBCwGXHF8LW85uoq2inyqCz2TXaYwDYMfgAU1hSyqL+K+tT0UeR188YLReT+ZnMlQPMPa7mFueX432/qjk1ypiIiIiIiIyJElnsry7TvX0jMc5x8ru4DR0OdjZzSyeG4Z86vzKct3TXKVsse0DH4A3n1cLeFEhs7uEY6uKeDyRdUApLMm2/vjhBMprr5zLYmUVryLiIiIiIiIHIjhWJpv37mWroEYt6/uAcBqwEm2bczy51hYW0iJ30UwGKS9vX2SqxWYxsGPYRh8+cK5PLQhSCic4N3H1TG3wg9AOptjbXeYbNbkJw9s0LwfERERERERkdfQM5zgB/euZ0sown3rggDYLXC6dRN/+b+lfPGDS0hGBgkGgyxevJilS5cq/JkCpm3wA+C0W/nihXO56dkuUpksXzx/Ln6njZwJsXSWtd3DbOiJcH9ncLJLFREREREREZmy1veE+fXDm+ncPcxjm/sBcNosfOfS+Vx6ybnMndvKurVraWtro62tjc7OTlpbW1myZMkkVy7TOvgBqC3ycumxVdzZ0YPfZeN/3tyKAWRz0BtO0TsS5/ontrF7KDbZpYqIiIiIiIhMOU9s7uf2F7p4eGMfK3cMAeCxW/nh5fOpKfJw1jGzefDB5QQCAUKhEKFQiEAgwPLlyyktLZ3c4mX6Bz8AZ7aUUeixs3LHAC3lfj58WiMwOux5Q2+ERDrNN25bSyqjeT8iIiIiIiIie9z2wm46uob4+4qdbApGAMhz2fjx5fOpyHezoKYAl906yVXK/syI4AfgE2c109kdZsdAlIuOquD02QEA0jmTtd0RBmMprn1ws+b9iIiIiIiIyIxnmia/f2wrI/EkP71/I8FwCoDSPCc/unwB5QUe5lcX4LRZx2f67On02dP5s3jxYoJBjVaZbDMm+DEMg6+8uZW7O3oZiqX4+JmzqClyA6Or6LoGozy6sY/HNvVNcqUiIiIiIiIikyebM/nxfRtwOyx8/ba1RMa2YbeU+fjO246issBNW1U+dutopLBs2bLxmT4dHR10dHTQ2tpKZ2cny5Ytm8xPRZhBwQ9AgcfBx85o4o7VPWRzJl998zzcdgs5YPdwkkw2y08f2EgonJzsUkVEREREREQOi/b29pd14rx09XoineVbd6wl4HPw5Zs7SGVHT8Wc0Rzgcxe0UFvkoaU8D6vFGP/4q666imuuuWZ8pk9paSnLly/nmmuu4aqrrprYT05exZjIo02LFi0yV6xYMWHX25dbn+9iXc8IZ7aU0bl7hK/cugYAqwWOqSmg1O/ip+86Zjy9FBEREREREZkO2tvbWbp0Ka2trSxfvhyAxYsX09nZyfd+ei0jtadS6nfyo/s2YAIG8K431XBWaxmzy/xUF7oxDGO/15CJZxjGStM0F+3tthmZbFxydBUOm5VVu4aYX13A+06oA0Y3fXXsHmHXQJTfPrJlkqsUERERERERObSWLFkyfgzrpavXWxadQrB0EaaZ44djoY/FgM+cO5tz5pVzVFU+NUUehT5HoBkZ/AB84sxm1vdE2NYf4e0LqziuoRCARDpHXzTFbS/sZsXWgUmuUkREREREROTQ2XMM66Wr18vmHsdln/8JQyn481M7AbBZ4Oq3HcWC6gIW1hZSmuea5MrlYM3Y4MdiMfjKxa38e12IUDjJZ86ZQ1meE4Du4SRuu5Vv3tHJYDQ1yZWKiIiIiIiIHB7u5hOwVLSwYscw93WOzv1x2y38/F0LqSv2sLCukHyPfZKrlDdixgY/AF6njU+fM5v71vaSzOT46sXzsFsMTOC5nUO4bFa+ePNqMtncZJcqIiIiIiIi8oa9dPV6xRnvIb+wBOpPYG0wDkCJ18E17zya0jwnR9cW4nXaJrlieaNmdPADUF/i5aL5FTyxuY9Ct4PPnjcHgJwJz+0aZNdglGsf3MREDsEWERERERERORyWLVtG5/qNzLr0s/zkm1+m6NyP4gjUYpomRUT5/pIFlBV4mF9dgMtunexy5RBQdAecPruUzcEoa7qHOaa2kMsWVvGPZ7tIZUx6R5Lc+kI3td4sXSv/rVV0IiIiIiIicsRa8r4PcN9gEZedMp8v3bmFzNgBl1rLMN+48hyqCl3MCvixWDTEebpQ8DPm/SfX843bOylw27Gsu4/4thTu+qMJRVKUuA0+9dsH2PGnzwEo/BEREREREZEjzprdw9y0chfnnHgs/3P3xvH3v+e4Gs5sXURTwKvNXdPQjD/qtYdhGHzhghae3NLP0aefh3f1TaRH+gBY0xtjZNcGat/xVd78lrdNcqUiIiIiIiIir889a3p4cH2IvpEE379vNPSxGPDVi+Zydms5bRX51BZ7FfpMQwp+XsJps/LZ81t4PmjyvV9dT/K+H5NLJ7FYrPiPOouFi47jZ4/3ks1p3o+IiIiIiIhMfaZp8rtHtxKOp7n9hS5uXd0DgMtm4RfvXkhzuZ+FtYWU5Wtd+3Sl4OcVyvJcvPO4Wp7bHSc7sIu+W76DaeYwrDY6emOs7hrhL09tm+wyRURERERERPYrkc7ynbvWUV/s4Vt3rmVtTwSAqnwnv3jPMRT7nBxbV6R17dOcgp+9qHanWfa7n5MoaMA5uJXk08sASGVMQsMxfvPwFl7YPjDJVYqIiIiIiIjsXSic5Ft3rGVhbQEf+fNKBmNpAE5pKuabbzuK0jw3C2oLcDu0uWu6U/CzF8uWLWPjvX+m+qiT+MGN93Pdd74IO1eCYTCYyOJ32vjkjS8wEE1OdqkiIiIiIiIiL7Nm9zC/eHAzjSUePvLnZ0lnR8eVfPDket5/SgP1xV7mVuRhtyoSmAn0X3kvrrrqKq655hoe+uWX2DxiIevKo/0Tl1NoxAGDzp4IFfku/utPK0lmspNdroiIiIiIiAgA/3qui0c29hFPpfj67WsxGR3i/O23zuPk5gBtlfk0Bnxa1z6DKPjZh6uuuorK8jK+dOFcHtnYh82bz4/edyr5LhsAT24ZIJfN8c3bOsnlTNrb2wkGg+MfHwwGaW9vn6zyRUREREREZAZJZXL86N71uOwW7u7o5oZnugDw2C386j0LqS3xsrBOQ5xnotcMfgzDuM4wjKBhGB0veV+RYRj3GYaxcez3wsNb5uTxOW186uzZPLShj4xp8tVL5mE1wARWd43w+KY+PvatX7J06VIWL15MMBgkGAyyePFili5dqvBHREREREREDqvekQTfvL2T4+qL+PxNq3h+5zAAdUVu2t99DIU+J4vqish3a4jzTHQgHT9/AM5/xfu+ADxgmmYz8MDY29NWZYGbdx1XyzNbByhwO/jc+S0ApHImA7EUzxmNNB91LJ2dnbS1tdHW1kZnZyetra0sWbJkkqsXERERERGR6erprQP87tGtHFXt533XPc1wPAPA2S0lfPWSeZTlu1lQU4DLriHOM9VrBj+maT4MvHKF1VuA68f+fD3w1kNb1tRzVHU+i+qLWNszzOwyP+85vhaAoXgGn8tB+buvpiQQIBQKEQqFCAQCLF++nNLS0kmuXERERERERKYb0zT585PbWd8zwnA0yef+0UEOMIDPnzuHdx1fT0OJhjjLwc/4KTNNsxtg7PcZkW6cO68cn9NO93Ccc1vLOLmpBIDNfTH8TiuO0z8yyRWKiIiIiIjIdBdPZbn6rnVUFbj40xPb+PvKl8/zmVuVx1FV+TSU+DAMDXGe6Q577GcYxocNw1hhGMaKUCh0uC932L3vxDq6huIMxdJ86NQG6os9AKzpjpDKGZSd9Z8Exjp/9sz8ERERERERETkUtvdH+fadazmpoZClf32ODcEoAHNKffzivceS73WwqL6I0jwNcZZRBxv89BqGUQEw9vs+0w3TNH9tmuYi0zQXBQKBg7zc1GEYBv/v7Nk8s32ARCbLFy5owU4GLFa8DcfQcvY7+d8/3EtrayudnZ0sW7ZssksWERERERGRaWD5uiBf+OU/KbKn+Y/rVxJNZQE4ytrD5y+cS4nPycK6QnxO2yRXKlPJwQY/twJXjv35SuCWQ1POkcFmtfCFC+by4PoQVsPg/y49BsiBzU4wmubvqwf4znU3c80113DVVVdNdrkiIiIiIiJyBMvmTH750Gb+/q87uOehx/jpw6NHu6wGcP8Puf3bH+TxW/9Ca6Xm+cirHcg69xuAJ4A5hmHsMgzjA8B3gHMMw9gInDP29ozic9r45NnNPLKxj2Kfg8+eO7rpK5Y2iacyfHf5Li56x5Wv8SgiIiIiIiIi+xYcSfCN29bQVunn+UwVeQvfDIZBNtzPwG8/wPaVy2mZO5cP/8d7NM9H9sowTXPCLrZo0SJzxYoVE3a9idDRNcydq7s5tq6QhzeEuP6J7QDUF7mx2Sz84yMnUeBxTHKVIiIiIiIicqR5ZGOIRzf2cVRVPp9e9jypzOjz9+SGx+n557cBCAQCdHR0aKP0DGcYxkrTNBft7Tb1gL1BbVX5LKwtZHMwwmnNAS6YVw7AtoE4VsPgQ39cQSKdmeQqRURERERE5EiRyea49sFNdA/FGY4nWXrDc+Ohz38dX0bioV9NcoVyJFHwcwic3VqG22GlP5bksmOrObauAID1vRFG4mk+f9NqsrmJ66wSERERERGRI1PPcIJv3N7JUVV5XLN8E397ZnSej8tmcPUFdfzqs+9laKCfQCCgjdJyQBT8HCLvPaGOrsEEsVSG/zq9kbqi0dV563sjrN41xM//vZGJPFYnIiIiIiIiR5bl64Nc//g22irzeP/vn2HHQByAo6vz+fX7FrFy+R1s37ye1tZWOjo66Ojo0EZpeU2a8XMI5XIm37pzLcc1FJHO5vifm1cxlMhiNaC60M1/nzeHixdUTXaZIiIiIiIiMoWkszl+9dBmyvwuHt4Y5LZVPeO3ffbc2cytyKcsz0lzmZ/f/OoXLFmyZHymTzAYZNmyZdooPcPtb8aPgp9DLJXJ8Y3bO1k8O8BgLMWXbl5FKjfallee5+Yn71zA0bVFk12miIiIiIiITAFdQ3F+9dBmTp9dwpf/2UHPSBIAv9PKT995DIZhMKfMT0WBS1u7ZJ803HkCOWwWvnBBCw+sC1Lsc/Cli1oBSGRMBmNJPnfTKroGY5NcpYiIiIiIiEy2+zt7+euT22ks9vCh61eOhz6nNxdzzbsX4nXaWFRfSGWhW6GPHDQFP4eBz2nj0+fO5r61QeqKPfy/s5sBGE5kGYql+fhfnyWcSE9ylSIiIiIiIjIZYqkMP7hnPcPxFOt6Rvja7WvJjd32jUtaufKkBsryXSysK8Tvsk9qrXLkU/BzmJT4nHz09CYe3BBifk0BVxxfC0AwnKJ7JMGn//486Ux2kqsUERERERGRifT8ziG+e9c65lfn8607OnlgXQiAYq+dP77/OGqLvbRV5dNSnofdqqfs8sbpb9FhVFPk4fJFNTy1pZ/FLaWcO3d0+Fb3cJK13WG+dusaclrzLiIiIiIiMu1lxgY4P7d9EIfV4MN/WslALAPAJfPL+eHlR+NxWjmuoYjSPNckVyvTiYKfw2xeZT6nzQ6wZvcISxbVsKAqD4BdQ3Ee29TPTx9YrzXvIiIiIiIiR7j29naCweD4n9esWUN7ezsAK9bv4LJv/53GEi/XP7GV3zy6DRh9Qv6jJfN568Jqqgs9HFNbiMdhm6TPQKYr/Y2aACc1lTAcS7NzMMZHzmjiG7d30j2cZPtAjNtf6KbE5+SKExsmu0wRERERERE5CO3t7SxdupRrr72WK664gi9+8Ys4nU6SySRP99l4/NlVdK1/geejXsAKQEuZly9f2AqGwdwKPyV+dfnI4aF17hPob0/vAEycdhtfuWU14UQWiwHNZT4+dWYzF8yvnOwSRURERERE5HUKBoMsXryYzs5OiouLGRoawnT6KTjpciw9azHmLMYz67jx+//PhS00lvoo9jqZU+7HZbdOYvUyHWid+xTxzuNqGYylsRgmX3nzPBxWg5wJm4MRrnlwE09u6Z/sEkVEREREROR1Ki0tZfny5QQCAfr7+3E0LCJv0SXEtqzEffbHx0Ofqnwnf/rP42gq9TOnLI/51fkKfeSwU/AzwT5yehN/veMhsvERvnpxKwaQycG63UN85861rO8ZmewSRUREREREZMxLZ/fAaHfPntk9r2JzUXDa+8BixeIrpPSyr2FxejBzWa5cGOD/3jYf99gA56pCN4ZhTNBnITOZgp8Jdu2113Lj/76P//n5n3BkYnzy1ArIZslipWNXP//7r9XsHopNdpkiIiIiIiIz3p7ZPYsXLyYYDI4f6Vq6dOnLwp9gMMipl/8X6ZZzsA1spfjcq/AfdQ4A2egAO368hOu/dAV5ZpRjagrxOjVuVyaOgp8JtmTJElrntrD55h/yqe/9hm9+5HJ6b/o6mDky2OjsDvO5f6xiMJqa7FJFRERERERmtCVLltDa2kpnZydtbW20tbXR2dlJa2srS5YsAWA4lubjv7mPXb395OcX4L3wc1i9+ZhmjqFH/sIFjvU0NDSwffMGnvz3nVgt6vKRiaXhzpMgGAzS1tZG3+AIBWe8H2PtPVz147/xx5UhAPJdNo5rKOJn7zoGt1b5iYiIiIiITJo9z99CodHna4FAgI6ODkpLS7l3TQ/PbBugvtjD1/71HGkcAFjI8KWTilj1zKN84uMfx5ON8M+bb+Kqq66azE9FprH9DXdWqjCJzEySoYevp+L8j7Cg0su7LU7++swuhhMZnt0xxJf+uZrvX7YAm1WNWSIiIiIiIlPFYCzNb+7oZFbAx7qeML95ZCuMhT5ntQS48qQGbFaDy84+ngKPA/Ap9JFJo0Rhgu05ExoKhQgEApTk++i+59d8/md/ZVG5nQvnlQHQH03x5JZ+/u/2TiayK0tERERERERGvfL5WyAQIFo8h4s+/UNcuQT/86/VPLKxDwC3zeBXVxzDe06oI+B3sqiuaCz0EZlcCn4m2LJly8bPhHZ0dNDR0cHcpjq23nYNf3jgeS5dVM2JDYUAdA8neWhDiJ//e9MkVy0iIiIiIjKztLe3c911140/f7vpjvs44SPfo6K8gmE8/PyxbtK50ftetrCSX16xCJ/TwfyqfOZW5OGw6em2TA066jXB9rT3LVmyhNLSUgCWL1/OsmXLWHLF2/nJ/Rv5wGmNDMTWs743wtb+GHet3k2ey8Z/nNwwmaWLiIiIiIjMCHu2ebW2tvLtb1+Nd95i/uPbv6dnUweBCz+B17ACkOe0cpa5ihMq66gocFFf7GNooI/2P/5OR7tkytBw5ymmayjOL5Zv4rQ5JXz1lg66h0e3ey2syecdb6rlHcfVTnKFIiIiIiIi09ueI14bdg9SesoSMt3rMeachaumdfw+HzyljtDTt/Ozb36RlrlzeejBBwFYvHgxnZ2dXHPNNQp/ZMLsb7izgp8paHt/lN89upUTG4v4/E2rGElkAXhTfQHvPb6etxxTNckVioiIiIiITF/JTJb2ezv4/g9+SGR4kMIzP4jFOnpgptRn50fvOJpU1sRvxviPy95MZ2cngUAAgFAoRGtrK8uXLx8/5SFyuGmr1xGmrtjL+06s4y9P7uD/3tLG525eRSJtsmLbEBZjG26HlXPnlU92mSIiIiIiItPO45v6uHtNDwXWLNaWMynOGw10zGyG/zqpihPn1uKy21hQ48fvKmP58uWvWveu0EemEk2bmqJmlfpZsqiGVV0jfPutbTisBibw9NYhrntsCw+vD052iSIiIiIiItNGKJzk23eu5YVdQ7ywrZefPbIbW14A08yRCW1jxw/eyq8/914KjBgLawvxu+yTXbLIAVHwM4W1VuZx0fwK1vdG+dZb27BbwASe2jLILx/azNNb+ie7RBERERERkSNaLmfyt6d38OuHNxNLpPnu3et5oTuBiQnpBP9zVi0//c8zaGxuYfum9Tx+/x1YLAaw93XvoVCIxYsXEwzqxXqZGhT8THHH1BZy1twytvTF+MZb2rCNhT9PbhngJ/dv4IWdg5NdooiIiIiIyBGpc/cI/3tLB70jCW5+tos/P71z/LYWez8/vWwuLQ2VnDyvkccfefBVA5uXLVs2vu69o6ODjo4OWltb6ezsZNmyZZPwGYm8moY7HyFWbBvg3jU9VBW6+cZtnWRNsBhwUlMJX75oLnMr8ia7RBERERERkSNCNJnhNw9vIZXN8szWAZ7ZPjR+W4Xfwfcum086BzVFHmqLPTht1n0+Vnt7O0uWLBmf6RMMBlm2bJk2esmE0lavaeLZHYPcuaqb8nwn375zHbmx8OfkxmK+/tY2GgO+yS5RRERERERkyjJNk1tf2M3K7YOk0hn+tqJr/Da7Bb52yTwqCzz43TZml/nJ0xwfOUJoq9c0sbC2EKthcMvzXXzuvDl875715Ex4fEs/X7u1g2+9bT41RZ7JLlNERERERGTKeX7nEDeu2Em+y8YdL+ymP5Yev+2itjLecVwdhgHNAR+lea7xOT4iRzoFP0eYBTUFWC0G/1i5k0+ePYuf3L+JrAmPb+7ny/9cxfcuW0B5vnuyyxQREREREZkSekcS/PaRLYDJym39rO+Njt9W5rfz/UsXkDGhIt/1mse6RI5ECn6OQG1V+VgMg789s4OPntbALx7aSiY3OvD5izev5gdLFlDsc052mSIiIiIiIpMmkc7yh8e30T0UZ3PvCI9ueXExjt0CX7hgLg0BLx63Xce6ZFrTjJ8j2LqeEf78xHbsNoM/PLYdE3DaDE6dVcJ3L1P4IyIiIiIiM49pmty5uptHN/YRTaW59YWe8dsM4NKFlVxydLWOdcm0ouHO09jG3jC/f2wbkOOvT+8CwG23cGJTMd+9dD4Bv2tS6xMREREREZkoa3YP8+cnt5PNmdz2/C7imRdvO7o6n0+fM5usCbVFHmqKPDhslskrVuQQUvAzzW0KRvjtI6OrCG9+djcALtuL4U9pnsIfERERERGZvoIjCX77yFaG4ykeWtdLT+TFwc1lfgffuGQedruV8jwX9SVePA5NPZHpRcHPDLC1L8ovH9pMJJnmzlU948e+Tmws5juXLqA8X+GPiIiIiIhML+FEmuse3cquwRgdXcOs7YmM3+axG3zh/LlUF3vJc9toDvjJ92iOj0xPCn5miO39UdqXbyKayHBnx2j447AanNA42vlTUaBtXyIiIiIicuRLZrL85ckddHQNs70/wsodw+O32Qx47wl1nNFSisNmYVbAR8DvxDA0x0emLwU/M8jOgRg/fWAjiXSaO1b1YjI6sf7EpmKuvnQ+VQWeyS5RRERERETkoORyJv96rouHNobYPRjjme1D47cZwImNRXz4tEYsFoOGEh8V+S5sVs3xkelPwc8MExxJ8N2715FMZblzTQ85E2wWOLGxmG+/fT41RQp/RERERETkyLJ8fZB/PddF93CMp7cOjb/fAGaXevnMuXOw26xUF7qpKfLgslsnrVaRiabgZwYajqf55m2dxNNp7uroJWeC1YDjGov47tvnU1vsnewSRUREREREXtPzOwb54xPb6RqK8fTWQV76DLauyM1/n9uCz2Uj4HdQX+LD59TgZpl5FPzMUPFUlq/d1sFILM29a3vJ5sbCn4Yivv22o2gI+Ca7RBERERERkb3aHBrdXrw5FGHF1kFyL7mtIs/JZ86dQ5HPQbHXSUPAS55Lg5tl5lLwM4Olszm+eXsnPcNx/r0uSCYHFuBNjUW0Dj/DR698J6WlpQAEg0GWLVvGVVddNblFi4iIiIjIjLUpGOb3j25jQzDMs9sHyb7kKWuJ18EnzmympthNvsdBU4lPm7pE2H/wox64ac5utfC1i+fxvXvWkc2ZPLwxRDoLT23p44HOXfz1TxfyyP13ArB48WI6OzsBFP6IiIiIiMiE2tgb5rePbGV9zzCrd42QfcltBW4b/3VaEy0VefidNppKfRR47NrUJXIAFPzMABaLwefPb+Gaf28ik83xyMYgOaz4Wk6h3zCYu/BEUsNBIpEIra2tLFmyZLJLFhERERGRGWJD7wi/fXgrHbuHWdsdftkMH5/DwvtOqudN9cV4HFZmlfoo8joU+Ii8Dgp+ZgjDMPj4Wc3857cfZXjVC/hbTgGHG++ck4kaFuLLr8Png+XLl48f/RIRERERETlcNvSG+dVDm3lh1xCbgtGX3VbgtnHZsTWcPKsYt91GY8BLic+JxaLAR+T1UvAzw3zngxfx6AP3MLDpaTyNi7C4vHjnnIRhtZF46u8Eg0HN/BERERERkcNmfU+YXz60iZXbBtgxmBh/vwEUee1ctrCa4xuL8ThsNJR4KPG7sCrwETloCn5mmNLSUh694Wccdc7lxG0OnFVzsXkL8Mw6HsNm5/gL38GTd/6dstJSzfwREREREZE3pL29nSVLllBaWsoLOwf5+X2dPLmhmwju8fsYQInPzpJja1jUUITPaaOhxEuxVx0+IoeCgp8ZKrZlJalQN/knvROjtBFrXgnu+oVYbE5OvfQDOAa3EgqFNPNHREREREQOSnt7O0uXLuWnf7mNY9/7RdYGYwzFs2CMhj4GUJ7n5LJjq1lYV4Df7aCxxEehhjaLHFIKfmaYYDDI4sWLiUQi+NiN+dxNJBcuwUMWI68MV00bht3J8KM3EEAzf0RERERE5PVLZ7J4Wk+j7n3fJZ5fwxM7IgCYgJFNU5Hv5vLj61lQXUCB10FDsVdbukQOEwU/M8yyZcvo7OyktbWV5cuXA3D6eW+m37yAgM9HxHDjLG+m4Iz3k1l9J7FUZpIrFhERERGRI0UkkeYvT27n7yt2sWMgChXzsAKmaZJLJzCHu/nom0/kxJYaiv1O6ou85Hvsk122yLRmmKb52vc6RBYtWmSuWLFiwq4ne/fSc7Yw2gX0y99cx+/XZklYfTjKGzEMC+nhIPatj/LvX3+DxtqqSa5aRERERESmqv5IkmuXb+K2VbsJhVMvW8meTURI7l7H8GN/w5MIccvyJzl6dh15LgU+IoeKYRgrTdNctLfbLBNdjEy+q6666mXHt0pLSyku8LPtL/+LO9ZLVZ4DAHt+KZnZZ/GxX97NQCQ5WeWKiIiIiMgUlMuZbA6G+fhfVnLGDx7kd49tI/iS0MfvMGD7M/T84ZOkH/g5vmQfQwP9fPRdbyExMjiptYvMJAp+BBgNg6655uc8cc0nOX9BNVUFLgzA5slnC+V8/qZV9AzHJ7tMERERERGZZIl0lgc6e7j4549ywU8f4bbVPYQToyMiRgc2O7hkfgWnmB1s/9vXaSwvYvXqDtZ2rqG1tZXOzk6WLVs2uZ+EyAzyho56GYaxDQgDWSCzr7aiPXTU68jx64c38/vHttI7kiRngtWAExqL+L+3HkV9iVdD10REREREZhDTNBmKpfnDo1v5y9M76IumXna73QLVhW5ObS7llFklFHkd1JV4+Nv1v+Udl1/+sjETy5Yt46qrrpqMT0Nk2trfUa9DEfwsMk2z70Dur+DnyHLHqt188/ZO+iJJMrnR9y2syecrl7RyVFUhVovCHxERERGR6SyVybGtL8LXb1/Dim1DJPc8MRjjc1hoDPhY3FLKguoCSvNc1BR6yHPb9GKxyATaX/CjrV6yTxfNr6Qs38nSPz/LQCxNKmvy7M5hPveP1XzhghZOmRXAYdNpQRERERGRI8XeFr28sgPHNE0iyQz/XtvLd+9eT89IgtxL+gUsBpT5HcytzGfxnFJqiz1UFbipLHDjcegppshU80b/rzSBew3DMIFfmab560NQk0whT93+N655+0V88l+bGIqniaZybOiN8JVbOvjkmc1ctKBS/7iLiIiIiBwB2tvbWbp0Kddeey3Lly8HYPHixXR2dgLwwf/6CMHhBD+6fz33dPQSS7+8u8dtM6gv8bKgppBTZpUQ8DupK/JQ7Hdit+oFYZGp6o0e9ao0TXO3YRilwH3Ax03TfPgV9/kw8GGA2traY7dv3/5G6pUJtOcbQ2trK/+47W4+smwd23f1YLoLMCwWir12/uOkBq44sY4Cj2OyyxURERERkf0IBoPjQU8gEAAgFAoxp2Uun7vmb/z6qSDBcPJl3T0GEPA7mFXq57j6Qo6qKaAyf7S7J8+l41wiU8Vhm/Hziot8DYiYpvmDfd1HM36OLK/+xmBgnvJBvBXN4B/9RuGxW3j7wmqWLp5FeYF7cgsWEREREZH9CgaDtLW1EQqFwOKg/K3/jW/OSbyiuQeH1aC20M2cijxOaQ5QV+yhtshDwO/EabNOTvEisk+HZcaPYRhewGKaZnjsz+cC3zjYx5Opp7S0lOXLl7/4jQEIPPobLvrBv3hmZ5RQOEUsneOGp3fQG07whfNbaCjxYdHQZxERERGRKSedzREKJ6D+OKqWXI7VW4hhsYyHPgZQluekrtjLnDI/J84qprrATXWhh3y3XT/nixyh3shwljLgn2OtfTbgr6Zp3n1IqpIp7SvnNfHPtWGue2wb/ZEkWRPu6wzSH0ny1TfPo7UqX2d8RURERESmgGzOZCSe5vmdA3z9ltVs64vhOfOj47ebuRxGMkJLbSlNZYUsqi+kucxHTaGH0jwXboe6e0SOdAcd/JimuQVYcAhrkSlmz1GvUCj0sjPAZ555JsuXL6c50MZXbltDMJwknTV5dscwn77xBb5ycSvHNxbjsuubhIiIiIjIRDNNk5FEhk3BEX5wzwae3TFIMjM24sNqA9PEahhU5dvZ8cJj9HU8yqy3ncvH3vVRKgtc5LnU3SMynWgdk+zTsmXL6OzspLW19VVT//esfKwqcvPxvz7LzsE4iYzJ5r4on/vHKr5wYQtnzS0jz2Wf5M9CRERERGT6M02TaCrLrv4oP/33Jh7aECKWyr7qfm4SzK0qprY0n+Maiig5p46VDxbwmU99EodNXfsi09EhG+58IDTc+cjT3t7OkiVLKC0tBUa7gPaEPnsERxJ89E8rWB+MEEmOfnPxO61ctXgWbz26SkOfRUREREQOgb39bP6XG/7O2977fn790BZuX93NSDzzqo/zO600BbwE/C5ml/t5U10hdSWjb/uc6gUQmQ4mZKvXgVDwM31Fk2k+u2wVj2/uY2jsm43dYrBkUTX/cXI9TQE/VrWLioiIiIgclPb2dpYuXUprayt33HMfA5EEb7/qf0nPOgN7YQWjo5lf5LTB7FI/ZfluSv0ujmsoZFapn8oCN/luu342F5lmFPzIhMhkc1x911puf2E3wXCKPX+zTmgo5DPnzeGoqgLN/REREREReZ1M02Tbrm7OOfdcgr5m8o+9GIu/GMP68m4dmwWaAl4qCzwUex0srC2ktTKPygI3BR6HjnKJTGMKfmTCmKbJHx/fxh+e2MaO/hjZsb9edUVuvnTBXI5vKqbA45jcIkVEREREpjjTNIkkM+zsj/Hrh7fwyKY+BqIvvri65z4Ww6CuyElDIA+/y0ZbVT7H1BRQXeih0OvQC68iM8T+gh8d6JRDyjAMrjy5geoiDz97YANru8OksibbB+J8ZtkLfOqc2Zw3r5zqQjeGofZSEREREZE9cjmTcHJ0G9cvHtzMim1DjCTS5F6S9phmDjObJdW3HctwFxe8+RLaaks5rr6Q2mIvxT4HHoee5onIi/QvghwWZ80to7bYwzduW8PzO4cIJ7JEUlmuvnMt2/pjvPu4GprL/NitajcVERERkZkrlckRTqR5fFOI65/YwYbeMOFEhleey7AC2b5tRHaswW4xyfXvIPjCv3lk7W38z30PUF9dohdWRWSvFPzIYdNc6ufa9xzLV2/p4OmtA3QNJcia8Ocnt7MlGOaTZzfTVlWAV5sERERERGQGiaUy9IWTLFuxk9tWddM7kiCezr3qfjYD5lT4qSn0sHntah5/7O+UMsRN/7yFQq+TN59/Dp2dndx56z9ftnVXROSlNONHDrtsNkf7g5tZvq6XF3YNj7eq1hS6+fJFLRxbV0TA73rZxxzIGnkRERERkSNBNmcSSWTY0DvC7x7dysrtgwzF0qRzr34uZrdAW1U+VQUeTEzqirycOKuYxhIvN/7xt7znXe/Uz8gi8ioa7ixTwj0d3fzxiW08s32IVGb0FQ2Pw8Jnz2vh9NkB6ou9WCzGy1ZVLl++HIDFixfT2dnJNddco29sIiIiIjLlxVNZhmIp7u/s4caVu9jeH9vrES4Av9PCcfVFeJx2cqZJXbGXU5pLaCj2UuBx4HZoQLOI7J+CH5kyNgbDfOfOtTy7Y4jBWBoAC3DlSfVccnQlcyvyGBnsHw96AoEAAKFQaDwI2vMKh4iIiIjIVJHO5ogkMrywc5A/P7md1V0jDMXTJDOvPsJlASrznSyqLyKTA4vFoKXcz4lNxVQVuMlz27WNS0ReFwU/MqWE42m+dtsa1uweZl1PZPz9C2vy+cRZzcyryseMj9DW1kYoFAIgEAjQ0dGh0EdEREREpoRcziSayrBzIMqNK7p4cH2QUDhJNJXd6/0dVmgtz2dWmY9EJofHYeXYukKOrS2kxO/E57Rh0+ITETlIWucuU4rfbed7l86n/cFNlPoHeGxTP1kTnt05zCf//jyfP6+FRt/ev2GKiIiIiEwG0zSJpbIMRJLct7aXfz7Xxc6BOOFEmuxeXks3gCKPjeMbinHaraRzJgG/k1OaS5hblke+x47HYdUmLhE57BT8yKSwWi184qzZ3N3RjcNq4fEtA8RSWYbjGb78rw7MlcsIhUKUBAIYjB71Wrx4sY56iYiIiMiEeGnQc/+6Xm55fjc7B+JEkpm9Ht8CcNstLKjOp77ERzSZwWIYzCn3cfKsEqoLPfhddhw2dfWIyMRS8COT6vy2CpoCPr5/zzq29cfY0BvBBMyFl1JXOY/vfeB85lbk8c63XkhnZ6e2FoiIiIjIYWGaJvF0lv5okgc6g9zy/G52DMQIJ9Kk9tbSA1gNqCtyc3xjMbFUjpxpEshzclJjMa0V+eR57HjV1SMik0wzfmRKiCYzfOfudfQOx3lgbZCsaQIGXruFL144lzpvhmcfvJtPfmLpZJcqIiIiIm9Ae3s7S5YsmfSV5NmcSSyVIRRO8MDaIHeu7mbH2NGtfQU9BlDstXFyUwC3w0YklcFlt3B0dQEnNpVQ4nPidVo1q0dEJpxm/MiU53Xa+OZb2rj52V0YwNNbBxiMZ4imc/zPLWt4z3E1XHTROxmOp8l32ye7XBERERE5CO3t7SxdupRrr72W5cuXA4xvcwUOa/iTzuaIJbNs7Ytw26rdPLyhb2wYc4b0PoIeiwH5bhunNwfwOe0MJdJYDYP6Ei+nNBfTUOLD57RpA5eITGnq+JEpZ0sownfvWkt/JMXKHUPs+Rs6p9TH/ztnNq2VeVQXerBY1DIrIiIiciQJBoPjQU8gEABGZzm2trYe0lmOpmmSSOeIJtOs3jXCzc/t5PmdwwzGUsRT2b0OY4bRjp58l5Uz5pRS4HHSF01iMaCmyMNJTSXMLvOPBT0WHd8SkSlF69zliJNMZ/n+PevpHo5xX2dwvN3WaYUvXNDK0bUFzCn343GoaU1ERETkSBIMBmlrayMUCgEQCATo6Oh4Q6FPKpMjnsrSOxLn/rVB7lvbS9dgnJF4ikRm3893LECR18bpc0opcDvoDY8GPeX5bk5qKmZeZb6CHhE5IuiolxxxnHYr//PmVu5ctZt0zqRj5wi7RxIks/D12zu5ZH45b11YTUtZHhUFLn0jFhEREZkhsrnRIcwjiRRPbxng9lXdrO8JMxhNEk/n9tnNA6PDmGsKXJzeUko6axJOZMCAEp+LExqLmVeZh99lV9AjItOKgh+Z0i6cX8n8mgKuvnMtzYkMj2zsIwfcuqqHRzf18fkL5tJSnsfsMj9uh85Wi4iIiExle456hUKhlx31Wrx48V6PemVzJol0lmgyQ+fuEe5Z08OK7YOEwgliqew+hzDD6LEtm9WgtdzP8Y1FDETTJLM5rIZBqd/NiU3FNJR4cTusmtEjItOagh+Z8qoLPfz0Hcfw4wc24HfbWL4uRDSVZSCW4fM3reZdi6o5r62clvI8yvLV/SMiIiIyVS1btozOzs7xmT7w4nDnv994I//5oY8QSWa4+me/IVuziLV9SfojSSLJDOnc6NbXfbEYUOSxc/KsYoq8LvqjKUzTxOWwUlvs4x2LignkO/HYtXVLRGYWzfiRI8qD64P89ant9Awn6OgaITf2/qp8J58+t4XmMh+zy/x61UZERETkMDgUq9jb29t569svJa+wmEgyw6Ort/L7u58iWdhAfyTJSDxJNmdgWPYWzoyGPwbgtluYV+lnXmUBI8kM6WwOA6gp9HJsXQFt1aPzedx2q14YFJFpT8OdZVrpiyT47l3ryWSz3NsZJJrKjt/2nyfVc/qcEuZW5BPwO/VNXkREROQQ2bOKfW/dOtdcc81ewx/TNElmciTSWfrCSR7bHOLBdX1sCoUZjKZJZHJkcnt/PmKaOcAAM0cuncQa7uXCUxaS5/MSS2cxgQK3g2Nq8zm2tpAinxO3unlEZIZS8CPTjmma3PzsLu7vDLJjIMra7vB4909jiYdPnNXMrFIfs0rV/SMiIiJyKOxrFfvs2bN55JFHKCwuYWdXNzcu+weL3/Ze/r2ul8c399M9nCCcGO3I2UfGM84AHFaDEq+VzY/cSmywF4vdhcvtZsl738/CxgoW1RdSWzQ6m8dhU8gjIgIKfmQa6x6K89271wFwb2cvsbHuHwO4avEsjm8sYk6ZX90/IiIiIofAK1exG3YXtcedxwnv/hRbB5L09g+Ts9qx2Ozsbx4PgGGA02pQ6nfRXObD77STw8QELJkkN/zwy/RvfJZcbPiQrHwXEZnOFPzItJbL5fjLUzt4cnM/G4NhNgWj490/R1Xm8eHTG6kr9tJcqs1fIiIiIgcqmzNJZrIk0jkiiTQrtg1w13PbuOuJVRieAgynB8Ni28csnhcZgNUCbruVygIXlQUeXHYrNutoMJTntNNamcexdQVUFHgID/Zz3jlnvaqzaM8RM4U/IiKvtr/gR1u95IhnsVi44sR6TmsO8IN71zO30s89HUESmRyrd4/wiRue58OnNnBCUzGzSv1UFrixWtT9IyIiIgKQyeZIZHIk01mG4yme2NzPgxtCdO4eYSiWJpHJks29eH9boP5lH2+audGZy6Nv4LRbKfA6KM9zUuhx4rRbcdktWAyD6kI3R1UV0FadR77bgctmedVMnj9fd9M+N3+93kHSIiKijh+ZZnK5HL99ZCuru4bp6Bpm+0Bs/Cx5TYGLj53ZTFPAy5yyPPI99sktVkREROQQ2t/GrT1DlpOZHKlMjuBInAfWBXlsUx+bQ9HRdemZHNn9PjXIYeZGj2gZhgWrBTIj/cQHusnGhjFTMey5FJdc/m5KCvKYU+ZnQU0B9cVeXA4rTpvlgI/eH4rtYSIiM4mOesmMs6EnzE8e2IANuH9dkFj6xZep3rqgkgvmV9BQ4qG+2KehgCIiInJEa29vJxwO88UvfpHW1lb+8OcbuO3WW7nhhhvYEYXT3vc5MgU1hCIpUpkcmaxJ7rUfFoPRkMdqGLjtVgq8duIDQSoqygjk+zCySe67+a/0bV6FJzMCI0H6Qr06kiUiMgkU/MiMlMnkuPahzWzqDbOlL8r6nhH25D8eu8Gnzp5Da2UeszX8WURERF7DVOpAyeZMUpkcyUyWn7dfyzd/9Asqjz2XXEk9OXcRFqcXw2YHqw3DeO0XuAzAYoDVauCxWylw23HZbThsBvluB36XDa/LRn2xl3mVebSU5+F32bjuN7/kEx//+Ota7y4iIoeHgh+Z0TYFw/z8gU04bAb3rw0yFEuPH0M/vqGI9xxfOzr8ucyHx6GxVyIiIvJy7e3tLF269A0HHK8nPNoT7sRTWXYNxVize5hntg2yvnuEUCRJJJkhlTHJ5kwO5Kf5Pd07FsPAPhbw+N027FYLDqsFv8tOvsdOeZ6L5jI/LWV+6ku8eJxWnDbrPucjTqVATERkJlPwIzOeaZrc/Owu7u/sJZrM8tTWfpIvOcT+X6c2cHxjMbNKfVQWuF81ZFBERERmrmAwOB70HOyWqX2GR+s28OXv/ITjz3kLa3sirO8J0zMcpz+aIpzIkMqOHs16rZ/YzVx27A8mppnDzGYxMknKS4vxuZ1YLBY8ditep40ir51ZpT6aS/3MKfdTmufCabO8rhk8IiIytSj4ERkzGEvy4/s2Ek6keGbrED0jcTJjx79qClx8dPEsGkq8zCr1UeLT8S8REZGZ6pWdLGvWrOGEE04gEokAEAgE6Ojo2G/oY5omQ/EU2/tirN66m69d/SMG0xZcBSUYnkJMZx4OXyF2j4/MSxZj7c9LO3csBjisFhxWk97tm8mm4pDLkEtEsWYTRHauo9Rl8vtf/JS2phqc9tEBy3qBS0Rk+lHwI/IKz2wd4LePbsFhMfj3+hDRVHb8tnNaArz1mGoqC93MKvXhd2n7l4iIyEyyt+6c0047jfXr14/fJxAIsHr1anDns6M/xs7BGDsH4/QOxxmMpRiMpemPJBmOZ4inMiQyOdL7X5k17qXhjtUAu82C02bF4xg9lmW1jnbn5LntlLvhn+3/x47VT5KNDGC1Wshms8yePRvDMFi/fr3m7YiIzAAKfkT2Ip3J8ZtHtrCme5htfVE29kZIjf1AZgGuOLGOU2aVUFvsoa7Yi8tundyCRUREZELsOdq1dtNWAnWzwVNIDCdWbyFurx/D4SGFFV9xOXVzj6ZvaATT5iaRee1tWeNHsgBME7vdhs1iGQ13rAZOuxWXfXSmjs0yOly5ocTDMbWFzC33U57vwuWw4bBasFsNrr322vGQ6oorruDiiy/m8ssvp7Ozk6uvvhq/36/QR0RkBlDwI7IfOwei/Pj+jWCaPLKxj8FYavz4l89h8NHFzbRV5tMY8FGR71J7tIiIyDSQSGfpHk7QPRRnx0CM3UNxEukc2VyO4USa3oEwD9x7D+mcidWdh9VfjM1XgGF3v/aD53KYmFgsBhbDgtUyeiwrMTJEOhHFyKUgnSSTSeFyODjl+EUcVRfgmNqCsY1Zdhw2Cw6bBfsB/NyhAcsiIqLgR+Q1mKbJHau6ufWFLmwWeHTjAOFkZvysfXPAwwdObaKu2ENzqY9izf8RERE5JA5HaJHMZOkdTtI9HKd7OEHXUIxIMksuZ5LJ5YgkMkSSGbI5k3g6SySZoT+SpC+SIprKcuA/HptYDYNsOkUum4VcBjObIpuM4TByNDQ143A6yXfZiHat499//QVVniy33nILDouFSy48l7VrtfpcRETeuP0FP9pdLQIYhsGbF1RyZkspv3tsK2BhIJrihV1DxNM5NoZifOHm1Zw5p4S3L6ymqtCj+T8iIiJv0J5ZOtdee+2r1qQDew1D0tkcPcOJ0W6dsWAnkkiTzY2uQM/mcqSyOXLm6LHuWCpDOJkhFE7QO5xiKJ7igEbt5LKMvkBqjm7KymWxYOLz+XDZrbgc1rHjVhbsRpaV99zEyPY1JHevo8Bu8uDTK6msLB8/kmUYJ9FeHn9ZyPXgg8vVmSMiIoedOn5E9qJ3JM41/97EcCLF2t1htg/ESGVe/H/lfSfUcmpzgJpiD7VFHjwOZagiIiKv16vWpBsGA/Ess+a/if+9+sfETAfhRBqTPaGOiWGA224lnTNJpLOE4xkGYilC4QQ9w3H6ImkyuQMfomwxRl8AshiMz9VJJ2OM9PXisFpobGrC67Cw+uG76dvwLO9/x1v45If/g0KvA7ttdNjyUH8f8+cfRSgUAg5s45eIiMihpKNeIgdpTdcwv3poMxarwROb+umLJMdfJfTaLXzwtEYWVBdQU+ShpsijAdAiIjJtvdEjWaZp0h9N0T2UYPdwnO6hOAOxNNFIlF/+8hdEY1HI5XAbGb76lf/F6fETSaXpC6foGUnQHxn9PTSSIPk6tmO9LNixGtgtFuwWsFhGZ+h4nTbyXXaKvA5mlfqYXeanIeDljr9dz5Ill1FVUY7DZqG/L7TXz/dV4RUQCoXGN4Ip/BERkYmg4EfkDcjlTO7r7OGm57qwGfDIxj4iyez4/J8Cl40PndZIa2UedcVeqgrdOG0KgEREZPrY23rzPWHHnvk08VSW3cNxdg+N/uoZTpId+znTNEe7dfLddkp8DrwOK4lMjv5Ikg1dffzx+uvJOPOw5ZVhL6zA4vYfUF0vXXu+p2PHYbVgtYBhWHDaLfiddvLdNkp8DmYF/NQWe2go8VJd5MFls44NUDYOennDgXxtREREDjcFPyKHQDKd5fontrFy2wAjiQwv7Bwiln5xaWup38EHT2mkpcJPfbGXigL3AW3iEBERmep6e3tZfP4lbO4doqi6CcNbRCxjEigJcOWVV+LxeLBbLQT8Tkr8TvKdNkaSaXYNJtg5GKNnOEFfJEkoPPprJJHZ/wVNczTRYbRjZzzYsVpwjG3IslgM3A4bfpeNfLed+mIv9cVeqotcNBR7KfE7cdls2G3G6Byew/g9WVu1RERksin4ETmEBiIprlm+kd5wnJ7BJJ09I8RfEgBV5rv48GkNNJX6aSjxUp6nFfAiIjK1JTNZuocSdA3F6RqK0zOceNmcHAMTazbJt7/0aQZ2biIz0kdRWSXf+t0/GM462D0cpy+cJBRO0RdJ0h9NHeCVTXKZDBZMnE4HVotBbGSITDpFXl4exUUF+J02Cj0OaorcNAV81BZ7qCvyUuRz4LC+uPJcL7aIiMhMpuBH5DDY0hfhNw9vIRxPs2MgxsZg5GUBUF2Rmw+f3kR9sZfGEi+leS6sFq2AFxGRiffjn1/LCWddSNzipmswzvbeQdZ0dvKmN70JAIfVoDTPRdlYx06By0Z/NM2Wvig7BmJ0DcbYGRrmoUcfA28xtrxSDNuBbbY0AJvFwGodHZxsMcBmseCyW7FZDeIDQeqqy2kqL2R2mZ88I0HHo/dw1cc+Oh7q7PldRERE9k7Bj8hhYpomm0MRfv3wFmLJLJv7ImwJRUi+ZANYc8DLh05rpLrIQ0Oxl4Df+bIOILWHi4jMbK/1feC1bjdNk4FoarRbZ3C0Y2cknh4/KvXMM89w5y03Ue538NPv/h/FHhvvffuFbNi4kU989YcctfjN7OyP0TuSGD2KFUkRHEmQyOT2Uu2LTNPEwATDgs0CdosFm9XAMAxc9hfDGpfNSqHXTlWBhzllPmaX51FZ4MLntOG0Wcc3Y9nHPlZERERePwU/IoeZaZqs7wnzm0e2kMxkWd8TYXt/lNRLto7MCnh5/8n11BV7qSv2Upbn4je/+oUGQoqIzGCvNRgYYOnSpcxdsIhr/3gjXcNJvvb9nxMaHOKCCy4c79gp8tipLHBTluci4HfitltJpDPsGorzwsYuvnX11QwmTDxldVj8AfAVY/OXgHGgXTQ5sok4VnLk5efhsFnp27mVRCxMZXUtsxtqqShwMbvUT1t1HuV5brwOG86xAMgxFu4o2BERETk8FPyITJBczmTN7mGue2wbyXSGdT0Rdg7GSL8kACr3O/jAKQ3MqcjDnY1y5aVvZu1arYAVEZmJxleBr99IaUMLhr+UKC7K62Zx5ZVXAnD99dfTu3MrXjNGLtxHaNta5sxq5Kbb78HlK2BLf5RtfTF2DsToDScJjSToGU4QiiRf9gLE/hiA1QIumxWnffQYltNmwWa1YDEMfE4bwzvXcdqiNk5oqaW6wE0iPMi9d9zCRz76MZxj3T060iwiIjI5FPyITLBczmTVriF+//i20Q6g7jC7huIvC4DyXDauPLGeBl+aD71lMQP9fQAEAgE6OjoU+oiITCPZnEnvSIIdA6MBze6hxOiqc9MkGo3xi/afMbx7K5nhHvKtaZ589GEKiwOj30O2dnHp5ZcTM1zYCyrwlDcw9+TzGYjnGI6nOdCf5HLZNLlUglx8GEs2TfOcFhx2OzarBbfdSrHXQW2xh5YyP40BH/keOz6nbbxjRwOURUREpi4FPyKTJJszeW77AH98cgeZbJatfVG29EVfNgPIZTUYeOiPhB5fBmaOkkCANQp+RESOONFkhu39MXYMRNneHyOazLxsJXl5nouaIg/VhW6KfQ5ME1KZHDu7dnP2mWcSxom9oAJfRSPHXfwe+hMwEEm+bHHAa7EZ4HXaKPI6cDus5EywmBk6n3mEkVA39sQg2aEehnaso768mJtuu5PqyorxYMdp03EsERGRI5GCH5FJlsnm6Nw9wp+e3E44kaF3OM663vDLfpg3M0kSHfcTvP83NDXN4q577mNWXZV+ABcRmSJM06Q/mhoPd3YNxEnvWXlumnicNmqLPNQWeagpdOO0W0lmcqQyOWLJNLuG4mwNRdnWP7opa9dggp6hKAPhBOxvQ5Zpjnb1mCammcNMJ7GmojQ3VON2uUY3ZDmseBxWfE4bAZ+TqiI3jSU+qgpc3PjH3/Klz36auXNbuf+BB7BZLZonJyIiMs0o+BGZInI5k+0DUf74+Ha6h2KsWbuBrRGwefJeHLCZzRDd+CSXthXy/v/8APXFHop8TrXXi4hMgFzOpHskwfa+KNsHYvQMJ3jpz0rFPie1xR7qijxU5rvBgGQmRzKTJZrIsGswzpZQhA3BMNv743QPx+mPpAgn0uxv3I45duzLADBzZJIRiIdJDQcxExG8HjenLj4Ll83Cff+8gdCWDt615FI+9B/vpiLPjdsxeiTLOTZE2fKKWTvaICkiIjK9KfgRmWJM06QvkuSvT+3gn/c/TkVtA2uDcYYS2Zfdr8zv4N3H13JMbRFVBW4qClx4HLZJqlpEZHpIZXLsGoyxfSDG9r4oA9HU6JEs08QwDCryXWMbGD2U+pykcyapTI5kNks4nqZrOMG67hHWd4fZORijZyTBUCxNOJE54Hk7VsBlh0Kfm+xQN1VlAVY8+m+Ggl04nU6yyQTx0HZK/Q7efPYZ/OeVV1BTNXoka3igj1tuvomlS5cezi+TiIiIHEEOW/BjGMb5wE8Z/fnlt6Zpfmd/91fwI/Jqw/EUt72wm0c29pHJ5Hhh1yD90Zc/eXDbLZw2u4S3H1NNZYGbmiIP+W67joGJyIzyerpWYqkMOwZibOsbPZYVSb4YrNstBtVF7tFwp8hDgdtOOmeSTI+GO7Fkll2DMZ7bOcj6ngi7BuKEIknCiRThRPbAwx0DPA4rAZ+TikI3eU47dpsx/m+33WpQ5ndRX+KlKeDFmhzh7JOPo68vBGjYv4iIiBy4/QU/B906YBiGFWgHzgF2Ac8YhnGraZqdB/uYIjNRvtvBe0+o5+0Lq3l4Qwinw0o2a7I5FGFbf5RMDuLpHPesCXLfmiBNAS9XnFjP7HI/dUUeSvw6BiYi0197eztLly7l2muvZfny5QCccdbZbOweZFPczdzjTn9ZuOO2W6krHp23c/KsYnxO29iRrNGZO9Fkhl2DMa5/fBsbesN0DcYZiqcJJ0Y7dw5wCzo2C3gdVkp8TqoK3BR6naM3jOXyLw13Gku8lOW7cNutY8eyrNitLwZBwWAG5fkiIiJyqB10x49hGCcCXzNN87yxt78IYJrm1fv6GHX8iLy2RDrL+u4Rbly5i9BIgpFEho5dQ0ResdUl323jwqMqOK+1jMpCD2V5LvJcNnUBici0ks2Z7B6K8+ymLj779e8RHInj9XgAiIZHKPNa+fWP/o+FzdX4nDZS2ZeEO4k0W/ujPLd9iHW9YXYPxRmJjwY74USaA12WZbeAb2xTVkW+mwKPHRMDm9UAEywWCPid1Bd7aSr1Upnvwe2wjs7bGZu581r/NgeDwfGBy4FAAIBQKERrayvLly9X14+IiIjs12Hp+AGqgJ0veXsXcPxeLv5h4MMAtbW1b+ByIjODy25lQW0hbdUF9EUS3L6qm0Kvg0Q6y5quIUKRNCYwHM9ww9M7+cfKXTQFfFy+qJrWynxqCt0U+5y47NbJ/lRERA6IaZqEwkm29EXZ2helezgBYy9MGYZBVaGbhtJibmv/Gqcedwy7Q6NHoUpKAtzwyFOM4OW6R7aytmeE7uEEI4n0eMCT2k/rjmmaGKaJYbFgNSATHSYx1ENjdQVHtTSTM8Fpt2A1DDCg0OOgpshNc8BHTZEHn8s+PlD5ja5BX7ZsGZ2dneNBDzAeBGkIs4iIiLwRb6TjZwlwnmmaHxx7+wrgONM0P76vj1HHj8jBCSfSdHQN88/nuuiPJukaTLA5GH7Vq9V+p5Wjawu5bGEVjQEfVYWjs4CsFnUBicjkCyfSbO2LsiU0us48kx37R8wwCPidNJZ4aSjxUp7nwgSSmSypTI6ReJpNwQjPbNjFj395HVlXAVZPPva8YrxFFSSz5mvO3TEYO5bltFHsc+CymKx5+mHCQwM4DBMzkyARj1PgdfGxj32UBY1V1JeMzv9x2V/cmPXKbVmHkjZviYiIyME6LMOdddRLZOKlMjl6hxPc+sJuVu0aYjieYk3XMJFU7mVPegwg4HeweE4ZF7SVUVM0OlfC59RGMBE5vNLZHDsHYuMBTziZGb/N57TSUOKjMeClptCD3WqMz90ZjqfY1BthQzBC5+5hguEkQ7E0w7HRVeiJdI7Ma/zIYjB6LMvtsJHvtlHgceC0WUe7diwWvE4rNstogFOe76TImua/330eA8FuAEoCAZ5/YRVVFeWH8SskIiIicugdrqNezwDNhmE0AF3AO4F3v4HHE5HX4LBZqCn28LHFTQzH06zcNsDda3oZiiXZNZRgSzBMMgsmEAyn+PuKndz87E5qi71ccnQlJzUUU13kodDr0FEwETlouZxJbzjB1lCULX1RguHk+G02i0FNkZvGEh+L6ovId9tJZXKksjmGoik2BiM8sLaXjb2R0TXo0RRD8TQjiTSJVJbkax7NyuKw2XDbrQyHdhMfCtLYUEdNTR2GYeBxWPE6bVgtBkVeB3XFHppL/VTmu/C57Djto8GPw2ohFArxefPFYMoADcsXERGRaeeNrnO/EPgJo+vcrzNN81v7u786fkQOvXgqSyic4JGNfTy9bYChSIr1vWFCkeSrttL4nFYaAz4uaCvnTfVFVBe6KfAoBBKRvfv+z37BMaedy2DGQddQnHA4SufaTt70pjdRke+iYexoVqnfSc4cPZo1GE2xORRhY2+EzaEIvSMJBmIpBqOjG7Pi6SyxVAbYf8BiN8DjsuGxW/G7bHicNoJdOykMlOHzuPE6rVizKbq3rOW8M8+gsdRLU4mPAo99vMvHabPu86irhimLiIjIdHK4On4wTfNO4M438hgi8sa4HVZqi728u8hD9xO3cPlZF/F8fxEdXcPs6guzrmeEDDZMIJLMsmrXMKt2DeN3Wqkr9nLOvDJOaiqhttBNvkIgkRknnsqyrX90qPLWvijJ9OhK9GdWrOCOm++i4p/38bdf/YSTq/M556y30dnZyVE/+BlVF7+Dzt0j3LGqm/5Igr5oisFoinAiQzyVJZ7OkMru66oWyOWwWCy47QbRgSCJ6DC1FRXU1VWTyZpkcyZepw2/y4bPaSXgd1G3qIbmUh9leS48TtvY1qwTD2hr1itpmLKIiIjMFG+o4+f1UsePyOHT3t7O0qVLaW1t5b77H2AkkebCi95M0Cji+IvfByX17BqKk9zLkAyfw0JtsY/FcwKcPidAXZFHIZDINJLNmXQNxtncF2FrKMpgLMWemMRpt4537tQXe3E7rKQyOdZt3cVl7/sgXcNJ8iqbwOYgZbjwl9dRMWseySzE01kS6dx+BysbgMtm4HPb8Tls2C05Nqx6llh4GIc3HzOTJDHch99p47LLLmVWdSlNAS91RR7y3HZcduvYYOV9d+8cLA1TFhERkenisAx3PhgKfkQOn30dW5g7t5W//etOetIOHtnYT/dwnA09YXrDib2GQF67hZpiL6fMKmFxS4CGYh/5Hjseh/UNrSoWkcPLNE0GoqnRleihKF1DcfZ8j7dYDKoK3DQGvDSW+Cj0OshkcwxEU2wKjh7J2tIXJZxI0x9JEQoniSQzjMSShPoHMewuDJt9v/8GOK0GPpcVn9NOnsuGzWrFabOQyGRJZnJ47DZ8LhvFXgd51hQ//8KHGNi2FrJpSkoCPLnyOaoryw+qe0dERERkplPwIzJDBINB2traCIVCAAQCATo6OigtLcU0TSLJDAORFBuCYVZsG2RTMMyG3gihcILEXkIgt92gPM/NnHI/p88J8Ka6Ikr8TnxOGzarRa+Wi0yC4XiabX1RtvVH2dEfI71nJTpQ5HXQEPDRWOKlssCNAYTCydFg5yXhznA8Q3AkwUgiTTSZGevcye7naBaYZg6yGfxeF/kuO4VeJx6HFTAwMYmObe/yOmzkuW1UFbqpLnDTFPBTXeTG77TjdozO3hke6GfB/KP2+m+ViIiIiLx+h23Gj4gcOQzDwO+y43fZqS32cGJTCQORJNsHYjy3fZDndw6xoTdCX+TFECieNtnaH2Nrf4z71vZS4LZRX+zj2LoiBp67mx/+76dpb7+WBx98+XwMYDz8UTgk093h+DseTWbY1h9lW1+M7QNREi9JZPwuO/UlXuZV5nF+Wzl2i0HvSJJNoQhbQlEeWh/krlUZhuNpguHUeLgTS2eIJ7OksuZ+j2YBuB0WvFaDvp0biYR24XA6MQwrGcOG4fVT1ToPn8tGqc9J/dixrIaAj0K3A6/LOjpc2Ta6PeuV3TvBYJCzzzqTUCj0su7ExYsXa6iyiIiIyGGg4Edkmthz1OtAnkwZhoHPacPntFFT5GFhbSED0RS7h2Ks7hrm8U39bAyG6YukSGZy5EzI5qA/mqE/OsTKHUO4bbOp+8DP6d78HPPOuASzbyv9oSBzW1tZsmQJ8OLcoWuvvfZVw1MBhT9yxHsjf8cT6Szb+2NsHeveiSVfXCvudtioL/bQGPByZkspTptB93CCzaEoW0IRntjcx7/XZkY7dyIJwvEMkWSGWCpDIpUjmR39/3Z/HNbRfweKvHZK/S6cdgupjEkslSWezhLq7SE2FMLntPOOt11ITYGDH376P9i2bjUf+t6P+Oh7rhoPd2yvYwW6hiqLiIiITCwd9RKZJl463PmVT6auueaaA34yFUtlGIym6B5OsKM/yuOb+1mze4Se4TiRZIZMjld1C+QyKbLhfhjp4eJzz+C01lpObCwiGx3mLRedq3XJMm291kpwX0EROwZio507/dHx41AYBk6bhbpiD/XFXupLvLhsFrYPxNgSirC9P8buoTjxVIaReIZgJMlIPE04kSExtg49nTXJvsa3cJsFvA4rhV4nlXlO8twOMqbJcDxNNJklZ5oYgNdpo7rQTXOZj1kBH+X5LvwuOzf+8bdcdtkSqivLcdoshEKhQxLOqBNQRERE5NDSjB+RGeJQP5lKpLOMxNP0RZIEw0nW9YR5aH2QXYNx+iNJEukcWdN81VEOmwX8ThvVRW4qvBb++cPP07f+achmNMtDpp1NO3ZzynlvJWy4seWX4csr4CMf+SherweXw0p9sZfaIg91xR5yOZMtfVG29EXZ3h9jOJYinsoyFE8RiqSIJDJEkxkS6QyxVJZMziST2//1LQZ4HFYK3A5qitwE/C4MYCiWoi+aIpcbPdpltRiU+p00BbzMKfNTV+yjwGvH67DidtgOqntHRERERKYGBT8i8oZlc6PDoYeiKYLhBBt3dPGl71xDvKARR2EFhssHVhsWixVeFgSZ5DIZcvERUqFtWIa7+PKnPsqZ8+v/f3v3HiRZWd5x/Pucc/o+98vu7MxeWBBFXC+ooIRKCjRB0CSgSCkJCQlaRg3RBCsVEnOpyj9JKoll6W5MTCCC5SVRBLG8RGNZpf+QeAMFFrLIZVl2d2ZnZ+fW13N588fpnZ1tZnYHYXuG7t+nqqt75pzufnvm6bdnnnre52V8oEgh62vbeNnQGlHCwdkqTx2rsH+mwuR8/cRB5/DiOn/35x/i6JOPEM0fYXTiLD7x2buZjbMcnK1SCyMWazHHKg1mKo20aqcRUY0S6mFCGCenrdzxSPvuDBRzbB8qMDFQIPCN2UrEobkq9Sgh/Th39OUz7Bgp8pLNvZy3pY+hYpaeXEAxF5DLpMkd7ZwlIiIi0lmU+BGR591HP/Zx/uiDH+CcF5/HRz51J5/74l1848ePkxs7l4HtLyLx8zTCGGcr/IMZRxRyGYZ7cmwbKnL2aA+v3j7Aq7cPMtST7hSUUdWBtEmcOCbnaxw4VuXp2QpPH6vSiJI0gekcge8xMVBg+3CRbYMFHLD/aIUnZyrs3T/F7Xd8mpmZoxT7h6HQTxwUKPQPM7h5K2ECjdgRJe60PXc8oJj1GOrJsWOoyLahIr7nMVcJeXq2QrnZ4DlxjnzgsXWoyDmjPbx8vI9N/fmlvl35TNpcORt4+J6SOyIiIiLdQIkfETkjji8tGxkZ5fEDB7n8jZfx2KP7GBgawRscJ564gOzYORRHJsgPjlGPHM65loqgVOBBLvDSZNBgkV3jfbzmrCFevrWf3nyGvJagyM+pESVLiZ0DxyocnqsRLsvCeAZjfXm2DhYZH8gT+MbkXJ0nZ8rsn6mwUI2ohzFztZDpcp25StpIuR5GzC+WqVTr+JkcBNnTjsW3dFeuTX05dg4XmRgokjiXNlefq1GuRzjS5E7GN7b0FzhnNN3Ba+tQid5lyZ2slmaJiIiISJMSPyLSFlNTU+zatYsjR44AMDwyyvXvfj+X/tq1HEsK/PipWZ6YmuPxQ0exfA+VRkKcrL61dMYzchmP/mKGzb15do6UeOXWAc4f72PnSIk7bv0XrnvHOxgb27z0/GoQ230WaiFPz1Z5+liVg7NVjiw2Tjqe8Yyx/jwTAwVGe9Lmxofmajw1U+XgXJV6I6YWJsxWG8yUG8xVQyqNmEYU04gS6lFCI3anjNXl8r6RSaq87Kxxdo6U6CsEVMKEowt1JhfqVJrJHecc2cBjrC/PztEezh/rYdtwid78ib472eayrGyg5I6IiIiIrE6JHxFpi9bEz/FGziMjo1TCmHIt5Gi5weRCjSenK+ybWmR6oc5MucHh+Rqz1bTR7ama2XoGGd/DRXUWjxwkGy5y5Rsu4VXjvfzjH7+LfT/5AR/56Mf4wB/ctO7LXLpt56Ln+/XGiePoYp3J+TqH52tMzteYXqw/Y8lUby5gYjBN6pgZ5UbEodkaB+eqLFQjwjim0kg4VmkwvVinXI+oNmLqUUKUJDQiR5QkxCvsWLeSrG8MlrKM9xXYMZxnsJTH80h331qoMV9Nd946/lilrM9Yf56zRkq8aFMP24aK9OczlLIB+eyJyh0tbxQRERGRn5cSPyJyxp1uW+vlu3g556iFCdXmrmHHKg0OHKuyb3KB/TMVGlHCkYUak/N1jlUaVMNTJ4NckuCSGBfW8YkZGR6it5hjuJTlnNEedk30ceFZQ4z1F5YqKM708pg9e/Zw0003Lb1+YOnns3v37o5L/qz19TqXNgmfXkyTMNMLdaYX68yUQ+KWzyPPYKQnx2hPllzgETuoNmKOLNaZmq83tzRPWKxHzJTTap1KPW7GS0IcJ4SJI4wTwgTW+nGX842BUjbt6zNUpC+fIfCMchhzrNxgvhayWIuWKoBygUdPPmDbYJGdIyV2jpYY6zvRcycbeG2LOxERERHpTkr8iMgZ91wTHUniqEUxlUbMXCVkeqHO3sMLPHpkgflqhGdQaaQ7I03N1zhablALY8IowbxT/zPtmxF4RjawpV3EitmAiYE8W4eKnD1S4rwtvWwdKNJfzBJ4RsZ/bo1xn00ibD0dr9L5whe+wLXXXguwdHst1TpJ4lioRex76hDXv+v32H94hv7NE1iuh0qYMDoywg033ECxVFq6T0/OZ6iYbe7mlm5XXgvjpeRNI0oI45jFRsyxcpoUqoYx1UZMGCdEcULiHGGcXhK3tkodSJNJ/YUsm/tybB3IM1DKkQs8PIxqGLNQCyk34rQqKIwxIJfxKWZ9RntyzQbPRXaMFBgs5ihlfXLNfjtZP714aqgsIiIiIm2mxI+ItMWZWOpz/B/+crOq49GpBR6fLnN4vka5XOaez99BrRES9I6QH93O8LYXUY3ShMBaZzffW54c8pq7IqXX/YUMvYUMm3tzbO7LM9qbo7+Qpa8Q0F/ILF368gFeSwJqpaVvN998MzfeeOOGWP61e/cePnDzh9g8vo0jx+bZ+eKXYtkCByaPMrhpnPlayNXXXscFr70I40RP7taPjVLOp5QNKC8u8BcfvoXF+XnA6B0c4T0334IL8sSJoxElLNQiZippg+R6lFCPYhpxQpKkPXTCOEl3wErgFEVeK8oFHoPNflCjfTmKGZ9s4ON5aYKqGqbLu8r1tDlzGDsyvkch61HI+AwUsowP5NnSX2DrUIHx/gKlXEChucvc8V47672EUERERESklRI/ItJRGlHCUwcP8ZY3/QqPPLyXofGzsKFtNPJDDG3ZweVXX0uxWCIwIzFYqIZpf5hynflqWskRP8usgjUvvp8miDKekQk8Ai+t8Ag8ozcf0JcPKOUy5DMeSVjn7v/4NNWFeQCy2SyNsMHw8CjX/eb1GPDvt/4ri4uLXH7FlVx44WupVirsfehBXnfR6zADzzM8s2WJFyOK0940y600lbuTjrtmQ+H0+waUy2U+c/utTB0+hOFIogiXxHie4ZxjdPM417/7fQS5ArUwJnHpblNxnC7Tm62EzNcjKo2IRuSoNUImD0/izMN8H/N8svlSer9n9+M+SSnrM1jMMNyTo6+QodCssPEAZ0aSJHhm1KKESj2i3BxPNjDyGZ984JPPeAyXsmzqS5s8bxsqMtKbpZQNyPgemWbFznOt9BIRERERWQ9K/IhIx2ldWuac47LL3sDevQ/xN//wUX7jd97NdLnOY1Nlnjha5vB8nUazUZCRVoeYkVaANCJmyyELtZD5WloNUmvEhGvcxWlVSdxMyDhwDudiaPYjMpfg4pAkCjEcm7dM4HkeRw4doF6rMLp5C8PDw3hemojwzZrXJxJAnpcmhDAw0tvLR+wcaX+b2BEmCWGUVtNEiSOK0x3VojhmfnYuvZfvg/mYGeZ5eH7mub3+VWR9Y6CYpb8Q0JtPEzm5jE/Gs6WkS+IgF6S3a1FCpXFiqZfvGbnAIxf4zQotj958htGeHFv6C0wM5hnrz6dJnWbT5IyfLt8LPMNMiR0RERER6SxK/IhIR1rr0jLnHI04oRGll1oYMzlf57HpRQ7NpbtFLdQiWu5EKRcQeB71KGahllaSVBsntviuhjG1MG0mHEYJjTg5ZRPqTuJb2qunJ5+hkAlYODrJ4/sepJjPc9HFv4Bvxr3f+w4L83PseuVrOO+8lzSTbUYjTqiFCfUwbi7JSz+HMs2lVLnmxczoyfkMl3Js6s0z1p8utxsqZckGPhk/TRRlVKkjIiIiIl1OiR8RkVNIkrQiJordUoVMpRFxaLbKgdkqB49VmVqos1iPTqqASStsAOfSihXfw2DpcR746f2MbT8bP5MjShzlao0DB57i6QMHiGIHfkCQzYPnkTT3KPf9gO1nn4Pn+UvLs44vsXKJI3Yurcghrfw5UbxieMZSBRCAh+H7Hr6ly8V8Lz3neKVQHIXsfeA+KuVy+lqSOH0kl5BEIaVSkUt+8VJKxQKBZwS+h2fN8SQJ9cjRiNP7JA6eeHQfmya2Uiyk5ydhjacf/xnnv+KVeGY40mVb/YUMg8Ucwz1ZRnqyjPTkGCxmyAQ+gWf4vpHxPILmsjpV6IiIiIiInNqpEj9BuwcjIrLReJ6R83xyJ82IOXYMl046L05cuk14c7lUHKfXjSg+sT35Yp2ZcoOFWkTPha+hXI8Im0mdgoX88KH/ZXHmKPlCAYDFWhUzD5ckYEY+X2DXxbsoFktpgsdIr4835jlpByu31NvH0Vzmtex40jy4dE7zWOIciXPs2/sz5p98mFw+T61aprenF0ti5uZmKBRKzE7vZ3rHBCOvuODEz6pZhdOTC+gtBPQXsvQXAwbyWQbe9BIGihlyGX9paZrnXbx0O2gu5VIiR0RERESkfZT4ERFZI98zfM9f8djEYHHV+yVJmmjZs2cPn/zKxznvpefz1W98kyNT0/zSJRfRaDQolXrIFwpMzszwnUPf57bP3knPwBD1KKYeueZ1Qhy7pYoeOOlm+vVJx4xMYEs7UuWC40upmtuPv+V8Pn3bLFdfcw1fuetLXPXWa/DN+PLdd/K2a97O3V/6Iu97/w141qwUMtNW5SIiIiIiLzBa6iUi0kbL+xIdb1A9NjbG/fffD8Bll13GQw89xO7du9dli3cREREREXnhUY8fEZENaq0NqkVERERERFajxI+IiIiIiIiISIc6VeLHa/dgRERERERERESkPZT4ERERERERERHpUEr8iIiIiIiIiIh0KCV+REREREREREQ6lBI/IiIiIiIiIiIdSokfEREREREREZEOpcSPiIiIiIiIiEiHUuJHRERERERERKRDKfEjIiIiIiIiItKhlPgREREREREREelQSvyIiIiIiIiIiHQoc86178nMjgBPtunpRoDpNj2XbHyKB2mlmJBWiglppZiQVooJaaWYkFaKCVmunfGwwzk3utKBtiZ+2snMfuCce+16j0M2BsWDtFJMSCvFhLRSTEgrxYS0UkxIK8WELLdR4kFLvUREREREREREOpQSPyIiIiIiIiIiHaqTEz+fXO8ByIaieJBWiglppZiQVooJaaWYkFaKCWmlmJDlNkQ8dGyPHxERERERERGRbtfJFT8iIiIiIiIiIl2tIxI/Zvb3Zvawmf3EzO4ys4FVzrvCzB4xs0fN7JY2D1PayMyuNbMHzSwxs1W7qJvZE2b2UzO7z8x+0M4xSns9i5jQPNElzGzIzL5lZvua14OrnKd5osOd7n1vqY81j//EzF69HuOU9lhDPFxqZnPNOeE+M/vL9RintI+Z3WZmU2b2wCrHNUd0mTXEhOaJLmJm28zsO2a2t/n/xgdXOGdd54mOSPwA3wJ2OedeAfwf8KetJ5iZD+wBrgTOB64zs/PbOkpppweAtwHfXcO5lznnXrURttmTM+q0MaF5ouvcAnzbOXcu8O3m16vRPNGh1vi+vxI4t3l5D/CJtg5S2uZZfA58rzknvMo599dtHaSsh08BV5ziuOaI7vMpTh0ToHmim0TAh5xzLwVeD/z+RvtboiMSP865bzrnouaX9wJbVzjtIuBR59xjzrkG8HngqnaNUdrLObfXOffIeo9DNo41xoTmie5yFXB78/btwNXrNxRZR2t5318F3OFS9wIDZral3QOVttDngDyDc+67wMwpTtEc0WXWEBPSRZxzh5xzP2reXgD2AhMtp63rPNERiZ8WNwJfX+H7E8BTy74+wDN/GdJ9HPBNM/uhmb1nvQcj607zRHfZ7Jw7BOkHNrBplfM0T3S2tbzvNTd0j7X+ri82s/vN7Otm9rL2DE02MM0RshLNE13IzM4CLgD+p+XQus4TQbue6Lkys/8GxlY49GHn3Jeb53yYtMzqMys9xArf05ZmL2BriYk1uMQ5d9DMNgHfMrOHmxl8eQF6HmJC80SHOVVMPIuH0TzR2dbyvtfc0D3W8rv+EbDDObdoZm8G7iYt3ZfupTlCWmme6EJm1gPcCfyhc26+9fAKd2nbPPGCSfw45375VMfN7AbgV4E3upX3qD8AbFv29Vbg4PM3Qmm308XEGh/jYPN6yszuIi3x1j90L1DPQ0xonugwp4oJM5s0sy3OuUPNUtupVR5D80RnW8v7XnND9zjt73r5H/POua+Z2T+Z2YhzbrpNY5SNR3OEnETzRPcxswxp0uczzrkvrXDKus4THbHUy8yuAP4E+HXnXGWV074PnGtmO80sC7wTuKddY5SNx8xKZtZ7/DZwOWkDYOlemie6yz3ADc3bNwDPqArTPNEV1vK+vwf47eaOHK8H5o4vE5SOc9p4MLMxM7Pm7YtI/54+2vaRykaiOUJOonmiuzR/17cCe51zH1nltHWdJ14wFT+nsRvIkZbgA9zrnHuvmY0D/+ace7NzLjKzm4D/AnzgNufcg+s3ZDmTzOytwMeBUeCrZnafc+5Ny2MC2Azc1YyZAPisc+4b6zZoOaPWEhOaJ7rO3wL/aWbvAvYD1wJonuguq73vzey9zeP/DHwNeDPwKFABfne9xitn1hrj4e3A+8wsAqrAO1epNpcOYWafAy4FRszsAPBXQAY0R3SrNcSE5onucgnwW8BPzey+5vf+DNgOG2OeMMWfiIiIiIiIiEhn6oilXiIiIiIiIiIi8kxK/IiIiIiIiIiIdCglfkREREREREREOpQSPyIiIiIiIiIiHUqJHxERERERERGRDqXEj4iIiIiIiIhIh1LiR0RERERERESkQynxIyIiIiIiIiLSof4fzWYGI23ppsUAAAAASUVORK5CYII=\n", "text/plain": [ "
" ] }, "metadata": { "needs_background": "light" }, "output_type": "display_data" } ], "source": [ "## generate test points for prediction\n", "xx = np.linspace(-2.1, 2.1, 100).reshape(100, 1) # test points must be of shape (N, D)\n", "\n", "## predict mean and variance of latent GP at test points\n", "mean, var = model.predict_f(xx)\n", "\n", "## generate 10 samples from posterior\n", "tf.random.set_seed(1) # for reproducibility\n", "samples = model.predict_f_samples(xx, 10) # shape (10, 100, 1)\n", "\n", "## plot\n", "plt.figure()\n", "plt.plot(X_sampled, Y_sampled, \"kx\", mew=2)\n", "plt.plot(xx, mean, \"C0\", lw=2)\n", "plt.fill_between(\n", " xx[:, 0],\n", " mean[:, 0] - 1.96 * np.sqrt(var[:, 0]),\n", " mean[:, 0] + 1.96 * np.sqrt(var[:, 0]),\n", " color=\"C0\",\n", " alpha=0.2,\n", ")\n", "plt.plot(xx, samples[:, :, 0].numpy().T, \"C0\", linewidth=0.5)\n", "#plt.plot(X, Y, color = 'darkorange', lw = 2)\n", "_ = plt.xlim(-2.1, 2.1)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## CasADi part" ] }, { "cell_type": "code", "execution_count": 23, "metadata": {}, "outputs": [], "source": [ "# Package the resulting regression model in a CasADi callback\n", "class GPR(cs.Callback):\n", " def __init__(self, name, opts={}):\n", " cs.Callback.__init__(self)\n", " self.construct(name, opts)\n", "\n", " def eval(self, arg):\n", " [mean, _] = model.predict_f(np.array(arg[0]))\n", " return [mean.numpy()]" ] }, { "cell_type": "code", "execution_count": 24, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "GPR:(i0)->(o0) CallbackInternal\n" ] } ], "source": [ "# Instantiate the Callback (make sure to keep a reference to it!)\n", "gpr = GPR('GPR', {\"enable_fd\":True})\n", "print(gpr)" ] }, { "cell_type": "code", "execution_count": 25, "metadata": {}, "outputs": [], "source": [ "# Find the minimum of the regression model\n", "x = cs.MX.sym(\"x\")\n", "y = 2 * gpr(x) + 5\n", "f = cs.Function('f', [x], [y])" ] }, { "cell_type": "code", "execution_count": 26, "metadata": {}, "outputs": [], "source": [ "prob = {\"x\":x,\"f\":f(x)}\n", "options = {\"ipopt\": {\"hessian_approximation\": \"limited-memory\", \"max_iter\": 500,\n", " \"acceptable_tol\": 1e-5,\n", " #\"linear_solver\": \"ma27\",\n", " \"acceptable_obj_change_tol\": 1e-3, \n", " #\"mu_strategy\": \"adaptive\",\n", " #\"expect_infeasible_problem\": \"yes\"\n", " }}" ] }, { "cell_type": "code", "execution_count": 27, "metadata": { "scrolled": true, "tags": [] }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "\n", "******************************************************************************\n", "This program contains Ipopt, a library for large-scale nonlinear optimization.\n", " Ipopt is released as open source code under the Eclipse Public License (EPL).\n", " For more information visit https://github.com/coin-or/Ipopt\n", "******************************************************************************\n", "\n", "This is Ipopt version 3.13.4, running with linear solver mumps.\n", "NOTE: Other linear solvers might be more efficient (see Ipopt documentation).\n", "\n", "Number of nonzeros in equality constraint Jacobian...: 0\n", "Number of nonzeros in inequality constraint Jacobian.: 0\n", "Number of nonzeros in Lagrangian Hessian.............: 0\n", "\n", "Total number of variables............................: 1\n", " variables with only lower bounds: 0\n", " variables with lower and upper bounds: 1\n", " variables with only upper bounds: 0\n", "Total number of equality constraints.................: 0\n", "Total number of inequality constraints...............: 0\n", " inequality constraints with only lower bounds: 0\n", " inequality constraints with lower and upper bounds: 0\n", " inequality constraints with only upper bounds: 0\n", "\n", "iter objective inf_pr inf_du lg(mu) ||d|| lg(rg) alpha_du alpha_pr ls\n", " 0 5.2185392e+00 0.00e+00 6.31e+00 0.0 0.00e+00 - 0.00e+00 0.00e+00 0\n", " 1 1.5930584e+00 0.00e+00 8.18e+00 0.6 3.15e+00 - 1.00e+00 3.14e-01f 2\n", " 2 1.6377785e+00 0.00e+00 4.42e+00 0.1 3.92e-01 - 9.65e-01 1.00e+00f 1\n", " 3 1.1959517e+00 0.00e+00 9.05e-01 -0.3 1.66e-01 - 1.00e+00 1.00e+00f 1\n", " 4 1.1710756e+00 0.00e+00 3.25e-01 -1.9 6.06e-02 - 9.97e-01 1.00e+00f 1\n", " 5 1.1692273e+00 0.00e+00 1.40e-02 -3.1 1.30e-02 - 1.00e+00 1.00e+00f 1\n", " 6 1.1692228e+00 0.00e+00 1.75e-03 -5.1 5.85e-04 - 1.00e+00 1.00e+00f 1\n", " 7 1.1692228e+00 0.00e+00 2.02e-04 -7.2 8.31e-05 - 1.00e+00 5.00e-01f 2\n", " 8 1.1692228e+00 0.00e+00 1.90e-04 -9.3 4.30e-06 - 1.00e+00 1.00e+00f 1\n", " 9 1.1692228e+00 0.00e+00 1.81e-04 -9.4 6.80e-05 - 1.00e+00 1.25e-01f 4\n", "iter objective inf_pr inf_du lg(mu) ||d|| lg(rg) alpha_du alpha_pr ls\n", " 10 1.1692228e+00 0.00e+00 1.16e-04 -11.0 4.15e-06 - 1.00e+00 3.12e-02f 6\n", " 11 1.1692228e+00 0.00e+00 1.03e-03 -11.0 2.30e-07 - 1.00e+00 4.88e-04f 12\n", " 12 1.1692228e+00 0.00e+00 2.92e-04 -11.0 2.04e-06 - 1.00e+00 5.00e-01f 2\n", " 13 1.1692228e+00 0.00e+00 1.59e-04 -11.0 2.26e-07 - 1.00e+00 6.25e-02f 5\n", " 14 1.1692228e+00 0.00e+00 3.75e-04 -11.0 1.67e-08 - 1.00e+00 9.77e-04f 11\n", " 15 1.1692228e+00 0.00e+00 7.62e-04 -11.0 1.15e-11 - 1.00e+00 1.25e-01f 4\n", " 16 1.1692228e+00 0.00e+00 7.62e-04 -11.0 9.62e-13 - 1.00e+00 3.05e-05f 16\n", " 17 1.1692228e+00 0.00e+00 7.62e-04 -11.0 9.62e-13 - 1.00e+00 3.05e-05f 16\n", " 18 1.1692228e+00 0.00e+00 7.62e-04 -11.0 9.62e-13 - 1.00e+00 3.05e-05f 16\n", " 19 1.1692228e+00 0.00e+00 7.62e-04 -11.0 7.62e-04 - 1.00e+00 5.68e-14f 45\n", "iter objective inf_pr inf_du lg(mu) ||d|| lg(rg) alpha_du alpha_pr ls\n", " 20 1.1692297e+00 0.00e+00 1.88e-02 -11.0 7.62e-04 - 1.00e+00 1.00e+00w 1\n", " 21 1.1692228e+00 0.00e+00 1.75e-03 -11.0 7.32e-04 - 1.00e+00 1.00e+00w 1\n", " 22 1.1692228e+00 0.00e+00 8.89e-05 -11.0 7.51e-05 - 1.00e+00 1.00e+00w 1\n", " 23 1.1692297e+00 0.00e+00 1.88e-02 -11.0 4.01e-06 - 1.00e+00 1.00e+00S 21\n", " 24 1.1692228e+00 0.00e+00 3.82e-04 -11.0 8.11e-04 - 1.00e+00 1.00e+00f 1\n", " 25 1.1692228e+00 0.00e+00 1.50e-03 -11.0 1.68e-05 - 1.00e+00 1.53e-05f 17\n", " 26 1.1692228e+00 0.00e+00 1.08e-03 -11.0 2.04e-10 - 1.00e+00 2.44e-04f 13\n", " 27 1.1692228e+00 0.00e+00 1.68e-03 -11.0 1.30e-13 - 1.00e+00 5.00e-01f 2\n", " 28 1.1692228e+00 0.00e+00 1.68e-03 -11.0 2.01e-13 - 1.00e+00 2.44e-04f 13\n", " 29 1.1692228e+00 0.00e+00 1.68e-03 -11.0 2.01e-13 - 1.00e+00 2.44e-04f 13\n", "iter objective inf_pr inf_du lg(mu) ||d|| lg(rg) alpha_du alpha_pr ls\n", " 30 1.1692228e+00 0.00e+00 1.14e-03 -11.0 1.68e-03 - 1.00e+00 3.12e-02f 6\n", " 31 1.1692228e+00 0.00e+00 9.00e-04 -11.0 2.12e-05 - 1.00e+00 1.25e-01f 4\n", " 32 1.1692228e+00 0.00e+00 7.20e-04 -11.0 9.88e-06 - 1.00e+00 1.46e-11f 37\n", " 33 1.1692228e+00 0.00e+00 9.00e-04 -11.0 7.91e-06 - 1.00e+00 1.46e-11f 37\n", " 34 1.1692228e+00 0.00e+00 7.20e-04 -11.0 9.88e-06 - 1.00e+00 1.46e-11f 37\n", " 35 1.1692290e+00 0.00e+00 1.62e-02 -11.0 7.20e-04 - 1.00e+00 1.00e+00w 1\n", " 36 1.1692228e+00 0.00e+00 2.09e-04 -11.0 6.90e-04 - 1.00e+00 1.00e+00w 1\n", " 37 1.1692228e+00 0.00e+00 6.97e-04 -11.0 8.81e-06 - 1.00e+00 1.00e+00w 1\n", " 38 1.1692290e+00 0.00e+00 1.62e-02 -11.0 6.77e-06 - 1.00e+00 1.00e+00S 21\n", " 39 1.1692228e+00 0.00e+00 7.21e-04 -11.0 7.12e-04 - 1.00e+00 1.00e+00f 1\n", "iter objective inf_pr inf_du lg(mu) ||d|| lg(rg) alpha_du alpha_pr ls\n", " 40 1.1692228e+00 0.00e+00 7.47e-04 -11.0 3.32e-05 - 1.00e+00 2.50e-01f 3\n", " 41 1.1692228e+00 0.00e+00 7.67e-04 -11.0 4.22e-06 - 1.00e+00 1.25e-01f 4\n", " 42 1.1692228e+00 0.00e+00 8.97e-04 -11.0 4.34e-06 - 1.00e+00 1.95e-03f 10\n", " 43 1.1692228e+00 0.00e+00 8.30e-05 -11.0 4.56e-09 - 1.00e+00 3.12e-02f 6\n", " 44 1.1692228e+00 0.00e+00 4.84e-05 -11.0 1.46e-11 - 1.00e+00 1.53e-05f 17\n", " 45 1.1692228e+00 0.00e+00 9.61e-04 -11.0 8.47e-12 - 1.00e+00 7.81e-03f 8\n", " 46 1.1692228e+00 0.00e+00 2.04e-03 -11.0 6.30e-14 - 1.00e+00 7.81e-03f 8\n", " 47 1.1692228e+00 0.00e+00 1.02e-03 -11.0 1.34e-13 - 1.00e+00 1.25e-01f 4\n", " 48 1.1692228e+00 0.00e+00 1.23e-03 -11.0 6.67e-14 - 1.00e+00 1.56e-02f 7\n", " 49 1.1692228e+00 0.00e+00 1.23e-03 -11.0 1.23e-03 - 1.00e+00 2.84e-14f 46\n", "iter objective inf_pr inf_du lg(mu) ||d|| lg(rg) alpha_du alpha_pr ls\n", " 50 1.1692408e+00 0.00e+00 2.95e-02 -11.0 1.23e-03 - 1.00e+00 1.00e+00w 1\n", " 51 1.1692228e+00 0.00e+00 3.20e-03 -11.0 1.18e-03 - 1.00e+00 1.00e+00w 1\n", " 52 1.1692229e+00 0.00e+00 1.18e-03 -11.0 1.44e-04 - 1.00e+00 1.00e+00w 1\n", " 53 1.1692228e+00 0.00e+00 1.23e-03 -11.0 3.87e-05 - 1.00e+00 2.84e-14f 45\n", " 54 1.1692228e+00 0.00e+00 1.23e-03 -11.0 4.03e-05 - 1.00e+00 9.09e-13f 41\n", " 55 1.1692228e+00 0.00e+00 1.23e-03 -11.0 4.03e-05 - 1.00e+00 9.09e-13f 41\n", " 56 1.1692228e+00 0.00e+00 1.23e-03 -11.0 1.23e-03 - 1.00e+00 2.84e-14f 46\n", " 57 1.1692228e+00 0.00e+00 1.23e-03 -11.0 1.23e-03 - 1.00e+00 2.84e-14f 46\n", " 58 1.1692228e+00 0.00e+00 1.23e-03 -11.0 1.23e-03 - 1.00e+00 2.84e-14f 46\n", " 59 1.1692228e+00 0.00e+00 1.23e-03 -11.0 1.23e-03 - 1.00e+00 2.84e-14f 46\n", "iter objective inf_pr inf_du lg(mu) ||d|| lg(rg) alpha_du alpha_pr ls\n", " 60 1.1692228e+00 0.00e+00 1.23e-03 -11.0 1.23e-03 - 1.00e+00 2.84e-14f 46\n", " 61 1.1692228e+00 0.00e+00 1.23e-03 -11.0 1.23e-03 - 1.00e+00 2.84e-14f 46\n", " 62 1.1692228e+00 0.00e+00 1.23e-03 -11.0 1.23e-03 - 1.00e+00 2.84e-14f 46\n", " 63 1.1692408e+00 0.00e+00 2.95e-02 -11.0 1.23e-03 - 1.00e+00 1.00e+00w 1\n", " 64 1.1692228e+00 0.00e+00 3.20e-03 -11.0 1.18e-03 - 1.00e+00 1.00e+00w 1\n", " 65 1.1692229e+00 0.00e+00 1.18e-03 -11.0 1.44e-04 - 1.00e+00 1.00e+00w 1\n", " 66 1.1692228e+00 0.00e+00 1.23e-03 -11.0 3.87e-05 - 1.00e+00 2.84e-14f 45\n", " 67 1.1692228e+00 0.00e+00 1.23e-03 -11.0 4.03e-05 - 1.00e+00 9.09e-13f 41\n", " 68 1.1692228e+00 0.00e+00 1.23e-03 -11.0 4.03e-05 - 1.00e+00 9.09e-13f 41\n", " 69 1.1692228e+00 0.00e+00 1.23e-03 -11.0 1.23e-03 - 1.00e+00 2.84e-14f 46\n", "iter objective inf_pr inf_du lg(mu) ||d|| lg(rg) alpha_du alpha_pr ls\n", " 70 1.1692228e+00 0.00e+00 1.23e-03 -11.0 1.23e-03 - 1.00e+00 2.84e-14f 46\n", " 71 1.1692228e+00 0.00e+00 1.23e-03 -11.0 1.23e-03 - 1.00e+00 2.84e-14f 46\n", " 72 1.1692228e+00 0.00e+00 1.23e-03 -11.0 1.23e-03 - 1.00e+00 2.84e-14f 46\n", " 73 1.1692228e+00 0.00e+00 1.23e-03 -11.0 1.23e-03 - 1.00e+00 2.84e-14f 46\n", " 74 1.1692228e+00 0.00e+00 1.23e-03 -11.0 1.23e-03 - 1.00e+00 2.84e-14f 46\n", " 75 1.1692228e+00 0.00e+00 1.23e-03 -11.0 1.23e-03 - 1.00e+00 2.84e-14f 46\n", " 76 1.1692408e+00 0.00e+00 2.95e-02 -11.0 1.23e-03 - 1.00e+00 1.00e+00w 1\n", " 77 1.1692228e+00 0.00e+00 3.20e-03 -11.0 1.18e-03 - 1.00e+00 1.00e+00w 1\n", " 78 1.1692229e+00 0.00e+00 1.18e-03 -11.0 1.44e-04 - 1.00e+00 1.00e+00w 1\n", " 79 1.1692228e+00 0.00e+00 1.23e-03 -11.0 3.87e-05 - 1.00e+00 2.84e-14f 45\n", "iter objective inf_pr inf_du lg(mu) ||d|| lg(rg) alpha_du alpha_pr ls\n", " 80 1.1692228e+00 0.00e+00 1.23e-03 -11.0 4.03e-05 - 1.00e+00 9.09e-13f 41\n", " 81 1.1692228e+00 0.00e+00 1.23e-03 -11.0 4.03e-05 - 1.00e+00 9.09e-13f 41\n", " 82 1.1692228e+00 0.00e+00 1.23e-03 -11.0 1.23e-03 - 1.00e+00 2.84e-14f 46\n", " 83 1.1692228e+00 0.00e+00 1.23e-03 -11.0 1.23e-03 - 1.00e+00 2.84e-14f 46\n", " 84 1.1692228e+00 0.00e+00 1.23e-03 -11.0 1.23e-03 - 1.00e+00 2.84e-14f 46\n", " 85 1.1692228e+00 0.00e+00 1.23e-03 -11.0 1.23e-03 - 1.00e+00 2.84e-14f 46\n", " 86 1.1692228e+00 0.00e+00 1.23e-03 -11.0 1.23e-03 - 1.00e+00 2.84e-14f 46\n", " 87 1.1692228e+00 0.00e+00 1.23e-03 -11.0 1.23e-03 - 1.00e+00 2.84e-14f 46\n", " 88 1.1692228e+00 0.00e+00 1.23e-03 -11.0 1.23e-03 - 1.00e+00 2.84e-14f 46\n", " 89 1.1692408e+00 0.00e+00 2.95e-02 -11.0 1.23e-03 - 1.00e+00 1.00e+00w 1\n", "iter objective inf_pr inf_du lg(mu) ||d|| lg(rg) alpha_du alpha_pr ls\n", " 90 1.1692228e+00 0.00e+00 3.20e-03 -11.0 1.18e-03 - 1.00e+00 1.00e+00w 1\n", " 91 1.1692229e+00 0.00e+00 1.18e-03 -11.0 1.44e-04 - 1.00e+00 1.00e+00w 1\n", " 92 1.1692228e+00 0.00e+00 1.23e-03 -11.0 3.87e-05 - 1.00e+00 2.84e-14f 45\n", " 93 1.1692228e+00 0.00e+00 1.23e-03 -11.0 4.03e-05 - 1.00e+00 9.09e-13f 41\n", " 94 1.1692228e+00 0.00e+00 1.23e-03 -11.0 4.03e-05 - 1.00e+00 9.09e-13f 41\n", " 95 1.1692228e+00 0.00e+00 1.23e-03 -11.0 1.23e-03 - 1.00e+00 2.84e-14f 46\n", " 96 1.1692228e+00 0.00e+00 1.23e-03 -11.0 1.23e-03 - 1.00e+00 2.84e-14f 46\n", " 97 1.1692228e+00 0.00e+00 1.23e-03 -11.0 1.23e-03 - 1.00e+00 2.84e-14f 46\n", " 98 1.1692228e+00 0.00e+00 1.23e-03 -11.0 1.23e-03 - 1.00e+00 2.84e-14f 46\n", " 99 1.1692228e+00 0.00e+00 1.23e-03 -11.0 1.23e-03 - 1.00e+00 2.84e-14f 46\n", "iter objective inf_pr inf_du lg(mu) ||d|| lg(rg) alpha_du alpha_pr ls\n", " 100 1.1692228e+00 0.00e+00 1.23e-03 -11.0 1.23e-03 - 1.00e+00 2.84e-14f 46\n", " 101 1.1692228e+00 0.00e+00 1.23e-03 -11.0 1.23e-03 - 1.00e+00 2.84e-14f 46\n", " 102 1.1692408e+00 0.00e+00 2.95e-02 -11.0 1.23e-03 - 1.00e+00 1.00e+00w 1\n", " 103 1.1692228e+00 0.00e+00 3.20e-03 -11.0 1.18e-03 - 1.00e+00 1.00e+00w 1\n", " 104 1.1692229e+00 0.00e+00 1.18e-03 -11.0 1.44e-04 - 1.00e+00 1.00e+00w 1\n", " 105 1.1692228e+00 0.00e+00 1.23e-03 -11.0 3.87e-05 - 1.00e+00 2.84e-14f 45\n", " 106 1.1692228e+00 0.00e+00 1.23e-03 -11.0 4.03e-05 - 1.00e+00 9.09e-13f 41\n", " 107 1.1692228e+00 0.00e+00 1.23e-03 -11.0 4.03e-05 - 1.00e+00 9.09e-13f 41\n", " 108 1.1692228e+00 0.00e+00 1.23e-03 -11.0 1.23e-03 - 1.00e+00 2.84e-14f 46\n", " 109 1.1692228e+00 0.00e+00 1.23e-03 -11.0 1.23e-03 - 1.00e+00 2.84e-14f 46\n", "iter objective inf_pr inf_du lg(mu) ||d|| lg(rg) alpha_du alpha_pr ls\n", " 110 1.1692228e+00 0.00e+00 1.23e-03 -11.0 1.23e-03 - 1.00e+00 2.84e-14f 46\n", " 111 1.1692228e+00 0.00e+00 1.23e-03 -11.0 1.23e-03 - 1.00e+00 2.84e-14f 46\n", " 112 1.1692228e+00 0.00e+00 1.23e-03 -11.0 1.23e-03 - 1.00e+00 2.84e-14f 46\n", " 113 1.1692228e+00 0.00e+00 1.23e-03 -11.0 1.23e-03 - 1.00e+00 2.84e-14f 46\n", " 114 1.1692228e+00 0.00e+00 1.23e-03 -11.0 1.23e-03 - 1.00e+00 2.84e-14f 46\n", " 115 1.1692408e+00 0.00e+00 2.95e-02 -11.0 1.23e-03 - 1.00e+00 1.00e+00w 1\n", " 116 1.1692228e+00 0.00e+00 3.20e-03 -11.0 1.18e-03 - 1.00e+00 1.00e+00w 1\n", " 117 1.1692229e+00 0.00e+00 1.18e-03 -11.0 1.44e-04 - 1.00e+00 1.00e+00w 1\n", " 118 1.1692228e+00 0.00e+00 1.23e-03 -11.0 3.87e-05 - 1.00e+00 2.84e-14f 45\n", " 119 1.1692228e+00 0.00e+00 1.23e-03 -11.0 4.03e-05 - 1.00e+00 9.09e-13f 41\n", "iter objective inf_pr inf_du lg(mu) ||d|| lg(rg) alpha_du alpha_pr ls\n", " 120 1.1692228e+00 0.00e+00 1.23e-03 -11.0 4.03e-05 - 1.00e+00 9.09e-13f 41\n", " 121 1.1692228e+00 0.00e+00 1.23e-03 -11.0 1.23e-03 - 1.00e+00 2.84e-14f 46\n", " 122 1.1692228e+00 0.00e+00 1.23e-03 -11.0 1.23e-03 - 1.00e+00 2.84e-14f 46\n", " 123 1.1692228e+00 0.00e+00 1.23e-03 -11.0 1.23e-03 - 1.00e+00 2.84e-14f 46\n", " 124 1.1692228e+00 0.00e+00 1.23e-03 -11.0 1.23e-03 - 1.00e+00 2.84e-14f 46\n", " 125 1.1692228e+00 0.00e+00 1.23e-03 -11.0 1.23e-03 - 1.00e+00 2.84e-14f 46\n", " 126 1.1692228e+00 0.00e+00 1.23e-03 -11.0 1.23e-03 - 1.00e+00 2.84e-14f 46\n", " 127 1.1692228e+00 0.00e+00 1.23e-03 -11.0 1.23e-03 - 1.00e+00 2.84e-14f 46\n", " 128 1.1692408e+00 0.00e+00 2.95e-02 -11.0 1.23e-03 - 1.00e+00 1.00e+00w 1\n", " 129 1.1692228e+00 0.00e+00 3.20e-03 -11.0 1.18e-03 - 1.00e+00 1.00e+00w 1\n", "iter objective inf_pr inf_du lg(mu) ||d|| lg(rg) alpha_du alpha_pr ls\n", " 130 1.1692229e+00 0.00e+00 1.18e-03 -11.0 1.44e-04 - 1.00e+00 1.00e+00w 1\n", " 131 1.1692228e+00 0.00e+00 1.23e-03 -11.0 3.87e-05 - 1.00e+00 2.84e-14f 45\n", " 132 1.1692228e+00 0.00e+00 1.23e-03 -11.0 4.03e-05 - 1.00e+00 9.09e-13f 41\n", " 133 1.1692228e+00 0.00e+00 1.23e-03 -11.0 4.03e-05 - 1.00e+00 9.09e-13f 41\n", " 134 1.1692228e+00 0.00e+00 1.23e-03 -11.0 1.23e-03 - 1.00e+00 2.84e-14f 46\n", " 135 1.1692228e+00 0.00e+00 1.23e-03 -11.0 1.23e-03 - 1.00e+00 2.84e-14f 46\n", " 136 1.1692228e+00 0.00e+00 1.23e-03 -11.0 1.23e-03 - 1.00e+00 2.84e-14f 46\n", " 137 1.1692228e+00 0.00e+00 1.23e-03 -11.0 1.23e-03 - 1.00e+00 2.84e-14f 46\n", " 138 1.1692228e+00 0.00e+00 1.23e-03 -11.0 1.23e-03 - 1.00e+00 2.84e-14f 46\n", " 139 1.1692228e+00 0.00e+00 1.23e-03 -11.0 1.23e-03 - 1.00e+00 2.84e-14f 46\n", "iter objective inf_pr inf_du lg(mu) ||d|| lg(rg) alpha_du alpha_pr ls\n", " 140 1.1692228e+00 0.00e+00 1.23e-03 -11.0 1.23e-03 - 1.00e+00 2.84e-14f 46\n", " 141 1.1692408e+00 0.00e+00 2.95e-02 -11.0 1.23e-03 - 1.00e+00 1.00e+00w 1\n", " 142 1.1692228e+00 0.00e+00 3.20e-03 -11.0 1.18e-03 - 1.00e+00 1.00e+00w 1\n", " 143 1.1692229e+00 0.00e+00 1.18e-03 -11.0 1.44e-04 - 1.00e+00 1.00e+00w 1\n", " 144 1.1692228e+00 0.00e+00 1.23e-03 -11.0 3.87e-05 - 1.00e+00 2.84e-14f 45\n", " 145 1.1692228e+00 0.00e+00 1.23e-03 -11.0 4.03e-05 - 1.00e+00 9.09e-13f 41\n", " 146 1.1692228e+00 0.00e+00 1.23e-03 -11.0 4.03e-05 - 1.00e+00 9.09e-13f 41\n", " 147 1.1692228e+00 0.00e+00 1.23e-03 -11.0 1.23e-03 - 1.00e+00 2.84e-14f 46\n", " 148 1.1692228e+00 0.00e+00 1.23e-03 -11.0 1.23e-03 - 1.00e+00 2.84e-14f 46\n", " 149 1.1692228e+00 0.00e+00 1.23e-03 -11.0 1.23e-03 - 1.00e+00 2.84e-14f 46\n", "iter objective inf_pr inf_du lg(mu) ||d|| lg(rg) alpha_du alpha_pr ls\n", " 150 1.1692228e+00 0.00e+00 1.23e-03 -11.0 1.23e-03 - 1.00e+00 2.84e-14f 46\n", " 151 1.1692228e+00 0.00e+00 1.23e-03 -11.0 1.23e-03 - 1.00e+00 2.84e-14f 46\n", " 152 1.1692228e+00 0.00e+00 1.23e-03 -11.0 1.23e-03 - 1.00e+00 2.84e-14f 46\n", " 153 1.1692228e+00 0.00e+00 1.23e-03 -11.0 1.23e-03 - 1.00e+00 2.84e-14f 46\n", " 154 1.1692408e+00 0.00e+00 2.95e-02 -11.0 1.23e-03 - 1.00e+00 1.00e+00w 1\n", " 155 1.1692228e+00 0.00e+00 3.20e-03 -11.0 1.18e-03 - 1.00e+00 1.00e+00w 1\n", " 156 1.1692229e+00 0.00e+00 1.18e-03 -11.0 1.44e-04 - 1.00e+00 1.00e+00w 1\n", " 157 1.1692228e+00 0.00e+00 1.23e-03 -11.0 3.87e-05 - 1.00e+00 2.84e-14f 45\n", " 158 1.1692228e+00 0.00e+00 1.23e-03 -11.0 4.03e-05 - 1.00e+00 9.09e-13f 41\n", " 159 1.1692228e+00 0.00e+00 1.23e-03 -11.0 4.03e-05 - 1.00e+00 9.09e-13f 41\n", "iter objective inf_pr inf_du lg(mu) ||d|| lg(rg) alpha_du alpha_pr ls\n", " 160 1.1692228e+00 0.00e+00 1.23e-03 -11.0 1.23e-03 - 1.00e+00 2.84e-14f 46\n", " 161 1.1692228e+00 0.00e+00 1.23e-03 -11.0 1.23e-03 - 1.00e+00 2.84e-14f 46\n", " 162 1.1692228e+00 0.00e+00 1.23e-03 -11.0 1.23e-03 - 1.00e+00 2.84e-14f 46\n", " 163 1.1692228e+00 0.00e+00 1.23e-03 -11.0 1.23e-03 - 1.00e+00 2.84e-14f 46\n", " 164 1.1692228e+00 0.00e+00 1.23e-03 -11.0 1.23e-03 - 1.00e+00 2.84e-14f 46\n", " 165 1.1692228e+00 0.00e+00 1.23e-03 -11.0 1.23e-03 - 1.00e+00 2.84e-14f 46\n", " 166 1.1692228e+00 0.00e+00 1.23e-03 -11.0 1.23e-03 - 1.00e+00 2.84e-14f 46\n", " 167 1.1692408e+00 0.00e+00 2.95e-02 -11.0 1.23e-03 - 1.00e+00 1.00e+00w 1\n", " 168 1.1692228e+00 0.00e+00 3.20e-03 -11.0 1.18e-03 - 1.00e+00 1.00e+00w 1\n", " 169 1.1692229e+00 0.00e+00 1.18e-03 -11.0 1.44e-04 - 1.00e+00 1.00e+00w 1\n", "iter objective inf_pr inf_du lg(mu) ||d|| lg(rg) alpha_du alpha_pr ls\n", " 170 1.1692228e+00 0.00e+00 1.23e-03 -11.0 3.87e-05 - 1.00e+00 2.84e-14f 45\n", " 171 1.1692228e+00 0.00e+00 1.23e-03 -11.0 4.03e-05 - 1.00e+00 9.09e-13f 41\n", " 172 1.1692228e+00 0.00e+00 1.23e-03 -11.0 4.03e-05 - 1.00e+00 9.09e-13f 41\n", " 173 1.1692228e+00 0.00e+00 1.23e-03 -11.0 1.23e-03 - 1.00e+00 2.84e-14f 46\n", " 174 1.1692228e+00 0.00e+00 1.23e-03 -11.0 1.23e-03 - 1.00e+00 2.84e-14f 46\n", " 175 1.1692228e+00 0.00e+00 1.23e-03 -11.0 1.23e-03 - 1.00e+00 2.84e-14f 46\n", " 176 1.1692228e+00 0.00e+00 1.23e-03 -11.0 1.23e-03 - 1.00e+00 2.84e-14f 46\n", " 177 1.1692228e+00 0.00e+00 1.23e-03 -11.0 1.23e-03 - 1.00e+00 2.84e-14f 46\n", " 178 1.1692228e+00 0.00e+00 1.23e-03 -11.0 1.23e-03 - 1.00e+00 2.84e-14f 46\n", " 179 1.1692228e+00 0.00e+00 1.23e-03 -11.0 1.23e-03 - 1.00e+00 2.84e-14f 46\n", "iter objective inf_pr inf_du lg(mu) ||d|| lg(rg) alpha_du alpha_pr ls\n", " 180 1.1692408e+00 0.00e+00 2.95e-02 -11.0 1.23e-03 - 1.00e+00 1.00e+00w 1\n", " 181 1.1692228e+00 0.00e+00 3.20e-03 -11.0 1.18e-03 - 1.00e+00 1.00e+00w 1\n", " 182 1.1692229e+00 0.00e+00 1.18e-03 -11.0 1.44e-04 - 1.00e+00 1.00e+00w 1\n", " 183 1.1692228e+00 0.00e+00 1.23e-03 -11.0 3.87e-05 - 1.00e+00 2.84e-14f 45\n", " 184 1.1692228e+00 0.00e+00 1.23e-03 -11.0 4.03e-05 - 1.00e+00 9.09e-13f 41\n", " 185 1.1692228e+00 0.00e+00 1.23e-03 -11.0 4.03e-05 - 1.00e+00 9.09e-13f 41\n", " 186 1.1692228e+00 0.00e+00 1.23e-03 -11.0 1.23e-03 - 1.00e+00 2.84e-14f 46\n", " 187 1.1692228e+00 0.00e+00 1.23e-03 -11.0 1.23e-03 - 1.00e+00 2.84e-14f 46\n", " 188 1.1692228e+00 0.00e+00 1.23e-03 -11.0 1.23e-03 - 1.00e+00 2.84e-14f 46\n", " 189 1.1692228e+00 0.00e+00 1.23e-03 -11.0 1.23e-03 - 1.00e+00 2.84e-14f 46\n", "iter objective inf_pr inf_du lg(mu) ||d|| lg(rg) alpha_du alpha_pr ls\n", " 190 1.1692228e+00 0.00e+00 1.23e-03 -11.0 1.23e-03 - 1.00e+00 2.84e-14f 46\n", " 191 1.1692228e+00 0.00e+00 1.23e-03 -11.0 1.23e-03 - 1.00e+00 2.84e-14f 46\n", " 192 1.1692228e+00 0.00e+00 1.23e-03 -11.0 1.23e-03 - 1.00e+00 2.84e-14f 46\n", " 193 1.1692408e+00 0.00e+00 2.95e-02 -11.0 1.23e-03 - 1.00e+00 1.00e+00w 1\n", " 194 1.1692228e+00 0.00e+00 3.20e-03 -11.0 1.18e-03 - 1.00e+00 1.00e+00w 1\n", " 195 1.1692229e+00 0.00e+00 1.18e-03 -11.0 1.44e-04 - 1.00e+00 1.00e+00w 1\n", " 196 1.1692228e+00 0.00e+00 1.23e-03 -11.0 3.87e-05 - 1.00e+00 2.84e-14f 45\n", " 197 1.1692228e+00 0.00e+00 1.23e-03 -11.0 4.03e-05 - 1.00e+00 9.09e-13f 41\n", " 198 1.1692228e+00 0.00e+00 1.23e-03 -11.0 4.03e-05 - 1.00e+00 9.09e-13f 41\n", " 199 1.1692228e+00 0.00e+00 1.23e-03 -11.0 1.23e-03 - 1.00e+00 2.84e-14f 46\n", "iter objective inf_pr inf_du lg(mu) ||d|| lg(rg) alpha_du alpha_pr ls\n", " 200 1.1692228e+00 0.00e+00 1.23e-03 -11.0 1.23e-03 - 1.00e+00 2.84e-14f 46\n", " 201 1.1692228e+00 0.00e+00 1.23e-03 -11.0 1.23e-03 - 1.00e+00 2.84e-14f 46\n", " 202 1.1692228e+00 0.00e+00 1.23e-03 -11.0 1.23e-03 - 1.00e+00 2.84e-14f 46\n", " 203 1.1692228e+00 0.00e+00 1.23e-03 -11.0 1.23e-03 - 1.00e+00 2.84e-14f 46\n", " 204 1.1692228e+00 0.00e+00 1.23e-03 -11.0 1.23e-03 - 1.00e+00 2.84e-14f 46\n", " 205 1.1692228e+00 0.00e+00 1.23e-03 -11.0 1.23e-03 - 1.00e+00 2.84e-14f 46\n", " 206 1.1692408e+00 0.00e+00 2.95e-02 -11.0 1.23e-03 - 1.00e+00 1.00e+00w 1\n", " 207 1.1692228e+00 0.00e+00 3.20e-03 -11.0 1.18e-03 - 1.00e+00 1.00e+00w 1\n", " 208 1.1692229e+00 0.00e+00 1.18e-03 -11.0 1.44e-04 - 1.00e+00 1.00e+00w 1\n", " 209 1.1692228e+00 0.00e+00 1.23e-03 -11.0 3.87e-05 - 1.00e+00 2.84e-14f 45\n", "iter objective inf_pr inf_du lg(mu) ||d|| lg(rg) alpha_du alpha_pr ls\n", " 210 1.1692228e+00 0.00e+00 1.23e-03 -11.0 4.03e-05 - 1.00e+00 9.09e-13f 41\n", " 211 1.1692228e+00 0.00e+00 1.23e-03 -11.0 4.03e-05 - 1.00e+00 9.09e-13f 41\n", " 212 1.1692228e+00 0.00e+00 1.23e-03 -11.0 1.23e-03 - 1.00e+00 2.84e-14f 46\n", " 213 1.1692228e+00 0.00e+00 1.23e-03 -11.0 1.23e-03 - 1.00e+00 2.84e-14f 46\n", " 214 1.1692228e+00 0.00e+00 1.23e-03 -11.0 1.23e-03 - 1.00e+00 2.84e-14f 46\n", " 215 1.1692228e+00 0.00e+00 1.23e-03 -11.0 1.23e-03 - 1.00e+00 2.84e-14f 46\n", " 216 1.1692228e+00 0.00e+00 1.23e-03 -11.0 1.23e-03 - 1.00e+00 2.84e-14f 46\n", " 217 1.1692228e+00 0.00e+00 1.23e-03 -11.0 1.23e-03 - 1.00e+00 2.84e-14f 46\n", " 218 1.1692228e+00 0.00e+00 1.23e-03 -11.0 1.23e-03 - 1.00e+00 2.84e-14f 46\n", " 219 1.1692408e+00 0.00e+00 2.95e-02 -11.0 1.23e-03 - 1.00e+00 1.00e+00w 1\n", "iter objective inf_pr inf_du lg(mu) ||d|| lg(rg) alpha_du alpha_pr ls\n", " 220 1.1692228e+00 0.00e+00 3.20e-03 -11.0 1.18e-03 - 1.00e+00 1.00e+00w 1\n", " 221 1.1692229e+00 0.00e+00 1.18e-03 -11.0 1.44e-04 - 1.00e+00 1.00e+00w 1\n", " 222 1.1692228e+00 0.00e+00 1.23e-03 -11.0 3.87e-05 - 1.00e+00 2.84e-14f 45\n", " 223 1.1692228e+00 0.00e+00 1.23e-03 -11.0 4.03e-05 - 1.00e+00 9.09e-13f 41\n", " 224 1.1692228e+00 0.00e+00 1.23e-03 -11.0 4.03e-05 - 1.00e+00 9.09e-13f 41\n", " 225 1.1692228e+00 0.00e+00 1.23e-03 -11.0 1.23e-03 - 1.00e+00 2.84e-14f 46\n", " 226 1.1692228e+00 0.00e+00 1.23e-03 -11.0 1.23e-03 - 1.00e+00 2.84e-14f 46\n", " 227 1.1692228e+00 0.00e+00 1.23e-03 -11.0 1.23e-03 - 1.00e+00 2.84e-14f 46\n", " 228 1.1692228e+00 0.00e+00 1.23e-03 -11.0 1.23e-03 - 1.00e+00 2.84e-14f 46\n", " 229 1.1692228e+00 0.00e+00 1.23e-03 -11.0 1.23e-03 - 1.00e+00 2.84e-14f 46\n", "iter objective inf_pr inf_du lg(mu) ||d|| lg(rg) alpha_du alpha_pr ls\n", " 230 1.1692228e+00 0.00e+00 1.23e-03 -11.0 1.23e-03 - 1.00e+00 2.84e-14f 46\n", " 231 1.1692228e+00 0.00e+00 1.23e-03 -11.0 1.23e-03 - 1.00e+00 2.84e-14f 46\n", " 232 1.1692408e+00 0.00e+00 2.95e-02 -11.0 1.23e-03 - 1.00e+00 1.00e+00w 1\n", " 233 1.1692228e+00 0.00e+00 3.20e-03 -11.0 1.18e-03 - 1.00e+00 1.00e+00w 1\n", " 234 1.1692229e+00 0.00e+00 1.18e-03 -11.0 1.44e-04 - 1.00e+00 1.00e+00w 1\n", " 235 1.1692228e+00 0.00e+00 1.23e-03 -11.0 3.87e-05 - 1.00e+00 2.84e-14f 45\n", " 236 1.1692228e+00 0.00e+00 1.23e-03 -11.0 4.03e-05 - 1.00e+00 9.09e-13f 41\n", " 237 1.1692228e+00 0.00e+00 1.23e-03 -11.0 4.03e-05 - 1.00e+00 9.09e-13f 41\n", " 238 1.1692228e+00 0.00e+00 1.23e-03 -11.0 1.23e-03 - 1.00e+00 2.84e-14f 46\n", " 239 1.1692228e+00 0.00e+00 1.23e-03 -11.0 1.23e-03 - 1.00e+00 2.84e-14f 46\n", "iter objective inf_pr inf_du lg(mu) ||d|| lg(rg) alpha_du alpha_pr ls\n", " 240 1.1692228e+00 0.00e+00 1.23e-03 -11.0 1.23e-03 - 1.00e+00 2.84e-14f 46\n", " 241 1.1692228e+00 0.00e+00 1.23e-03 -11.0 1.23e-03 - 1.00e+00 2.84e-14f 46\n", " 242 1.1692228e+00 0.00e+00 1.23e-03 -11.0 1.23e-03 - 1.00e+00 2.84e-14f 46\n", " 243 1.1692228e+00 0.00e+00 1.23e-03 -11.0 1.23e-03 - 1.00e+00 2.84e-14f 46\n", " 244 1.1692228e+00 0.00e+00 1.23e-03 -11.0 1.23e-03 - 1.00e+00 2.84e-14f 46\n", " 245 1.1692408e+00 0.00e+00 2.95e-02 -11.0 1.23e-03 - 1.00e+00 1.00e+00w 1\n", " 246 1.1692228e+00 0.00e+00 3.20e-03 -11.0 1.18e-03 - 1.00e+00 1.00e+00w 1\n", " 247 1.1692229e+00 0.00e+00 1.18e-03 -11.0 1.44e-04 - 1.00e+00 1.00e+00w 1\n", " 248 1.1692228e+00 0.00e+00 1.23e-03 -11.0 3.87e-05 - 1.00e+00 2.84e-14f 45\n", " 249 1.1692228e+00 0.00e+00 1.23e-03 -11.0 4.03e-05 - 1.00e+00 9.09e-13f 41\n", "iter objective inf_pr inf_du lg(mu) ||d|| lg(rg) alpha_du alpha_pr ls\n", " 250 1.1692228e+00 0.00e+00 1.23e-03 -11.0 4.03e-05 - 1.00e+00 9.09e-13f 41\n", " 251 1.1692228e+00 0.00e+00 1.23e-03 -11.0 1.23e-03 - 1.00e+00 2.84e-14f 46\n", " 252 1.1692228e+00 0.00e+00 1.23e-03 -11.0 1.23e-03 - 1.00e+00 2.84e-14f 46\n", " 253 1.1692228e+00 0.00e+00 1.23e-03 -11.0 1.23e-03 - 1.00e+00 2.84e-14f 46\n", " 254 1.1692228e+00 0.00e+00 1.23e-03 -11.0 1.23e-03 - 1.00e+00 2.84e-14f 46\n", " 255 1.1692228e+00 0.00e+00 1.23e-03 -11.0 1.23e-03 - 1.00e+00 2.84e-14f 46\n", " 256 1.1692228e+00 0.00e+00 1.23e-03 -11.0 1.23e-03 - 1.00e+00 2.84e-14f 46\n", " 257 1.1692228e+00 0.00e+00 1.23e-03 -11.0 1.23e-03 - 1.00e+00 2.84e-14f 46\n", " 258 1.1692408e+00 0.00e+00 2.95e-02 -11.0 1.23e-03 - 1.00e+00 1.00e+00w 1\n", " 259 1.1692228e+00 0.00e+00 3.20e-03 -11.0 1.18e-03 - 1.00e+00 1.00e+00w 1\n", "iter objective inf_pr inf_du lg(mu) ||d|| lg(rg) alpha_du alpha_pr ls\n", " 260 1.1692229e+00 0.00e+00 1.18e-03 -11.0 1.44e-04 - 1.00e+00 1.00e+00w 1\n", " 261 1.1692228e+00 0.00e+00 1.23e-03 -11.0 3.87e-05 - 1.00e+00 2.84e-14f 45\n", " 262 1.1692228e+00 0.00e+00 1.23e-03 -11.0 4.03e-05 - 1.00e+00 9.09e-13f 41\n", " 263 1.1692228e+00 0.00e+00 1.23e-03 -11.0 4.03e-05 - 1.00e+00 9.09e-13f 41\n", " 264 1.1692228e+00 0.00e+00 1.23e-03 -11.0 1.23e-03 - 1.00e+00 2.84e-14f 46\n", " 265 1.1692228e+00 0.00e+00 1.23e-03 -11.0 1.23e-03 - 1.00e+00 2.84e-14f 46\n", " 266 1.1692228e+00 0.00e+00 1.23e-03 -11.0 1.23e-03 - 1.00e+00 2.84e-14f 46\n", " 267 1.1692228e+00 0.00e+00 1.23e-03 -11.0 1.23e-03 - 1.00e+00 2.84e-14f 46\n", " 268 1.1692228e+00 0.00e+00 1.23e-03 -11.0 1.23e-03 - 1.00e+00 2.84e-14f 46\n", " 269 1.1692228e+00 0.00e+00 1.23e-03 -11.0 1.23e-03 - 1.00e+00 2.84e-14f 46\n", "iter objective inf_pr inf_du lg(mu) ||d|| lg(rg) alpha_du alpha_pr ls\n", " 270 1.1692228e+00 0.00e+00 1.23e-03 -11.0 1.23e-03 - 1.00e+00 2.84e-14f 46\n", " 271 1.1692408e+00 0.00e+00 2.95e-02 -11.0 1.23e-03 - 1.00e+00 1.00e+00w 1\n", " 272 1.1692228e+00 0.00e+00 3.20e-03 -11.0 1.18e-03 - 1.00e+00 1.00e+00w 1\n", " 273 1.1692229e+00 0.00e+00 1.18e-03 -11.0 1.44e-04 - 1.00e+00 1.00e+00w 1\n", " 274 1.1692228e+00 0.00e+00 1.23e-03 -11.0 3.87e-05 - 1.00e+00 2.84e-14f 45\n", " 275 1.1692228e+00 0.00e+00 1.23e-03 -11.0 4.03e-05 - 1.00e+00 9.09e-13f 41\n", " 276 1.1692228e+00 0.00e+00 1.23e-03 -11.0 4.03e-05 - 1.00e+00 9.09e-13f 41\n", " 277 1.1692228e+00 0.00e+00 1.23e-03 -11.0 1.23e-03 - 1.00e+00 2.84e-14f 46\n", " 278 1.1692228e+00 0.00e+00 1.23e-03 -11.0 1.23e-03 - 1.00e+00 2.84e-14f 46\n", " 279 1.1692228e+00 0.00e+00 1.23e-03 -11.0 1.23e-03 - 1.00e+00 2.84e-14f 46\n", "iter objective inf_pr inf_du lg(mu) ||d|| lg(rg) alpha_du alpha_pr ls\n", " 280 1.1692228e+00 0.00e+00 1.23e-03 -11.0 1.23e-03 - 1.00e+00 2.84e-14f 46\n", " 281 1.1692228e+00 0.00e+00 1.23e-03 -11.0 1.23e-03 - 1.00e+00 2.84e-14f 46\n", " 282 1.1692228e+00 0.00e+00 1.23e-03 -11.0 1.23e-03 - 1.00e+00 2.84e-14f 46\n", " 283 1.1692228e+00 0.00e+00 1.23e-03 -11.0 1.23e-03 - 1.00e+00 2.84e-14f 46\n", " 284 1.1692408e+00 0.00e+00 2.95e-02 -11.0 1.23e-03 - 1.00e+00 1.00e+00w 1\n", " 285 1.1692228e+00 0.00e+00 3.20e-03 -11.0 1.18e-03 - 1.00e+00 1.00e+00w 1\n", " 286 1.1692229e+00 0.00e+00 1.18e-03 -11.0 1.44e-04 - 1.00e+00 1.00e+00w 1\n", " 287 1.1692228e+00 0.00e+00 1.23e-03 -11.0 3.87e-05 - 1.00e+00 2.84e-14f 45\n", " 288 1.1692228e+00 0.00e+00 1.23e-03 -11.0 4.03e-05 - 1.00e+00 9.09e-13f 41\n", " 289 1.1692228e+00 0.00e+00 1.23e-03 -11.0 4.03e-05 - 1.00e+00 9.09e-13f 41\n", "iter objective inf_pr inf_du lg(mu) ||d|| lg(rg) alpha_du alpha_pr ls\n", " 290 1.1692228e+00 0.00e+00 1.23e-03 -11.0 1.23e-03 - 1.00e+00 2.84e-14f 46\n", " 291 1.1692228e+00 0.00e+00 1.23e-03 -11.0 1.23e-03 - 1.00e+00 2.84e-14f 46\n", " 292 1.1692228e+00 0.00e+00 1.23e-03 -11.0 1.23e-03 - 1.00e+00 2.84e-14f 46\n", " 293 1.1692228e+00 0.00e+00 1.23e-03 -11.0 1.23e-03 - 1.00e+00 2.84e-14f 46\n", " 294 1.1692228e+00 0.00e+00 1.23e-03 -11.0 1.23e-03 - 1.00e+00 2.84e-14f 46\n", " 295 1.1692228e+00 0.00e+00 1.23e-03 -11.0 1.23e-03 - 1.00e+00 2.84e-14f 46\n", " 296 1.1692228e+00 0.00e+00 1.23e-03 -11.0 1.23e-03 - 1.00e+00 2.84e-14f 46\n", " 297 1.1692408e+00 0.00e+00 2.95e-02 -11.0 1.23e-03 - 1.00e+00 1.00e+00w 1\n", " 298 1.1692228e+00 0.00e+00 3.20e-03 -11.0 1.18e-03 - 1.00e+00 1.00e+00w 1\n", " 299 1.1692229e+00 0.00e+00 1.18e-03 -11.0 1.44e-04 - 1.00e+00 1.00e+00w 1\n", "iter objective inf_pr inf_du lg(mu) ||d|| lg(rg) alpha_du alpha_pr ls\n", " 300 1.1692228e+00 0.00e+00 1.23e-03 -11.0 3.87e-05 - 1.00e+00 2.84e-14f 45\n", " 301 1.1692228e+00 0.00e+00 1.23e-03 -11.0 4.03e-05 - 1.00e+00 9.09e-13f 41\n", " 302 1.1692228e+00 0.00e+00 1.23e-03 -11.0 4.03e-05 - 1.00e+00 9.09e-13f 41\n", " 303 1.1692228e+00 0.00e+00 1.23e-03 -11.0 1.23e-03 - 1.00e+00 2.84e-14f 46\n", " 304 1.1692228e+00 0.00e+00 1.23e-03 -11.0 1.23e-03 - 1.00e+00 2.84e-14f 46\n", " 305 1.1692228e+00 0.00e+00 1.23e-03 -11.0 1.23e-03 - 1.00e+00 2.84e-14f 46\n", " 306 1.1692228e+00 0.00e+00 1.23e-03 -11.0 1.23e-03 - 1.00e+00 2.84e-14f 46\n", " 307 1.1692228e+00 0.00e+00 1.23e-03 -11.0 1.23e-03 - 1.00e+00 2.84e-14f 46\n", " 308 1.1692228e+00 0.00e+00 1.23e-03 -11.0 1.23e-03 - 1.00e+00 2.84e-14f 46\n", " 309 1.1692228e+00 0.00e+00 1.23e-03 -11.0 1.23e-03 - 1.00e+00 2.84e-14f 46\n", "iter objective inf_pr inf_du lg(mu) ||d|| lg(rg) alpha_du alpha_pr ls\n", " 310 1.1692408e+00 0.00e+00 2.95e-02 -11.0 1.23e-03 - 1.00e+00 1.00e+00w 1\n", " 311 1.1692228e+00 0.00e+00 3.20e-03 -11.0 1.18e-03 - 1.00e+00 1.00e+00w 1\n", " 312 1.1692229e+00 0.00e+00 1.18e-03 -11.0 1.44e-04 - 1.00e+00 1.00e+00w 1\n", " 313 1.1692228e+00 0.00e+00 1.23e-03 -11.0 3.87e-05 - 1.00e+00 2.84e-14f 45\n", " 314 1.1692228e+00 0.00e+00 1.23e-03 -11.0 4.03e-05 - 1.00e+00 9.09e-13f 41\n", " 315 1.1692228e+00 0.00e+00 1.23e-03 -11.0 4.03e-05 - 1.00e+00 9.09e-13f 41\n", " 316 1.1692228e+00 0.00e+00 1.23e-03 -11.0 1.23e-03 - 1.00e+00 2.84e-14f 46\n", " 317 1.1692228e+00 0.00e+00 1.23e-03 -11.0 1.23e-03 - 1.00e+00 2.84e-14f 46\n", " 318 1.1692228e+00 0.00e+00 1.23e-03 -11.0 1.23e-03 - 1.00e+00 2.84e-14f 46\n", " 319 1.1692228e+00 0.00e+00 1.23e-03 -11.0 1.23e-03 - 1.00e+00 2.84e-14f 46\n", "iter objective inf_pr inf_du lg(mu) ||d|| lg(rg) alpha_du alpha_pr ls\n", " 320 1.1692228e+00 0.00e+00 1.23e-03 -11.0 1.23e-03 - 1.00e+00 2.84e-14f 46\n", " 321 1.1692228e+00 0.00e+00 1.23e-03 -11.0 1.23e-03 - 1.00e+00 2.84e-14f 46\n", " 322 1.1692228e+00 0.00e+00 1.23e-03 -11.0 1.23e-03 - 1.00e+00 2.84e-14f 46\n", " 323 1.1692408e+00 0.00e+00 2.95e-02 -11.0 1.23e-03 - 1.00e+00 1.00e+00w 1\n", " 324 1.1692228e+00 0.00e+00 3.20e-03 -11.0 1.18e-03 - 1.00e+00 1.00e+00w 1\n", " 325 1.1692229e+00 0.00e+00 1.18e-03 -11.0 1.44e-04 - 1.00e+00 1.00e+00w 1\n", " 326 1.1692228e+00 0.00e+00 1.23e-03 -11.0 3.87e-05 - 1.00e+00 2.84e-14f 45\n", " 327 1.1692228e+00 0.00e+00 1.23e-03 -11.0 4.03e-05 - 1.00e+00 9.09e-13f 41\n", " 328 1.1692228e+00 0.00e+00 1.23e-03 -11.0 4.03e-05 - 1.00e+00 9.09e-13f 41\n", " 329 1.1692228e+00 0.00e+00 1.23e-03 -11.0 1.23e-03 - 1.00e+00 2.84e-14f 46\n", "iter objective inf_pr inf_du lg(mu) ||d|| lg(rg) alpha_du alpha_pr ls\n", " 330 1.1692228e+00 0.00e+00 1.23e-03 -11.0 1.23e-03 - 1.00e+00 2.84e-14f 46\n", " 331 1.1692228e+00 0.00e+00 1.23e-03 -11.0 1.23e-03 - 1.00e+00 2.84e-14f 46\n", " 332 1.1692228e+00 0.00e+00 1.23e-03 -11.0 1.23e-03 - 1.00e+00 2.84e-14f 46\n", " 333 1.1692228e+00 0.00e+00 1.23e-03 -11.0 1.23e-03 - 1.00e+00 2.84e-14f 46\n", " 334 1.1692228e+00 0.00e+00 1.23e-03 -11.0 1.23e-03 - 1.00e+00 2.84e-14f 46\n", " 335 1.1692228e+00 0.00e+00 1.23e-03 -11.0 1.23e-03 - 1.00e+00 2.84e-14f 46\n", " 336 1.1692408e+00 0.00e+00 2.95e-02 -11.0 1.23e-03 - 1.00e+00 1.00e+00w 1\n", " 337 1.1692228e+00 0.00e+00 3.20e-03 -11.0 1.18e-03 - 1.00e+00 1.00e+00w 1\n", " 338 1.1692229e+00 0.00e+00 1.18e-03 -11.0 1.44e-04 - 1.00e+00 1.00e+00w 1\n", " 339 1.1692228e+00 0.00e+00 1.23e-03 -11.0 3.87e-05 - 1.00e+00 2.84e-14f 45\n", "iter objective inf_pr inf_du lg(mu) ||d|| lg(rg) alpha_du alpha_pr ls\n", " 340 1.1692228e+00 0.00e+00 1.23e-03 -11.0 4.03e-05 - 1.00e+00 9.09e-13f 41\n", " 341 1.1692228e+00 0.00e+00 1.23e-03 -11.0 4.03e-05 - 1.00e+00 9.09e-13f 41\n", " 342 1.1692228e+00 0.00e+00 1.23e-03 -11.0 1.23e-03 - 1.00e+00 2.84e-14f 46\n", " 343 1.1692228e+00 0.00e+00 1.23e-03 -11.0 1.23e-03 - 1.00e+00 2.84e-14f 46\n", " 344 1.1692228e+00 0.00e+00 1.23e-03 -11.0 1.23e-03 - 1.00e+00 2.84e-14f 46\n", " 345 1.1692228e+00 0.00e+00 1.23e-03 -11.0 1.23e-03 - 1.00e+00 2.84e-14f 46\n", " 346 1.1692228e+00 0.00e+00 1.23e-03 -11.0 1.23e-03 - 1.00e+00 2.84e-14f 46\n", " 347 1.1692228e+00 0.00e+00 1.23e-03 -11.0 1.23e-03 - 1.00e+00 2.84e-14f 46\n", " 348 1.1692228e+00 0.00e+00 1.23e-03 -11.0 1.23e-03 - 1.00e+00 2.84e-14f 46\n", " 349 1.1692408e+00 0.00e+00 2.95e-02 -11.0 1.23e-03 - 1.00e+00 1.00e+00w 1\n", "iter objective inf_pr inf_du lg(mu) ||d|| lg(rg) alpha_du alpha_pr ls\n", " 350 1.1692228e+00 0.00e+00 3.20e-03 -11.0 1.18e-03 - 1.00e+00 1.00e+00w 1\n", " 351 1.1692229e+00 0.00e+00 1.18e-03 -11.0 1.44e-04 - 1.00e+00 1.00e+00w 1\n", " 352 1.1692228e+00 0.00e+00 1.23e-03 -11.0 3.87e-05 - 1.00e+00 2.84e-14f 45\n", " 353 1.1692228e+00 0.00e+00 1.23e-03 -11.0 4.03e-05 - 1.00e+00 9.09e-13f 41\n", " 354 1.1692228e+00 0.00e+00 1.23e-03 -11.0 4.03e-05 - 1.00e+00 9.09e-13f 41\n", " 355 1.1692228e+00 0.00e+00 1.23e-03 -11.0 1.23e-03 - 1.00e+00 2.84e-14f 46\n", " 356 1.1692228e+00 0.00e+00 1.23e-03 -11.0 1.23e-03 - 1.00e+00 2.84e-14f 46\n", " 357 1.1692228e+00 0.00e+00 1.23e-03 -11.0 1.23e-03 - 1.00e+00 2.84e-14f 46\n", " 358 1.1692228e+00 0.00e+00 1.23e-03 -11.0 1.23e-03 - 1.00e+00 2.84e-14f 46\n", " 359 1.1692228e+00 0.00e+00 1.23e-03 -11.0 1.23e-03 - 1.00e+00 2.84e-14f 46\n", "iter objective inf_pr inf_du lg(mu) ||d|| lg(rg) alpha_du alpha_pr ls\n", " 360 1.1692228e+00 0.00e+00 1.23e-03 -11.0 1.23e-03 - 1.00e+00 2.84e-14f 46\n", " 361 1.1692228e+00 0.00e+00 1.23e-03 -11.0 1.23e-03 - 1.00e+00 2.84e-14f 46\n", " 362 1.1692408e+00 0.00e+00 2.95e-02 -11.0 1.23e-03 - 1.00e+00 1.00e+00w 1\n", " 363 1.1692228e+00 0.00e+00 3.20e-03 -11.0 1.18e-03 - 1.00e+00 1.00e+00w 1\n", " 364 1.1692229e+00 0.00e+00 1.18e-03 -11.0 1.44e-04 - 1.00e+00 1.00e+00w 1\n", " 365 1.1692228e+00 0.00e+00 1.23e-03 -11.0 3.87e-05 - 1.00e+00 2.84e-14f 45\n", " 366 1.1692228e+00 0.00e+00 1.23e-03 -11.0 4.03e-05 - 1.00e+00 9.09e-13f 41\n", " 367 1.1692228e+00 0.00e+00 1.23e-03 -11.0 4.03e-05 - 1.00e+00 9.09e-13f 41\n", " 368 1.1692228e+00 0.00e+00 1.23e-03 -11.0 1.23e-03 - 1.00e+00 2.84e-14f 46\n", " 369 1.1692228e+00 0.00e+00 1.23e-03 -11.0 1.23e-03 - 1.00e+00 2.84e-14f 46\n", "iter objective inf_pr inf_du lg(mu) ||d|| lg(rg) alpha_du alpha_pr ls\n", " 370 1.1692228e+00 0.00e+00 1.23e-03 -11.0 1.23e-03 - 1.00e+00 2.84e-14f 46\n", " 371 1.1692228e+00 0.00e+00 1.23e-03 -11.0 1.23e-03 - 1.00e+00 2.84e-14f 46\n", " 372 1.1692228e+00 0.00e+00 1.23e-03 -11.0 1.23e-03 - 1.00e+00 2.84e-14f 46\n", " 373 1.1692228e+00 0.00e+00 1.23e-03 -11.0 1.23e-03 - 1.00e+00 2.84e-14f 46\n", " 374 1.1692228e+00 0.00e+00 1.23e-03 -11.0 1.23e-03 - 1.00e+00 2.84e-14f 46\n", " 375 1.1692408e+00 0.00e+00 2.95e-02 -11.0 1.23e-03 - 1.00e+00 1.00e+00w 1\n", " 376 1.1692228e+00 0.00e+00 3.20e-03 -11.0 1.18e-03 - 1.00e+00 1.00e+00w 1\n", " 377 1.1692229e+00 0.00e+00 1.18e-03 -11.0 1.44e-04 - 1.00e+00 1.00e+00w 1\n", " 378 1.1692228e+00 0.00e+00 1.23e-03 -11.0 3.87e-05 - 1.00e+00 2.84e-14f 45\n", " 379 1.1692228e+00 0.00e+00 1.23e-03 -11.0 4.03e-05 - 1.00e+00 9.09e-13f 41\n", "iter objective inf_pr inf_du lg(mu) ||d|| lg(rg) alpha_du alpha_pr ls\n", " 380 1.1692228e+00 0.00e+00 1.23e-03 -11.0 4.03e-05 - 1.00e+00 9.09e-13f 41\n", " 381 1.1692228e+00 0.00e+00 1.23e-03 -11.0 1.23e-03 - 1.00e+00 2.84e-14f 46\n", " 382 1.1692228e+00 0.00e+00 1.23e-03 -11.0 1.23e-03 - 1.00e+00 2.84e-14f 46\n", " 383 1.1692228e+00 0.00e+00 1.23e-03 -11.0 1.23e-03 - 1.00e+00 2.84e-14f 46\n", " 384 1.1692228e+00 0.00e+00 1.23e-03 -11.0 1.23e-03 - 1.00e+00 2.84e-14f 46\n", " 385 1.1692228e+00 0.00e+00 1.23e-03 -11.0 1.23e-03 - 1.00e+00 2.84e-14f 46\n", " 386 1.1692228e+00 0.00e+00 1.23e-03 -11.0 1.23e-03 - 1.00e+00 2.84e-14f 46\n", " 387 1.1692228e+00 0.00e+00 1.23e-03 -11.0 1.23e-03 - 1.00e+00 2.84e-14f 46\n", " 388 1.1692408e+00 0.00e+00 2.95e-02 -11.0 1.23e-03 - 1.00e+00 1.00e+00w 1\n", " 389 1.1692228e+00 0.00e+00 3.20e-03 -11.0 1.18e-03 - 1.00e+00 1.00e+00w 1\n", "iter objective inf_pr inf_du lg(mu) ||d|| lg(rg) alpha_du alpha_pr ls\n", " 390 1.1692229e+00 0.00e+00 1.18e-03 -11.0 1.44e-04 - 1.00e+00 1.00e+00w 1\n", " 391 1.1692228e+00 0.00e+00 1.23e-03 -11.0 3.87e-05 - 1.00e+00 2.84e-14f 45\n", " 392 1.1692228e+00 0.00e+00 1.23e-03 -11.0 4.03e-05 - 1.00e+00 9.09e-13f 41\n", " 393 1.1692228e+00 0.00e+00 1.23e-03 -11.0 4.03e-05 - 1.00e+00 9.09e-13f 41\n", " 394 1.1692228e+00 0.00e+00 1.23e-03 -11.0 1.23e-03 - 1.00e+00 2.84e-14f 46\n", " 395 1.1692228e+00 0.00e+00 1.23e-03 -11.0 1.23e-03 - 1.00e+00 2.84e-14f 46\n", " 396 1.1692228e+00 0.00e+00 1.23e-03 -11.0 1.23e-03 - 1.00e+00 2.84e-14f 46\n", " 397 1.1692228e+00 0.00e+00 1.23e-03 -11.0 1.23e-03 - 1.00e+00 2.84e-14f 46\n", " 398 1.1692228e+00 0.00e+00 1.23e-03 -11.0 1.23e-03 - 1.00e+00 2.84e-14f 46\n", " 399 1.1692228e+00 0.00e+00 1.23e-03 -11.0 1.23e-03 - 1.00e+00 2.84e-14f 46\n", "iter objective inf_pr inf_du lg(mu) ||d|| lg(rg) alpha_du alpha_pr ls\n", " 400 1.1692228e+00 0.00e+00 1.23e-03 -11.0 1.23e-03 - 1.00e+00 2.84e-14f 46\n", " 401 1.1692408e+00 0.00e+00 2.95e-02 -11.0 1.23e-03 - 1.00e+00 1.00e+00w 1\n", " 402 1.1692228e+00 0.00e+00 3.20e-03 -11.0 1.18e-03 - 1.00e+00 1.00e+00w 1\n", " 403 1.1692229e+00 0.00e+00 1.18e-03 -11.0 1.44e-04 - 1.00e+00 1.00e+00w 1\n", " 404 1.1692228e+00 0.00e+00 1.23e-03 -11.0 3.87e-05 - 1.00e+00 2.84e-14f 45\n", " 405 1.1692228e+00 0.00e+00 1.23e-03 -11.0 4.03e-05 - 1.00e+00 9.09e-13f 41\n", " 406 1.1692228e+00 0.00e+00 1.23e-03 -11.0 4.03e-05 - 1.00e+00 9.09e-13f 41\n", " 407 1.1692228e+00 0.00e+00 1.23e-03 -11.0 1.23e-03 - 1.00e+00 2.84e-14f 46\n", " 408 1.1692228e+00 0.00e+00 1.23e-03 -11.0 1.23e-03 - 1.00e+00 2.84e-14f 46\n", " 409 1.1692228e+00 0.00e+00 1.23e-03 -11.0 1.23e-03 - 1.00e+00 2.84e-14f 46\n", "iter objective inf_pr inf_du lg(mu) ||d|| lg(rg) alpha_du alpha_pr ls\n", " 410 1.1692228e+00 0.00e+00 1.23e-03 -11.0 1.23e-03 - 1.00e+00 2.84e-14f 46\n", " 411 1.1692228e+00 0.00e+00 1.23e-03 -11.0 1.23e-03 - 1.00e+00 2.84e-14f 46\n", " 412 1.1692228e+00 0.00e+00 1.23e-03 -11.0 1.23e-03 - 1.00e+00 2.84e-14f 46\n", " 413 1.1692228e+00 0.00e+00 1.23e-03 -11.0 1.23e-03 - 1.00e+00 2.84e-14f 46\n", " 414 1.1692408e+00 0.00e+00 2.95e-02 -11.0 1.23e-03 - 1.00e+00 1.00e+00w 1\n", " 415 1.1692228e+00 0.00e+00 3.20e-03 -11.0 1.18e-03 - 1.00e+00 1.00e+00w 1\n", " 416 1.1692229e+00 0.00e+00 1.18e-03 -11.0 1.44e-04 - 1.00e+00 1.00e+00w 1\n", " 417 1.1692228e+00 0.00e+00 1.23e-03 -11.0 3.87e-05 - 1.00e+00 2.84e-14f 45\n", " 418 1.1692228e+00 0.00e+00 1.23e-03 -11.0 4.03e-05 - 1.00e+00 9.09e-13f 41\n", " 419 1.1692228e+00 0.00e+00 1.23e-03 -11.0 4.03e-05 - 1.00e+00 9.09e-13f 41\n", "iter objective inf_pr inf_du lg(mu) ||d|| lg(rg) alpha_du alpha_pr ls\n", " 420 1.1692228e+00 0.00e+00 1.23e-03 -11.0 1.23e-03 - 1.00e+00 2.84e-14f 46\n", " 421 1.1692228e+00 0.00e+00 1.23e-03 -11.0 1.23e-03 - 1.00e+00 2.84e-14f 46\n", " 422 1.1692228e+00 0.00e+00 1.23e-03 -11.0 1.23e-03 - 1.00e+00 2.84e-14f 46\n", " 423 1.1692228e+00 0.00e+00 1.23e-03 -11.0 1.23e-03 - 1.00e+00 2.84e-14f 46\n", " 424 1.1692228e+00 0.00e+00 1.23e-03 -11.0 1.23e-03 - 1.00e+00 2.84e-14f 46\n", " 425 1.1692228e+00 0.00e+00 1.23e-03 -11.0 1.23e-03 - 1.00e+00 2.84e-14f 46\n", " 426 1.1692228e+00 0.00e+00 1.23e-03 -11.0 1.23e-03 - 1.00e+00 2.84e-14f 46\n", " 427 1.1692408e+00 0.00e+00 2.95e-02 -11.0 1.23e-03 - 1.00e+00 1.00e+00w 1\n", " 428 1.1692228e+00 0.00e+00 3.20e-03 -11.0 1.18e-03 - 1.00e+00 1.00e+00w 1\n", " 429 1.1692229e+00 0.00e+00 1.18e-03 -11.0 1.44e-04 - 1.00e+00 1.00e+00w 1\n", "iter objective inf_pr inf_du lg(mu) ||d|| lg(rg) alpha_du alpha_pr ls\n", " 430 1.1692228e+00 0.00e+00 1.23e-03 -11.0 3.87e-05 - 1.00e+00 2.84e-14f 45\n", " 431 1.1692228e+00 0.00e+00 1.23e-03 -11.0 4.03e-05 - 1.00e+00 9.09e-13f 41\n", " 432 1.1692228e+00 0.00e+00 1.23e-03 -11.0 4.03e-05 - 1.00e+00 9.09e-13f 41\n", " 433 1.1692228e+00 0.00e+00 1.23e-03 -11.0 1.23e-03 - 1.00e+00 2.84e-14f 46\n", " 434 1.1692228e+00 0.00e+00 1.23e-03 -11.0 1.23e-03 - 1.00e+00 2.84e-14f 46\n", " 435 1.1692228e+00 0.00e+00 1.23e-03 -11.0 1.23e-03 - 1.00e+00 2.84e-14f 46\n", " 436 1.1692228e+00 0.00e+00 1.23e-03 -11.0 1.23e-03 - 1.00e+00 2.84e-14f 46\n", " 437 1.1692228e+00 0.00e+00 1.23e-03 -11.0 1.23e-03 - 1.00e+00 2.84e-14f 46\n", " 438 1.1692228e+00 0.00e+00 1.23e-03 -11.0 1.23e-03 - 1.00e+00 2.84e-14f 46\n", " 439 1.1692228e+00 0.00e+00 1.23e-03 -11.0 1.23e-03 - 1.00e+00 2.84e-14f 46\n", "iter objective inf_pr inf_du lg(mu) ||d|| lg(rg) alpha_du alpha_pr ls\n", " 440 1.1692408e+00 0.00e+00 2.95e-02 -11.0 1.23e-03 - 1.00e+00 1.00e+00w 1\n", " 441 1.1692228e+00 0.00e+00 3.20e-03 -11.0 1.18e-03 - 1.00e+00 1.00e+00w 1\n", " 442 1.1692229e+00 0.00e+00 1.18e-03 -11.0 1.44e-04 - 1.00e+00 1.00e+00w 1\n", " 443 1.1692228e+00 0.00e+00 1.23e-03 -11.0 3.87e-05 - 1.00e+00 2.84e-14f 45\n", " 444 1.1692228e+00 0.00e+00 1.23e-03 -11.0 4.03e-05 - 1.00e+00 9.09e-13f 41\n", " 445 1.1692228e+00 0.00e+00 1.23e-03 -11.0 4.03e-05 - 1.00e+00 9.09e-13f 41\n", " 446 1.1692228e+00 0.00e+00 1.23e-03 -11.0 1.23e-03 - 1.00e+00 2.84e-14f 46\n", " 447 1.1692228e+00 0.00e+00 1.23e-03 -11.0 1.23e-03 - 1.00e+00 2.84e-14f 46\n", " 448 1.1692228e+00 0.00e+00 1.23e-03 -11.0 1.23e-03 - 1.00e+00 2.84e-14f 46\n", " 449 1.1692228e+00 0.00e+00 1.23e-03 -11.0 1.23e-03 - 1.00e+00 2.84e-14f 46\n", "iter objective inf_pr inf_du lg(mu) ||d|| lg(rg) alpha_du alpha_pr ls\n", " 450 1.1692228e+00 0.00e+00 1.23e-03 -11.0 1.23e-03 - 1.00e+00 2.84e-14f 46\n", " 451 1.1692228e+00 0.00e+00 1.23e-03 -11.0 1.23e-03 - 1.00e+00 2.84e-14f 46\n", " 452 1.1692228e+00 0.00e+00 1.23e-03 -11.0 1.23e-03 - 1.00e+00 2.84e-14f 46\n", " 453 1.1692408e+00 0.00e+00 2.95e-02 -11.0 1.23e-03 - 1.00e+00 1.00e+00w 1\n", " 454 1.1692228e+00 0.00e+00 3.20e-03 -11.0 1.18e-03 - 1.00e+00 1.00e+00w 1\n", " 455 1.1692229e+00 0.00e+00 1.18e-03 -11.0 1.44e-04 - 1.00e+00 1.00e+00w 1\n", " 456 1.1692228e+00 0.00e+00 1.23e-03 -11.0 3.87e-05 - 1.00e+00 2.84e-14f 45\n", " 457 1.1692228e+00 0.00e+00 1.23e-03 -11.0 4.03e-05 - 1.00e+00 9.09e-13f 41\n", " 458 1.1692228e+00 0.00e+00 1.23e-03 -11.0 4.03e-05 - 1.00e+00 9.09e-13f 41\n", " 459 1.1692228e+00 0.00e+00 1.23e-03 -11.0 1.23e-03 - 1.00e+00 2.84e-14f 46\n", "iter objective inf_pr inf_du lg(mu) ||d|| lg(rg) alpha_du alpha_pr ls\n", " 460 1.1692228e+00 0.00e+00 1.23e-03 -11.0 1.23e-03 - 1.00e+00 2.84e-14f 46\n", " 461 1.1692228e+00 0.00e+00 1.23e-03 -11.0 1.23e-03 - 1.00e+00 2.84e-14f 46\n", " 462 1.1692228e+00 0.00e+00 1.23e-03 -11.0 1.23e-03 - 1.00e+00 2.84e-14f 46\n", " 463 1.1692228e+00 0.00e+00 1.23e-03 -11.0 1.23e-03 - 1.00e+00 2.84e-14f 46\n", " 464 1.1692228e+00 0.00e+00 1.23e-03 -11.0 1.23e-03 - 1.00e+00 2.84e-14f 46\n", " 465 1.1692228e+00 0.00e+00 1.23e-03 -11.0 1.23e-03 - 1.00e+00 2.84e-14f 46\n", " 466 1.1692408e+00 0.00e+00 2.95e-02 -11.0 1.23e-03 - 1.00e+00 1.00e+00w 1\n", " 467 1.1692228e+00 0.00e+00 3.20e-03 -11.0 1.18e-03 - 1.00e+00 1.00e+00w 1\n", " 468 1.1692229e+00 0.00e+00 1.18e-03 -11.0 1.44e-04 - 1.00e+00 1.00e+00w 1\n", " 469 1.1692228e+00 0.00e+00 1.23e-03 -11.0 3.87e-05 - 1.00e+00 2.84e-14f 45\n", "iter objective inf_pr inf_du lg(mu) ||d|| lg(rg) alpha_du alpha_pr ls\n", " 470 1.1692228e+00 0.00e+00 1.23e-03 -11.0 4.03e-05 - 1.00e+00 9.09e-13f 41\n", " 471 1.1692228e+00 0.00e+00 1.23e-03 -11.0 4.03e-05 - 1.00e+00 9.09e-13f 41\n", " 472 1.1692228e+00 0.00e+00 1.23e-03 -11.0 1.23e-03 - 1.00e+00 2.84e-14f 46\n", " 473 1.1692228e+00 0.00e+00 1.23e-03 -11.0 1.23e-03 - 1.00e+00 2.84e-14f 46\n", " 474 1.1692228e+00 0.00e+00 1.23e-03 -11.0 1.23e-03 - 1.00e+00 2.84e-14f 46\n", " 475 1.1692228e+00 0.00e+00 1.23e-03 -11.0 1.23e-03 - 1.00e+00 2.84e-14f 46\n", " 476 1.1692228e+00 0.00e+00 1.23e-03 -11.0 1.23e-03 - 1.00e+00 2.84e-14f 46\n", " 477 1.1692228e+00 0.00e+00 1.23e-03 -11.0 1.23e-03 - 1.00e+00 2.84e-14f 46\n", " 478 1.1692228e+00 0.00e+00 1.23e-03 -11.0 1.23e-03 - 1.00e+00 2.84e-14f 46\n", " 479 1.1692408e+00 0.00e+00 2.95e-02 -11.0 1.23e-03 - 1.00e+00 1.00e+00w 1\n", "iter objective inf_pr inf_du lg(mu) ||d|| lg(rg) alpha_du alpha_pr ls\n", " 480 1.1692228e+00 0.00e+00 3.20e-03 -11.0 1.18e-03 - 1.00e+00 1.00e+00w 1\n", " 481 1.1692229e+00 0.00e+00 1.18e-03 -11.0 1.44e-04 - 1.00e+00 1.00e+00w 1\n", " 482 1.1692228e+00 0.00e+00 1.23e-03 -11.0 3.87e-05 - 1.00e+00 2.84e-14f 45\n", " 483 1.1692228e+00 0.00e+00 1.23e-03 -11.0 4.03e-05 - 1.00e+00 9.09e-13f 41\n", " 484 1.1692228e+00 0.00e+00 1.23e-03 -11.0 4.03e-05 - 1.00e+00 9.09e-13f 41\n", " 485 1.1692228e+00 0.00e+00 1.23e-03 -11.0 1.23e-03 - 1.00e+00 2.84e-14f 46\n", " 486 1.1692228e+00 0.00e+00 1.23e-03 -11.0 1.23e-03 - 1.00e+00 2.84e-14f 46\n", " 487 1.1692228e+00 0.00e+00 1.23e-03 -11.0 1.23e-03 - 1.00e+00 2.84e-14f 46\n", " 488 1.1692228e+00 0.00e+00 1.23e-03 -11.0 1.23e-03 - 1.00e+00 2.84e-14f 46\n", " 489 1.1692228e+00 0.00e+00 1.23e-03 -11.0 1.23e-03 - 1.00e+00 2.84e-14f 46\n", "iter objective inf_pr inf_du lg(mu) ||d|| lg(rg) alpha_du alpha_pr ls\n", " 490 1.1692228e+00 0.00e+00 1.23e-03 -11.0 1.23e-03 - 1.00e+00 2.84e-14f 46\n", " 491 1.1692228e+00 0.00e+00 1.23e-03 -11.0 1.23e-03 - 1.00e+00 2.84e-14f 46\n", " 492 1.1692408e+00 0.00e+00 2.95e-02 -11.0 1.23e-03 - 1.00e+00 1.00e+00w 1\n", " 493 1.1692228e+00 0.00e+00 3.20e-03 -11.0 1.18e-03 - 1.00e+00 1.00e+00w 1\n", " 494 1.1692229e+00 0.00e+00 1.18e-03 -11.0 1.44e-04 - 1.00e+00 1.00e+00w 1\n", " 495 1.1692228e+00 0.00e+00 1.23e-03 -11.0 3.87e-05 - 1.00e+00 2.84e-14f 45\n", " 496 1.1692228e+00 0.00e+00 1.23e-03 -11.0 4.03e-05 - 1.00e+00 9.09e-13f 41\n", " 497 1.1692228e+00 0.00e+00 1.23e-03 -11.0 4.03e-05 - 1.00e+00 9.09e-13f 41\n", " 498 1.1692228e+00 0.00e+00 1.23e-03 -11.0 1.23e-03 - 1.00e+00 2.84e-14f 46\n", " 499 1.1692228e+00 0.00e+00 1.23e-03 -11.0 1.23e-03 - 1.00e+00 2.84e-14f 46\n", "iter objective inf_pr inf_du lg(mu) ||d|| lg(rg) alpha_du alpha_pr ls\n", " 500 1.1692228e+00 0.00e+00 1.23e-03 -11.0 1.23e-03 - 1.00e+00 2.84e-14f 46\n", "\n", "Number of Iterations....: 500\n", "\n", " (scaled) (unscaled)\n", "Objective...............: 1.1692227908354558e+00 1.1692227908354558e+00\n", "Dual infeasibility......: 1.2292153755629085e-03 1.2292153755629085e-03\n", "Constraint violation....: 0.0000000000000000e+00 0.0000000000000000e+00\n", "Complementarity.........: 1.0010357638788301e-11 1.0010357638788301e-11\n", "Overall NLP error.......: 1.2292153755629085e-03 1.2292153755629085e-03\n", "\n", "\n", "Number of objective function evaluations = 17539\n", "Number of objective gradient evaluations = 501\n", "Number of equality constraint evaluations = 0\n", "Number of inequality constraint evaluations = 0\n", "Number of equality constraint Jacobian evaluations = 0\n", "Number of inequality constraint Jacobian evaluations = 0\n", "Number of Lagrangian Hessian evaluations = 0\n", "Total CPU secs in IPOPT (w/o function evaluations) = 0.981\n", "Total CPU secs in NLP function evaluations = 183.533\n", "\n", "EXIT: Maximum Number of Iterations Exceeded.\n", " solver : t_proc (avg) t_wall (avg) n_eval\n", " nlp_f | 158.58 s ( 9.04ms) 155.99 s ( 8.89ms) 17539\n", " nlp_grad_f | 26.78 s ( 53.35ms) 26.34 s ( 52.46ms) 502\n", " total | 186.43 s (186.43 s) 183.34 s (183.34 s) 1\n" ] } ], "source": [ "solver = cs.nlpsol(\"solver\",\"ipopt\",prob, options)\n", "res = solver(lbx = -2, ubx = 2)" ] }, { "cell_type": "code", "execution_count": 28, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "" ] }, "execution_count": 28, "metadata": {}, "output_type": "execute_result" } ], "source": [ "inp = tf.Variable(np.zeros((1,1)), dtype=tf.float64)\n", "\n", "with tf.GradientTape() as tape:\n", " preds = model.predict_f(inp)\n", "\n", "grads = tape.gradient(preds, inp)\n", "grads" ] }, { "cell_type": "code", "execution_count": 29, "metadata": {}, "outputs": [], "source": [ "# Package the resulting regression model in a CasADi callback\n", "class GPR_rev(cs.Callback):\n", " def __init__(self, name, opts={}):\n", " cs.Callback.__init__(self)\n", " \n", " self.refs = []\n", " \n", " self.construct(name, opts)\n", " \n", " def get_n_in(self): return 1\n", " def get_n_out(self): return 1\n", " \n", " def get_sparsity_in(self,i):\n", " return cs.Sparsity.dense(1,1)\n", " def get_sparsity_out(self,i):\n", " return cs.Sparsity.dense(1,1)\n", "\n", "\n", " def eval(self, arg):\n", " inp = np.array(arg[0])\n", " inp = tf.Variable(inp, dtype=tf.float64)\n", " [mean, _] = model.predict_f(inp)\n", " return [mean.numpy()]\n", " \n", " def has_reverse(self, nadj): return nadj==1\n", " def get_reverse(self, nadj, name, inames, onames, opts):\n", " grad_callback = GPR_grad(name)\n", " self.refs.append(grad_callback)\n", " \n", " nominal_in = self.mx_in()\n", " nominal_out = self.mx_out()\n", " adj_seed = self.mx_out()\n", " return cs.Function(name, nominal_in+nominal_out+adj_seed, grad_callback.call(nominal_in), inames, onames)\n", " \n", "class GPR_grad(cs.Callback):\n", " def __init__(self, name, opts={}):\n", " cs.Callback.__init__(self) \n", " self.construct(name, opts)\n", " \n", " def get_n_in(self): return 1\n", " def get_n_out(self): return 1\n", " \n", " def get_sparsity_in(self,i):\n", " return cs.Sparsity.dense(1,1)\n", " def get_sparsity_out(self,i):\n", " return cs.Sparsity.dense(1,1)\n", "\n", "\n", " def eval(self, arg):\n", " inp = np.array(arg[0])\n", " inp = tf.Variable(inp, dtype=tf.float64)\n", " \n", " with tf.GradientTape() as tape:\n", " preds = model.predict_f(inp)\n", "\n", " grads = tape.gradient(preds, inp)\n", " return [grads.numpy()]" ] }, { "cell_type": "code", "execution_count": 30, "metadata": {}, "outputs": [], "source": [ "gpr_rev = GPR_rev(\"gp\")" ] }, { "cell_type": "code", "execution_count": 31, "metadata": {}, "outputs": [], "source": [ "x = cs.MX.sym(\"x\")\n", "y = 2 * gpr_rev(x) + 5\n", "f = cs.Function('f', [x], [y])" ] }, { "cell_type": "code", "execution_count": 32, "metadata": {}, "outputs": [], "source": [ "prob = {\"x\":x,\"f\":f(x)}\n", "options = {\"ipopt\": {\"hessian_approximation\": \"limited-memory\"}}" ] }, { "cell_type": "code", "execution_count": 33, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "This is Ipopt version 3.13.4, running with linear solver mumps.\n", "NOTE: Other linear solvers might be more efficient (see Ipopt documentation).\n", "\n", "Number of nonzeros in equality constraint Jacobian...: 0\n", "Number of nonzeros in inequality constraint Jacobian.: 0\n", "Number of nonzeros in Lagrangian Hessian.............: 0\n", "\n", "Total number of variables............................: 1\n", " variables with only lower bounds: 0\n", " variables with lower and upper bounds: 1\n", " variables with only upper bounds: 0\n", "Total number of equality constraints.................: 0\n", "Total number of inequality constraints...............: 0\n", " inequality constraints with only lower bounds: 0\n", " inequality constraints with lower and upper bounds: 0\n", " inequality constraints with only upper bounds: 0\n", "\n", "iter objective inf_pr inf_du lg(mu) ||d|| lg(rg) alpha_du alpha_pr ls\n", " 0 5.2185392e+00 0.00e+00 3.15e+00 0.0 0.00e+00 - 0.00e+00 0.00e+00 0\n", " 1 1.1762400e+00 0.00e+00 1.26e+00 0.2 1.58e+00 - 9.80e-01 5.00e-01f 2\n", " 2 1.1694554e+00 0.00e+00 1.27e-01 -2.1 5.78e-02 - 1.00e+00 5.00e-01f 2\n", " 3 1.1692231e+00 0.00e+00 1.11e-03 -3.0 4.26e-03 - 9.98e-01 1.00e+00f 1\n", " 4 1.1692231e+00 0.00e+00 1.52e-03 -9.0 1.27e-04 - 9.99e-01 1.91e-06f 20\n", " 5 1.1692231e+00 0.00e+00 1.52e-03 -6.0 1.28e-04 - 1.00e+00 2.38e-07f 23\n", " 6 1.1692231e+00 0.00e+00 1.52e-03 -6.0 1.18e-04 - 1.00e+00 1.19e-07f 24\n", " 7 1.1692231e+00 0.00e+00 1.52e-03 -6.0 1.86e-04 - 1.00e+00 1.86e-09f 30\n", " 8 1.1692231e+00 0.00e+00 1.52e-03 -6.0 6.83e-04 - 1.00e+00 5.82e-11f 35\n", " 9 1.1692231e+00 0.00e+00 1.52e-03 -6.0 2.84e-06 - 1.00e+00 2.38e-07f 23\n", "iter objective inf_pr inf_du lg(mu) ||d|| lg(rg) alpha_du alpha_pr ls\n", " 10 1.1692231e+00 0.00e+00 1.52e-03 -6.0 2.84e-06 - 1.00e+00 1.46e-11f 37\n", " 11 1.1692231e+00 0.00e+00 1.52e-03 -6.0 2.84e-06 - 1.00e+00 1.46e-11f 37\n", " 12 1.1692231e+00 0.00e+00 1.52e-03 -6.0 1.52e-03 - 1.00e+00 1.46e-11f 37\n", " 13 1.1692231e+00 0.00e+00 1.52e-03 -6.0 8.32e-07 - 1.00e+00 1.53e-05f 17\n", " 14 1.1692231e+00 0.00e+00 1.52e-03 -6.0 1.69e-04 - 1.00e+00 2.27e-13f 43\n", " 15 1.1692240e+00 0.00e+00 4.87e-04 -6.0 1.69e-04 - 1.00e+00 1.00e+00w 1\n", " 16 1.1692237e+00 0.00e+00 6.42e-08 -6.0 4.09e-05 - 1.00e+00 1.00e+00w 1\n", " 17 1.1692237e+00 0.00e+00 5.03e-07 -9.0 4.50e-08 - 1.00e+00 6.25e-02f 5\n", " 18 1.1692237e+00 0.00e+00 5.03e-07 -9.0 4.22e-08 - 1.00e+00 1.22e-04f 14\n", " 19 1.1692237e+00 0.00e+00 5.02e-07 -9.0 4.55e-08 - 1.00e+00 1.95e-03f 10\n", "iter objective inf_pr inf_du lg(mu) ||d|| lg(rg) alpha_du alpha_pr ls\n", " 20 1.1692237e+00 0.00e+00 5.02e-07 -9.0 4.10e-08 - 1.00e+00 7.45e-09f 28\n", " 21 1.1692237e+00 0.00e+00 5.02e-07 -9.0 4.10e-08 - 1.00e+00 5.96e-08f 25\n", " 22 1.1692237e+00 0.00e+00 5.02e-07 -9.0 4.10e-08 - 1.00e+00 9.31e-10f 31\n", " 23 1.1692237e+00 0.00e+00 5.02e-07 -9.0 5.02e-07 - 1.00e+00 6.10e-05f 15\n", " 24 1.1692237e+00 0.00e+00 5.02e-07 -9.0 4.20e-08 - 1.00e+00 2.44e-04f 13\n", " 25 1.1692237e+00 0.00e+00 5.02e-07 -9.0 3.56e-08 - 1.00e+00 9.31e-10f 31\n", " 26 1.1692237e+00 0.00e+00 5.02e-07 -9.0 3.56e-08 - 1.00e+00 9.31e-10f 31\n", " 27 1.1692237e+00 0.00e+00 7.70e-08 -9.0 3.56e-08 - 1.00e+00 1.00e+00w 1\n", " 28 1.1692237e+00 0.00e+00 8.41e-07 -9.0 7.70e-08 - 1.00e+00 1.00e+00w 1\n", " 29 1.1692237e+00 0.00e+00 6.29e-12 -9.0 7.05e-08 - 1.00e+00 1.00e+00w 1\n", "\n", "Number of Iterations....: 29\n", "\n", " (scaled) (unscaled)\n", "Objective...............: 1.1692237195452875e+00 1.1692237195452875e+00\n", "Dual infeasibility......: 6.2945581103354952e-12 6.2945581103354952e-12\n", "Constraint violation....: 0.0000000000000000e+00 0.0000000000000000e+00\n", "Complementarity.........: 9.5933575078181742e-10 9.5933575078181742e-10\n", "Overall NLP error.......: 9.5933575078181742e-10 9.5933575078181742e-10\n", "\n", "\n", "Number of objective function evaluations = 632\n", "Number of objective gradient evaluations = 30\n", "Number of equality constraint evaluations = 0\n", "Number of inequality constraint evaluations = 0\n", "Number of equality constraint Jacobian evaluations = 0\n", "Number of inequality constraint Jacobian evaluations = 0\n", "Number of Lagrangian Hessian evaluations = 0\n", "Total CPU secs in IPOPT (w/o function evaluations) = 0.101\n", "Total CPU secs in NLP function evaluations = 6.869\n", "\n", "EXIT: Optimal Solution Found.\n", " solver : t_proc (avg) t_wall (avg) n_eval\n", " nlp_f | 6.16 s ( 9.74ms) 6.05 s ( 9.58ms) 632\n", " nlp_grad_f | 821.82ms ( 26.51ms) 797.48ms ( 25.73ms) 31\n", " total | 7.04 s ( 7.04 s) 6.91 s ( 6.91 s) 1\n" ] } ], "source": [ "solver = cs.nlpsol(\"solver\",\"ipopt\",prob, options)\n", "res = solver(lbx = -2, ubx = 2)" ] }, { "cell_type": "code", "execution_count": 34, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "DM(-0.812278)" ] }, "execution_count": 34, "metadata": {}, "output_type": "execute_result" } ], "source": [ "res['x']" ] }, { "cell_type": "code", "execution_count": 35, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "DM(-1.91539)" ] }, "execution_count": 35, "metadata": {}, "output_type": "execute_result" } ], "source": [ "gpr(res['x'])" ] }, { "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.9.4" } }, "nbformat": 4, "nbformat_minor": 4 }