{ "cells": [ { "cell_type": "markdown", "metadata": {}, "source": [ "## Generated Recipes for evaluation" ] }, { "cell_type": "code", "execution_count": 1, "metadata": {}, "outputs": [], "source": [ "import sys\n", "sys.path.append(\"../\")\n", "sys.path.append(\"../EvolutionaryAlgorithm/\")" ] }, { "cell_type": "code", "execution_count": 2, "metadata": {}, "outputs": [ { "data": { "text/html": [ " \n", " " ] }, "metadata": {}, "output_type": "display_data" }, { "data": { "text/html": [ " \n", " " ] }, "metadata": {}, "output_type": "display_data" }, { "name": "stderr", "output_type": "stream", "text": [ "../EvolutionaryAlgorithm/EvolutionaryAlgorithm.py:60: TqdmExperimentalWarning:\n", "\n", "Using `tqdm.autonotebook.tqdm` in notebook mode. Use `tqdm.tqdm` instead to force console mode (e.g. in jupyter console)\n", "\n" ] } ], "source": [ "import EvolutionaryAlgorithm as EA" ] }, { "cell_type": "code", "execution_count": 3, "metadata": {}, "outputs": [], "source": [ "import json\n", "import numpy as np" ] }, { "cell_type": "code", "execution_count": 21, "metadata": {}, "outputs": [ { "data": { "application/vnd.jupyter.widget-view+json": { "model_id": "ff3e966495934c2aa709552707de2b4d", "version_major": 2, "version_minor": 0 }, "text/plain": [ "HBox(children=(FloatProgress(value=0.0, description='build initial population', max=75.0, style=ProgressStyle(…" ] }, "metadata": {}, "output_type": "display_data" }, { "name": "stdout", "output_type": "stream", "text": [ "\n" ] }, { "data": { "application/vnd.jupyter.widget-view+json": { "model_id": "9ff44ec2409b4fc28a890e59a49e4a88", "version_major": 2, "version_minor": 0 }, "text/plain": [ "HBox(children=(FloatProgress(value=0.0, description='run evolutionary cycles', max=35.0, style=ProgressStyle(d…" ] }, "metadata": {}, "output_type": "display_data" }, { "name": "stdout", "output_type": "stream", "text": [ "\n" ] }, { "data": { "application/vnd.jupyter.widget-view+json": { "model_id": "ec252693c93c447e965f643327308a1d", "version_major": 2, "version_minor": 0 }, "text/plain": [ "HBox(children=(FloatProgress(value=0.0, description='build initial population', max=75.0, style=ProgressStyle(…" ] }, "metadata": {}, "output_type": "display_data" }, { "name": "stdout", "output_type": "stream", "text": [ "\n" ] }, { "data": { "application/vnd.jupyter.widget-view+json": { "model_id": "5196b4ed2472483189f37f8fe609ee7d", "version_major": 2, "version_minor": 0 }, "text/plain": [ "HBox(children=(FloatProgress(value=0.0, description='run evolutionary cycles', max=35.0, style=ProgressStyle(d…" ] }, "metadata": {}, "output_type": "display_data" }, { "name": "stdout", "output_type": "stream", "text": [ "\n" ] }, { "data": { "application/vnd.jupyter.widget-view+json": { "model_id": "35085bd93fcb4f56b3e0e1580c2ac3ac", "version_major": 2, "version_minor": 0 }, "text/plain": [ "HBox(children=(FloatProgress(value=0.0, description='build initial population', max=75.0, style=ProgressStyle(…" ] }, "metadata": {}, "output_type": "display_data" }, { "name": "stdout", "output_type": "stream", "text": [ "\n" ] }, { "data": { "application/vnd.jupyter.widget-view+json": { "model_id": "c1cf78ab6a44435e85256371868aadc2", "version_major": 2, "version_minor": 0 }, "text/plain": [ "HBox(children=(FloatProgress(value=0.0, description='run evolutionary cycles', max=35.0, style=ProgressStyle(d…" ] }, "metadata": {}, "output_type": "display_data" }, { "name": "stdout", "output_type": "stream", "text": [ "\n" ] }, { "data": { "application/vnd.jupyter.widget-view+json": { "model_id": "35e5e4e9930046729edb60999a2eb217", "version_major": 2, "version_minor": 0 }, "text/plain": [ "HBox(children=(FloatProgress(value=0.0, description='build initial population', max=75.0, style=ProgressStyle(…" ] }, "metadata": {}, "output_type": "display_data" }, { "name": "stdout", "output_type": "stream", "text": [ "\n" ] }, { "data": { "application/vnd.jupyter.widget-view+json": { "model_id": "17fa2f6a52264986aa0b5a93ecc3a2c3", "version_major": 2, "version_minor": 0 }, "text/plain": [ "HBox(children=(FloatProgress(value=0.0, description='run evolutionary cycles', max=35.0, style=ProgressStyle(d…" ] }, "metadata": {}, "output_type": "display_data" }, { "name": "stdout", "output_type": "stream", "text": [ "\n" ] }, { "data": { "application/vnd.jupyter.widget-view+json": { "model_id": "d8201b09b3054dfe9bbb8483900a5d6e", "version_major": 2, "version_minor": 0 }, "text/plain": [ "HBox(children=(FloatProgress(value=0.0, description='build initial population', max=75.0, style=ProgressStyle(…" ] }, "metadata": {}, "output_type": "display_data" }, { "name": "stdout", "output_type": "stream", "text": [ "\n" ] }, { "data": { "application/vnd.jupyter.widget-view+json": { "model_id": "75f8cff69b7548338289ef9b97d955d1", "version_major": 2, "version_minor": 0 }, "text/plain": [ "HBox(children=(FloatProgress(value=0.0, description='run evolutionary cycles', max=35.0, style=ProgressStyle(d…" ] }, "metadata": {}, "output_type": "display_data" }, { "name": "stdout", "output_type": "stream", "text": [ "Warning: cannot find matching action node for mutation\n", "Warning: cannot mutate given node\n", "Warning: cannot mutate given node\n", "Warning: cannot find matching action node for mutation\n", "Warning: cannot mutate given node\n", "Warning: cannot mutate given node\n", "Warning: cannot find matching action node for mutation\n", "Warning: cannot find matching action node for mutation\n", "Warning: cannot find matching action node for mutation\n", "\n" ] }, { "data": { "application/vnd.jupyter.widget-view+json": { "model_id": "5a8635c7c7cf42acb0ba82ae3c3ee93a", "version_major": 2, "version_minor": 0 }, "text/plain": [ "HBox(children=(FloatProgress(value=0.0, description='build initial population', max=75.0, style=ProgressStyle(…" ] }, "metadata": {}, "output_type": "display_data" }, { "name": "stdout", "output_type": "stream", "text": [ "\n" ] }, { "data": { "application/vnd.jupyter.widget-view+json": { "model_id": "54205229ba31456e8b8c68e3db96d598", "version_major": 2, "version_minor": 0 }, "text/plain": [ "HBox(children=(FloatProgress(value=0.0, description='run evolutionary cycles', max=35.0, style=ProgressStyle(d…" ] }, "metadata": {}, "output_type": "display_data" }, { "name": "stdout", "output_type": "stream", "text": [ "Warning: cannot mutate given node\n", "Warning: cannot find matching action node for mutation\n", "Warning: cannot find matching action node for mutation\n", "Warning: cannot mutate given node\n", "Warning: cannot find matching action node for mutation\n", "Warning: cannot mutate given node\n", "Warning: cannot find matching action node for mutation\n", "Warning: cannot mutate given node\n", "Warning: cannot find matching action node for mutation\n", "\n" ] }, { "data": { "application/vnd.jupyter.widget-view+json": { "model_id": "762a1932d1fa42ebbdd018bbe6f3cce8", "version_major": 2, "version_minor": 0 }, "text/plain": [ "HBox(children=(FloatProgress(value=0.0, description='build initial population', max=75.0, style=ProgressStyle(…" ] }, "metadata": {}, "output_type": "display_data" }, { "name": "stdout", "output_type": "stream", "text": [ "\n" ] }, { "data": { "application/vnd.jupyter.widget-view+json": { "model_id": "548c081efdad4ede9311919e3b89e2b5", "version_major": 2, "version_minor": 0 }, "text/plain": [ "HBox(children=(FloatProgress(value=0.0, description='run evolutionary cycles', max=35.0, style=ProgressStyle(d…" ] }, "metadata": {}, "output_type": "display_data" }, { "name": "stdout", "output_type": "stream", "text": [ "Warning: cannot find matching action node for mutation\n", "\n" ] }, { "data": { "application/vnd.jupyter.widget-view+json": { "model_id": "b5f82595ac9f4dcabb946d55a513bb46", "version_major": 2, "version_minor": 0 }, "text/plain": [ "HBox(children=(FloatProgress(value=0.0, description='build initial population', max=75.0, style=ProgressStyle(…" ] }, "metadata": {}, "output_type": "display_data" }, { "name": "stdout", "output_type": "stream", "text": [ "\n" ] }, { "data": { "application/vnd.jupyter.widget-view+json": { "model_id": "ba073e965d7e4d04a5511202a7a6cd71", "version_major": 2, "version_minor": 0 }, "text/plain": [ "HBox(children=(FloatProgress(value=0.0, description='run evolutionary cycles', max=35.0, style=ProgressStyle(d…" ] }, "metadata": {}, "output_type": "display_data" }, { "name": "stdout", "output_type": "stream", "text": [ "Warning: cannot mutate given node\n", "Warning: cannot find matching action node for mutation\n", "\n" ] }, { "data": { "application/vnd.jupyter.widget-view+json": { "model_id": "587e80beb2154d04894d9375952bd9e0", "version_major": 2, "version_minor": 0 }, "text/plain": [ "HBox(children=(FloatProgress(value=0.0, description='build initial population', max=75.0, style=ProgressStyle(…" ] }, "metadata": {}, "output_type": "display_data" }, { "name": "stdout", "output_type": "stream", "text": [ "\n" ] }, { "data": { "application/vnd.jupyter.widget-view+json": { "model_id": "bc0002c9299f48a290fb2fc68916b70f", "version_major": 2, "version_minor": 0 }, "text/plain": [ "HBox(children=(FloatProgress(value=0.0, description='run evolutionary cycles', max=35.0, style=ProgressStyle(d…" ] }, "metadata": {}, "output_type": "display_data" }, { "name": "stdout", "output_type": "stream", "text": [ "\n" ] }, { "data": { "application/vnd.jupyter.widget-view+json": { "model_id": "41a39aee28c94cf397e88d190209dde8", "version_major": 2, "version_minor": 0 }, "text/plain": [ "HBox(children=(FloatProgress(value=0.0, description='build initial population', max=75.0, style=ProgressStyle(…" ] }, "metadata": {}, "output_type": "display_data" }, { "name": "stdout", "output_type": "stream", "text": [ "\n" ] }, { "data": { "application/vnd.jupyter.widget-view+json": { "model_id": "feababa007f04609996469c366a24e3b", "version_major": 2, "version_minor": 0 }, "text/plain": [ "HBox(children=(FloatProgress(value=0.0, description='run evolutionary cycles', max=35.0, style=ProgressStyle(d…" ] }, "metadata": {}, "output_type": "display_data" }, { "name": "stdout", "output_type": "stream", "text": [ "\n" ] } ], "source": [ "ssc = []\n", "\n", "for i in range(10):\n", "\n", " p = EA.Population([\"rice\",],['rice'], min_additional=5, max_additional=11, n_population = 75, mutations=2)\n", "\n", " ssc.append(p.run(35))\n", "\n", " scores = [tree.score() for tree in p.population]\n", "\n", " ii = np.argsort(-np.array(scores))\n", "\n", " samples_i = EA.np.random.choice(ii[:1],1)\n", "\n", " samples = [p.population[i] for i in samples_i]" ] }, { "cell_type": "code", "execution_count": 8, "metadata": {}, "outputs": [], "source": [ "import matplotlib.pyplot as plt" ] }, { "cell_type": "code", "execution_count": 26, "metadata": {}, "outputs": [], "source": [ "scores = np.array(ssc)" ] }, { "cell_type": "code", "execution_count": 30, "metadata": {}, "outputs": [], "source": [ "aavg = np.average(scores, axis=0)" ] }, { "cell_type": "code", "execution_count": 33, "metadata": {}, "outputs": [ { "data": { "image/png": "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5Z/X9qF5/MkX+p21cQ+FJeX8qFfNmiVb1ymNFhERnHMs2baPhz5YxdmPfsUv3l1J5v4j/OKCLsz973OZdNcgrujXqtYldlDxwPxPR6eSk1/EB0uzjpUv3JLH07PSuW5Amxq3RMepGtElidyCYjbuLjijdj5elcOyHQf45ZguxEV/v/+naWwUz998Fo+O68nibfu4+N9z+WbD7pO298mqHBJioxjUoWYPydY1Qe25M7OLgMeBcOBF59z/Hne+HfAykATsA25yzmWaWV/gWaARUA486px7x3vNXODoYkHNge+cc1eY2ShgKnB0v5kPnXMPB/PziYjUds453ly0g5e/3cqWvYdpGBXOJb1acM1ZrRnYoVmtGHb1x/DURPq0acIzs9K5ZkBrDheX8eA7K+iQEMsfL0sLdXhnbHhqxV61czftpVvK6c32LCot52+fbiCtRSOuPsEODWbGjYPaMbB9M342eQV3vLqEW4e04zeXdCcm8vuJ/5GScr7ZsIdxGpKtdkFL7swsHHgauADIBBab2TTn3Dqfao8BrzvnXjOz0cBfgZuBQuAW59xmM2sJLDWzz51zB5xzw33u8QEVCd1Rc51zlwbrM4mI1CX7D5fwq/dX8tX6PfRv24S/X92bH/VqQWx03Xtix8z42ejO3PnaEj5ansU36/ew91AxH903rE583haNG5DaPI45m3O5e0TH02rjpW+3knXgCP+4pneVzx6mJscz5SdD+ftnG3np260s3LKPJ67v972Fmo8NydbyXtHaKJip9EAg3Tm3xTlXAkwGxh5XJw342ns88+h559wm59xm73E2sIeK3r1jzCweGA1MCdonEBGpoxZv28clT8xlzqa9/OmyND64dyjXDmhTJxKdExndrTk9Wjbiz9PW8tnaXfz3hd3o2apuzI6Eit0qFm3dd8JZwSezp6CIZ2amMyYtmaGdEv26JjoinD9cmsart59N3uFiLnvqW16bv+3YwsefrM4hMS6KQR1q3sLFdV0wk7tWwE6f95neMl8rgau8x+OAeDP73t8CMxsIRAEZx107DvjaOXfQp2yIma00s0/NrMeZfgARkbrG43E8PTOd8RMXEhURxgf3DuX2YR3qzPDryRx99q6wpJzhqYnceU6HUIcUUCO6JFJS5uG7rftO+dp/fr6JknIPv72k+ylfO6prcz59YARDOyXwp2lrueu1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\n", "text/plain": [ "
" ] }, "metadata": { "needs_background": "light" }, "output_type": "display_data" } ], "source": [ "plt.rcParams['figure.figsize'] = (10,5)\n", "plt.plot([np.average(s) for s in aavg])\n", "plt.xlabel(\"Generation\")\n", "plt.ylabel(\"Average Fitness\")\n", "plt.savefig(\"fitness.pdf\")\n", "plt.show()\n" ] }, { "cell_type": "code", "execution_count": 19, "metadata": {}, "outputs": [ { "data": { "image/png": "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W61LqdO5ZlUeRxvtU26t6BkYZldFM9delI81NnoeRxe6vAniyowxC8c+gHJ/D0wpFXh76zpYXZRGQuzsM0CL3bXiZtt6ZyLVNgcr8lMQCd/MtdVFaZrcEOQeP6JLqd66ZpUr0J1qSXVnRTO9gyPculETGrzlTRA3UWFfLfarVJjrHRymoqFrRq22JlKSYaVncITOnkGfjMvpNNTYHJSF6VKqx+qiVJq7+ml1aEWnYKVLqd4rybRSnp8y5ZLqjn0NLMpKZMOC2c/8R5pJgzgRyRORDUCCiKwTkfXux2WApowoFeb2nznHsNPMej+chydD1VdLqo3n++geGGZFfngmNXiscZd00eSG4ORZSr1Wl1K9ds2qPA6cPY+t661/mJxu7+H1053csqEorGfYfW2qmbirgXuAIuC7wHfcjzuBf/b/0JRSgbS3tpMoi8z5r2Jf14qrcic1hFPj+4msLEjBItq5IVjtdC+lbtelVK95khWemqBm3I79DVgEblmvS6kzMenOQWPMr4Ffi8gtxpiH53FMSqkgsLeug1WFqSTFzW2DcXG6O4jzUZmRapsDEViWG95BnDU2mmW5yZrcEKR26lLqjC3JSWZJThJPHG3mI1tLR4+POA0PH2jg7UuzyQvTZCV/mWo59YPup6Uicuf4xzyNTykVAP1DIxyun319uLESYqPISY7z2Uxctc3OggwriXMMLkOBp3ODL5NC1NzpUursXbMqj9frOunoHhg99vLJdpq7+jWhYRamWk5NdP8zCUie4KGUClMHzp5jcMQ5q36pEynxYZmR6jButzXeRUVpdPYM0uCH3rNq9nQpdfa2r8rDaeDpypbRYw/tbyA1IYarynIDOLLQNNVy6r3uf35t/oajlAoGe2s7sQhsLPVdEPdabcec79M3OEJdRw83rC3wwaiC3xp354YjDV3agiiIaFbq7JXnp1CSYeWJozZu21RCV+8QTx2z8f6Li2fV2i/STbWc+vSY51+an+EopYLB3roOygtSSImP8cn9ijOsNNv7GRgemdN9jrc4MIaImYlbkZdCbJRF98UFkeMtDk7oUuqsiQjXrMrjlZPtdPUO8diRJgaHndpma5amWk7NHvP8Vn8PRCkVHAaGRzh49jybF86ttMhYJRlWjGHOy4LVNldmalmYNr4fLzbaQll+srbfCiK6lDp321flMew0PFvVwo59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\n", "text/plain": [ "
" ] }, "metadata": { "needs_background": "light" }, "output_type": "display_data" } ], "source": [ "plt.rcParams['figure.figsize'] = (10,5)\n", "plt.plot([np.median(s) for s in sc])\n", "plt.xlabel(\"Generation\")\n", "plt.ylabel(\"Average Fitness\")\n", "plt.savefig(\"fitness.pdf\")\n", "plt.show()" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Noodle recipes\n", "* generate noodle recipes with a population size of 50 over 50 cycles and choose randomly 5 from the 20 best" ] }, { "cell_type": "code", "execution_count": 18, "metadata": {}, "outputs": [ { "data": { "application/vnd.jupyter.widget-view+json": { "model_id": "3130e9bf5e3d4cbf943a1e55e7f54016", "version_major": 2, "version_minor": 0 }, "text/plain": [ "HBox(children=(FloatProgress(value=0.0, description='build initial population', max=75.0, style=ProgressStyle(…" ] }, "metadata": {}, "output_type": "display_data" }, { "name": "stdout", "output_type": "stream", "text": [ "\n" ] }, { "data": { "application/vnd.jupyter.widget-view+json": { "model_id": "76a6bc19191343de8bd711236b147421", "version_major": 2, "version_minor": 0 }, "text/plain": [ "HBox(children=(FloatProgress(value=0.0, description='run evolutionary cycles', max=35.0, style=ProgressStyle(d…" ] }, "metadata": {}, "output_type": "display_data" }, { "name": "stdout", "output_type": "stream", "text": [ "\n" ] }, { "data": { "text/markdown": [ "### Noodle Recipe 1" ], "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" }, { "data": { "image/svg+xml": [ "\n", "\n", "\n", "\n", "\n", "\n", "%3\n", "\n", "\n", "\n", "1733849\n", "\n", " \n", "mix\n", "node score: 1.0000\n", "\n", "\n", "\n", "1733861\n", "\n", " \n", "ricotta cheese\n", "node score:1.0000\n", "\n", "\n", "\n", "1733849->1733861\n", "\n", "\n", "\n", "\n", "\n", "1733850\n", "\n", " \n", "heat\n", "node score: 1.0000\n", "\n", "\n", "\n", "1733849->1733850\n", "\n", "\n", "\n", "\n", "\n", "1733862\n", "\n", " \n", "cut\n", "node score: 1.0000\n", "\n", "\n", "\n", "1733849->1733862\n", "\n", "\n", "\n", "\n", "\n", "1733851\n", "\n", " \n", "mix\n", "node score: 1.0000\n", "\n", "\n", "\n", "1733850->1733851\n", "\n", "\n", "\n", "\n", "\n", "1733852\n", "\n", " \n", "cut\n", "node score: 1.0000\n", "\n", "\n", "\n", "1733851->1733852\n", "\n", "\n", "\n", "\n", "\n", "1733858\n", "\n", " \n", "noodle\n", "node score:1.0000\n", "\n", "\n", "\n", "1733851->1733858\n", "\n", "\n", "\n", "\n", "\n", "1733854\n", "\n", " \n", "saute\n", "node score: 1.0000\n", "\n", "\n", "\n", "1733851->1733854\n", "\n", "\n", "\n", "\n", "\n", "1733856\n", "\n", " \n", "broil\n", "node score: 1.0000\n", "\n", "\n", "\n", "1733851->1733856\n", "\n", "\n", "\n", "\n", "\n", "1733853\n", "\n", " \n", "chicken\n", "node score:1.0000\n", "\n", "\n", "\n", "1733852->1733853\n", "\n", "\n", "\n", "\n", "\n", "1733855\n", "\n", " \n", "butter\n", "node score:1.0000\n", "\n", "\n", "\n", "1733854->1733855\n", "\n", "\n", "\n", "\n", "\n", "1733857\n", "\n", " \n", "salt\n", "node score:1.0000\n", "\n", "\n", "\n", "1733856->1733857\n", "\n", "\n", "\n", "\n", "\n", "1733863\n", "\n", " \n", "broccoli\n", "node score:1.0000\n", "\n", "\n", "\n", "1733862->1733863\n", "\n", "\n", "\n", "\n", "\n" ], "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" }, { "data": { "text/markdown": [ "**Ingredients**:\n", " * ricotta cheese\n", " * butter\n", " * salt\n", " * chicken\n", " * broccoli\n", " * noodle\n", "\n", "\n", "**Instructions**:\n", "\n", "| Step | Instruction |\n", "| ----:|:----------- |\n", "| 1 | cut chicken, saute butter, broil salt and mix it with noodle. Then heat it. |\n", "| 2 | cut broccoli and mix it with ricotta cheese and mix it together with the results of step 1. |\n" ], "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" }, { "data": { "application/vnd.jupyter.widget-view+json": { "model_id": "43d8bed61ec74e81b1357593d5adf427", "version_major": 2, "version_minor": 0 }, "text/plain": [ "HBox(children=(FloatProgress(value=0.0, description='build initial population', max=75.0, style=ProgressStyle(…" ] }, "metadata": {}, "output_type": "display_data" }, { "name": "stdout", "output_type": "stream", "text": [ "\n" ] }, { "data": { "application/vnd.jupyter.widget-view+json": { "model_id": "46a7b359216c41e3b94831280b96f1c4", "version_major": 2, "version_minor": 0 }, "text/plain": [ "HBox(children=(FloatProgress(value=0.0, description='run evolutionary cycles', max=35.0, style=ProgressStyle(d…" ] }, "metadata": {}, "output_type": "display_data" }, { "name": "stdout", "output_type": "stream", "text": [ "\n" ] }, { "data": { "text/markdown": [ "### Noodle Recipe 2" ], "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" }, { "data": { "image/svg+xml": [ "\n", "\n", "\n", "\n", "\n", "\n", "%3\n", "\n", "\n", "\n", "1813544\n", "\n", " \n", "mix\n", "node score: 1.0000\n", "\n", "\n", "\n", "1813548\n", "\n", " \n", "cook\n", "node score: 1.0000\n", "\n", "\n", "\n", "1813544->1813548\n", "\n", "\n", "\n", "\n", "\n", "1813545\n", "\n", " \n", "bake\n", "node score: 1.0000\n", "\n", "\n", "\n", "1813544->1813545\n", "\n", "\n", "\n", "\n", "\n", "1813549\n", "\n", " \n", "mix\n", "node score: 0.9048\n", "\n", "\n", "\n", "1813548->1813549\n", "\n", "\n", "\n", "\n", "\n", "1813554\n", "\n", " \n", "chop\n", "node score: 1.0000\n", "\n", "\n", "\n", "1813549->1813554\n", "\n", "\n", "\n", "\n", "\n", "1813553\n", "\n", " \n", "turkey\n", "node score:1.0000\n", "\n", "\n", "\n", "1813549->1813553\n", "\n", "\n", "\n", "\n", "\n", "1813552\n", "\n", " \n", "sauce\n", "node score:1.0000\n", "\n", "\n", "\n", "1813549->1813552\n", "\n", "\n", "\n", "\n", "\n", "1813551\n", "\n", " \n", "tomato sauce\n", "node score:1.0000\n", "\n", "\n", "\n", "1813549->1813551\n", "\n", "\n", "\n", "\n", "\n", "1813550\n", "\n", " \n", "noodle\n", "node score:1.0000\n", "\n", "\n", "\n", "1813549->1813550\n", "\n", "\n", "\n", "\n", "\n", "1813557\n", "\n", " \n", "basil\n", "node score:1.0000\n", "\n", "\n", "\n", "1813549->1813557\n", "\n", "\n", "\n", "\n", "\n", "1813556\n", "\n", " \n", "ground beef\n", "node score:1.0000\n", "\n", "\n", "\n", "1813549->1813556\n", "\n", "\n", "\n", "\n", "\n", "1813555\n", "\n", " \n", "carrot\n", "node score:1.0000\n", "\n", "\n", "\n", "1813554->1813555\n", "\n", "\n", "\n", "\n", "\n", "1813546\n", "\n", " \n", "cook\n", "node score: 1.0000\n", "\n", "\n", "\n", "1813545->1813546\n", "\n", "\n", "\n", "\n", "\n", "1813547\n", "\n", " \n", "cheese\n", "node score:1.0000\n", "\n", "\n", "\n", "1813546->1813547\n", "\n", "\n", "\n", "\n", "\n" ], "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" }, { "data": { "text/markdown": [ "**Ingredients**:\n", " * basil\n", " * carrot\n", " * ground beef\n", " * tomato sauce\n", " * sauce\n", " * turkey\n", " * cheese\n", " * noodle\n", "\n", "\n", "**Instructions**:\n", "\n", "| Step | Instruction |\n", "| ----:|:----------- |\n", "| 1 | chop carrot and mix it with turkey, sauce, tomato sauce, noodle, basil and ground beef. Then cook it. |\n", "| 2 | cook and bake cheese |\n", "| 3 | Mix together the results of step 1 and step 2. |\n" ], "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" }, { "data": { "application/vnd.jupyter.widget-view+json": { "model_id": "38608bae11c14f41a9fc905ed1ced7f5", "version_major": 2, "version_minor": 0 }, "text/plain": [ "HBox(children=(FloatProgress(value=0.0, description='build initial population', max=75.0, style=ProgressStyle(…" ] }, "metadata": {}, "output_type": "display_data" }, { "name": "stdout", "output_type": "stream", "text": [ "\n" ] }, { "data": { "application/vnd.jupyter.widget-view+json": { "model_id": "abd89963403d4a0f84a03c2f4665d529", "version_major": 2, "version_minor": 0 }, "text/plain": [ "HBox(children=(FloatProgress(value=0.0, description='run evolutionary cycles', max=35.0, style=ProgressStyle(d…" ] }, "metadata": {}, "output_type": "display_data" }, { "name": "stdout", "output_type": "stream", "text": [ "\n" ] }, { "data": { "text/markdown": [ "### Noodle Recipe 3" ], "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" }, { "data": { "image/svg+xml": [ "\n", "\n", "\n", "\n", "\n", "\n", "%3\n", "\n", "\n", "\n", "1884305\n", "\n", " \n", "mix\n", "node score: 1.0000\n", "\n", "\n", "\n", "1884306\n", "\n", " \n", "heat\n", "node score: 1.0000\n", "\n", "\n", "\n", "1884305->1884306\n", "\n", "\n", "\n", "\n", "\n", "1884316\n", "\n", " \n", "slice\n", "node score: 1.0000\n", "\n", "\n", "\n", "1884305->1884316\n", "\n", "\n", "\n", "\n", "\n", "1884318\n", "\n", " \n", "slice\n", "node score: 1.0000\n", "\n", "\n", "\n", "1884305->1884318\n", "\n", "\n", "\n", "\n", "\n", "1884307\n", "\n", " \n", "mix\n", "node score: 0.9333\n", "\n", "\n", "\n", "1884306->1884307\n", "\n", "\n", "\n", "\n", "\n", "1884314\n", "\n", " \n", "peel\n", "node score: 1.0000\n", "\n", "\n", "\n", "1884307->1884314\n", "\n", "\n", "\n", "\n", "\n", "1884313\n", "\n", " \n", "noodle\n", "node score:1.0000\n", "\n", "\n", "\n", "1884307->1884313\n", "\n", "\n", "\n", "\n", "\n", "1884308\n", "\n", " \n", "chicken broth\n", "node score:1.0000\n", "\n", "\n", "\n", "1884307->1884308\n", "\n", "\n", "\n", "\n", "\n", "1884312\n", "\n", " \n", "cheese\n", "node score:1.0000\n", "\n", "\n", "\n", "1884307->1884312\n", "\n", "\n", "\n", "\n", "\n", "1884309\n", "\n", " \n", "cream\n", "node score:1.0000\n", "\n", "\n", "\n", "1884307->1884309\n", "\n", "\n", "\n", "\n", "\n", "1884310\n", "\n", " \n", "grate\n", "node score: 1.0000\n", "\n", "\n", "\n", "1884307->1884310\n", "\n", "\n", "\n", "\n", "\n", "1884315\n", "\n", " \n", "garlic clove\n", "node score:1.0000\n", "\n", "\n", "\n", "1884314->1884315\n", "\n", "\n", "\n", "\n", "\n", "1884311\n", "\n", " \n", "onion\n", "node score:1.0000\n", "\n", "\n", "\n", "1884310->1884311\n", "\n", "\n", "\n", "\n", "\n", "1884317\n", "\n", " \n", "tomato\n", "node score:1.0000\n", "\n", "\n", "\n", "1884316->1884317\n", "\n", "\n", "\n", "\n", "\n", "1884319\n", "\n", " \n", "egg\n", "node score:1.0000\n", "\n", "\n", "\n", "1884318->1884319\n", "\n", "\n", "\n", "\n", "\n" ], "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" }, { "data": { "text/markdown": [ "**Ingredients**:\n", " * garlic clove\n", " * egg\n", " * chicken broth\n", " * onion\n", " * tomato\n", " * cream\n", " * cheese\n", " * noodle\n", "\n", "\n", "**Instructions**:\n", "\n", "| Step | Instruction |\n", "| ----:|:----------- |\n", "| 1 | peel garlic clove, grate onion and mix it with noodle, chicken broth, cheese and cream. Then heat it. |\n", "| 2 | slice tomato, slice egg and mix it together with the results of step 1. |\n" ], "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" }, { "data": { "application/vnd.jupyter.widget-view+json": { "model_id": "596e572e066348c99dbc0124f8790b25", "version_major": 2, "version_minor": 0 }, "text/plain": [ "HBox(children=(FloatProgress(value=0.0, description='build initial population', max=75.0, style=ProgressStyle(…" ] }, "metadata": {}, "output_type": "display_data" }, { "name": "stdout", "output_type": "stream", "text": [ "\n" ] }, { "data": { "application/vnd.jupyter.widget-view+json": { "model_id": "2d5cac3819b141ae98e70a5d315e22e9", "version_major": 2, "version_minor": 0 }, "text/plain": [ "HBox(children=(FloatProgress(value=0.0, description='run evolutionary cycles', max=35.0, style=ProgressStyle(d…" ] }, "metadata": {}, "output_type": "display_data" }, { "name": "stdout", "output_type": "stream", "text": [ "\n" ] }, { "data": { "text/markdown": [ "### Noodle Recipe 4" ], "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" }, { "data": { "image/svg+xml": [ "\n", "\n", "\n", "\n", "\n", "\n", "%3\n", "\n", "\n", "\n", "1893441\n", "\n", " \n", "mix\n", "node score: 0.8684\n", "\n", "\n", "\n", "1893433\n", "\n", " \n", "wash\n", "node score: 1.0000\n", "\n", "\n", "\n", "1893441->1893433\n", "\n", "\n", "\n", "\n", "\n", "1893439\n", "\n", " \n", "bake\n", "node score: 1.0000\n", "\n", "\n", "\n", "1893441->1893439\n", "\n", "\n", "\n", "\n", "\n", "1893431\n", "\n", " \n", "crack\n", "node score: 1.0000\n", "\n", "\n", "\n", "1893441->1893431\n", "\n", "\n", "\n", "\n", "\n", "1893437\n", "\n", " \n", "cheese\n", "node score:1.0000\n", "\n", "\n", "\n", "1893441->1893437\n", "\n", "\n", "\n", "\n", "\n", "1893435\n", "\n", " \n", "mozzarella cheese\n", "node score:1.0000\n", "\n", "\n", "\n", "1893441->1893435\n", "\n", "\n", "\n", "\n", "\n", "1893432\n", "\n", " \n", "broccoli\n", "node score:1.0000\n", "\n", "\n", "\n", "1893433->1893432\n", "\n", "\n", "\n", "\n", "\n", "1893440\n", "\n", " \n", "mix\n", "node score: 0.9286\n", "\n", "\n", "\n", "1893439->1893440\n", "\n", "\n", "\n", "\n", "\n", "1893438\n", "\n", " \n", "milk\n", "node score:1.0000\n", "\n", "\n", "\n", "1893440->1893438\n", "\n", "\n", "\n", "\n", "\n", "1893427\n", "\n", " \n", "slice\n", "node score: 1.0000\n", "\n", "\n", "\n", "1893440->1893427\n", "\n", "\n", "\n", "\n", "\n", "1893425\n", "\n", " \n", "soy sauce\n", "node score:1.0000\n", "\n", "\n", "\n", "1893440->1893425\n", "\n", "\n", "\n", "\n", "\n", "1893434\n", "\n", " \n", "ground beef\n", "node score:1.0000\n", "\n", "\n", "\n", "1893440->1893434\n", "\n", "\n", "\n", "\n", "\n", "1893429\n", "\n", " \n", "dice\n", "node score: 1.0000\n", "\n", "\n", "\n", "1893440->1893429\n", "\n", "\n", "\n", "\n", "\n", "1893423\n", "\n", " \n", "noodle\n", "node score:1.0000\n", "\n", "\n", "\n", "1893440->1893423\n", "\n", "\n", "\n", "\n", "\n", "1893424\n", "\n", " \n", "water\n", "node score:1.0000\n", "\n", "\n", "\n", "1893440->1893424\n", "\n", "\n", "\n", "\n", "\n", "1893436\n", "\n", " \n", "spaghetti sauce\n", "node score:1.0000\n", "\n", "\n", "\n", "1893440->1893436\n", "\n", "\n", "\n", "\n", "\n", "1893426\n", "\n", " \n", "garlic clove\n", "node score:1.0000\n", "\n", "\n", "\n", "1893427->1893426\n", "\n", "\n", "\n", "\n", "\n", "1893428\n", "\n", " \n", "onion\n", "node score:1.0000\n", "\n", "\n", "\n", "1893429->1893428\n", "\n", "\n", "\n", "\n", "\n", "1893430\n", "\n", " \n", "egg\n", "node score:1.0000\n", "\n", "\n", "\n", "1893431->1893430\n", "\n", "\n", "\n", "\n", "\n" ], "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" }, { "data": { "text/markdown": [ "**Ingredients**:\n", " * mozzarella cheese\n", " * water\n", " * garlic clove\n", " * ground beef\n", " * egg\n", " * onion\n", " * milk\n", " * soy sauce\n", " * spaghetti sauce\n", " * cheese\n", " * broccoli\n", " * noodle\n", "\n", "\n", "**Instructions**:\n", "\n", "| Step | Instruction |\n", "| ----:|:----------- |\n", "| 1 | slice garlic clove, dice onion and mix it with milk, soy sauce, ground beef, noodle, water and spaghetti sauce. Then bake it. |\n", "| 2 | wash broccoli, crack egg and mix it with cheese and mozzarella cheese and mix it together with the results of step 1. |\n" ], "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" }, { "data": { "application/vnd.jupyter.widget-view+json": { "model_id": "7746dd20b801414bba3adc1d8a5870b1", "version_major": 2, "version_minor": 0 }, "text/plain": [ "HBox(children=(FloatProgress(value=0.0, description='build initial population', max=75.0, style=ProgressStyle(…" ] }, "metadata": {}, "output_type": "display_data" }, { "name": "stdout", "output_type": "stream", "text": [ "\n" ] }, { "data": { "application/vnd.jupyter.widget-view+json": { "model_id": "d7e1511fbfed478a969d0a6d211ae60d", "version_major": 2, "version_minor": 0 }, "text/plain": [ "HBox(children=(FloatProgress(value=0.0, description='run evolutionary cycles', max=35.0, style=ProgressStyle(d…" ] }, "metadata": {}, "output_type": "display_data" }, { "name": "stdout", "output_type": "stream", "text": [ "\n" ] }, { "data": { "text/markdown": [ "### Noodle Recipe 5" ], "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" }, { "data": { "image/svg+xml": [ "\n", "\n", "\n", "\n", "\n", "\n", "%3\n", "\n", "\n", "\n", "1955737\n", "\n", " \n", "mix\n", "node score: 1.0000\n", "\n", "\n", "\n", "1955738\n", "\n", " \n", "bake\n", "node score: 1.0000\n", "\n", "\n", "\n", "1955737->1955738\n", "\n", "\n", "\n", "\n", "\n", "1955747\n", "\n", " \n", "cheese\n", "node score:1.0000\n", "\n", "\n", "\n", "1955737->1955747\n", "\n", "\n", "\n", "\n", "\n", "1955739\n", "\n", " \n", "mix\n", "node score: 0.9000\n", "\n", "\n", "\n", "1955738->1955739\n", "\n", "\n", "\n", "\n", "\n", "1955741\n", "\n", " \n", "chop\n", "node score: 1.0000\n", "\n", "\n", "\n", "1955739->1955741\n", "\n", "\n", "\n", "\n", "\n", "1955740\n", "\n", " \n", "olive oil\n", "node score:1.0000\n", "\n", "\n", "\n", "1955739->1955740\n", "\n", "\n", "\n", "\n", "\n", "1955744\n", "\n", " \n", "noodle\n", "node score:1.0000\n", "\n", "\n", "\n", "1955739->1955744\n", "\n", "\n", "\n", "\n", "\n", "1955743\n", "\n", " \n", "ground beef\n", "node score:1.0000\n", "\n", "\n", "\n", "1955739->1955743\n", "\n", "\n", "\n", "\n", "\n", "1955745\n", "\n", " \n", "place\n", "node score: 1.0000\n", "\n", "\n", "\n", "1955739->1955745\n", "\n", "\n", "\n", "\n", "\n", "1955742\n", "\n", " \n", "onion\n", "node score:1.0000\n", "\n", "\n", "\n", "1955741->1955742\n", "\n", "\n", "\n", "\n", "\n", "1955746\n", "\n", " \n", "milk\n", "node score:1.0000\n", "\n", "\n", "\n", "1955745->1955746\n", "\n", "\n", "\n", "\n", "\n" ], "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" }, { "data": { "text/markdown": [ "**Ingredients**:\n", " * ground beef\n", " * onion\n", " * milk\n", " * olive oil\n", " * cheese\n", " * noodle\n", "\n", "\n", "**Instructions**:\n", "\n", "| Step | Instruction |\n", "| ----:|:----------- |\n", "| 1 | chop onion, place milk and mix it with olive oil, noodle and ground beef. Then bake it. |\n", "| 2 | Mix cheese and mix it together with the results of step 1. |\n" ], "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" }, { "data": { "application/vnd.jupyter.widget-view+json": { "model_id": "8ea12174e1ed480f9bf79f5bad38df3b", "version_major": 2, "version_minor": 0 }, "text/plain": [ "HBox(children=(FloatProgress(value=0.0, description='build initial population', max=75.0, style=ProgressStyle(…" ] }, "metadata": {}, "output_type": "display_data" }, { "name": "stdout", "output_type": "stream", "text": [ "\n" ] }, { "data": { "application/vnd.jupyter.widget-view+json": { "model_id": "c77e6d00023647679f9d4139b0b3669f", "version_major": 2, "version_minor": 0 }, "text/plain": [ "HBox(children=(FloatProgress(value=0.0, description='run evolutionary cycles', max=35.0, style=ProgressStyle(d…" ] }, "metadata": {}, "output_type": "display_data" }, { "name": "stdout", "output_type": "stream", "text": [ "\n" ] }, { "data": { "text/markdown": [ "### Noodle Recipe 6" ], "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" }, { "data": { "image/svg+xml": [ "\n", "\n", "\n", "\n", "\n", "\n", "%3\n", "\n", "\n", "\n", "2044641\n", "\n", " \n", "mix\n", "node score: 1.0000\n", "\n", "\n", "\n", "2044642\n", "\n", " \n", "heat\n", "node score: 1.0000\n", "\n", "\n", "\n", "2044641->2044642\n", "\n", "\n", "\n", "\n", "\n", "2044654\n", "\n", " \n", "heat\n", "node score: 1.0000\n", "\n", "\n", "\n", "2044641->2044654\n", "\n", "\n", "\n", "\n", "\n", "2044652\n", "\n", " \n", "grate\n", "node score: 1.0000\n", "\n", "\n", "\n", "2044641->2044652\n", "\n", "\n", "\n", "\n", "\n", "2044643\n", "\n", " \n", "mix\n", "node score: 1.0000\n", "\n", "\n", "\n", "2044642->2044643\n", "\n", "\n", "\n", "\n", "\n", "2044650\n", "\n", " \n", "garlic\n", "node score:1.0000\n", "\n", "\n", "\n", "2044643->2044650\n", "\n", "\n", "\n", "\n", "\n", "2044651\n", "\n", " \n", "pepper\n", "node score:1.0000\n", "\n", "\n", "\n", "2044643->2044651\n", "\n", "\n", "\n", "\n", "\n", "2044644\n", "\n", " \n", "blend\n", "node score: 1.0000\n", "\n", "\n", "\n", "2044643->2044644\n", "\n", "\n", "\n", "\n", "\n", "2044648\n", "\n", " \n", "cook\n", "node score: 1.0000\n", "\n", "\n", "\n", "2044643->2044648\n", "\n", "\n", "\n", "\n", "\n", "2044645\n", "\n", " \n", "sauce\n", "node score:1.0000\n", "\n", "\n", "\n", "2044644->2044645\n", "\n", "\n", "\n", "\n", "\n", "2044649\n", "\n", " \n", "noodle\n", "node score:1.0000\n", "\n", "\n", "\n", "2044648->2044649\n", "\n", "\n", "\n", "\n", "\n", "2044655\n", "\n", " \n", "warm\n", "node score: 1.0000\n", "\n", "\n", "\n", "2044654->2044655\n", "\n", "\n", "\n", "\n", "\n", "2044656\n", "\n", " \n", "cream\n", "node score:1.0000\n", "\n", "\n", "\n", "2044655->2044656\n", "\n", "\n", "\n", "\n", "\n", "2044653\n", "\n", " \n", "tomato\n", "node score:1.0000\n", "\n", "\n", "\n", "2044652->2044653\n", "\n", "\n", "\n", "\n", "\n" ], "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" }, { "data": { "text/markdown": [ "**Ingredients**:\n", " * garlic\n", " * pepper\n", " * sauce\n", " * tomato\n", " * cream\n", " * noodle\n", "\n", "\n", "**Instructions**:\n", "\n", "| Step | Instruction |\n", "| ----:|:----------- |\n", "| 1 | blend sauce, cook noodle and mix it with garlic and pepper. Then heat it. |\n", "| 2 | warm and heat cream |\n", "| 3 | grate tomato and mix it together with the results of step 1 and step 2. |\n" ], "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" }, { "data": { "application/vnd.jupyter.widget-view+json": { "model_id": "2ec7b1dbaf434160b22abaf8dd04608b", "version_major": 2, "version_minor": 0 }, "text/plain": [ "HBox(children=(FloatProgress(value=0.0, description='build initial population', max=75.0, style=ProgressStyle(…" ] }, "metadata": {}, "output_type": "display_data" }, { "name": "stdout", "output_type": "stream", "text": [ "\n" ] }, { "data": { "application/vnd.jupyter.widget-view+json": { "model_id": "94ff28309e6e4e6ab0b51ca403a8f30f", "version_major": 2, "version_minor": 0 }, "text/plain": [ "HBox(children=(FloatProgress(value=0.0, description='run evolutionary cycles', max=35.0, style=ProgressStyle(d…" ] }, "metadata": {}, "output_type": "display_data" }, { "name": "stdout", "output_type": "stream", "text": [ "\n" ] }, { "data": { "text/markdown": [ "### Noodle Recipe 7" ], "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" }, { "data": { "image/svg+xml": [ "\n", "\n", "\n", "\n", "\n", "\n", "%3\n", "\n", "\n", "\n", "2113274\n", "\n", " \n", "mix\n", "node score: 1.0000\n", "\n", "\n", "\n", "2113276\n", "\n", " \n", "bake\n", "node score: 0.9000\n", "\n", "\n", "\n", "2113274->2113276\n", "\n", "\n", "\n", "\n", "\n", "2113275\n", "\n", " \n", "cheese\n", "node score:1.0000\n", "\n", "\n", "\n", "2113274->2113275\n", "\n", "\n", "\n", "\n", "\n", "2113277\n", "\n", " \n", "mix\n", "node score: 0.9111\n", "\n", "\n", "\n", "2113276->2113277\n", "\n", "\n", "\n", "\n", "\n", "2113284\n", "\n", " \n", "sauce\n", "node score:1.0000\n", "\n", "\n", "\n", "2113277->2113284\n", "\n", "\n", "\n", "\n", "\n", "2113286\n", "\n", " \n", "cut\n", "node score: 1.0000\n", "\n", "\n", "\n", "2113277->2113286\n", "\n", "\n", "\n", "\n", "\n", "2113283\n", "\n", " \n", "basil\n", "node score:1.0000\n", "\n", "\n", "\n", "2113277->2113283\n", "\n", "\n", "\n", "\n", "\n", "2113285\n", "\n", " \n", "chicken broth\n", "node score:1.0000\n", "\n", "\n", "\n", "2113277->2113285\n", "\n", "\n", "\n", "\n", "\n", "2113281\n", "\n", " \n", "cayenne pepper\n", "node score:1.0000\n", "\n", "\n", "\n", "2113277->2113281\n", "\n", "\n", "\n", "\n", "\n", "2113282\n", "\n", " \n", "oregano\n", "node score:1.0000\n", "\n", "\n", "\n", "2113277->2113282\n", "\n", "\n", "\n", "\n", "\n", "2113280\n", "\n", " \n", "noodle\n", "node score:1.0000\n", "\n", "\n", "\n", "2113277->2113280\n", "\n", "\n", "\n", "\n", "\n", "2113279\n", "\n", " \n", "water\n", "node score:1.0000\n", "\n", "\n", "\n", "2113277->2113279\n", "\n", "\n", "\n", "\n", "\n", "2113278\n", "\n", " \n", "mozzarella cheese\n", "node score:1.0000\n", "\n", "\n", "\n", "2113277->2113278\n", "\n", "\n", "\n", "\n", "\n", "2113288\n", "\n", " \n", "wash\n", "node score: 1.0000\n", "\n", "\n", "\n", "2113277->2113288\n", "\n", "\n", "\n", "\n", "\n", "2113287\n", "\n", " \n", "red bell pepper\n", "node score:1.0000\n", "\n", "\n", "\n", "2113286->2113287\n", "\n", "\n", "\n", "\n", "\n", "2113289\n", "\n", " \n", "chicken\n", "node score:1.0000\n", "\n", "\n", "\n", "2113288->2113289\n", "\n", "\n", "\n", "\n", "\n" ], "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" }, { "data": { "text/markdown": [ "**Ingredients**:\n", " * oregano\n", " * basil\n", " * mozzarella cheese\n", " * water\n", " * chicken broth\n", " * red bell pepper\n", " * chicken\n", " * sauce\n", " * cayenne pepper\n", " * cheese\n", " * noodle\n", "\n", "\n", "**Instructions**:\n", "\n", "| Step | Instruction |\n", "| ----:|:----------- |\n", "| 1 | cut red bell pepper, wash chicken and mix it with sauce, basil, chicken broth, cayenne pepper, oregano, noodle, water and mozzarella cheese. Then bake it. |\n", "| 2 | Mix cheese and mix it together with the results of step 1. |\n" ], "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" }, { "data": { "application/vnd.jupyter.widget-view+json": { "model_id": "3970031df6d04cee8856eee14c6118e5", "version_major": 2, "version_minor": 0 }, "text/plain": [ "HBox(children=(FloatProgress(value=0.0, description='build initial population', max=75.0, style=ProgressStyle(…" ] }, "metadata": {}, "output_type": "display_data" }, { "name": "stdout", "output_type": "stream", "text": [ "\n" ] }, { "data": { "application/vnd.jupyter.widget-view+json": { "model_id": "d7ec3eb268a34778a415eff7b5f80458", "version_major": 2, "version_minor": 0 }, "text/plain": [ "HBox(children=(FloatProgress(value=0.0, description='run evolutionary cycles', max=35.0, style=ProgressStyle(d…" ] }, "metadata": {}, "output_type": "display_data" }, { "name": "stdout", "output_type": "stream", "text": [ "\n" ] }, { "data": { "text/markdown": [ "### Noodle Recipe 8" ], "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" }, { "data": { "image/svg+xml": [ "\n", "\n", "\n", "\n", "\n", "\n", "%3\n", "\n", "\n", "\n", "2153242\n", "\n", " \n", "bake\n", "node score: 1.0000\n", "\n", "\n", "\n", "2153243\n", "\n", " \n", "mix\n", "node score: 0.9556\n", "\n", "\n", "\n", "2153242->2153243\n", "\n", "\n", "\n", "\n", "\n", "2153246\n", "\n", " \n", "peel\n", "node score: 1.0000\n", "\n", "\n", "\n", "2153243->2153246\n", "\n", "\n", "\n", "\n", "\n", "2153244\n", "\n", " \n", "peel\n", "node score: 1.0000\n", "\n", "\n", "\n", "2153243->2153244\n", "\n", "\n", "\n", "\n", "\n", "2153255\n", "\n", " \n", "noodle\n", "node score:1.0000\n", "\n", "\n", "\n", "2153243->2153255\n", "\n", "\n", "\n", "\n", "\n", "2153254\n", "\n", " \n", "sauce\n", "node score:1.0000\n", "\n", "\n", "\n", "2153243->2153254\n", "\n", "\n", "\n", "\n", "\n", "2153249\n", "\n", " \n", "pea\n", "node score:1.0000\n", "\n", "\n", "\n", "2153243->2153249\n", "\n", "\n", "\n", "\n", "\n", "2153250\n", "\n", " \n", "mozzarella cheese\n", "node score:1.0000\n", "\n", "\n", "\n", "2153243->2153250\n", "\n", "\n", "\n", "\n", "\n", "2153252\n", "\n", " \n", "butter\n", "node score:1.0000\n", "\n", "\n", "\n", "2153243->2153252\n", "\n", "\n", "\n", "\n", "\n", "2153253\n", "\n", " \n", "milk\n", "node score:1.0000\n", "\n", "\n", "\n", "2153243->2153253\n", "\n", "\n", "\n", "\n", "\n", "2153248\n", "\n", " \n", "parsley\n", "node score:1.0000\n", "\n", "\n", "\n", "2153243->2153248\n", "\n", "\n", "\n", "\n", "\n", "2153251\n", "\n", " \n", "corn\n", "node score:1.0000\n", "\n", "\n", "\n", "2153243->2153251\n", "\n", "\n", "\n", "\n", "\n", "2153247\n", "\n", " \n", "onion\n", "node score:1.0000\n", "\n", "\n", "\n", "2153246->2153247\n", "\n", "\n", "\n", "\n", "\n", "2153245\n", "\n", " \n", "shrimp\n", "node score:1.0000\n", "\n", "\n", "\n", "2153244->2153245\n", "\n", "\n", "\n", "\n", "\n" ], "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" }, { "data": { "text/markdown": [ "**Ingredients**:\n", " * butter\n", " * mozzarella cheese\n", " * pea\n", " * onion\n", " * milk\n", " * parsley\n", " * sauce\n", " * corn\n", " * shrimp\n", " * noodle\n", "\n", "\n", "**Instructions**:\n", "\n", "| Step | Instruction |\n", "| ----:|:----------- |\n", "| 1 | peel onion, peel shrimp and mix it with noodle, sauce, pea, mozzarella cheese, butter, milk, parsley and corn. Then bake it. |\n" ], "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" }, { "data": { "application/vnd.jupyter.widget-view+json": { "model_id": "4ef27f0f13b54eeea1f7aa43ac79234d", "version_major": 2, "version_minor": 0 }, "text/plain": [ "HBox(children=(FloatProgress(value=0.0, description='build initial population', max=75.0, style=ProgressStyle(…" ] }, "metadata": {}, "output_type": "display_data" }, { "name": "stdout", "output_type": "stream", "text": [ "\n" ] }, { "data": { "application/vnd.jupyter.widget-view+json": { "model_id": "008b5788593e44b8ab8492cc0c745d3f", "version_major": 2, "version_minor": 0 }, "text/plain": [ "HBox(children=(FloatProgress(value=0.0, description='run evolutionary cycles', max=35.0, style=ProgressStyle(d…" ] }, "metadata": {}, "output_type": "display_data" }, { "name": "stdout", "output_type": "stream", "text": [ "\n" ] }, { "data": { "text/markdown": [ "### Noodle Recipe 9" ], "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" }, { "data": { "image/svg+xml": [ "\n", "\n", "\n", "\n", "\n", "\n", "%3\n", "\n", "\n", "\n", "2206597\n", "\n", " \n", "heat\n", "node score: 1.0000\n", "\n", "\n", "\n", "2206598\n", "\n", " \n", "mix\n", "node score: 0.9333\n", "\n", "\n", "\n", "2206597->2206598\n", "\n", "\n", "\n", "\n", "\n", "2206599\n", "\n", " \n", "chop\n", "node score: 1.0000\n", "\n", "\n", "\n", "2206598->2206599\n", "\n", "\n", "\n", "\n", "\n", "2206604\n", "\n", " \n", "water\n", "node score:1.0000\n", "\n", "\n", "\n", "2206598->2206604\n", "\n", "\n", "\n", "\n", "\n", "2206601\n", "\n", " \n", "red pepper\n", "node score:1.0000\n", "\n", "\n", "\n", "2206598->2206601\n", "\n", "\n", "\n", "\n", "\n", "2206607\n", "\n", " \n", "tomato sauce\n", "node score:1.0000\n", "\n", "\n", "\n", "2206598->2206607\n", "\n", "\n", "\n", "\n", "\n", "2206605\n", "\n", " \n", "chop\n", "node score: 1.0000\n", "\n", "\n", "\n", "2206598->2206605\n", "\n", "\n", "\n", "\n", "\n", "2206602\n", "\n", " \n", "noodle\n", "node score:1.0000\n", "\n", "\n", "\n", "2206598->2206602\n", "\n", "\n", "\n", "\n", "\n", "2206600\n", "\n", " \n", "onion\n", "node score:1.0000\n", "\n", "\n", "\n", "2206599->2206600\n", "\n", "\n", "\n", "\n", "\n", "2206606\n", "\n", " \n", "zucchini\n", "node score:1.0000\n", "\n", "\n", "\n", "2206605->2206606\n", "\n", "\n", "\n", "\n", "\n" ], "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" }, { "data": { "text/markdown": [ "**Ingredients**:\n", " * zucchini\n", " * red pepper\n", " * water\n", " * tomato sauce\n", " * onion\n", " * noodle\n", "\n", "\n", "**Instructions**:\n", "\n", "| Step | Instruction |\n", "| ----:|:----------- |\n", "| 1 | chop onion, chop zucchini and mix it with water, red pepper, tomato sauce and noodle. Then heat it. |\n" ], "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" }, { "data": { "application/vnd.jupyter.widget-view+json": { "model_id": "fd689db9388141618604b2094906769a", "version_major": 2, "version_minor": 0 }, "text/plain": [ "HBox(children=(FloatProgress(value=0.0, description='build initial population', max=75.0, style=ProgressStyle(…" ] }, "metadata": {}, "output_type": "display_data" }, { "name": "stdout", "output_type": "stream", "text": [ "\n" ] }, { "data": { "application/vnd.jupyter.widget-view+json": { "model_id": "0448e4f462384ca2b01ca6b8b891a76f", "version_major": 2, "version_minor": 0 }, "text/plain": [ "HBox(children=(FloatProgress(value=0.0, description='run evolutionary cycles', max=35.0, style=ProgressStyle(d…" ] }, "metadata": {}, "output_type": "display_data" }, { "name": "stdout", "output_type": "stream", "text": [ "\n" ] }, { "data": { "text/markdown": [ "### Noodle Recipe 10" ], "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" }, { "data": { "image/svg+xml": [ "\n", "\n", "\n", "\n", "\n", "\n", "%3\n", "\n", "\n", "\n", "2282303\n", "\n", " \n", "cook\n", "node score: 1.0000\n", "\n", "\n", "\n", "2282304\n", "\n", " \n", "mix\n", "node score: 0.7857\n", "\n", "\n", "\n", "2282303->2282304\n", "\n", "\n", "\n", "\n", "\n", "2282311\n", "\n", " \n", "bake\n", "node score: 1.0000\n", "\n", "\n", "\n", "2282304->2282311\n", "\n", "\n", "\n", "\n", "\n", "2282314\n", "\n", " \n", "salt\n", "node score:1.0000\n", "\n", "\n", "\n", "2282304->2282314\n", "\n", "\n", "\n", "\n", "\n", "2282307\n", "\n", " \n", "cut\n", "node score: 1.0000\n", "\n", "\n", "\n", "2282304->2282307\n", "\n", "\n", "\n", "\n", "\n", "2282313\n", "\n", " \n", "garlic\n", "node score:1.0000\n", "\n", "\n", "\n", "2282304->2282313\n", "\n", "\n", "\n", "\n", "\n", "2282315\n", "\n", " \n", "water\n", "node score:1.0000\n", "\n", "\n", "\n", "2282304->2282315\n", "\n", "\n", "\n", "\n", "\n", "2282309\n", "\n", " \n", "peel\n", "node score: 1.0000\n", "\n", "\n", "\n", "2282304->2282309\n", "\n", "\n", "\n", "\n", "\n", "2282316\n", "\n", " \n", "noodle\n", "node score:1.0000\n", "\n", "\n", "\n", "2282304->2282316\n", "\n", "\n", "\n", "\n", "\n", "2282306\n", "\n", " \n", "ground beef\n", "node score:1.0000\n", "\n", "\n", "\n", "2282304->2282306\n", "\n", "\n", "\n", "\n", "\n", "2282312\n", "\n", " \n", "cream\n", "node score:1.0000\n", "\n", "\n", "\n", "2282311->2282312\n", "\n", "\n", "\n", "\n", "\n", "2282308\n", "\n", " \n", "green onion\n", "node score:1.0000\n", "\n", "\n", "\n", "2282307->2282308\n", "\n", "\n", "\n", "\n", "\n", "2282310\n", "\n", " \n", "garlic clove\n", "node score:1.0000\n", "\n", "\n", "\n", "2282309->2282310\n", "\n", "\n", "\n", "\n", "\n" ], "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" }, { "data": { "text/markdown": [ "**Ingredients**:\n", " * green onion\n", " * garlic\n", " * water\n", " * garlic clove\n", " * ground beef\n", " * salt\n", " * cream\n", " * noodle\n", "\n", "\n", "**Instructions**:\n", "\n", "| Step | Instruction |\n", "| ----:|:----------- |\n", "| 1 | bake cream, cut green onion, peel garlic clove and mix it with salt, garlic, water, noodle and ground beef. Then cook it. |\n" ], "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "\n", "\n", "for i in range(10):\n", "\n", " p = EA.Population([\"noodle\",],['noodle'], min_additional=5, max_additional=11, n_population = 75, mutations=2)\n", "\n", " p.run(35)\n", "\n", " scores = [tree.score() for tree in p.population]\n", "\n", " ii = np.argsort(-np.array(scores))\n", "\n", " samples_i = EA.np.random.choice(ii[:1],1)\n", "\n", " samples = [p.population[i] for i in samples_i]\n", "\n", " for k, s in enumerate(samples):\n", " display(EA.Markdown(f\"### Noodle Recipe {i+1}\"))\n", " display(s.root().dot())\n", " display(s.root().to_instruction().to_markdown())\n", " with open(f\"noodle_{i}.md\", \"w\") as f:\n", " f.write(s.root().to_instruction().to_markdown().data)\n", " f.close()" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Rice recipes\n", "* generate noodle recipes with a population size of 50 over 50 cycles and choose randomly 5 from the 20 best" ] }, { "cell_type": "code", "execution_count": 19, "metadata": {}, "outputs": [ { "data": { "application/vnd.jupyter.widget-view+json": { "model_id": "b7aac32bdcd84c25af86e9003b7b09b6", "version_major": 2, "version_minor": 0 }, "text/plain": [ "HBox(children=(FloatProgress(value=0.0, description='build initial population', max=75.0, style=ProgressStyle(…" ] }, "metadata": {}, "output_type": "display_data" }, { "name": "stdout", "output_type": "stream", "text": [ "\n" ] }, { "data": { "application/vnd.jupyter.widget-view+json": { "model_id": "d95d9f1b43e7480aa5f25badb200c065", "version_major": 2, "version_minor": 0 }, "text/plain": [ "HBox(children=(FloatProgress(value=0.0, description='run evolutionary cycles', max=35.0, style=ProgressStyle(d…" ] }, "metadata": {}, "output_type": "display_data" }, { "name": "stdout", "output_type": "stream", "text": [ "\n" ] }, { "data": { "text/markdown": [ "### Rice Recipe 1" ], "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" }, { "data": { "image/svg+xml": [ "\n", "\n", "\n", "\n", "\n", "\n", "%3\n", "\n", "\n", "\n", "2318073\n", "\n", " \n", "cook\n", "node score: 1.0000\n", "\n", "\n", "\n", "2318074\n", "\n", " \n", "mix\n", "node score: 0.9524\n", "\n", "\n", "\n", "2318073->2318074\n", "\n", "\n", "\n", "\n", "\n", "2318081\n", "\n", " \n", "rice\n", "node score:1.0000\n", "\n", "\n", "\n", "2318074->2318081\n", "\n", "\n", "\n", "\n", "\n", "2318082\n", "\n", " \n", "cut\n", "node score: 1.0000\n", "\n", "\n", "\n", "2318074->2318082\n", "\n", "\n", "\n", "\n", "\n", "2318078\n", "\n", " \n", "butter\n", "node score:1.0000\n", "\n", "\n", "\n", "2318074->2318078\n", "\n", "\n", "\n", "\n", "\n", "2318080\n", "\n", " \n", "chicken broth\n", "node score:1.0000\n", "\n", "\n", "\n", "2318074->2318080\n", "\n", "\n", "\n", "\n", "\n", "2318085\n", "\n", " \n", "chop\n", "node score: 1.0000\n", "\n", "\n", "\n", "2318074->2318085\n", "\n", "\n", "\n", "\n", "\n", "2318079\n", "\n", " \n", "vegetable broth\n", "node score:1.0000\n", "\n", "\n", "\n", "2318074->2318079\n", "\n", "\n", "\n", "\n", "\n", "2318077\n", "\n", " \n", "vegetable oil\n", "node score:1.0000\n", "\n", "\n", "\n", "2318074->2318077\n", "\n", "\n", "\n", "\n", "\n", "2318083\n", "\n", " \n", "green onion\n", "node score:1.0000\n", "\n", "\n", "\n", "2318082->2318083\n", "\n", "\n", "\n", "\n", "\n", "2318076\n", "\n", " \n", "ginger\n", "node score:1.0000\n", "\n", "\n", "\n", "2318085->2318076\n", "\n", "\n", "\n", "\n", "\n" ], "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" }, { "data": { "text/markdown": [ "**Ingredients**:\n", " * vegetable oil\n", " * green onion\n", " * ginger\n", " * rice\n", " * butter\n", " * vegetable broth\n", " * chicken broth\n", "\n", "\n", "**Instructions**:\n", "\n", "| Step | Instruction |\n", "| ----:|:----------- |\n", "| 1 | cut green onion, chop ginger and mix it with rice, butter, chicken broth, vegetable broth and vegetable oil. Then cook it. |\n" ], "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" }, { "data": { "application/vnd.jupyter.widget-view+json": { "model_id": "73d9539a3162463fbad736504777b526", "version_major": 2, "version_minor": 0 }, "text/plain": [ "HBox(children=(FloatProgress(value=0.0, description='build initial population', max=75.0, style=ProgressStyle(…" ] }, "metadata": {}, "output_type": "display_data" }, { "name": "stdout", "output_type": "stream", "text": [ "\n" ] }, { "data": { "application/vnd.jupyter.widget-view+json": { "model_id": "731fa0aa2d244c9da21ccb00a7faad07", "version_major": 2, "version_minor": 0 }, "text/plain": [ "HBox(children=(FloatProgress(value=0.0, description='run evolutionary cycles', max=35.0, style=ProgressStyle(d…" ] }, "metadata": {}, "output_type": "display_data" }, { "name": "stdout", "output_type": "stream", "text": [ "\n" ] }, { "data": { "text/markdown": [ "### Rice Recipe 2" ], "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" }, { "data": { "image/svg+xml": [ "\n", "\n", "\n", "\n", "\n", "\n", "%3\n", "\n", "\n", "\n", "2340774\n", "\n", " \n", "mix\n", "node score: 0.9487\n", "\n", "\n", "\n", "2340763\n", "\n", " \n", "cut\n", "node score: 1.0000\n", "\n", "\n", "\n", "2340774->2340763\n", "\n", "\n", "\n", "\n", "\n", "2340770\n", "\n", " \n", "simmer\n", "node score: 1.0000\n", "\n", "\n", "\n", "2340774->2340770\n", "\n", "\n", "\n", "\n", "\n", "2340772\n", "\n", " \n", "heat\n", "node score: 1.0000\n", "\n", "\n", "\n", "2340774->2340772\n", "\n", "\n", "\n", "\n", "\n", "2340767\n", "\n", " \n", "mash\n", "node score: 1.0000\n", "\n", "\n", "\n", "2340774->2340767\n", "\n", "\n", "\n", "\n", "\n", "2340758\n", "\n", " \n", "cut\n", "node score: 1.0000\n", "\n", "\n", "\n", "2340774->2340758\n", "\n", "\n", "\n", "\n", "\n", "2340762\n", "\n", " \n", "cabbage\n", "node score:1.0000\n", "\n", "\n", "\n", "2340763->2340762\n", "\n", "\n", "\n", "\n", "\n", "2340771\n", "\n", " \n", "mix\n", "node score: 1.0000\n", "\n", "\n", "\n", "2340770->2340771\n", "\n", "\n", "\n", "\n", "\n", "2340759\n", "\n", " \n", "pea\n", "node score:1.0000\n", "\n", "\n", "\n", "2340771->2340759\n", "\n", "\n", "\n", "\n", "\n", "2340761\n", "\n", " \n", "mushroom soup\n", "node score:1.0000\n", "\n", "\n", "\n", "2340771->2340761\n", "\n", "\n", "\n", "\n", "\n", "2340755\n", "\n", " \n", "rice\n", "node score:1.0000\n", "\n", "\n", "\n", "2340771->2340755\n", "\n", "\n", "\n", "\n", "\n", "2340769\n", "\n", " \n", "chicken broth\n", "node score:1.0000\n", "\n", "\n", "\n", "2340771->2340769\n", "\n", "\n", "\n", "\n", "\n", "2340768\n", "\n", " \n", "salt\n", "node score:1.0000\n", "\n", "\n", "\n", "2340771->2340768\n", "\n", "\n", "\n", "\n", "\n", "2340756\n", "\n", " \n", "water\n", "node score:1.0000\n", "\n", "\n", "\n", "2340771->2340756\n", "\n", "\n", "\n", "\n", "\n", "2340773\n", "\n", " \n", "mix\n", "node score: 1.0000\n", "\n", "\n", "\n", "2340772->2340773\n", "\n", "\n", "\n", "\n", "\n", "2340765\n", "\n", " \n", "cut\n", "node score: 1.0000\n", "\n", "\n", "\n", "2340773->2340765\n", "\n", "\n", "\n", "\n", "\n", "2340760\n", "\n", " \n", "chicken soup\n", "node score:1.0000\n", "\n", "\n", "\n", "2340773->2340760\n", "\n", "\n", "\n", "\n", "\n", "2340764\n", "\n", " \n", "green onion\n", "node score:1.0000\n", "\n", "\n", "\n", "2340765->2340764\n", "\n", "\n", "\n", "\n", "\n", "2340766\n", "\n", " \n", "egg\n", "node score:1.0000\n", "\n", "\n", "\n", "2340767->2340766\n", "\n", "\n", "\n", "\n", "\n", "2340757\n", "\n", " \n", "tomato\n", "node score:1.0000\n", "\n", "\n", "\n", "2340758->2340757\n", "\n", "\n", "\n", "\n", "\n" ], "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" }, { "data": { "text/markdown": [ "**Ingredients**:\n", " * cabbage\n", " * rice\n", " * green onion\n", " * water\n", " * pea\n", " * egg\n", " * chicken broth\n", " * salt\n", " * chicken soup\n", " * tomato\n", " * mushroom soup\n", "\n", "\n", "**Instructions**:\n", "\n", "| Step | Instruction |\n", "| ----:|:----------- |\n", "| 1 | Mix pea, mushroom soup, rice, chicken broth, salt and water. Then simmer it. |\n", "| 2 | cut green onion and mix it with chicken soup. Then heat it. |\n", "| 3 | cut cabbage, mash egg, cut tomato and mix it together with the results of step 1 and step 2. |\n" ], "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" }, { "data": { "application/vnd.jupyter.widget-view+json": { "model_id": "184a9ad86c56426ebfb2c5aad3fc30fe", "version_major": 2, "version_minor": 0 }, "text/plain": [ "HBox(children=(FloatProgress(value=0.0, description='build initial population', max=75.0, style=ProgressStyle(…" ] }, "metadata": {}, "output_type": "display_data" }, { "name": "stdout", "output_type": "stream", "text": [ "\n" ] }, { "data": { "application/vnd.jupyter.widget-view+json": { "model_id": "2c131cc9bf2544508182b118ee0638a2", "version_major": 2, "version_minor": 0 }, "text/plain": [ "HBox(children=(FloatProgress(value=0.0, description='run evolutionary cycles', max=35.0, style=ProgressStyle(d…" ] }, "metadata": {}, "output_type": "display_data" }, { "name": "stdout", "output_type": "stream", "text": [ "\n" ] }, { "data": { "text/markdown": [ "### Rice Recipe 3" ], "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" }, { "data": { "image/svg+xml": [ "\n", "\n", "\n", "\n", "\n", "\n", "%3\n", "\n", "\n", "\n", "2425901\n", "\n", " \n", "mix\n", "node score: 1.0000\n", "\n", "\n", "\n", "2425902\n", "\n", " \n", "cook\n", "node score: 1.0000\n", "\n", "\n", "\n", "2425901->2425902\n", "\n", "\n", "\n", "\n", "\n", "2425904\n", "\n", " \n", "simmer\n", "node score: 1.0000\n", "\n", "\n", "\n", "2425901->2425904\n", "\n", "\n", "\n", "\n", "\n", "2425903\n", "\n", " \n", "chicken soup\n", "node score:1.0000\n", "\n", "\n", "\n", "2425902->2425903\n", "\n", "\n", "\n", "\n", "\n", "2425905\n", "\n", " \n", "mix\n", "node score: 1.0000\n", "\n", "\n", "\n", "2425904->2425905\n", "\n", "\n", "\n", "\n", "\n", "2425909\n", "\n", " \n", "water\n", "node score:1.0000\n", "\n", "\n", "\n", "2425905->2425909\n", "\n", "\n", "\n", "\n", "\n", "2425915\n", "\n", " \n", "rice\n", "node score:1.0000\n", "\n", "\n", "\n", "2425905->2425915\n", "\n", "\n", "\n", "\n", "\n", "2425910\n", "\n", " \n", "dice\n", "node score: 1.0000\n", "\n", "\n", "\n", "2425905->2425910\n", "\n", "\n", "\n", "\n", "\n", "2425912\n", "\n", " \n", "cut\n", "node score: 1.0000\n", "\n", "\n", "\n", "2425905->2425912\n", "\n", "\n", "\n", "\n", "\n", "2425907\n", "\n", " \n", "dice\n", "node score: 1.0000\n", "\n", "\n", "\n", "2425905->2425907\n", "\n", "\n", "\n", "\n", "\n", "2425906\n", "\n", " \n", "soy sauce\n", "node score:1.0000\n", "\n", "\n", "\n", "2425905->2425906\n", "\n", "\n", "\n", "\n", "\n", "2425914\n", "\n", " \n", "paprika\n", "node score:1.0000\n", "\n", "\n", "\n", "2425905->2425914\n", "\n", "\n", "\n", "\n", "\n", "2425917\n", "\n", " \n", "olive oil\n", "node score:1.0000\n", "\n", "\n", "\n", "2425905->2425917\n", "\n", "\n", "\n", "\n", "\n", "2425911\n", "\n", " \n", "onion\n", "node score:1.0000\n", "\n", "\n", "\n", "2425910->2425911\n", "\n", "\n", "\n", "\n", "\n", "2425913\n", "\n", " \n", "chicken\n", "node score:1.0000\n", "\n", "\n", "\n", "2425912->2425913\n", "\n", "\n", "\n", "\n", "\n", "2425908\n", "\n", " \n", "celery\n", "node score:1.0000\n", "\n", "\n", "\n", "2425907->2425908\n", "\n", "\n", "\n", "\n", "\n" ], "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" }, { "data": { "text/markdown": [ "**Ingredients**:\n", " * rice\n", " * water\n", " * celery\n", " * chicken soup\n", " * onion\n", " * chicken\n", " * soy sauce\n", " * olive oil\n", " * paprika\n", "\n", "\n", "**Instructions**:\n", "\n", "| Step | Instruction |\n", "| ----:|:----------- |\n", "| 1 | dice onion, cut chicken, dice celery and mix it with water, rice, soy sauce, paprika and olive oil. Then simmer it. |\n", "| 2 | cook chicken soup and mix it together with the results of step 1. |\n" ], "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" }, { "data": { "application/vnd.jupyter.widget-view+json": { "model_id": "d3a658352d19468b8bc8bad761de3bab", "version_major": 2, "version_minor": 0 }, "text/plain": [ "HBox(children=(FloatProgress(value=0.0, description='build initial population', max=75.0, style=ProgressStyle(…" ] }, "metadata": {}, "output_type": "display_data" }, { "name": "stdout", "output_type": "stream", "text": [ "\n" ] }, { "data": { "application/vnd.jupyter.widget-view+json": { "model_id": "44e9385b8f1e4a5886ac05171106931e", "version_major": 2, "version_minor": 0 }, "text/plain": [ "HBox(children=(FloatProgress(value=0.0, description='run evolutionary cycles', max=35.0, style=ProgressStyle(d…" ] }, "metadata": {}, "output_type": "display_data" }, { "name": "stdout", "output_type": "stream", "text": [ "\n" ] }, { "data": { "text/markdown": [ "### Rice Recipe 4" ], "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" }, { "data": { "image/svg+xml": [ "\n", "\n", "\n", "\n", "\n", "\n", "%3\n", "\n", "\n", "\n", "2480052\n", "\n", " \n", "heat\n", "node score: 0.9091\n", "\n", "\n", "\n", "2480053\n", "\n", " \n", "mix\n", "node score: 1.0000\n", "\n", "\n", "\n", "2480052->2480053\n", "\n", "\n", "\n", "\n", "\n", "2480063\n", "\n", " \n", "chicken stock\n", "node score:1.0000\n", "\n", "\n", "\n", "2480053->2480063\n", "\n", "\n", "\n", "\n", "\n", "2480061\n", "\n", " \n", "chop\n", "node score: 1.0000\n", "\n", "\n", "\n", "2480053->2480061\n", "\n", "\n", "\n", "\n", "\n", "2480058\n", "\n", " \n", "parsley\n", "node score:1.0000\n", "\n", "\n", "\n", "2480053->2480058\n", "\n", "\n", "\n", "\n", "\n", "2480065\n", "\n", " \n", "vinegar\n", "node score:1.0000\n", "\n", "\n", "\n", "2480053->2480065\n", "\n", "\n", "\n", "\n", "\n", "2480059\n", "\n", " \n", "chop\n", "node score: 1.0000\n", "\n", "\n", "\n", "2480053->2480059\n", "\n", "\n", "\n", "\n", "\n", "2480064\n", "\n", " \n", "olive oil\n", "node score:1.0000\n", "\n", "\n", "\n", "2480053->2480064\n", "\n", "\n", "\n", "\n", "\n", "2480054\n", "\n", " \n", "slice\n", "node score: 1.0000\n", "\n", "\n", "\n", "2480053->2480054\n", "\n", "\n", "\n", "\n", "\n", "2480067\n", "\n", " \n", "rice\n", "node score:1.0000\n", "\n", "\n", "\n", "2480053->2480067\n", "\n", "\n", "\n", "\n", "\n", "2480056\n", "\n", " \n", "brush\n", "node score: 1.0000\n", "\n", "\n", "\n", "2480053->2480056\n", "\n", "\n", "\n", "\n", "\n", "2480066\n", "\n", " \n", "ground black pepper\n", "node score:1.0000\n", "\n", "\n", "\n", "2480053->2480066\n", "\n", "\n", "\n", "\n", "\n", "2480068\n", "\n", " \n", "tomato soup\n", "node score:1.0000\n", "\n", "\n", "\n", "2480053->2480068\n", "\n", "\n", "\n", "\n", "\n", "2480062\n", "\n", " \n", "garlic clove\n", "node score:1.0000\n", "\n", "\n", "\n", "2480061->2480062\n", "\n", "\n", "\n", "\n", "\n", "2480060\n", "\n", " \n", "green onion\n", "node score:1.0000\n", "\n", "\n", "\n", "2480059->2480060\n", "\n", "\n", "\n", "\n", "\n", "2480055\n", "\n", " \n", "celery\n", "node score:1.0000\n", "\n", "\n", "\n", "2480054->2480055\n", "\n", "\n", "\n", "\n", "\n", "2480057\n", "\n", " \n", "tomato\n", "node score:1.0000\n", "\n", "\n", "\n", "2480056->2480057\n", "\n", "\n", "\n", "\n", "\n" ], "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" }, { "data": { "text/markdown": [ "**Ingredients**:\n", " * green onion\n", " * rice\n", " * ground black pepper\n", " * vinegar\n", " * celery\n", " * garlic clove\n", " * tomato soup\n", " * olive oil\n", " * chicken stock\n", " * tomato\n", " * parsley\n", "\n", "\n", "**Instructions**:\n", "\n", "| Step | Instruction |\n", "| ----:|:----------- |\n", "| 1 | chop garlic clove, chop green onion, slice celery, brush tomato and mix it with chicken stock, parsley, vinegar, olive oil, rice, ground black pepper and tomato soup. Then heat it. |\n" ], "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" }, { "data": { "application/vnd.jupyter.widget-view+json": { "model_id": "2d2a008b308e46c7ac1cdcb15eb683a9", "version_major": 2, "version_minor": 0 }, "text/plain": [ "HBox(children=(FloatProgress(value=0.0, description='build initial population', max=75.0, style=ProgressStyle(…" ] }, "metadata": {}, "output_type": "display_data" }, { "name": "stdout", "output_type": "stream", "text": [ "\n" ] }, { "data": { "application/vnd.jupyter.widget-view+json": { "model_id": "2bf2b7ce8426490a9c3b2c787d9d9954", "version_major": 2, "version_minor": 0 }, "text/plain": [ "HBox(children=(FloatProgress(value=0.0, description='run evolutionary cycles', max=35.0, style=ProgressStyle(d…" ] }, "metadata": {}, "output_type": "display_data" }, { "name": "stdout", "output_type": "stream", "text": [ "\n" ] }, { "data": { "text/markdown": [ "### Rice Recipe 5" ], "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" }, { "data": { "image/svg+xml": [ "\n", "\n", "\n", "\n", "\n", "\n", "%3\n", "\n", "\n", "\n", "2559610\n", "\n", " \n", "mix\n", "node score: 1.0000\n", "\n", "\n", "\n", "2559624\n", "\n", " \n", "cut\n", "node score: 1.0000\n", "\n", "\n", "\n", "2559610->2559624\n", "\n", "\n", "\n", "\n", "\n", "2559614\n", "\n", " \n", "boil\n", "node score: 1.0000\n", "\n", "\n", "\n", "2559610->2559614\n", "\n", "\n", "\n", "\n", "\n", "2559612\n", "\n", " \n", "beat\n", "node score: 1.0000\n", "\n", "\n", "\n", "2559624->2559612\n", "\n", "\n", "\n", "\n", "\n", "2559613\n", "\n", " \n", "egg\n", "node score:1.0000\n", "\n", "\n", "\n", "2559612->2559613\n", "\n", "\n", "\n", "\n", "\n", "2559615\n", "\n", " \n", "mix\n", "node score: 1.0000\n", "\n", "\n", "\n", "2559614->2559615\n", "\n", "\n", "\n", "\n", "\n", "2559616\n", "\n", " \n", "sausage\n", "node score:1.0000\n", "\n", "\n", "\n", "2559615->2559616\n", "\n", "\n", "\n", "\n", "\n", "2559620\n", "\n", " \n", "saffron\n", "node score:1.0000\n", "\n", "\n", "\n", "2559615->2559620\n", "\n", "\n", "\n", "\n", "\n", "2559618\n", "\n", " \n", "slice\n", "node score: 1.0000\n", "\n", "\n", "\n", "2559615->2559618\n", "\n", "\n", "\n", "\n", "\n", "2559621\n", "\n", " \n", "chicken broth\n", "node score:1.0000\n", "\n", "\n", "\n", "2559615->2559621\n", "\n", "\n", "\n", "\n", "\n", "2559622\n", "\n", " \n", "parsley\n", "node score:1.0000\n", "\n", "\n", "\n", "2559615->2559622\n", "\n", "\n", "\n", "\n", "\n", "2559617\n", "\n", " \n", "rice\n", "node score:1.0000\n", "\n", "\n", "\n", "2559615->2559617\n", "\n", "\n", "\n", "\n", "\n", "2559619\n", "\n", " \n", "clove garlic\n", "node score:1.0000\n", "\n", "\n", "\n", "2559618->2559619\n", "\n", "\n", "\n", "\n", "\n" ], "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" }, { "data": { "text/markdown": [ "**Ingredients**:\n", " * rice\n", " * clove garlic\n", " * egg\n", " * chicken broth\n", " * saffron\n", " * parsley\n", " * sausage\n", "\n", "\n", "**Instructions**:\n", "\n", "| Step | Instruction |\n", "| ----:|:----------- |\n", "| 1 | beat and cut egg |\n", "| 2 | slice clove garlic and mix it with sausage, saffron, chicken broth, parsley and rice. Then boil it. |\n", "| 3 | Mix together the results of step 1 and step 2. |\n" ], "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" }, { "data": { "application/vnd.jupyter.widget-view+json": { "model_id": "0db21948c69549faacba6c72bf10e4af", "version_major": 2, "version_minor": 0 }, "text/plain": [ "HBox(children=(FloatProgress(value=0.0, description='build initial population', max=75.0, style=ProgressStyle(…" ] }, "metadata": {}, "output_type": "display_data" }, { "name": "stdout", "output_type": "stream", "text": [ "\n" ] }, { "data": { "application/vnd.jupyter.widget-view+json": { "model_id": "926747e94e434c74b9d685cf09cffa77", "version_major": 2, "version_minor": 0 }, "text/plain": [ "HBox(children=(FloatProgress(value=0.0, description='run evolutionary cycles', max=35.0, style=ProgressStyle(d…" ] }, "metadata": {}, "output_type": "display_data" }, { "name": "stdout", "output_type": "stream", "text": [ "\n" ] }, { "data": { "text/markdown": [ "### Rice Recipe 6" ], "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" }, { "data": { "image/svg+xml": [ "\n", "\n", "\n", "\n", "\n", "\n", "%3\n", "\n", "\n", "\n", "2619502\n", "\n", " \n", "heat\n", "node score: 1.0000\n", "\n", "\n", "\n", "2619503\n", "\n", " \n", "mix\n", "node score: 1.0000\n", "\n", "\n", "\n", "2619502->2619503\n", "\n", "\n", "\n", "\n", "\n", "2619508\n", "\n", " \n", "saute\n", "node score: 1.0000\n", "\n", "\n", "\n", "2619503->2619508\n", "\n", "\n", "\n", "\n", "\n", "2619505\n", "\n", " \n", "kosher salt\n", "node score:1.0000\n", "\n", "\n", "\n", "2619503->2619505\n", "\n", "\n", "\n", "\n", "\n", "2619513\n", "\n", " \n", "rice\n", "node score:1.0000\n", "\n", "\n", "\n", "2619503->2619513\n", "\n", "\n", "\n", "\n", "\n", "2619514\n", "\n", " \n", "chicken broth\n", "node score:1.0000\n", "\n", "\n", "\n", "2619503->2619514\n", "\n", "\n", "\n", "\n", "\n", "2619512\n", "\n", " \n", "saffron\n", "node score:1.0000\n", "\n", "\n", "\n", "2619503->2619512\n", "\n", "\n", "\n", "\n", "\n", "2619504\n", "\n", " \n", "sausage\n", "node score:1.0000\n", "\n", "\n", "\n", "2619503->2619504\n", "\n", "\n", "\n", "\n", "\n", "2619506\n", "\n", " \n", "slice\n", "node score: 1.0000\n", "\n", "\n", "\n", "2619503->2619506\n", "\n", "\n", "\n", "\n", "\n", "2619509\n", "\n", " \n", "chop\n", "node score: 1.0000\n", "\n", "\n", "\n", "2619508->2619509\n", "\n", "\n", "\n", "\n", "\n", "2619510\n", "\n", " \n", "onion\n", "node score:1.0000\n", "\n", "\n", "\n", "2619509->2619510\n", "\n", "\n", "\n", "\n", "\n", "2619507\n", "\n", " \n", "carrot\n", "node score:1.0000\n", "\n", "\n", "\n", "2619506->2619507\n", "\n", "\n", "\n", "\n", "\n" ], "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" }, { "data": { "text/markdown": [ "**Ingredients**:\n", " * rice\n", " * carrot\n", " * chicken broth\n", " * onion\n", " * saffron\n", " * sausage\n", " * kosher salt\n", "\n", "\n", "**Instructions**:\n", "\n", "| Step | Instruction |\n", "| ----:|:----------- |\n", "| 1 | chop and saute onion |\n", "| 2 | slice carrot and mix it with kosher salt, rice, chicken broth, saffron and sausage and mix it together with the results of step 1. Then heat it. |\n" ], "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" }, { "data": { "application/vnd.jupyter.widget-view+json": { "model_id": "da108b0e8328436880442164a3ee8093", "version_major": 2, "version_minor": 0 }, "text/plain": [ "HBox(children=(FloatProgress(value=0.0, description='build initial population', max=75.0, style=ProgressStyle(…" ] }, "metadata": {}, "output_type": "display_data" }, { "name": "stdout", "output_type": "stream", "text": [ "\n" ] }, { "data": { "application/vnd.jupyter.widget-view+json": { "model_id": "2d50a77146154da7924154790f7fc1d8", "version_major": 2, "version_minor": 0 }, "text/plain": [ "HBox(children=(FloatProgress(value=0.0, description='run evolutionary cycles', max=35.0, style=ProgressStyle(d…" ] }, "metadata": {}, "output_type": "display_data" }, { "name": "stdout", "output_type": "stream", "text": [ "\n" ] }, { "data": { "text/markdown": [ "### Rice Recipe 7" ], "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" }, { "data": { "image/svg+xml": [ "\n", "\n", "\n", "\n", "\n", "\n", "%3\n", "\n", "\n", "\n", "2621040\n", "\n", " \n", "heat\n", "node score: 1.0000\n", "\n", "\n", "\n", "2621041\n", "\n", " \n", "mix\n", "node score: 1.0000\n", "\n", "\n", "\n", "2621040->2621041\n", "\n", "\n", "\n", "\n", "\n", "2621034\n", "\n", " \n", "saffron\n", "node score:1.0000\n", "\n", "\n", "\n", "2621041->2621034\n", "\n", "\n", "\n", "\n", "\n", "2621038\n", "\n", " \n", "chop\n", "node score: 1.0000\n", "\n", "\n", "\n", "2621041->2621038\n", "\n", "\n", "\n", "\n", "\n", "2621030\n", "\n", " \n", "rice\n", "node score:1.0000\n", "\n", "\n", "\n", "2621041->2621030\n", "\n", "\n", "\n", "\n", "\n", "2621032\n", "\n", " \n", "cut\n", "node score: 1.0000\n", "\n", "\n", "\n", "2621041->2621032\n", "\n", "\n", "\n", "\n", "\n", "2621039\n", "\n", " \n", "vegetable broth\n", "node score:1.0000\n", "\n", "\n", "\n", "2621041->2621039\n", "\n", "\n", "\n", "\n", "\n", "2621036\n", "\n", " \n", "chop\n", "node score: 1.0000\n", "\n", "\n", "\n", "2621041->2621036\n", "\n", "\n", "\n", "\n", "\n", "2621033\n", "\n", " \n", "water\n", "node score:1.0000\n", "\n", "\n", "\n", "2621041->2621033\n", "\n", "\n", "\n", "\n", "\n", "2621037\n", "\n", " \n", "celery\n", "node score:1.0000\n", "\n", "\n", "\n", "2621038->2621037\n", "\n", "\n", "\n", "\n", "\n", "2621031\n", "\n", " \n", "tomato\n", "node score:1.0000\n", "\n", "\n", "\n", "2621032->2621031\n", "\n", "\n", "\n", "\n", "\n", "2621035\n", "\n", " \n", "garlic clove\n", "node score:1.0000\n", "\n", "\n", "\n", "2621036->2621035\n", "\n", "\n", "\n", "\n", "\n" ], "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" }, { "data": { "text/markdown": [ "**Ingredients**:\n", " * rice\n", " * vegetable broth\n", " * celery\n", " * garlic clove\n", " * water\n", " * tomato\n", " * saffron\n", "\n", "\n", "**Instructions**:\n", "\n", "| Step | Instruction |\n", "| ----:|:----------- |\n", "| 1 | chop celery, cut tomato, chop garlic clove and mix it with saffron, rice, vegetable broth and water. Then heat it. |\n" ], "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" }, { "data": { "application/vnd.jupyter.widget-view+json": { "model_id": "fa8076cf2ace462d84050db33b11e9dd", "version_major": 2, "version_minor": 0 }, "text/plain": [ "HBox(children=(FloatProgress(value=0.0, description='build initial population', max=75.0, style=ProgressStyle(…" ] }, "metadata": {}, "output_type": "display_data" }, { "name": "stdout", "output_type": "stream", "text": [ "\n" ] }, { "data": { "application/vnd.jupyter.widget-view+json": { "model_id": "b7a0f57e78af418287dd9cc81db90e3b", "version_major": 2, "version_minor": 0 }, "text/plain": [ "HBox(children=(FloatProgress(value=0.0, description='run evolutionary cycles', max=35.0, style=ProgressStyle(d…" ] }, "metadata": {}, "output_type": "display_data" }, { "name": "stdout", "output_type": "stream", "text": [ "\n" ] }, { "data": { "text/markdown": [ "### Rice Recipe 8" ], "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" }, { "data": { "image/svg+xml": [ "\n", "\n", "\n", "\n", "\n", "\n", "%3\n", "\n", "\n", "\n", "2723679\n", "\n", " \n", "heat\n", "node score: 1.0000\n", "\n", "\n", "\n", "2723680\n", "\n", " \n", "mix\n", "node score: 1.0000\n", "\n", "\n", "\n", "2723679->2723680\n", "\n", "\n", "\n", "\n", "\n", "2723687\n", "\n", " \n", "vegetable oil\n", "node score:1.0000\n", "\n", "\n", "\n", "2723680->2723687\n", "\n", "\n", "\n", "\n", "\n", "2723683\n", "\n", " \n", "grate\n", "node score: 1.0000\n", "\n", "\n", "\n", "2723680->2723683\n", "\n", "\n", "\n", "\n", "\n", "2723685\n", "\n", " \n", "mushroom soup\n", "node score:1.0000\n", "\n", "\n", "\n", "2723680->2723685\n", "\n", "\n", "\n", "\n", "\n", "2723688\n", "\n", " \n", "rice\n", "node score:1.0000\n", "\n", "\n", "\n", "2723680->2723688\n", "\n", "\n", "\n", "\n", "\n", "2723689\n", "\n", " \n", "ground beef\n", "node score:1.0000\n", "\n", "\n", "\n", "2723680->2723689\n", "\n", "\n", "\n", "\n", "\n", "2723686\n", "\n", " \n", "soy sauce\n", "node score:1.0000\n", "\n", "\n", "\n", "2723680->2723686\n", "\n", "\n", "\n", "\n", "\n", "2723681\n", "\n", " \n", "peel\n", "node score: 1.0000\n", "\n", "\n", "\n", "2723680->2723681\n", "\n", "\n", "\n", "\n", "\n", "2723684\n", "\n", " \n", "carrot\n", "node score:1.0000\n", "\n", "\n", "\n", "2723683->2723684\n", "\n", "\n", "\n", "\n", "\n", "2723682\n", "\n", " \n", "onion\n", "node score:1.0000\n", "\n", "\n", "\n", "2723681->2723682\n", "\n", "\n", "\n", "\n", "\n" ], "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" }, { "data": { "text/markdown": [ "**Ingredients**:\n", " * vegetable oil\n", " * rice\n", " * ground beef\n", " * carrot\n", " * onion\n", " * soy sauce\n", " * mushroom soup\n", "\n", "\n", "**Instructions**:\n", "\n", "| Step | Instruction |\n", "| ----:|:----------- |\n", "| 1 | grate carrot, peel onion and mix it with vegetable oil, mushroom soup, rice, ground beef and soy sauce. Then heat it. |\n" ], "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" }, { "data": { "application/vnd.jupyter.widget-view+json": { "model_id": "fbc941a2a8464c799263119832250f04", "version_major": 2, "version_minor": 0 }, "text/plain": [ "HBox(children=(FloatProgress(value=0.0, description='build initial population', max=75.0, style=ProgressStyle(…" ] }, "metadata": {}, "output_type": "display_data" }, { "name": "stdout", "output_type": "stream", "text": [ "\n" ] }, { "data": { "application/vnd.jupyter.widget-view+json": { "model_id": "cb6cd4db7a8045a58a69565b2feda5e5", "version_major": 2, "version_minor": 0 }, "text/plain": [ "HBox(children=(FloatProgress(value=0.0, description='run evolutionary cycles', max=35.0, style=ProgressStyle(d…" ] }, "metadata": {}, "output_type": "display_data" }, { "name": "stdout", "output_type": "stream", "text": [ "Warning: cannot find matching action node for mutation\n", "\n" ] }, { "data": { "text/markdown": [ "### Rice Recipe 9" ], "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" }, { "data": { "image/svg+xml": [ "\n", "\n", "\n", "\n", "\n", "\n", "%3\n", "\n", "\n", "\n", "2728998\n", "\n", " \n", "heat\n", "node score: 1.0000\n", "\n", "\n", "\n", "2728999\n", "\n", " \n", "mix\n", "node score: 0.9286\n", "\n", "\n", "\n", "2728998->2728999\n", "\n", "\n", "\n", "\n", "\n", "2728995\n", "\n", " \n", "green pea\n", "node score:1.0000\n", "\n", "\n", "\n", "2728999->2728995\n", "\n", "\n", "\n", "\n", "\n", "2728988\n", "\n", " \n", "slice\n", "node score: 1.0000\n", "\n", "\n", "\n", "2728999->2728988\n", "\n", "\n", "\n", "\n", "\n", "2728990\n", "\n", " \n", "chop\n", "node score: 1.0000\n", "\n", "\n", "\n", "2728999->2728990\n", "\n", "\n", "\n", "\n", "\n", "2728986\n", "\n", " \n", "rice\n", "node score:1.0000\n", "\n", "\n", "\n", "2728999->2728986\n", "\n", "\n", "\n", "\n", "\n", "2728997\n", "\n", " \n", "chop\n", "node score: 1.0000\n", "\n", "\n", "\n", "2728999->2728997\n", "\n", "\n", "\n", "\n", "\n", "2728993\n", "\n", " \n", "chicken broth\n", "node score:1.0000\n", "\n", "\n", "\n", "2728999->2728993\n", "\n", "\n", "\n", "\n", "\n", "2728992\n", "\n", " \n", "chop\n", "node score: 1.0000\n", "\n", "\n", "\n", "2728999->2728992\n", "\n", "\n", "\n", "\n", "\n", "2728994\n", "\n", " \n", "salt\n", "node score:1.0000\n", "\n", "\n", "\n", "2728999->2728994\n", "\n", "\n", "\n", "\n", "\n", "2728987\n", "\n", " \n", "onion\n", "node score:1.0000\n", "\n", "\n", "\n", "2728988->2728987\n", "\n", "\n", "\n", "\n", "\n", "2728989\n", "\n", " \n", "chicken breast\n", "node score:1.0000\n", "\n", "\n", "\n", "2728990->2728989\n", "\n", "\n", "\n", "\n", "\n", "2728996\n", "\n", " \n", "parsley\n", "node score:1.0000\n", "\n", "\n", "\n", "2728997->2728996\n", "\n", "\n", "\n", "\n", "\n", "2728991\n", "\n", " \n", "green pepper\n", "node score:1.0000\n", "\n", "\n", "\n", "2728992->2728991\n", "\n", "\n", "\n", "\n", "\n" ], "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" }, { "data": { "text/markdown": [ "**Ingredients**:\n", " * green pepper\n", " * rice\n", " * green pea\n", " * chicken broth\n", " * salt\n", " * onion\n", " * parsley\n", " * chicken breast\n", "\n", "\n", "**Instructions**:\n", "\n", "| Step | Instruction |\n", "| ----:|:----------- |\n", "| 1 | slice onion, chop chicken breast, chop parsley, chop green pepper and mix it with green pea, rice, chicken broth and salt. Then heat it. |\n" ], "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" }, { "data": { "application/vnd.jupyter.widget-view+json": { "model_id": "28960ce1e8b1446983eed4f3f64f2971", "version_major": 2, "version_minor": 0 }, "text/plain": [ "HBox(children=(FloatProgress(value=0.0, description='build initial population', max=75.0, style=ProgressStyle(…" ] }, "metadata": {}, "output_type": "display_data" }, { "name": "stdout", "output_type": "stream", "text": [ "\n" ] }, { "data": { "application/vnd.jupyter.widget-view+json": { "model_id": "37f8c72c2c4a4893ab76bc69dd9b7fd5", "version_major": 2, "version_minor": 0 }, "text/plain": [ "HBox(children=(FloatProgress(value=0.0, description='run evolutionary cycles', max=35.0, style=ProgressStyle(d…" ] }, "metadata": {}, "output_type": "display_data" }, { "name": "stdout", "output_type": "stream", "text": [ "Warning: cannot mutate given node\n", "\n" ] }, { "data": { "text/markdown": [ "### Rice Recipe 10" ], "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" }, { "data": { "image/svg+xml": [ "\n", "\n", "\n", "\n", "\n", "\n", "%3\n", "\n", "\n", "\n", "2803311\n", "\n", " \n", "heat\n", "node score: 1.0000\n", "\n", "\n", "\n", "2803312\n", "\n", " \n", "mix\n", "node score: 1.0000\n", "\n", "\n", "\n", "2803311->2803312\n", "\n", "\n", "\n", "\n", "\n", "2803322\n", "\n", " \n", "parsley\n", "node score:1.0000\n", "\n", "\n", "\n", "2803312->2803322\n", "\n", "\n", "\n", "\n", "\n", "2803323\n", "\n", " \n", "sausage\n", "node score:1.0000\n", "\n", "\n", "\n", "2803312->2803323\n", "\n", "\n", "\n", "\n", "\n", "2803320\n", "\n", " \n", "rice\n", "node score:1.0000\n", "\n", "\n", "\n", "2803312->2803320\n", "\n", "\n", "\n", "\n", "\n", "2803314\n", "\n", " \n", "garlic salt\n", "node score:1.0000\n", "\n", "\n", "\n", "2803312->2803314\n", "\n", "\n", "\n", "\n", "\n", "2803315\n", "\n", " \n", "vegetable oil\n", "node score:1.0000\n", "\n", "\n", "\n", "2803312->2803315\n", "\n", "\n", "\n", "\n", "\n", "2803321\n", "\n", " \n", "chicken broth\n", "node score:1.0000\n", "\n", "\n", "\n", "2803312->2803321\n", "\n", "\n", "\n", "\n", "\n", "2803318\n", "\n", " \n", "cut\n", "node score: 1.0000\n", "\n", "\n", "\n", "2803312->2803318\n", "\n", "\n", "\n", "\n", "\n", "2803316\n", "\n", " \n", "dice\n", "node score: 1.0000\n", "\n", "\n", "\n", "2803312->2803316\n", "\n", "\n", "\n", "\n", "\n", "2803319\n", "\n", " \n", "onion\n", "node score:1.0000\n", "\n", "\n", "\n", "2803318->2803319\n", "\n", "\n", "\n", "\n", "\n", "2803317\n", "\n", " \n", "tomato\n", "node score:1.0000\n", "\n", "\n", "\n", "2803316->2803317\n", "\n", "\n", "\n", "\n", "\n" ], "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" }, { "data": { "text/markdown": [ "**Ingredients**:\n", " * garlic salt\n", " * vegetable oil\n", " * rice\n", " * chicken broth\n", " * onion\n", " * tomato\n", " * parsley\n", " * sausage\n", "\n", "\n", "**Instructions**:\n", "\n", "| Step | Instruction |\n", "| ----:|:----------- |\n", "| 1 | cut onion, dice tomato and mix it with parsley, sausage, rice, garlic salt, vegetable oil and chicken broth. Then heat it. |\n" ], "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "for i in range(10):\n", "\n", " p = EA.Population([\"rice\"],['rice'], min_additional=6, max_additional=11, n_population = 75, mutations=2)\n", "\n", " p.run(35)\n", "\n", " scores = [tree.score() for tree in p.population]\n", "\n", " ii = np.argsort(-np.array(scores))\n", "\n", " samples_i = EA.np.random.choice(ii[:1],1)\n", "\n", " samples = [p.population[i] for i in samples_i]\n", "\n", " for k, s in enumerate(samples):\n", " display(EA.Markdown(f\"### Rice Recipe {i+1}\"))\n", " display(s.root().dot())\n", " display(s.root().to_instruction().to_markdown())\n", " with open(f\"rice_{i}.md\", \"w\") as f:\n", " f.write(s.root().to_instruction().to_markdown().data)\n", " f.close()" ] }, { "cell_type": "code", "execution_count": 15, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "(array(['heat', 'boil', 'cool', 'cook', 'bake', 'place', 'simmer', 'pour',\n", " 'warm', 'refrigerate', 'drain', 'brown', 'chill', 'cut', 'blend',\n", " 'beat', 'whisk', 'thicken', 'rinse', 'freeze', 'slice', 'soak',\n", " 'spread', 'knead', 'fry', 'melt', 'whip', 'steam', 'grill', 'peel',\n", " 'chop', 'break', 'brush', 'wash', 'open', 'burn', 'saute', 'steep',\n", " 'skim', 'squeeze', 'wipe', 'mash', 'marinate', 'broil', 'thaw',\n", " 'sour', 'crack', 'dice', 'grind', 'baste', 'mince', 'grate'],\n", " dtype='