{ "nbformat": 4, "nbformat_minor": 0, "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.7.7" }, "colab": { "name": "PMR5251_Aula01.ipynb", "provenance": [], "collapsed_sections": [], "toc_visible": true } }, "cells": [ { "cell_type": "markdown", "metadata": { "id": "1MNpyc1WBC41" }, "source": [ "# Data extraction for AI application in Structural Engineering\n", "_Larissa Driemeier, Izabel F. Machado and Gabriel Lopes Rodrigues_\n", " ![](https://drive.google.com/uc?export=view&id=1yQoXEcvbE4V4uTuP4jFyFvvlpCunZHVn)\n", "\n", "This introductory notebook replicates the geometry of the structure analysed in the paper\n", "[*Background Information of Deep Learning for Structural Engineering*](https://www.researchgate.net/publication/318190131_Background_Information_of_Deep_Learning_for_Structural_Engineering). \n", "\n", "It is based on the [PMR5251 - Class#3](https://edisciplinas.usp.br/pluginfile.php/5728638/mod_resource/content/1/Aula01_Introd_ML.pdf)\n" ] }, { "cell_type": "markdown", "metadata": { "id": "bS02BkT-5T63" }, "source": [ "## Geometry\n", "\n", "The figure below shows a beam like 2D truss with 10 bars. The length of the bars are fixed, however the cross sectional areas are obtained through a random uniform sampling between $0.6$ $cm^2$ and $225.8$ $cm^2$. In total, 500 different structures were generated.\n", "\n", " ![](https://drive.google.com/uc?export=view&id=1vcjpWzeJM_lSJYDQB3od1CF_UBnGeiZE)\n", "\n", "Then, the structure is loaded and analysed in the commercial FE software Abaqus. Since the dimensions in the structure are fixed, the input the set of areas, while all nodal displacements and also bar stresses are computed as output." ] }, { "cell_type": "markdown", "metadata": { "id": "57lFpyyBoFtD" }, "source": [ "## Linear material model \n", "\n", "The material characteristics are generic values for Aluminum alloy 6061, as listed below.\n", "\n", "Property | Value                        | Unity                      \n", "--- | --- | ---\n", "Mass density $\\rho$ | $2.768\\times 10^{-9}$ | $ton/mm^2$\n", "Poisson $\\nu$ | $0.35$ | -\n", "Young's Modulus $E$| $68950$ | $MPa$\n", "Yield stress $\\sigma_{y0}$| $200$ | $MPa$\n", "\n", "The material undergoes elastic deformation until it reaches the elastic limit defined by the yield stress. After the elastic limit, the material exhibits plastic behavior,that is, the material deforms irreversibly and does not return to its original shape and size, even when the load is removed. Initially, only elastic behaviour is considered." ] }, { "cell_type": "markdown", "metadata": { "id": "y-ytuiSdBC43" }, "source": [ "## Libraries\n", "Throughout this notebook the new version 2.0 of Tersorflow was used, with built-in keras support, which has been recently released to the public.\n", "To install it, just follow the instructions in [the official website](https://www.tensorflow.org/install), to guarantee that the right version is installed.\n", "\n", "The rest of the libraries used were simply installed using pip, the default Python tool for installing packages. These include:\n", "\n", "- NumPy: library for dealing with large matrices and also providing optimized functions for these data structures\n", "\n", "- Pandas: used to visualize the data and to work with the dataset.\n", "\n", "- matplotlib: used to generate plots from the models.\n", "\n", "- sklearn (also known as scikit-learn): used because of the many useful functions and utilities it provides for machine learning." ] }, { "cell_type": "code", "metadata": { "id": "sMBfXDXABC43", "outputId": "e02b5530-13d5-40c1-db21-81c25f73ce6d", "colab": { "base_uri": "https://localhost:8080/", "height": 35 } }, "source": [ "import tensorflow as tf\n", "tf.__version__" ], "execution_count": null, "outputs": [ { "output_type": "execute_result", "data": { "application/vnd.google.colaboratory.intrinsic+json": { "type": "string" }, "text/plain": [ "'2.3.0'" ] }, "metadata": { "tags": [] }, "execution_count": 2 } ] }, { "cell_type": "code", "metadata": { "id": "u5ATF9uyBC47" }, "source": [ "from tensorflow import keras\n", "import numpy as np\n", "import pandas as pd" ], "execution_count": null, "outputs": [] }, { "cell_type": "code", "metadata": { "id": "HMEnmW28BC49" }, "source": [ "import matplotlib.pyplot as plt\n", "plt.style.use('fivethirtyeight')\n", "%matplotlib inline" ], "execution_count": null, "outputs": [] }, { "cell_type": "markdown", "metadata": { "id": "UHa54RD05ude" }, "source": [ "## Data Loading and Manipulation\n", "\n", "Uploading four files:\n", "1. the dataset containing the areas, `areas.csv`;\n", "2. displacements and reaction force along the time, `FinalResult.csv`;\n", "\n", "If you prefer generate new data, we suggest to use the student version of the software [Abaqus](https://edu.3ds.com/en/software/abaqus-student-edition). The following files are available in the same [link](https://edisciplinas.usp.br/course/view.php?id=82602#section-3):\n", " 1. To generate random areas `gera_areas_10.py`;\n", " 2. Script to run in Abaqus to generate data `10_bar_truss.py`;\n", " 3. Basic geometry to be called by the script mentioned in item 2 `Job-10-bar.inp`;\n", " 4. Copy the file `extracted_data_DATA_HOUR.csv` as `FinalResult.csv` to upload.\n", "\n", " **Importante**\n", "\n", "O script do item 02 gera automaticamente a geometria de barras no Abaqus. Caso você queira montar uma geometria - pelo menos uma vez - no Abaqus, o Prof Marcilio Alves, gentilmente, preparou um tutorial por nós no [link](https://www.youtube.com/channel/UCEDn-UheEHKLfOKJKmSKzJw). \n" ] }, { "cell_type": "code", "metadata": { "id": "Or0FZJoDncwC", "outputId": "01b03e11-2c44-433d-8897-961b2bb756fa", "colab": { "resources": { "http://localhost:8080/nbextensions/google.colab/files.js": { "data": "Ly8gQ29weXJpZ2h0IDIwMTcgR29vZ2xlIExMQwovLwovLyBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKLy8geW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgovLyBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKLy8KLy8gICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKLy8KLy8gVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQovLyBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAovLyBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KLy8gU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAovLyBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KCi8qKgogKiBAZmlsZW92ZXJ2aWV3IEhlbHBlcnMgZm9yIGdvb2dsZS5jb2xhYiBQeXRob24gbW9kdWxlLgogKi8KKGZ1bmN0aW9uKHNjb3BlKSB7CmZ1bmN0aW9uIHNwYW4odGV4dCwgc3R5bGVBdHRyaWJ1dGVzID0ge30pIHsKICBjb25zdCBlbGVtZW50ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnc3BhbicpOwogIGVsZW1lbnQudGV4dENvbnRlbnQgPSB0ZXh0OwogIGZvciAoY29uc3Qga2V5IG9mIE9iamVjdC5rZXlzKHN0eWxlQXR0cmlidXRlcykpIHsKICAgIGVsZW1lbnQuc3R5bGVba2V5XSA9IHN0eWxlQXR0cmlidXRlc1trZXldOwogIH0KICByZXR1cm4gZWxlbWVudDsKfQoKLy8gTWF4IG51bWJlciBvZiBieXRlcyB3aGljaCB3aWxsIGJlIHVwbG9hZGVkIGF0IGEgdGltZS4KY29uc3QgTUFYX1BBWUxPQURfU0laRSA9IDEwMCAqIDEwMjQ7CgpmdW5jdGlvbiBfdXBsb2FkRmlsZXMoaW5wdXRJZCwgb3V0cHV0SWQpIHsKICBjb25zdCBzdGVwcyA9IHVwbG9hZEZpbGVzU3RlcChpbnB1dElkLCBvdXRwdXRJZCk7CiAgY29uc3Qgb3V0cHV0RWxlbWVudCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKG91dHB1dElkKTsKICAvLyBDYWNoZSBzdGVwcyBvbiB0aGUgb3V0cHV0RWxlbWVudCB0byBtYWtlIGl0IGF2YWlsYWJsZSBmb3IgdGhlIG5leHQgY2FsbAogIC8vIHRvIHVwbG9hZEZpbGVzQ29udGludWUgZnJvbSBQeXRob24uCiAgb3V0cHV0RWxlbWVudC5zdGVwcyA9IHN0ZXBzOwoKICByZXR1cm4gX3VwbG9hZEZpbGVzQ29udGludWUob3V0cHV0SWQpOwp9CgovLyBUaGlzIGlzIHJvdWdobHkgYW4gYXN5bmMgZ2VuZXJhdG9yIChub3Qgc3VwcG9ydGVkIGluIHRoZSBicm93c2VyIHlldCksCi8vIHdoZXJlIHRoZXJlIGFyZSBtdWx0aXBsZSBhc3luY2hyb25vdXMgc3RlcHMgYW5kIHRoZSBQeXRob24gc2lkZSBpcyBnb2luZwovLyB0byBwb2xsIGZvciBjb21wbGV0aW9uIG9mIGVhY2ggc3RlcC4KLy8gVGhpcyB1c2VzIGEgUHJvbWlzZSB0byBibG9jayB0aGUgcHl0aG9uIHNpZGUgb24gY29tcGxldGlvbiBvZiBlYWNoIHN0ZXAsCi8vIHRoZW4gcGFzc2VzIHRoZSByZXN1bHQgb2YgdGhlIHByZXZpb3VzIHN0ZXAgYXMgdGhlIGlucHV0IHRvIHRoZSBuZXh0IHN0ZXAuCmZ1bmN0aW9uIF91cGxvYWRGaWxlc0NvbnRpbnVlKG91dHB1dElkKSB7CiAgY29uc3Qgb3V0cHV0RWxlbWVudCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKG91dHB1dElkKTsKICBjb25zdCBzdGVwcyA9IG91dHB1dEVsZW1lbnQuc3RlcHM7CgogIGNvbnN0IG5leHQgPSBzdGVwcy5uZXh0KG91dHB1dEVsZW1lbnQubGFzdFByb21pc2VWYWx1ZSk7CiAgcmV0dXJuIFByb21pc2UucmVzb2x2ZShuZXh0LnZhbHVlLnByb21pc2UpLnRoZW4oKHZhbHVlKSA9PiB7CiAgICAvLyBDYWNoZSB0aGUgbGFzdCBwcm9taXNlIHZhbHVlIHRvIG1ha2UgaXQgYXZhaWxhYmxlIHRvIHRoZSBuZXh0CiAgICAvLyBzdGVwIG9mIHRoZSBnZW5lcmF0b3IuCiAgICBvdXRwdXRFbGVtZW50Lmxhc3RQcm9taXNlVmFsdWUgPSB2YWx1ZTsKICAgIHJldHVybiBuZXh0LnZhbHVlLnJlc3BvbnNlOwogIH0pOwp9CgovKioKICogR2VuZXJhdG9yIGZ1bmN0aW9uIHdoaWNoIGlzIGNhbGxlZCBiZXR3ZWVuIGVhY2ggYXN5bmMgc3RlcCBvZiB0aGUgdXBsb2FkCiAqIHByb2Nlc3MuCiAqIEBwYXJhbSB7c3RyaW5nfSBpbnB1dElkIEVsZW1lbnQgSUQgb2YgdGhlIGlucHV0IGZpbGUgcGlja2VyIGVsZW1lbnQuCiAqIEBwYXJhbSB7c3RyaW5nfSBvdXRwdXRJZCBFbGVtZW50IElEIG9mIHRoZSBvdXRwdXQgZGlzcGxheS4KICogQHJldHVybiB7IUl0ZXJhYmxlPCFPYmplY3Q+fSBJdGVyYWJsZSBvZiBuZXh0IHN0ZXBzLgogKi8KZnVuY3Rpb24qIHVwbG9hZEZpbGVzU3RlcChpbnB1dElkLCBvdXRwdXRJZCkgewogIGNvbnN0IGlucHV0RWxlbWVudCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKGlucHV0SWQpOwogIGlucHV0RWxlbWVudC5kaXNhYmxlZCA9IGZhbHNlOwoKICBjb25zdCBvdXRwdXRFbGVtZW50ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQob3V0cHV0SWQpOwogIG91dHB1dEVsZW1lbnQuaW5uZXJIVE1MID0gJyc7CgogIGNvbnN0IHBpY2tlZFByb21pc2UgPSBuZXcgUHJvbWlzZSgocmVzb2x2ZSkgPT4gewogICAgaW5wdXRFbGVtZW50LmFkZEV2ZW50TGlzdGVuZXIoJ2NoYW5nZScsIChlKSA9PiB7CiAgICAgIHJlc29sdmUoZS50YXJnZXQuZmlsZXMpOwogICAgfSk7CiAgfSk7CgogIGNvbnN0IGNhbmNlbCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2J1dHRvbicpOwogIGlucHV0RWxlbWVudC5wYXJlbnRFbGVtZW50LmFwcGVuZENoaWxkKGNhbmNlbCk7CiAgY2FuY2VsLnRleHRDb250ZW50ID0gJ0NhbmNlbCB1cGxvYWQnOwogIGNvbnN0IGNhbmNlbFByb21pc2UgPSBuZXcgUHJvbWlzZSgocmVzb2x2ZSkgPT4gewogICAgY2FuY2VsLm9uY2xpY2sgPSAoKSA9PiB7CiAgICAgIHJlc29sdmUobnVsbCk7CiAgICB9OwogIH0pOwoKICAvLyBXYWl0IGZvciB0aGUgdXNlciB0byBwaWNrIHRoZSBmaWxlcy4KICBjb25zdCBmaWxlcyA9IHlpZWxkIHsKICAgIHByb21pc2U6IFByb21pc2UucmFjZShbcGlja2VkUHJvbWlzZSwgY2FuY2VsUHJvbWlzZV0pLAogICAgcmVzcG9uc2U6IHsKICAgICAgYWN0aW9uOiAnc3RhcnRpbmcnLAogICAgfQogIH07CgogIGNhbmNlbC5yZW1vdmUoKTsKCiAgLy8gRGlzYWJsZSB0aGUgaW5wdXQgZWxlbWVudCBzaW5jZSBmdXJ0aGVyIHBpY2tzIGFyZSBub3QgYWxsb3dlZC4KICBpbnB1dEVsZW1lbnQuZGlzYWJsZWQgPSB0cnVlOwoKICBpZiAoIWZpbGVzKSB7CiAgICByZXR1cm4gewogICAgICByZXNwb25zZTogewogICAgICAgIGFjdGlvbjogJ2NvbXBsZXRlJywKICAgICAgfQogICAgfTsKICB9CgogIGZvciAoY29uc3QgZmlsZSBvZiBmaWxlcykgewogICAgY29uc3QgbGkgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdsaScpOwogICAgbGkuYXBwZW5kKHNwYW4oZmlsZS5uYW1lLCB7Zm9udFdlaWdodDogJ2JvbGQnfSkpOwogICAgbGkuYXBwZW5kKHNwYW4oCiAgICAgICAgYCgke2ZpbGUudHlwZSB8fCAnbi9hJ30pIC0gJHtmaWxlLnNpemV9IGJ5dGVzLCBgICsKICAgICAgICBgbGFzdCBtb2RpZmllZDogJHsKICAgICAgICAgICAgZmlsZS5sYXN0TW9kaWZpZWREYXRlID8gZmlsZS5sYXN0TW9kaWZpZWREYXRlLnRvTG9jYWxlRGF0ZVN0cmluZygpIDoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ24vYSd9IC0gYCkpOwogICAgY29uc3QgcGVyY2VudCA9IHNwYW4oJzAlIGRvbmUnKTsKICAgIGxpLmFwcGVuZENoaWxkKHBlcmNlbnQpOwoKICAgIG91dHB1dEVsZW1lbnQuYXBwZW5kQ2hpbGQobGkpOwoKICAgIGNvbnN0IGZpbGVEYXRhUHJvbWlzZSA9IG5ldyBQcm9taXNlKChyZXNvbHZlKSA9PiB7CiAgICAgIGNvbnN0IHJlYWRlciA9IG5ldyBGaWxlUmVhZGVyKCk7CiAgICAgIHJlYWRlci5vbmxvYWQgPSAoZSkgPT4gewogICAgICAgIHJlc29sdmUoZS50YXJnZXQucmVzdWx0KTsKICAgICAgfTsKICAgICAgcmVhZGVyLnJlYWRBc0FycmF5QnVmZmVyKGZpbGUpOwogICAgfSk7CiAgICAvLyBXYWl0IGZvciB0aGUgZGF0YSB0byBiZSByZWFkeS4KICAgIGxldCBmaWxlRGF0YSA9IHlpZWxkIHsKICAgICAgcHJvbWlzZTogZmlsZURhdGFQcm9taXNlLAogICAgICByZXNwb25zZTogewogICAgICAgIGFjdGlvbjogJ2NvbnRpbnVlJywKICAgICAgfQogICAgfTsKCiAgICAvLyBVc2UgYSBjaHVua2VkIHNlbmRpbmcgdG8gYXZvaWQgbWVzc2FnZSBzaXplIGxpbWl0cy4gU2VlIGIvNjIxMTU2NjAuCiAgICBsZXQgcG9zaXRpb24gPSAwOwogICAgd2hpbGUgKHBvc2l0aW9uIDwgZmlsZURhdGEuYnl0ZUxlbmd0aCkgewogICAgICBjb25zdCBsZW5ndGggPSBNYXRoLm1pbihmaWxlRGF0YS5ieXRlTGVuZ3RoIC0gcG9zaXRpb24sIE1BWF9QQVlMT0FEX1NJWkUpOwogICAgICBjb25zdCBjaHVuayA9IG5ldyBVaW50OEFycmF5KGZpbGVEYXRhLCBwb3NpdGlvbiwgbGVuZ3RoKTsKICAgICAgcG9zaXRpb24gKz0gbGVuZ3RoOwoKICAgICAgY29uc3QgYmFzZTY0ID0gYnRvYShTdHJpbmcuZnJvbUNoYXJDb2RlLmFwcGx5KG51bGwsIGNodW5rKSk7CiAgICAgIHlpZWxkIHsKICAgICAgICByZXNwb25zZTogewogICAgICAgICAgYWN0aW9uOiAnYXBwZW5kJywKICAgICAgICAgIGZpbGU6IGZpbGUubmFtZSwKICAgICAgICAgIGRhdGE6IGJhc2U2NCwKICAgICAgICB9LAogICAgICB9OwogICAgICBwZXJjZW50LnRleHRDb250ZW50ID0KICAgICAgICAgIGAke01hdGgucm91bmQoKHBvc2l0aW9uIC8gZmlsZURhdGEuYnl0ZUxlbmd0aCkgKiAxMDApfSUgZG9uZWA7CiAgICB9CiAgfQoKICAvLyBBbGwgZG9uZS4KICB5aWVsZCB7CiAgICByZXNwb25zZTogewogICAgICBhY3Rpb246ICdjb21wbGV0ZScsCiAgICB9CiAgfTsKfQoKc2NvcGUuZ29vZ2xlID0gc2NvcGUuZ29vZ2xlIHx8IHt9OwpzY29wZS5nb29nbGUuY29sYWIgPSBzY29wZS5nb29nbGUuY29sYWIgfHwge307CnNjb3BlLmdvb2dsZS5jb2xhYi5fZmlsZXMgPSB7CiAgX3VwbG9hZEZpbGVzLAogIF91cGxvYWRGaWxlc0NvbnRpbnVlLAp9Owp9KShzZWxmKTsK", "ok": true, "headers": [ [ "content-type", "application/javascript" ] ], "status": 200, "status_text": "" } }, "base_uri": "https://localhost:8080/", "height": 106 } }, "source": [ "from google.colab import files\n", "uploaded = files.upload()" ], "execution_count": 5, "outputs": [ { "output_type": "display_data", "data": { "text/html": [ "\n", " \n", " \n", " Upload widget is only available when the cell has been executed in the\n", " current browser session. Please rerun this cell to enable.\n", " \n", " " ], "text/plain": [ "" ] }, "metadata": { "tags": [] } }, { "output_type": "stream", "text": [ "Saving areas.csv to areas.csv\n", "Saving FinalResult.csv to FinalResult.csv\n" ], "name": "stdout" } ] }, { "cell_type": "markdown", "metadata": { "id": "82ahz20vBC5C" }, "source": [ "As shown below, there are 10 different areas, which will be the inputs, and various other measurements, which might be used as outputs of the Neural Network" ] }, { "cell_type": "code", "metadata": { "id": "qJAFdYK8BC5A" }, "source": [ "df = pd.read_csv('FinalResult.csv', index_col=0)" ], "execution_count": 7, "outputs": [] }, { "cell_type": "code", "metadata": { "id": "tpm5RpQdBC5D", "outputId": "5af4217e-bc40-4a87-9564-98b291308d04", "colab": { "base_uri": "https://localhost:8080/", "height": 672 } }, "source": [ "df.dtypes" ], "execution_count": 8, "outputs": [ { "output_type": "execute_result", "data": { "text/plain": [ "area1 float64\n", "area2 float64\n", "area3 float64\n", "area4 float64\n", "area5 float64\n", "area6 float64\n", "area7 float64\n", "area8 float64\n", "area9 float64\n", "area10 float64\n", "d1 float64\n", "d2 float64\n", "d3 float64\n", "d4 float64\n", "d5 float64\n", "d6 float64\n", "d7 float64\n", "d8 float64\n", "s11_1 float64\n", "s11_2 float64\n", "s11_3 float64\n", "s11_4 float64\n", "s11_5 float64\n", "s11_6 float64\n", "s11_7 float64\n", "s11_8 float64\n", "s11_9 float64\n", "s11_10 float64\n", "mises_1 float64\n", "mises_2 float64\n", "mises_3 float64\n", "mises_4 float64\n", "mises_5 float64\n", "mises_6 float64\n", "mises_7 float64\n", "mises_8 float64\n", "mises_9 float64\n", "mises_10 float64\n", "dtype: object" ] }, "metadata": { "tags": [] }, "execution_count": 8 } ] }, { "cell_type": "code", "metadata": { "id": "h2P15QlKBC5F", "outputId": "75d9b591-60b7-4ac6-b364-9de928e1f322", "colab": { "base_uri": "https://localhost:8080/", "height": 245 } }, "source": [ "# To show all the columns\n", "pd.set_option('display.max_columns', None)\n", "df.head()" ], "execution_count": 9, "outputs": [ { "output_type": "execute_result", "data": { "text/html": [ "
\n", "\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
area1area2area3area4area5area6area7area8area9area10d1d2d3d4d5d6d7d8s11_1s11_2s11_3s11_4s11_5s11_6s11_7s11_8s11_9s11_10mises_1mises_2mises_3mises_4mises_5mises_6mises_7mises_8mises_9mises_10
iteration
00.0030860.0191440.0172600.0058040.0112170.0101830.0147340.0178220.0021740.00069810.579137-70.774597-24.355942-71.5503926.575743-16.113703-8.060376-16.891342-122876112.05863760.0030187446.05849860.5-60778972.049584148.0-132877080.033294788.0-35960320.092389552.0122876112.05863760.0030187446.05849860.560778972.049584148.0132877080.033294788.035960320.092389552.0
10.0188810.0098060.0172270.0001070.0100900.0163090.0052120.0213470.0203600.0007499.366341-245.959854-17.619713-251.0329446.852213-21.184267-17.206579-26.058153-3115212.036751352.0018957688.038253380.0-129745584.051668864.0-728894336.033372482.0-54035168.0774317952.03115212.036751352.0018957688.038253380.0129745584.051668864.0728894336.033372482.054035168.0774317952.0
20.0006330.0122530.0212100.0086450.0049380.0095660.0007140.0050520.0099210.01122641.207355-185.375214-96.529587-193.67851337.074791-54.188625-68.113937-65.723526-214267184.086978520.0031161468.062610644.0-513610688.0279561120.0-38947984.0-9012399.0-64523128.022189706.0214267184.086978520.0031161468.062610644.0513610688.0279561120.038947984.09012399.064523128.022189706.0
30.0053090.0052590.0049870.0104100.0065860.0005440.0189220.0125910.0145240.0042479.551858-69.896049-15.171593-72.0827948.560319-36.236866-6.773345-43.978748-63326688.058377396.007476665.016489037.0-51074160.064548776.0-36164440.0140273008.0-104346992.045672644.063326688.058377396.007476665.016489037.051074160.064548776.036164440.0140273008.0104346992.045672644.0
40.0224120.0194260.0027820.0075520.0163080.0160760.0211490.0095660.0187520.0151559.622062-46.439331-8.717741-48.5901377.751640-23.164854-7.650749-22.620508-8045611.0-4104622.7514103846.016218065.0-57690196.058450960.0-24679984.056439460.0-58111388.033765824.08045611.04104622.7514103846.016218065.057690196.058450960.024679984.056439460.058111388.033765824.0
\n", "
" ], "text/plain": [ " area1 area2 area3 area4 area5 area6 \\\n", "iteration \n", "0 0.003086 0.019144 0.017260 0.005804 0.011217 0.010183 \n", "1 0.018881 0.009806 0.017227 0.000107 0.010090 0.016309 \n", "2 0.000633 0.012253 0.021210 0.008645 0.004938 0.009566 \n", "3 0.005309 0.005259 0.004987 0.010410 0.006586 0.000544 \n", "4 0.022412 0.019426 0.002782 0.007552 0.016308 0.016076 \n", "\n", " area7 area8 area9 area10 d1 d2 \\\n", "iteration \n", "0 0.014734 0.017822 0.002174 0.000698 10.579137 -70.774597 \n", "1 0.005212 0.021347 0.020360 0.000749 9.366341 -245.959854 \n", "2 0.000714 0.005052 0.009921 0.011226 41.207355 -185.375214 \n", "3 0.018922 0.012591 0.014524 0.004247 9.551858 -69.896049 \n", "4 0.021149 0.009566 0.018752 0.015155 9.622062 -46.439331 \n", "\n", " d3 d4 d5 d6 d7 d8 \\\n", "iteration \n", "0 -24.355942 -71.550392 6.575743 -16.113703 -8.060376 -16.891342 \n", "1 -17.619713 -251.032944 6.852213 -21.184267 -17.206579 -26.058153 \n", "2 -96.529587 -193.678513 37.074791 -54.188625 -68.113937 -65.723526 \n", "3 -15.171593 -72.082794 8.560319 -36.236866 -6.773345 -43.978748 \n", "4 -8.717741 -48.590137 7.751640 -23.164854 -7.650749 -22.620508 \n", "\n", " s11_1 s11_2 s11_3 s11_4 s11_5 \\\n", "iteration \n", "0 -122876112.0 5863760.00 30187446.0 5849860.5 -60778972.0 \n", "1 -3115212.0 36751352.00 18957688.0 38253380.0 -129745584.0 \n", "2 -214267184.0 86978520.00 31161468.0 62610644.0 -513610688.0 \n", "3 -63326688.0 58377396.00 7476665.0 16489037.0 -51074160.0 \n", "4 -8045611.0 -4104622.75 14103846.0 16218065.0 -57690196.0 \n", "\n", " s11_6 s11_7 s11_8 s11_9 s11_10 \\\n", "iteration \n", "0 49584148.0 -132877080.0 33294788.0 -35960320.0 92389552.0 \n", "1 51668864.0 -728894336.0 33372482.0 -54035168.0 774317952.0 \n", "2 279561120.0 -38947984.0 -9012399.0 -64523128.0 22189706.0 \n", "3 64548776.0 -36164440.0 140273008.0 -104346992.0 45672644.0 \n", "4 58450960.0 -24679984.0 56439460.0 -58111388.0 33765824.0 \n", "\n", " mises_1 mises_2 mises_3 mises_4 mises_5 \\\n", "iteration \n", "0 122876112.0 5863760.00 30187446.0 5849860.5 60778972.0 \n", "1 3115212.0 36751352.00 18957688.0 38253380.0 129745584.0 \n", "2 214267184.0 86978520.00 31161468.0 62610644.0 513610688.0 \n", "3 63326688.0 58377396.00 7476665.0 16489037.0 51074160.0 \n", "4 8045611.0 4104622.75 14103846.0 16218065.0 57690196.0 \n", "\n", " mises_6 mises_7 mises_8 mises_9 mises_10 \n", "iteration \n", "0 49584148.0 132877080.0 33294788.0 35960320.0 92389552.0 \n", "1 51668864.0 728894336.0 33372482.0 54035168.0 774317952.0 \n", "2 279561120.0 38947984.0 9012399.0 64523128.0 22189706.0 \n", "3 64548776.0 36164440.0 140273008.0 104346992.0 45672644.0 \n", "4 58450960.0 24679984.0 56439460.0 58111388.0 33765824.0 " ] }, "metadata": { "tags": [] }, "execution_count": 9 } ] }, { "cell_type": "markdown", "metadata": { "id": "-WGv5XThBC5H" }, "source": [ "### Splitting dataset\n", "\n", "The whole dataset will be split into training and test sets. The training set will be used to train the model and the test set to verify its performance.\n", "\n", "\n", "\n" ] }, { "cell_type": "code", "metadata": { "id": "uyOEcTmLBC5I" }, "source": [ "from sklearn.model_selection import train_test_split\n", "train, test = train_test_split(df, test_size=0.2, random_state=1)" ], "execution_count": 11, "outputs": [] }, { "cell_type": "code", "metadata": { "id": "jardg69qBC5K", "outputId": "6eb4a236-2f19-4b7b-c6c6-f2bb63a278cd", "colab": { "base_uri": "https://localhost:8080/", "height": 245 } }, "source": [ "train.head()" ], "execution_count": 12, "outputs": [ { "output_type": "execute_result", "data": { "text/html": [ "
\n", "\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
area1area2area3area4area5area6area7area8area9area10d1d2d3d4d5d6d7d8s11_1s11_2s11_3s11_4s11_5s11_6s11_7s11_8s11_9s11_10mises_1mises_2mises_3mises_4mises_5mises_6mises_7mises_8mises_9mises_10
iteration
2010.0209590.0052350.0191970.0100050.0200770.0023490.0012710.0106060.0210140.01053916.004036-120.325661-53.915527-120.18594416.137526-32.663422-50.967178-54.107288-22231914.01.616967e+08-1.006564e+06-1.053551e+06-384316160.0121684416.02838388.5011838953.0-62306460.065863956.022231914.01.616967e+081.006564e+061.053551e+06384316160.0121684416.02838388.5011838953.062306460.065863956.0
920.0225290.0058680.0116310.0167140.0156290.0098220.0175580.0110000.0161720.01112612.547656-53.592022-8.100519-54.67098211.504974-27.936739-6.230652-30.526878-14099667.01.953085e+077.862298e+068.135870e+06-46982004.086752840.0-16162369.0091602400.0-61951560.026877044.014099667.01.953085e+077.862298e+068.135870e+0646982004.086752840.016162369.0091602400.061951560.026877044.0
3440.0032190.0123110.0178840.0161570.0032170.0211460.0210480.0081380.0220800.00435014.224157-54.255360-18.496674-60.12879613.368400-21.245007-6.041500-21.704147-93917784.03.462124e+066.452812e+064.428844e+07-45555708.0100803928.0-46319392.0059051812.0-29696636.026462190.093917784.03.462124e+066.452812e+064.428844e+0745555708.0100803928.046319392.0059051812.029696636.026462190.0
1190.0152170.0201340.0039380.0145350.0110370.0077390.0160590.0220210.0005480.02026718.363760-50.452175-12.587241-51.1659433.985027-24.647602-9.228423-21.760574-25327046.0-2.176952e+071.084223e+085.382156e+06-69586584.030048950.0-4145055.7547249120.0-77902696.037499008.025327046.02.176952e+071.084223e+085.382156e+0669586584.030048950.04145055.7547249120.077902696.037499008.0
2210.0004900.0029860.0065510.0106980.0006630.0015720.0179950.0221350.0097660.0106408.433659-77.570465-70.816208-118.8271415.633955-34.009995-6.182016-55.686005-487371776.01.634472e+082.111106e+073.110945e+08-46615268.042482636.0-27404998.00186641504.0-106984240.031545470.0487371776.01.634472e+082.111106e+073.110945e+0846615268.042482636.027404998.00186641504.0106984240.031545470.0
\n", "
" ], "text/plain": [ " area1 area2 area3 area4 area5 area6 \\\n", "iteration \n", "201 0.020959 0.005235 0.019197 0.010005 0.020077 0.002349 \n", "92 0.022529 0.005868 0.011631 0.016714 0.015629 0.009822 \n", "344 0.003219 0.012311 0.017884 0.016157 0.003217 0.021146 \n", "119 0.015217 0.020134 0.003938 0.014535 0.011037 0.007739 \n", "221 0.000490 0.002986 0.006551 0.010698 0.000663 0.001572 \n", "\n", " area7 area8 area9 area10 d1 d2 \\\n", "iteration \n", "201 0.001271 0.010606 0.021014 0.010539 16.004036 -120.325661 \n", "92 0.017558 0.011000 0.016172 0.011126 12.547656 -53.592022 \n", "344 0.021048 0.008138 0.022080 0.004350 14.224157 -54.255360 \n", "119 0.016059 0.022021 0.000548 0.020267 18.363760 -50.452175 \n", "221 0.017995 0.022135 0.009766 0.010640 8.433659 -77.570465 \n", "\n", " d3 d4 d5 d6 d7 d8 \\\n", "iteration \n", "201 -53.915527 -120.185944 16.137526 -32.663422 -50.967178 -54.107288 \n", "92 -8.100519 -54.670982 11.504974 -27.936739 -6.230652 -30.526878 \n", "344 -18.496674 -60.128796 13.368400 -21.245007 -6.041500 -21.704147 \n", "119 -12.587241 -51.165943 3.985027 -24.647602 -9.228423 -21.760574 \n", "221 -70.816208 -118.827141 5.633955 -34.009995 -6.182016 -55.686005 \n", "\n", " s11_1 s11_2 s11_3 s11_4 s11_5 \\\n", "iteration \n", "201 -22231914.0 1.616967e+08 -1.006564e+06 -1.053551e+06 -384316160.0 \n", "92 -14099667.0 1.953085e+07 7.862298e+06 8.135870e+06 -46982004.0 \n", "344 -93917784.0 3.462124e+06 6.452812e+06 4.428844e+07 -45555708.0 \n", "119 -25327046.0 -2.176952e+07 1.084223e+08 5.382156e+06 -69586584.0 \n", "221 -487371776.0 1.634472e+08 2.111106e+07 3.110945e+08 -46615268.0 \n", "\n", " s11_6 s11_7 s11_8 s11_9 s11_10 \\\n", "iteration \n", "201 121684416.0 2838388.50 11838953.0 -62306460.0 65863956.0 \n", "92 86752840.0 -16162369.00 91602400.0 -61951560.0 26877044.0 \n", "344 100803928.0 -46319392.00 59051812.0 -29696636.0 26462190.0 \n", "119 30048950.0 -4145055.75 47249120.0 -77902696.0 37499008.0 \n", "221 42482636.0 -27404998.00 186641504.0 -106984240.0 31545470.0 \n", "\n", " mises_1 mises_2 mises_3 mises_4 mises_5 \\\n", "iteration \n", "201 22231914.0 1.616967e+08 1.006564e+06 1.053551e+06 384316160.0 \n", "92 14099667.0 1.953085e+07 7.862298e+06 8.135870e+06 46982004.0 \n", "344 93917784.0 3.462124e+06 6.452812e+06 4.428844e+07 45555708.0 \n", "119 25327046.0 2.176952e+07 1.084223e+08 5.382156e+06 69586584.0 \n", "221 487371776.0 1.634472e+08 2.111106e+07 3.110945e+08 46615268.0 \n", "\n", " mises_6 mises_7 mises_8 mises_9 mises_10 \n", "iteration \n", "201 121684416.0 2838388.50 11838953.0 62306460.0 65863956.0 \n", "92 86752840.0 16162369.00 91602400.0 61951560.0 26877044.0 \n", "344 100803928.0 46319392.00 59051812.0 29696636.0 26462190.0 \n", "119 30048950.0 4145055.75 47249120.0 77902696.0 37499008.0 \n", "221 42482636.0 27404998.00 186641504.0 106984240.0 31545470.0 " ] }, "metadata": { "tags": [] }, "execution_count": 12 } ] }, { "cell_type": "code", "metadata": { "id": "acRAZpUHBC5M", "outputId": "3b553487-898b-47ab-b042-bec9d9828f9a", "colab": { "base_uri": "https://localhost:8080/", "height": 34 } }, "source": [ "train.shape, test.shape" ], "execution_count": null, "outputs": [ { "output_type": "execute_result", "data": { "text/plain": [ "((416, 38), (104, 38))" ] }, "metadata": { "tags": [] }, "execution_count": 10 } ] }, { "cell_type": "markdown", "metadata": { "id": "AtoamKYSBC5O" }, "source": [ "### Defining the training values and the expected outputs\n", "\n", "The input for the NN is a vector with all 10 areas that compound the geometry of the structure. Remember that we mantain all other parameters, such as material properties and dimensions, fixed.\n", "\n", "As output for the NN, let's generate an array of displacements (\\[*d2*, *d4*\\]). These correspond to the vertical displacements of the rightmost nodes of the structure.\n" ] }, { "cell_type": "code", "metadata": { "id": "2l5vD_siBC5P" }, "source": [ "x_train = train.loc[:,'area1':'area10'].values\n", "y_train = train[['d2', 'd4']].values\n", "x_test = test.loc[:,'area1':'area10'].values\n", "y_test = test[['d2', 'd4']].values" ], "execution_count": null, "outputs": [] }, { "cell_type": "markdown", "metadata": { "id": "5G27Ww8pvUC-" }, "source": [ "### FEA results\n", "\n", "Read the results from FEA, where `d2` and `d4` are the displacements at the rightmost nodes of the structure to see the variation our future NN has to learn." ] }, { "cell_type": "code", "metadata": { "id": "9JW7edpTvEjK", "outputId": "a7c1921e-7041-40ae-aede-6b16078c2df1", "colab": { "base_uri": "https://localhost:8080/", "height": 279 } }, "source": [ "disp2 = df[['d2']].values\n", "disp4 = df[['d4']].values\n", "xAxis = [i + 1.0 for i, _ in enumerate(disp2)]\n", "plt.scatter(xAxis,disp2,color='firebrick',s=6, label =r'$d_2$')\n", "plt.scatter(xAxis,disp4,color='darkslateblue',s=8, label =r'$d_4$')\n", "plt.title('Displacements at the end of the truss structure')\n", "plt.legend()\n", "plt.show()" ], "execution_count": null, "outputs": [ { "output_type": "display_data", "data": { "image/png": "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\n", "text/plain": [ "
" ] }, "metadata": { "tags": [], "needs_background": "light" } } ] }, { "cell_type": "markdown", "metadata": { "id": "NZHeVHAdBC5R" }, "source": [ "### Normalizing Dataset\n", "\n", "As the paper has done, the input data was normalized, to obtain better results.\n", "\n", "The normalizer of the sklearn library was used to facilitate the process." ] }, { "cell_type": "code", "metadata": { "id": "CRF7EoS0BC5S" }, "source": [ "from sklearn import preprocessing\n", "\n", "normalizer = preprocessing.StandardScaler().fit(x_train)\n", "x_train_norm = normalizer.transform(x_train)\n", "x_test_norm = normalizer.transform(x_test)" ], "execution_count": null, "outputs": [] }, { "cell_type": "markdown", "metadata": { "id": "uEQDFdR0BC5U" }, "source": [ "As can be seen below, the mean and standard deviation for the training set are, respectively, approximately 0 and 1. Since the dataset is normalized with respect to the training set, \n", "for the test data the mean and standard deviation are, in this case, slightly different." ] }, { "cell_type": "code", "metadata": { "id": "GQjQ8vqRBC5U", "outputId": "e9eadc75-ed77-4dac-e665-12426289d6cd", "colab": { "base_uri": "https://localhost:8080/", "height": 50 } }, "source": [ "# Mean\n", "mean_train = np.mean(x_train_norm)\n", "mean_test = np.mean(x_test_norm)\n", "\n", "# Standard Deviation\n", "std_train = np.std(x_train_norm)\n", "std_test = np.std(x_test_norm)\n", "\n", "print('For the training set, the mean is {:2.4f} and the standard deviation is {:2.4f}'.format(mean_train,std_train))\n", "print('For the test set, the mean is {:2.4f} and the standard deviation is {:2.4f}'.format(mean_test,std_test))\n" ], "execution_count": null, "outputs": [ { "output_type": "stream", "text": [ "For the training set, the mean is -0.0000 and the standard deviation is 1.0000\n", "For the test set, the mean is -0.0043 and the standard deviation is 0.9993\n" ], "name": "stdout" } ] } ] }