master-thesis/EvolutionaryAlgorithm/EvolutionaryAlgorithm.ipynb
2020-01-05 12:23:45 +01:00

4103 lines
210 KiB
Plaintext

{
"cells": [
{
"cell_type": "markdown",
"metadata": {},
"source": [
"# Evolutionary Algorithm"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"the Evolutionary Algorithm that is supposed to create new recipes based on the Recipe Matrices that are created during the *Recipe Analysis* step.\n",
"\n",
"The Population of the Evolutional Algorithm consists of a set of recipe trees. Each Recipe Tree consists of several Nodes where each node is of one of the following Types:\n",
"\n",
"* **Ingredient Node:**\n",
" these are the leaf nodes. Containing an ingredient. The score is determined by the actions, that are applied if you follow up the path. At the Moment it measures how many duplicate actions are applied.\n",
"* **Action Node:**\n",
" An Action that is applied on it's child and this child's subtree. Score indicates the average likelihood that this action is applied on the ingredients inside the subtree\n",
"* **Mix Node:**\n",
" Mixing ingredients together. This is also the only Node that can have more than one child. The score is the average of all pairwise likelihoods that two ingredients are mixed togethter"
]
},
{
"cell_type": "code",
"execution_count": 1,
"metadata": {},
"outputs": [],
"source": [
"import sys\n",
"sys.path.append(\"../\")\n",
"sys.path.append(\"../RecipeAnalysis/\")"
]
},
{
"cell_type": "code",
"execution_count": 2,
"metadata": {},
"outputs": [
{
"data": {
"text/html": [
" <script type=\"text/javascript\">\n",
" window.PlotlyConfig = {MathJaxConfig: 'local'};\n",
" if (window.MathJax) {MathJax.Hub.Config({SVG: {font: \"STIX-Web\"}});}\n",
" if (typeof require !== 'undefined') {\n",
" require.undef(\"plotly\");\n",
" requirejs.config({\n",
" paths: {\n",
" 'plotly': ['https://cdn.plot.ly/plotly-latest.min']\n",
" }\n",
" });\n",
" require(['plotly'], function(Plotly) {\n",
" window._Plotly = Plotly;\n",
" });\n",
" }\n",
" </script>\n",
" "
]
},
"metadata": {},
"output_type": "display_data"
},
{
"data": {
"text/html": [
" <script type=\"text/javascript\">\n",
" window.PlotlyConfig = {MathJaxConfig: 'local'};\n",
" if (window.MathJax) {MathJax.Hub.Config({SVG: {font: \"STIX-Web\"}});}\n",
" if (typeof require !== 'undefined') {\n",
" require.undef(\"plotly\");\n",
" requirejs.config({\n",
" paths: {\n",
" 'plotly': ['https://cdn.plot.ly/plotly-latest.min']\n",
" }\n",
" });\n",
" require(['plotly'], function(Plotly) {\n",
" window._Plotly = Plotly;\n",
" });\n",
" }\n",
" </script>\n",
" "
]
},
"metadata": {},
"output_type": "display_data"
},
{
"name": "stderr",
"output_type": "stream",
"text": [
"/home/jonas/.local/lib/python3.7/site-packages/ipykernel_launcher.py:39: 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 settings\n",
"\n",
"import pycrfsuite\n",
"\n",
"import json\n",
"\n",
"import db.db_settings as db_settings\n",
"from db.database_connection import DatabaseConnection\n",
"\n",
"from Tagging.conllu_generator import ConlluGenerator\n",
"from Tagging.crf_data_generator import *\n",
"\n",
"from RecipeAnalysis.Recipe import Ingredient\n",
"\n",
"import ea_tools\n",
"\n",
"from difflib import SequenceMatcher\n",
"\n",
"import numpy as np\n",
"\n",
"import ActionGroups as AG\n",
"\n",
"import plotly.graph_objs as go\n",
"from plotly.offline import download_plotlyjs, init_notebook_mode, plot, iplot\n",
"from plotly.subplots import make_subplots\n",
"init_notebook_mode(connected=True)\n",
"\n",
"from graphviz import Digraph\n",
"\n",
"import itertools\n",
"\n",
"import random\n",
"\n",
"import plotly.io as pio\n",
"pio.renderers.default = \"jupyterlab\"\n",
"\n",
"from IPython.display import Markdown, HTML, display\n",
"\n",
"from tqdm.autonotebook import tqdm\n",
"\n",
"from copy import deepcopy"
]
},
{
"cell_type": "code",
"execution_count": 3,
"metadata": {},
"outputs": [],
"source": [
"def gaussian(x, mu, sig):\n",
" return 1./(np.sqrt(2.*np.pi)*sig)*np.exp(-np.power((x - mu)/sig, 2.)/2)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## load adjacency matrices"
]
},
{
"cell_type": "code",
"execution_count": 4,
"metadata": {},
"outputs": [],
"source": [
"import dill\n",
"m_act = dill.load(open(\"../RecipeAnalysis/m_act.dill\", \"rb\"))\n",
"m_mix = dill.load(open(\"../RecipeAnalysis/m_mix.dill\", \"rb\"))\n",
"m_base_act = dill.load(open(\"../RecipeAnalysis/m_base_act.dill\", \"rb\"))\n",
"m_base_mix = dill.load(open(\"../RecipeAnalysis/m_base_mix.dill\", \"rb\"))\n",
"\n",
"\n",
"m_grouped_mix = dill.load(open(\"../RecipeAnalysis/m_grouped_mix_raw.dill\", \"rb\"))\n",
"m_grouped_act = dill.load(open(\"../RecipeAnalysis/m_grouped_act_raw.dill\", \"rb\"))\n",
"m_grouped_base_act = dill.load(open(\"../RecipeAnalysis/m_grouped_base_act_raw.dill\", \"rb\"))\n",
"\n",
"\n",
"#m_act.apply_threshold(3)\n",
"#m_mix.apply_threshold(3)\n",
"#m_base_act.apply_threshold(5)\n",
"#m_base_mix.apply_threshold(5)\n",
"\n",
"\n",
"#c_act = m_act.get_csr()\n",
"#c_mix = m_mix.get_csr()\n",
"#c_base_act = m_base_act.get_csr()\n",
"#c_base_mix = m_base_mix.get_csr()\n",
"\n",
"m_act.compile()\n",
"m_mix.compile()\n",
"m_base_act.compile()\n",
"m_base_mix.compile()\n",
"\n",
"m_grouped_mix.compile()\n",
"m_grouped_act.compile()\n",
"m_grouped_base_act.compile()\n",
"\n",
"c_act = m_act._csr\n",
"c_mix = m_mix._csr\n",
"c_base_act = m_base_act._csr\n",
"c_base_mix = m_base_mix._csr"
]
},
{
"cell_type": "code",
"execution_count": 5,
"metadata": {},
"outputs": [],
"source": [
"c_grouped_mix = m_grouped_mix._csr\n",
"c_grouped_act = m_grouped_act._csr\n",
"c_grouped_base_act = m_grouped_base_act._csr"
]
},
{
"cell_type": "code",
"execution_count": 6,
"metadata": {},
"outputs": [],
"source": [
"actions = m_act.get_labels()[0]"
]
},
{
"cell_type": "code",
"execution_count": 7,
"metadata": {},
"outputs": [],
"source": [
"base_ingredients = m_base_mix.get_labels()"
]
},
{
"cell_type": "code",
"execution_count": 8,
"metadata": {},
"outputs": [],
"source": [
"sym_label_buffer = {}\n",
"fw_label_buffer = {}\n",
"bw_label_buffer = {}"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"### helper functions for adjacency matrices"
]
},
{
"cell_type": "code",
"execution_count": 9,
"metadata": {},
"outputs": [],
"source": [
"def get_sym_adjacent(key, m, c):\n",
" index = m._label_index[key]\n",
" i1 = c[index,:].nonzero()[1]\n",
" i2 = c[:,index].nonzero()[0]\n",
" \n",
" i = np.concatenate((i1,i2))\n",
" \n",
" if m in sym_label_buffer:\n",
" names = sym_label_buffer[m][i]\n",
" else:\n",
" names = np.array(m.get_labels())\n",
" sym_label_buffer[m] = names\n",
" names = names[i]\n",
" \n",
" counts = np.concatenate((c[index, i1].toarray().flatten(), c[i2, index].toarray().flatten()))\n",
" \n",
" s = np.argsort(-counts)\n",
" \n",
" return names[s], counts[s]"
]
},
{
"cell_type": "code",
"execution_count": 10,
"metadata": {},
"outputs": [],
"source": [
"def get_forward_adjacent(key, m, c):\n",
" index = m._x_label_index[key]\n",
" i = c[index,:].nonzero()[1]\n",
" \n",
" if m in fw_label_buffer:\n",
" names = fw_label_buffer[m][i]\n",
" else:\n",
" names = np.array(m._y_labels)\n",
" fw_label_buffer[m] = names\n",
" names = names[i]\n",
" \n",
" \n",
" counts = c[index, i].toarray().flatten()\n",
" \n",
" s = np.argsort(-counts)\n",
" \n",
" return names[s], counts[s]"
]
},
{
"cell_type": "code",
"execution_count": 11,
"metadata": {},
"outputs": [],
"source": [
"def get_backward_adjacent(key, m, c):\n",
" index = m._y_label_index[key]\n",
" i = c[:,index].nonzero()[0]\n",
" \n",
" if m in bw_label_buffer:\n",
" names = bw_label_buffer[m][i]\n",
" else:\n",
" names = np.array(m._x_labels)\n",
" bw_label_buffer[m] = names\n",
" names = names[i]\n",
" \n",
" \n",
" counts = c[i, index].toarray().flatten()\n",
" \n",
" s = np.argsort(-counts)\n",
" \n",
" return names[s], counts[s]"
]
},
{
"cell_type": "code",
"execution_count": 12,
"metadata": {},
"outputs": [],
"source": [
"def sym_sum(key, m, c):\n",
" return np.sum(get_sym_adjacent(key,m,c)[1])\n",
"\n",
"def fw_sum(key, m, c):\n",
" return np.sum(get_forward_adjacent(key,m,c)[1])\n",
"\n",
"def bw_sum(key, m, c):\n",
" return np.sum(get_backward_adjacent(key,m,c)[1])"
]
},
{
"cell_type": "code",
"execution_count": 13,
"metadata": {},
"outputs": [],
"source": [
"def to_grouped_ingredient(ing:Ingredient):\n",
" groups = set()\n",
" for act in ing._action_set:\n",
" groups.add(AG.groups[act])\n",
" grouped_ingredient = Ingredient(ing._base_ingredient)\n",
" for g in groups:\n",
" grouped_ingredient.apply_action(g)\n",
" return grouped_ingredient"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"#### different score functions"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"##### normalizations"
]
},
{
"cell_type": "code",
"execution_count": 14,
"metadata": {},
"outputs": [],
"source": [
"def fw_normalization_factor(key, m, c, quotient_func):\n",
" ia = m._x_label_index[key]\n",
" \n",
" occurances = c[ia,:].nonzero()[1]\n",
" \n",
" return 1. / quotient_func(c[ia,occurances].toarray())\n",
"\n",
"def bw_normalization_factor(key, m, c, quotient_func):\n",
" ib = m._y_label_index[key]\n",
" \n",
" occurances = c[:,ib].nonzero()[0]\n",
" \n",
" return 1. / quotient_func(c[occurances,ib].toarray())\n",
"\n",
"def sym_normalization_factor(key, m, c, quotient_func):\n",
" ii = m._label_index[key]\n",
" \n",
" fw_occurances = c[ii,:].nonzero()[1]\n",
" bw_occurances = c[:,ii].nonzero()[0]\n",
" \n",
" return 1. / quotient_func(np.concatenate(\n",
" [c[ii,fw_occurances].toarray().flatten(),\n",
" c[bw_occurances,ii].toarray().flatten()]\n",
" ))"
]
},
{
"cell_type": "code",
"execution_count": 15,
"metadata": {},
"outputs": [],
"source": [
"def sym_p_a_given_b(key_a, key_b, m, c, quot_func = np.max):\n",
" ia = m._label_index[key_a]\n",
" ib = m._label_index[key_b]\n",
" \n",
" v = c[ia,ib] + c[ib,ia]\n",
" \n",
" return v * sym_normalization_factor(key_b, m, c, quot_func)\n",
"\n",
"def fw_p_a_given_b(key_a, key_b, m, c, quot_func = np.max):\n",
" ia = m._x_label_index[key_a]\n",
" ib = m._y_label_index[key_b]\n",
" \n",
" v = c[ia,ib]\n",
" \n",
" return v * bw_normalization_factor(key_b, m, c, quot_func)\n",
"\n",
"def bw_p_a_given_b(key_a, key_b, m, c, quot_func = np.max):\n",
" ia = m._y_label_index[key_a]\n",
" ib = m._x_label_index[key_b]\n",
" \n",
" v = c[ib,ia]\n",
" \n",
" return v * fw_normalization_factor(key_b, m, c, quot_func)\n"
]
},
{
"cell_type": "code",
"execution_count": 16,
"metadata": {},
"outputs": [],
"source": [
"def sym_score(key_a, key_b, m, c):\n",
"\n",
" ia = m._label_index[key_a]\n",
" ib = m._label_index[key_b]\n",
" \n",
" v = c[ia,ib] + c[ib,ia]\n",
" \n",
" if v == 0:\n",
" return 0\n",
" \n",
" return max((v/sym_sum(key_a, m, c)), (v/sym_sum(key_b, m, c)))\n",
"\n",
"def asym_score(key_a, key_b, m, c):\n",
" ia = m._x_label_index[key_a]\n",
" ib = m._y_label_index[key_b]\n",
" \n",
" v = c[ia,ib]\n",
" \n",
" if v == 0:\n",
" return 0\n",
" \n",
" return max(v/fw_sum(key_a, m, c), v/bw_sum(key_b, m, c))"
]
},
{
"cell_type": "code",
"execution_count": 17,
"metadata": {},
"outputs": [],
"source": [
"def p_ingredient_unprepared(base_ing):\n",
" ing = Ingredient(base_ing)\n",
" base_sum = sym_sum(base_ing, m_base_mix, c_base_mix)\n",
" specialized_sum = sym_sum(ing.to_json(), m_mix, c_mix)\n",
" return specialized_sum / base_sum"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"**new probability for preprocess ingredients:**"
]
},
{
"cell_type": "code",
"execution_count": 45,
"metadata": {},
"outputs": [],
"source": [
"PREPARE_RATIO_THRESHOLD = 0.35\n",
"HEAT_RATIO_THRESHOLD = 0.65\n",
"\n",
"PREPARE_SCORE_EPS = 0.1\n",
"HEAT_SCORE_EPS = 0.1\n",
"\n",
"def prepare_ratio(ing:str):\n",
" keys, values = m_grouped_act.get_backward_adjacent(Ingredient(ing).to_json())\n",
" action_dict = dict(zip(keys,values))\n",
" return action_dict['prepare'] / action_dict['heat']\n",
"\n",
"def random_prepare(ing:str):\n",
" \"\"\"\n",
" returns randomly a boolean value if ing should be prepared, w.r.t. the prepare_ration function\n",
" \"\"\"\n",
" \n",
" return prepare_ratio(ing) > np.random.normal(PREPARE_RATIO_THRESHOLD,0.1)\n",
"\n",
"def heat_ratio(ingredient:str):\n",
" action_set, action_weights = m_grouped_base_act.get_backward_adjacent(ingredient)\n",
" d = dict(zip(action_set, action_weights))\n",
" ratio = 1 - d['prepare'] / d['heat']\n",
" \n",
" return ratio\n",
"\n",
"def random_heated(ingredient:str):\n",
" ratio = heat_ratio(ingredient)\n",
" \n",
" return ratio > np.random.normal(HEAT_RATIO_THRESHOLD,0.15)\n",
"\n",
"def prepare_score(ingredient:Ingredient):\n",
" ing_str = ingredient._base_ingredient\n",
" \n",
" g_ing = to_grouped_ingredient(ingredient)\n",
" \n",
" ratio = prepare_ratio(ing_str)\n",
" \n",
" if ratio > PREPARE_RATIO_THRESHOLD + PREPARE_SCORE_EPS:\n",
" if 'prepare' not in g_ing._action_set:\n",
" return 0\n",
" \n",
" if ratio < PREPARE_RATIO_THRESHOLD - PREPARE_SCORE_EPS:\n",
" if 'prepare' in g_ing._action_set:\n",
" return 0\n",
" \n",
" return 1\n",
"\n",
"def heat_score(ingredient:Ingredient):\n",
" ing_str = ingredient._base_ingredient\n",
" \n",
" g_ing = to_grouped_ingredient(ingredient)\n",
" \n",
" ratio = heat_ratio(ing_str)\n",
" \n",
" if ratio > HEAT_RATIO_THRESHOLD + HEAT_SCORE_EPS:\n",
" if 'heat' not in g_ing._action_set:\n",
" return 0\n",
" \n",
" if ratio < HEAT_RATIO_THRESHOLD - HEAT_SCORE_EPS:\n",
" if 'heat' in g_ing._action_set:\n",
" return 0\n",
" \n",
" return 1\n"
]
},
{
"cell_type": "code",
"execution_count": 46,
"metadata": {},
"outputs": [],
"source": [
"def relative_action_rank(ingredient:str, action:str):\n",
" action_set, action_weights = m_base_act.get_backward_adjacent(ingredient)\n",
" if action not in action_set or len(action_set) <= 1:\n",
" return 0\n",
" return 1 - action_set.tolist().index(action) / (len(action_set) - 1)"
]
},
{
"cell_type": "code",
"execution_count": 47,
"metadata": {},
"outputs": [],
"source": [
"def filter_set_by_group(act_set, act_w, group):\n",
" new_act_set = []\n",
" new_act_w = []\n",
" for i in range(len(act_set)):\n",
" if act_set[i] in AG.inverse_groups[group]:\n",
" new_act_set.append(act_set[i])\n",
" new_act_w.append(act_w[i])\n",
" return np.array(new_act_set), np.array(new_act_w)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## better normalized scores:"
]
},
{
"cell_type": "code",
"execution_count": 48,
"metadata": {},
"outputs": [],
"source": [
"def normalized_score(key, matrix):\n",
" sum_key = matrix.get_sum(key)\n",
" keys, values = matrix.get_adjacent(key)\n",
" normalized_values = np.array([(values[i] / matrix.get_sum(keys[i])) * (values[i] / sum_key) for i in range(len(keys))])\n",
" sort = np.argsort(-normalized_values)\n",
" return keys[sort], normalized_values[sort]\n",
"\n",
"def forward_normalized_score(key, matrix):\n",
" sum_key = matrix.get_fw_sum(key)\n",
" keys, values = matrix.get_forward_adjacent(key)\n",
" normalized_values = np.array([(values[i] / matrix.get_bw_sum(keys[i])) * (values[i] / sum_key) for i in range(len(keys))])\n",
" sort = np.argsort(-normalized_values)\n",
" return keys[sort], normalized_values[sort]\n",
"\n",
"def backward_normalized_score(key, matrix):\n",
" sum_key = matrix.get_bw_sum(key)\n",
" keys, values = matrix.get_backward_adjacent(key)\n",
" normalized_values = np.array([(values[i] / matrix.get_fw_sum(keys[i])) * (values[i] / sum_key) for i in range(len(keys))])\n",
" sort = np.argsort(-normalized_values)\n",
" return keys[sort], normalized_values[sort]"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## Helper class for instructions"
]
},
{
"cell_type": "code",
"execution_count": 49,
"metadata": {},
"outputs": [],
"source": [
"class RecipeInstructionState(object):\n",
" def __init__(self):\n",
" self.current_step = 1\n",
" self.id_to_state = {}\n",
" self.instructions_by_step = {}\n",
" self.step_by_nodeid = {}\n",
" self.text_by_nodeid = {}\n",
" self.ingredients = set()\n",
" \n",
" def _add_instruction(self, node_id):\n",
" s = self.text_by_nodeid[node_id]\n",
" self.instructions_by_step[self.current_step] = s\n",
" self.step_by_nodeid[node_id] = self.current_step\n",
" self.current_step += 1\n",
" return self.current_step - 1\n",
" \n",
" def add_text(self, node_id, text, is_instruction=False, is_ingredient=False):\n",
" self.text_by_nodeid[node_id] = text\n",
" if is_instruction:\n",
" self._add_instruction(node_id)\n",
" if is_ingredient:\n",
" self.ingredients.add(text)\n",
" \n",
" def exists_any_instruction(self, node_ids:list):\n",
" \"\"\"check if any instruction exists for list of id's\n",
" \"\"\"\n",
" \n",
" for node_id in node_ids:\n",
" if node_id in self.step_by_nodeid:\n",
" return True\n",
" return False\n",
" \n",
" def to_markdown(self):\n",
" \n",
" md_text = \"**Ingredients**:\\n\"\n",
" \n",
" for ing in self.ingredients:\n",
" md_text += f\" * {ing}\\n\"\n",
" \n",
" md_text += \"\\n\\n**Instructions**:\\n\\n\"\n",
" md_text += \"| Step | Instruction |\\n\"\n",
" md_text += \"| ----:|:----------- |\\n\"\n",
" \n",
" for step in range(1, self.current_step):\n",
" md_text += f\"| {step} | {self.instructions_by_step[step]} |\\n\"\n",
" \n",
" return Markdown(md_text)\n",
" \n",
" \n",
" \n",
" \n",
" "
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## Recipe Tree\n",
"### Tree Node Base Class"
]
},
{
"cell_type": "code",
"execution_count": 50,
"metadata": {},
"outputs": [],
"source": [
"class RecipeTreeNode(object):\n",
" \n",
" id = 0\n",
" \n",
" def __init__(self, name, constant=False, single_child=False):\n",
" self._constant = constant\n",
" self._name = name\n",
" self._parent = None\n",
" \n",
" self._id = str(RecipeTreeNode.id)\n",
" RecipeTreeNode.id += 1\n",
" \n",
" self._single_child = single_child\n",
" \n",
" if self._single_child:\n",
" self._child = None\n",
" \n",
" def child():\n",
" return self._child\n",
" \n",
" def remove_child(c):\n",
" assert c == self._child\n",
" self._child._parent = None\n",
" self._child = None\n",
" \n",
" def childs():\n",
" c = self.child()\n",
" if c is None:\n",
" return set()\n",
" return set([c])\n",
" \n",
" def add_child(n):\n",
" self._child = n\n",
" n._parent = self\n",
" \n",
" self.child = child\n",
" self.childs = childs\n",
" self.add_child = add_child\n",
" self.remove_child = remove_child\n",
" else:\n",
" self._childs = set()\n",
" \n",
" def childs():\n",
" return self._childs\n",
" \n",
" def add_child(n):\n",
" self._childs.add(n)\n",
" n._parent = self\n",
" \n",
" def remove_child(c):\n",
" assert c in self._childs\n",
" c._parent = None\n",
" self._childs.remove(c)\n",
" \n",
" self.childs = childs\n",
" self.add_child = add_child\n",
" self.remove_child = remove_child\n",
" \n",
" def parent(self):\n",
" return self._parent\n",
" \n",
" def root(self):\n",
" if self._parent is None:\n",
" return self\n",
" return self._parent.root()\n",
" \n",
" def name(self):\n",
" return self._name\n",
" \n",
" def traverse(self):\n",
" l = []\n",
" \n",
" for c in self.childs():\n",
" l += c.traverse()\n",
" \n",
" return [self] + l\n",
" \n",
" def traverse_ingredients(self):\n",
" ingredient_set = []\n",
" for c in self.childs():\n",
" ingredient_set += c.traverse_ingredients()\n",
" \n",
" return ingredient_set\n",
" \n",
" def remove(self):\n",
" p = self.parent()\n",
" childs = self.childs().copy()\n",
" \n",
" assert p is None or not (len(childs) > 1 and p._single_child)\n",
" \n",
" for c in childs:\n",
" self.remove_child(c)\n",
" \n",
" if p is not None:\n",
" p.remove_child(self)\n",
" \n",
" if self._single_child and self._child is not None and p._name == self._child._name:\n",
" # two adjacent nodes with same name would remain after deletion.\n",
" # merge them! (by adding the child's childs to our parent instead of our childs)\n",
" childs = self._child.childs()\n",
" self._child.remove()\n",
" \n",
" \n",
" for c in childs:\n",
" p.add_child(c)\n",
" \n",
" def insert_before(self, n):\n",
" p = self._parent\n",
" if p is not None:\n",
" p.remove_child(self)\n",
" p.add_child(n)\n",
" n.add_child(self)\n",
" \n",
" def mutate(self):\n",
" n_node = self.n_node_mutate_options()\n",
" n_edge = self.n_edge_mutate_options()\n",
" \n",
" choice = random.choice(range(n_node + n_edge))\n",
" if choice < n_node:\n",
" self.mutate_node()\n",
" else:\n",
" self.mutate_edges()\n",
" \n",
" def mutate_edges(self):\n",
" ings = self.traverse_ingredients()\n",
" ing = random.choice(ings)\n",
" \n",
" a, w = get_backward_adjacent(ing._base_ingredient, m_base_act, c_base_act)\n",
" \n",
" action = random.choices(a, w)[0]\n",
" self.insert_before(ActionNode(action))\n",
" \n",
" def mutate_node(self):\n",
" raise NotImplementedError\n",
" \n",
" def n_node_mutate_options(self):\n",
" \n",
" return 0 if self._constant else 1\n",
" \n",
" def n_edge_mutate_options(self):\n",
" n = 1 if self._parent is not None else 0\n",
" return n\n",
" \n",
" def n_mutate_options(self):\n",
" return self.n_edge_mutate_options() + self.n_node_mutate_options()\n",
" \n",
" def dot_node(self, dot):\n",
" raise NotImplementedError()\n",
" \n",
" def dot(self, d=None):\n",
" if d is None:\n",
" d = Digraph()\n",
" self.dot_node(d)\n",
" \n",
" else:\n",
" self.dot_node(d)\n",
" if self._parent is not None:\n",
" d.edge(self._parent._id, self._id)\n",
" \n",
" \n",
" for c in self.childs():\n",
" c.dot(d)\n",
" \n",
" return d\n",
" \n",
" def simplify(self):\n",
" # simplify nodes (mainly used to delete doubled Mix Nodes)\n",
" for c in self.childs().copy():\n",
" c.simplify()\n",
" \n",
" def serialize(self):\n",
" r = {}\n",
" r['type'] = str(self.__class__.__name__)\n",
" r['id'] = self._id\n",
" r['parent'] = self._parent._id if self._parent is not None else None\n",
" r['name'] = self._name\n",
" r['childs'] = [c._id for c in self.childs()]\n",
" r['constant'] = self._constant\n",
" r['single_child'] = self._single_child\n",
" \n",
" return r\n",
" \n",
" def node_score(self):\n",
" raise NotImplementedError()\n",
" \n",
" def to_instruction(self, state:RecipeInstructionState):\n",
" # create an instruction out of a recipe Tree\n",
" raise NotImplementedError()\n",
" \n"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"### Mix Node"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"For the Node Score: just make a simple lookup whether this combination is seen or not. So the node Score is defined as:\n"
]
},
{
"cell_type": "code",
"execution_count": 51,
"metadata": {},
"outputs": [],
"source": [
"class MixNode(RecipeTreeNode):\n",
" def __init__(self, constant=False):\n",
" super().__init__(\"mix\", constant, single_child=False)\n",
" \n",
" def dot_node(self, dot):\n",
" dot.node(self._id, label=f\"< <B>{self._name}</B><BR/>node score: {self.node_score():.4f}>\", shape=\"diamond\", style=\"filled\", color=\"#d5e8d4\")\n",
" \n",
" def split(self, set_above, set_below, node_between):\n",
" assert len(set_above.difference(self.childs())) == 0\n",
" assert len(set_below.difference(self.childs())) == 0\n",
" \n",
" n_above = MixNode()\n",
" n_below = MixNode()\n",
" \n",
" p = self.parent()\n",
" \n",
" for c in self.childs().copy():\n",
" self.remove_child(c)\n",
" self.remove()\n",
" \n",
" for c in set_below:\n",
" n_below.add_child(c)\n",
" \n",
" for c in set_above:\n",
" n_above.add_child(c)\n",
" \n",
" n_above.add_child(node_between)\n",
" node_between.add_child(n_below)\n",
" \n",
" if p is not None:\n",
" p.add_child(n_above)\n",
" \n",
" # test whether the mix nodes are useless\n",
" if len(n_above.childs()) == 1:\n",
" n_above.remove()\n",
" \n",
" if len(n_below.childs()) == 1:\n",
" n_below.remove()\n",
" \n",
" def n_node_mutate_options(self):\n",
" return 0 if self._constant or len(self.childs()) <= 2 else len(self.childs())\n",
" \n",
" def mutate_node(self):\n",
" \n",
" childs = self.childs()\n",
" \n",
" if len(childs) <= 2:\n",
" print(\"Warning: cannot modify mix node\")\n",
" return\n",
" \n",
" childs = random.sample(childs, len(childs))\n",
" \n",
" n = random.choice(range(1, len(childs)-1))\n",
" \n",
" between_node = ActionNode(random.choice(actions))\n",
" \n",
" self.split(set(childs[:n]), set(childs[n:]), between_node)\n",
" \n",
" \n",
" def node_score(self):\n",
" child_ingredients = [c.traverse_ingredients() for c in self.childs()]\n",
" \n",
" tmp_set = set()\n",
" cumulative_sets = []\n",
" \n",
" pairwise_tuples = []\n",
" \n",
" for c in child_ingredients:\n",
" if len(tmp_set) > 0:\n",
" cumulative_sets.append(tmp_set)\n",
" pairwise_tuples += [x for x in itertools.product(tmp_set, c)]\n",
" tmp_set = tmp_set.union(set(c))\n",
" \n",
" s_base = 0\n",
" s = 0\n",
" \n",
" for ing_a, ing_b in pairwise_tuples:\n",
" try:\n",
" #s_base += sym_score(ing_a._base_ingredient, ing_b._base_ingredient, m_base_mix, c_base_mix)\n",
" \n",
" #s += sym_score(ing_a.to_json(), ing_b.to_json(), m_mix, c_mix)\n",
" \n",
" # old method:\n",
" #p1 = sym_p_a_given_b(ing_a.to_json(), ing_b.to_json(), m_mix, c_mix)\n",
" #p2 = sym_p_a_given_b(ing_b.to_json(), ing_a.to_json(), m_mix, c_mix)\n",
" #s += 0.5 * p1 + 0.5 * p2\n",
" \n",
" grouped_ing_a = to_grouped_ingredient(ing_a)\n",
" grouped_ing_b = to_grouped_ingredient(ing_b)\n",
" \n",
" ia = m_grouped_mix._label_index[grouped_ing_a.to_json()]\n",
" ib = m_grouped_mix._label_index[grouped_ing_b.to_json()]\n",
" \n",
" if c_grouped_mix[ia,ib] > 0 or c_grouped_mix[ib,ia] > 0:\n",
" s += 1\n",
" \n",
" \n",
" \n",
" except KeyError as e:\n",
" pass\n",
" \n",
" #s_base /= len(pairwise_tuples)\n",
" s /= len(pairwise_tuples)\n",
" \n",
" #return 0.5 * (s_base + s)\n",
" return s\n",
" \n",
" def simplify(self):\n",
" for c in self.childs().copy():\n",
" c.simplify()\n",
" \n",
" # if our parent is also a Mix Node, we can just delete ourselve\n",
" p = self.parent()\n",
" \n",
" if p is not None:\n",
" if type(p) == MixNode:\n",
" # just delete ourselve\n",
" self.remove()\n",
" \n",
" def to_instruction(self, state:RecipeInstructionState = None):\n",
" \"\"\"\n",
" returns a RecipeInstructionState\n",
" \"\"\"\n",
" \n",
" def english_enum(items, use_and=True):\n",
" if len(items) > 1 and use_and:\n",
" return \", \".join(items[:-1]) + \" and \" + items[-1]\n",
" return \", \".join(items)\n",
" \n",
" if state is None:\n",
" state = RecipeInstructionState()\n",
" \n",
" for c in self.childs():\n",
" c.to_instruction(state)\n",
" \n",
" \n",
" text = \"\"\n",
" \n",
" # children with instructions\n",
" instruction_childs = []\n",
" \n",
" # children without instructions\n",
" base_childs = []\n",
" \n",
" # childre without instructions that are ingredients\n",
" ingredient_childs = []\n",
" \n",
" for c in self.childs():\n",
" assert type(c) != MixNode\n",
" if type(c) == IngredientNode:\n",
" ingredient_childs.append(c)\n",
" elif c._id not in state.step_by_nodeid:\n",
" # action node with no step so far, so a base child\n",
" base_childs.append(c)\n",
" else:\n",
" instruction_childs.append(c)\n",
" \n",
" if len(base_childs) > 0:\n",
" use_and= len(ingredient_childs)==0 and len(instruction_childs)==0\n",
" text = english_enum([state.text_by_nodeid[c._id] for c in base_childs], use_and=use_and)\n",
" \n",
" \n",
" if len(ingredient_childs) > 0:\n",
" if len(base_childs) > 0:\n",
" text += \" and mix it with \" + english_enum([state.text_by_nodeid[c._id] for c in ingredient_childs])\n",
" \n",
" else:\n",
" text = \"Mix \" + english_enum([state.text_by_nodeid[c._id] for c in ingredient_childs])\n",
" \n",
" if len(instruction_childs) > 0:\n",
" if len(base_childs) == 0:\n",
" text = \"Mix together the results of \"\n",
" else:\n",
" text += \" and mix it together with the results of \"\n",
" \n",
" text += english_enum([f\"step {state.step_by_nodeid[c._id]}\" for c in instruction_childs])\n",
" \n",
" text += \".\"\n",
" \n",
" if type(self.parent()) == ActionNode:\n",
" state.add_text(self._id, text, is_instruction=False)\n",
" else:\n",
" state.add_text(self._id, text, is_instruction=True)\n",
" \n",
" \n",
" return state\n",
" \n",
" \n",
" \n",
" \n"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"### Ingredient Node Class"
]
},
{
"cell_type": "code",
"execution_count": 52,
"metadata": {},
"outputs": [],
"source": [
"n_wanted_actions = 2\n",
"gaussian_normalize_factor = 1 / gaussian(n_wanted_actions, n_wanted_actions, 1)\n",
"\n",
"class IngredientNode(RecipeTreeNode):\n",
" def __init__(self, name, constant=False):\n",
" super().__init__(name, constant, single_child=True)\n",
" \n",
" def get_actions(self):\n",
" a_list = []\n",
" n = self.parent()\n",
" while n is not None:\n",
" if type(n) == ActionNode:\n",
" a_list.append(n.name())\n",
" n = n.parent()\n",
" return a_list\n",
" \n",
" def mutate_node(self):\n",
" pass\n",
" #self._name = random.choice(base_ingredients)\n",
" #TODO: change w.r.t. mixing probabilities \n",
" \n",
" def traverse_ingredients(self):\n",
" return [Ingredient(self._name)]\n",
" \n",
" def duplicate_actions_score(self, actions):\n",
" \n",
" if len(actions) == 0:\n",
" return 1\n",
" \n",
" seen_actions = set()\n",
" n_duplicates = 0\n",
" for act in actions:\n",
" if act in seen_actions:\n",
" n_duplicates += 1\n",
" else:\n",
" seen_actions.add(act)\n",
" \n",
" duplicate_actions_score = len(seen_actions) / len(actions)\n",
" \n",
" return duplicate_actions_score\n",
" \n",
" def duplicate_groups_score(self, actions):\n",
" if len(actions) == 0:\n",
" return 1\n",
" groups = [AG.groups[a] for a in actions]\n",
" groups_set = set(groups)\n",
" \n",
" return len(groups_set) / len(groups)\n",
" \n",
" def node_score(self):\n",
" actions = self.get_actions()\n",
" \n",
" ing = Ingredient(self._name)\n",
" for a in actions:\n",
" ing.apply_action(a)\n",
" \n",
" heat = heat_score(ing)\n",
" prepare = prepare_score(ing)\n",
" \n",
" score = (heat + prepare + self.duplicate_groups_score(actions)) / 3\n",
" score *= self.duplicate_actions_score(actions)\n",
" \n",
" return score\n",
" \n",
" \"\"\"\n",
" actions = self.get_actions()\n",
" \n",
" if len(actions) == 0:\n",
" if p_ingredient_unprepared(self._name) < 0.2:\n",
" return 0\n",
" return 1\n",
" \n",
" seen_actions = set()\n",
" n_duplicates = 0\n",
" for act in actions:\n",
" if act in seen_actions:\n",
" n_duplicates += 1\n",
" else:\n",
" seen_actions.add(act)\n",
" \n",
" duplicate_actions_score = len(seen_actions) / len(actions)\n",
" \n",
" return duplicate_actions_score\n",
" \"\"\"\n",
" \n",
" \n",
" def dot_node(self, dot):\n",
" dot.node(self._id, label=f\"< <B>{self._name}</B><BR/>node score:{self.node_score():.4f}>\", shape=\"box\", style=\"filled\", color=\"#ffe6cc\")\n",
" \n",
" def to_instruction(self, state:RecipeInstructionState = None):\n",
" state.add_text(self._id, self._name, is_instruction=False, is_ingredient=True)\n",
" return state"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"### Action Node Class"
]
},
{
"cell_type": "code",
"execution_count": 53,
"metadata": {},
"outputs": [],
"source": [
"class ActionNode(RecipeTreeNode):\n",
" def __init__(self, name, constant=False):\n",
" super().__init__(name, constant, single_child=True)\n",
" \n",
" def n_node_mutate_options(self):\n",
" # beacause we can change or remove ourselve!\n",
" return 0 if self._constant else 2 \n",
" def mutate_node(self):\n",
" if random.choice(range(2)) == 0:\n",
" # change action\n",
" self._name = random.choice(actions)\n",
" else:\n",
" # delete\n",
" self.remove()\n",
" \n",
" def traverse_ingredients(self):\n",
" ingredient_set = super().traverse_ingredients()\n",
" for ing in ingredient_set:\n",
" ing.apply_action(self._name)\n",
" \n",
" return ingredient_set\n",
" \n",
" def node_score(self):\n",
" ings = self.child().traverse_ingredients()\n",
" \n",
" s = 0\n",
" \n",
" for ing in ings:\n",
" try:\n",
" \n",
" i_act = m_act._x_label_index[self.name()]\n",
" i_ing = m_act._y_label_index[ing.to_json()]\n",
" \n",
" if c_act[i_act,i_ing] > 0:\n",
" s += 1\n",
" \n",
" except KeyError as e:\n",
" #print(f\"WARNING: no entry found for: {str(e)}\")\n",
" pass\n",
" \n",
" ''' # old method:\n",
" for ing in ings:\n",
" try:\n",
" #score = asym_score(self._name, ing.to_json(), m_act, c_act)\n",
" #base_score = asym_score(self._name, ing._base_ingredient, m_base_act, c_base_act)\n",
" \n",
" score = fw_p_a_given_b(self._name, ing._base_ingredient, m_base_act, c_base_act)\n",
" \n",
" s += score\n",
" except KeyError as e:\n",
" pass\n",
" '''\n",
" \n",
" \n",
" return s / len(ings)\n",
" \n",
" def dot_node(self, dot):\n",
" dot.node(self._id, label=f\"< <B>{self._name}</B><BR/>node score: {self.node_score():.4f}>\", shape=\"ellipse\", style=\"filled\", color=\"#dae8fc\")\n",
" \n",
" def to_instruction(self, state:RecipeInstructionState = None):\n",
" \n",
" if state is None:\n",
" state = RecipeInstructionState()\n",
" \n",
" for c in self.childs():\n",
" c.to_instruction(state)\n",
" \n",
" c = self._child\n",
" \n",
" if type(c) == MixNode:\n",
" text = state.text_by_nodeid[c._id] + f\" Then {self._name} it.\"\n",
" state.add_text(self._id, text, True)\n",
" elif type(c) == IngredientNode:\n",
" text = f\"{self._name} {state.text_by_nodeid[c._id]}\"\n",
" state.add_text(self._id, text, False)\n",
" \n",
" elif type(c) == ActionNode:\n",
" if c._id in state.step_by_nodeid:\n",
" text = f\"{self._name} the result of step {state.step_by_nodeid[c._id]}\"\n",
" else:\n",
" prev_words = state.text_by_nodeid[c._id].split()\n",
" text = f\"{prev_words[0]} and {self._name} {' '.join(prev_words[1:])}\"\n",
" state.add_text(self._id, text, True)\n",
" \n",
" return state\n",
" \n"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"### Tree Class"
]
},
{
"cell_type": "code",
"execution_count": 54,
"metadata": {},
"outputs": [],
"source": [
"class Tree(object):\n",
" @staticmethod\n",
" def build_initial_tree(ingredients: list, main_ingredients: list, max_n = 5, wheel_turns = 2):\n",
" \n",
" assert set(main_ingredients).issubset(set(ingredients))\n",
"\n",
" def does_action_match(ingredient:str, action:str, t = 0.6):\n",
" return relative_action_rank(ingredient, action) > t\n",
"\n",
"\n",
" # choose randomly an action for each ingredient by the \"wheel of fortune\" method\n",
" actions_for_ing = {}\n",
" for ing in ingredients:\n",
" actions_for_ing[ing] = set()\n",
" action_set, action_weights = m_base_act.get_backward_adjacent(ing)\n",
" if random_heated(ing):\n",
" #print(action_set)\n",
" action_set, action_weights = filter_set_by_group(action_set, action_weights, \"heat\")\n",
" #print(action_set)\n",
" for i in range(wheel_turns):\n",
" if ing in main_ingredients:\n",
" # if main ingredient: choose by action probability\n",
" w = np.array(list(action_weights), dtype=float)\n",
" w *= (1.0 / np.sum(w))\n",
" action = np.random.choice(list(action_set), size=1, replace=False, p=w)[0]\n",
" else:\n",
" # else: choose rank based\n",
" action = ea_tools.wheel_of_fortune_selection(action_set[:max_n], action_weights[:max_n])\n",
" actions_for_ing[ing].add(action)\n",
" #print(f\"action {action} for ing {ing}\")\n",
" #print(ing, action)\n",
"\n",
" # create ingredient nodes:\n",
" ingredient_nodes = {}\n",
"\n",
" # create ingredient nodes:\n",
" for ing in ingredients:\n",
" new_node = IngredientNode(ing, constant=True)\n",
"\n",
" # check if we should do a preparation step\n",
" if random_prepare(ing):\n",
" # choose a preparation cooking action\n",
" action_set, action_weights = m_act.get_backward_adjacent(Ingredient(ing).to_json())\n",
" action_set, action_weights = filter_set_by_group(action_set, action_weights, \"prepare\")\n",
" if len(action_set) > 0:\n",
" action = ea_tools.wheel_of_fortune_selection(action_set[:max_n], action_weights[:max_n])\n",
" act_node = ActionNode(action)\n",
" act_node.add_child(new_node)\n",
" new_node = act_node\n",
"\n",
"\n",
" ingredient_nodes[ing] = new_node\n",
"\n",
" # starting now with the actions found for the main ingredients and try to match all ingredients together\n",
" # with that:\n",
"\n",
" unprocessed_ings = set(filter(lambda x: len(actions_for_ing[x]) > 0, ingredients))\n",
" unprocessed_main_ings = set(filter(lambda x: len(actions_for_ing[x]) > 0, main_ingredients))\n",
"\n",
" while len(unprocessed_main_ings) > 0:\n",
" main_ing = unprocessed_main_ings.pop()\n",
"\n",
" # random action for that ing:\n",
" act = actions_for_ing[main_ing].pop()\n",
"\n",
" act_node = ActionNode(act)\n",
" mix_node = MixNode()\n",
" mix_node.add_child(ingredient_nodes[main_ing])\n",
" act_node.add_child(mix_node)\n",
" ingredient_nodes[main_ing] = act_node\n",
"\n",
" unprocessed_ings.remove(main_ing)\n",
"\n",
" for ing in unprocessed_ings.copy():\n",
" if does_action_match(ing, act):\n",
" mix_node.add_child(ingredient_nodes[ing])\n",
" ingredient_nodes[ing] = act_node\n",
" unprocessed_ings.remove(ing)\n",
" if ing in unprocessed_main_ings:\n",
" unprocessed_main_ings.remove(ing)\n",
"\n",
" if len(mix_node.childs()) == 1:\n",
" mix_node.remove()\n",
"\n",
" # now make the same with all remaining ingredients:\n",
" while len(unprocessed_ings) > 0:\n",
" current_ing = unprocessed_ings.pop() \n",
"\n",
" # random action for that ing:\n",
" act = actions_for_ing[current_ing].pop()\n",
"\n",
" act_node = ActionNode(act)\n",
" mix_node = MixNode()\n",
" mix_node.add_child(ingredient_nodes[current_ing])\n",
" act_node.add_child(mix_node)\n",
"\n",
" ingredient_nodes[current_ing] = act_node\n",
"\n",
"\n",
" for ing in unprocessed_ings.copy():\n",
" if does_action_match(ing, act):\n",
" mix_node.add_child(ingredient_nodes[ing])\n",
" ingredient_nodes[ing] = act_node\n",
" unprocessed_ings.remove(ing)\n",
"\n",
" if len(mix_node.childs()) == 1:\n",
" mix_node.remove()\n",
"\n",
"\n",
" root_layer = set([n.root() for n in ingredient_nodes.values()])\n",
"\n",
" root_layer_without_parents = []\n",
" for node in root_layer:\n",
" if node.parent() is None:\n",
" root_layer_without_parents.append(node)\n",
"\n",
" if len(root_layer_without_parents) == 1:\n",
" root_node = root_layer_without_parents[0]\n",
"\n",
" else:\n",
" root_node = MixNode()\n",
" for r in root_layer_without_parents:\n",
" root_node.add_child(r)\n",
" \n",
" return root_node\n",
"\n",
"\n",
" \n",
" @staticmethod\n",
" def find_ingredients(constant_ingredients, main_ingredients, min_additional:int, max_additional:int, top_ings:int=3):\n",
" '''\n",
" create an initial set of ingredients, based on given constant ingredients.\n",
" min_additional and max_additional gives the range of ingredients that are added to our set\n",
" '''\n",
" \n",
" seen_items = set(constant_ingredients)\n",
"\n",
" items = []\n",
" scores = []\n",
"\n",
" assert set(main_ingredients).issubset(set(constant_ingredients))\n",
"\n",
" # additional ingredients are choosen w.r.t all given ingredients\n",
" n_additional_ings = np.random.randint(min_additional, max_additional + 1)\n",
"\n",
" # extra ings are ingredients choosen specially for the main ingredient\n",
" n_extra_ings = int((len(main_ingredients) / len(constant_ingredients)) * n_additional_ings)\n",
"\n",
" if n_extra_ings > n_additional_ings:\n",
" n_extra_ings = n_additional_ings\n",
"\n",
"\n",
" # choose extra ingredients\n",
" extra_candidates = []\n",
" extra_weights = []\n",
"\n",
" for ing in main_ingredients:\n",
" candidates, weights = normalized_score(ing, m_base_mix)\n",
" extra_candidates.append(candidates[:10])\n",
" extra_weights.append(weights[:10])\n",
"\n",
" extra_ingredients = ea_tools.combined_wheel_of_fortune_selection(extra_candidates,\n",
" extra_weights,\n",
" n_extra_ings)\n",
"\n",
" for ing in constant_ingredients:\n",
" # find best matching ingredients\n",
" best_items = []\n",
" best_scores = []\n",
"\n",
" candidates, weights = m_base_mix.get_adjacent(ing)\n",
" i = 0\n",
" while i < len(candidates) and len(best_items) < top_ings:\n",
" if candidates[i] not in seen_items:\n",
" best_items.append(candidates[i])\n",
" best_scores.append(weights[i])\n",
" i += 1\n",
"\n",
" items.append(best_items)\n",
" scores.append(best_scores)\n",
"\n",
" #TODO: error handling if too few options are availabale!\n",
"\n",
" additional_ingredients = ea_tools.combined_wheel_of_fortune_selection(items,\n",
" scores,\n",
" n_additional_ings - n_extra_ings)\n",
" \n",
" return list(constant_ingredients) + list(additional_ingredients) + list(extra_ingredients)\n",
"\n",
" @staticmethod\n",
" def from_ingredients(ingredients: list, main_ingredients: list, additional_ings=0):\n",
" root = None\n",
" \n",
" constant_ingredients = ingredients\n",
" \n",
" if additional_ings > 0:\n",
" ingredients = Tree.find_ingredients(ingredients, main_ingredients, min_additional=0, max_additional=additional_ings)\n",
" \n",
" \n",
" root = Tree.build_initial_tree(ingredients, main_ingredients)\n",
" \n",
" # mark initial ingredient nodes as constant:\n",
" nodes = root.traverse()\n",
" for node in nodes:\n",
" if type(node) == IngredientNode:\n",
" if node.name() in constant_ingredients:\n",
" node._constant = True\n",
" \n",
" return Tree(root)\n",
" \n",
" @staticmethod\n",
" def from_serialization(s):\n",
" def empty_node(raw_n):\n",
" if raw_n['type'] == \"MixNode\":\n",
" node = MixNode(raw_n['constant'])\n",
" elif raw_n['type'] == \"IngredientNode\":\n",
" node = IngredientNode(raw_n['name'], raw_n['constant'])\n",
" elif raw_n['type'] == \"ActionNode\":\n",
" node = ActionNode(raw_n['name'], raw_n['constant'])\n",
" else:\n",
" print(\"unknown node detected\")\n",
" return\n",
" \n",
" return node\n",
" \n",
" nodes = {}\n",
" for n in s:\n",
" nodes[n['id']] = empty_node(n)\n",
" \n",
" for n in s:\n",
" childs = n['childs']\n",
" id = n['id']\n",
" for c in childs:\n",
" nodes[id].add_child(nodes[c])\n",
" \n",
" return Tree(nodes[s[0]['id']])\n",
" \n",
" \n",
" def __init__(self, root):\n",
" # create a dummy entry node\n",
" self._root = RecipeTreeNode(\"root\", single_child=True)\n",
" self._root.add_child(root)\n",
" self._touched = True\n",
" \n",
" def root(self):\n",
" return self._root.child()\n",
" \n",
" def mutate(self):\n",
" self._touched = True\n",
" nodes = self.root().traverse()\n",
" weights = [n.n_mutate_options() for n in nodes]\n",
" \n",
" n = random.choices(nodes, weights)[0]\n",
" \n",
" n.mutate()\n",
" \n",
" # check for simplification after modification\n",
" self.root().simplify()\n",
" \n",
" def dot(self):\n",
" return self.root().dot()\n",
" \n",
" def serialize(self):\n",
" return [n.serialize() for n in self.root().traverse()]\n",
" \n",
" def structure_score(self):\n",
" n_duplicates = 0\n",
" \n",
" \n",
" def collect_scores(self):\n",
" self._mix_scores = []\n",
" self._act_scores = []\n",
" self._ing_scores = []\n",
" \n",
" nodes = self.root().traverse()\n",
" self._n_mix_nodes = 0\n",
" self._n_act_nodes = 0\n",
" self._n_ing_nodes = 0\n",
" \n",
" s = 0\n",
" for n in nodes:\n",
" if type(n) == MixNode:\n",
" self._mix_scores.append(n.node_score())\n",
" self._n_mix_nodes += 1\n",
" if type(n) == ActionNode:\n",
" self._act_scores.append(n.node_score())\n",
" self._n_act_nodes += 1\n",
" if type(n) == IngredientNode:\n",
" self._ing_scores.append(n.node_score())\n",
" self._n_ing_nodes += 1\n",
" \n",
" self._n_duplicates = 0\n",
" seen_actions = set()\n",
" \n",
" for n in nodes:\n",
" if type(n) == ActionNode:\n",
" if n.name() in seen_actions:\n",
" self._n_duplicates += 1\n",
" else:\n",
" seen_actions.add(n.name())\n",
" \n",
" self._mix_scores = np.array(self._mix_scores)\n",
" self._act_scores = np.array(self._act_scores)\n",
" self._ing_scores = np.array(self._ing_scores)\n",
" \n",
" \n",
" def mix_scores(self):\n",
" return self._mix_scores\n",
" \n",
" def action_scores(self):\n",
" return self._act_scores\n",
" \n",
" def ing_scores(self):\n",
" return self._ing_scores\n",
" \n",
" def score(self):\n",
" if not self._touched:\n",
" return self._score\n",
" \n",
" self.collect_scores()\n",
" s_mix = self.mix_scores()\n",
" s_act = self.action_scores()\n",
" s_ing = self.ing_scores()\n",
" \n",
" n = len(s_mix) + len(s_act) + len(s_ing)\n",
" \n",
" avg_mix = np.average(s_mix) if len(s_mix) > 0 else 1\n",
" avg_act = np.average(s_act) if len(s_act) > 0 else 1\n",
" avg_ing = np.average(s_ing) if len(s_ing) > 0 else 1\n",
" \n",
" sum_mix = np.sum(s_mix) if len(s_mix) > 0 else 0\n",
" sum_act = np.sum(s_act) if len(s_act) > 0 else 0\n",
" sum_ing = np.sum(s_ing) if len(s_ing) > 0 else 0\n",
" \n",
" self._touched = False\n",
" \n",
" # boost creativity\n",
" if len(s_act) < 3:\n",
" self._score = 0\n",
" elif len(s_ing) < 3:\n",
" self._score = 0\n",
" else: \n",
" self._score = (sum_mix + sum_act + sum_ing) / n\n",
" self._score *= (len(s_act) - self._n_duplicates) / len(s_act)\n",
"\n",
" return self._score\n",
" \n",
" def copy(self):\n",
" return Tree.from_serialization(self.serialize())\n"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## Population"
]
},
{
"cell_type": "code",
"execution_count": 55,
"metadata": {},
"outputs": [],
"source": [
"class Population(object):\n",
" def __init__(self, start_ingredients, main_ingredients, n_population = 50, max_additional_ings=0):\n",
" self.population = []\n",
" for i in tqdm(range(n_population), desc=\"build initial population\"):\n",
" self.population.append(Tree.from_ingredients(start_ingredients, main_ingredients, additional_ings=max_additional_ings))\n",
" self._n = n_population\n",
" \n",
" def mutate(self):\n",
" for tree in self.population.copy():\n",
" t_clone = tree.copy()\n",
" t_clone.mutate()\n",
" self.population.append(t_clone)\n",
" \n",
" def pairwise_competition(self):\n",
" new_population = []\n",
" indices = list(range(len(self.population)))\n",
" random.shuffle(indices)\n",
" \n",
" for i in range(len(self.population) // 2):\n",
" i_a = indices[2*i]\n",
" i_b = indices[2*i+1]\n",
" \n",
" \n",
" if self.population[i_a].score() > self.population[i_b].score():\n",
" new_population.append(self.population[i_a])\n",
" else:\n",
" new_population.append(self.population[i_b])\n",
" \n",
" self.population = new_population\n",
" \n",
" def hold_best(self, n=10):\n",
" scores = [tree.score() for tree in self.population]\n",
" \n",
" sorted_indices = np.argsort(-scores)\n",
" \n",
" self.population = np.array(self.population)[sorted_indices[:n]].tolist()\n",
" \n",
" def run(self, n=50):\n",
" for i in tqdm(range(n), desc=\"run evolutionary cycles\"):\n",
" self.mutate()\n",
" #self.mutate()\n",
" #self.collect_scores()\n",
" \n",
" self.pairwise_competition()\n",
" #self.collect_scores()\n",
" #self.hold_best(self._n)\n",
" \n",
" \n",
" \n",
" def plot_population(self, n_best=10):\n",
" scores = [tree.score() for tree in self.population]\n",
" \n",
" ii = np.argsort(-np.array(scores))[:n_best]\n",
"\n",
" for i in ii:\n",
" \n",
" display(self.population[i].root().dot())\n",
" display(Markdown(f\"**Recipe Score**: {scores[i]}\"))\n",
" display(self.population[i].root().to_instruction().to_markdown())"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## Run Evolutionary Algorithm"
]
},
{
"cell_type": "code",
"execution_count": 56,
"metadata": {},
"outputs": [
{
"data": {
"application/vnd.jupyter.widget-view+json": {
"model_id": "06c212bf7e8e491b97a04c29728acf5e",
"version_major": 2,
"version_minor": 0
},
"text/plain": [
"HBox(children=(FloatProgress(value=0.0, description='build initial population', max=25.0, style=ProgressStyle(…"
]
},
"metadata": {},
"output_type": "display_data"
},
{
"name": "stdout",
"output_type": "stream",
"text": [
"\n"
]
}
],
"source": [
"p = Population([\"potato\"],['potato'], max_additional_ings=6, n_population = 25)"
]
},
{
"cell_type": "code",
"execution_count": 30,
"metadata": {},
"outputs": [],
"source": [
"#p_ingredient_unprepared(list(p.population[0].root().childs())[0]._name) < 0.2"
]
},
{
"cell_type": "code",
"execution_count": 62,
"metadata": {},
"outputs": [
{
"data": {
"application/vnd.jupyter.widget-view+json": {
"model_id": "79d2ad3f5662469c8d326e67d6bcfe8a",
"version_major": 2,
"version_minor": 0
},
"text/plain": [
"HBox(children=(FloatProgress(value=0.0, description='run evolutionary cycles', max=20.0, style=ProgressStyle(d…"
]
},
"metadata": {},
"output_type": "display_data"
},
{
"name": "stdout",
"output_type": "stream",
"text": [
"\n"
]
}
],
"source": [
"p.run(20)"
]
},
{
"cell_type": "code",
"execution_count": 63,
"metadata": {},
"outputs": [
{
"data": {
"image/svg+xml": [
"<?xml version=\"1.0\" encoding=\"UTF-8\" standalone=\"no\"?>\n",
"<!DOCTYPE svg PUBLIC \"-//W3C//DTD SVG 1.1//EN\"\n",
" \"http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd\">\n",
"<!-- Generated by graphviz version 2.40.1 (20161225.0304)\n",
" -->\n",
"<!-- Title: %3 Pages: 1 -->\n",
"<svg width=\"688pt\" height=\"434pt\"\n",
" viewBox=\"0.00 0.00 687.71 433.82\" xmlns=\"http://www.w3.org/2000/svg\" xmlns:xlink=\"http://www.w3.org/1999/xlink\">\n",
"<g id=\"graph0\" class=\"graph\" transform=\"scale(1 1) rotate(0) translate(4 429.8234)\">\n",
"<title>%3</title>\n",
"<polygon fill=\"#ffffff\" stroke=\"transparent\" points=\"-4,4 -4,-429.8234 683.7056,-429.8234 683.7056,4 -4,4\"/>\n",
"<!-- 6169 -->\n",
"<g id=\"node1\" class=\"node\">\n",
"<title>6169</title>\n",
"<polygon fill=\"#d5e8d4\" stroke=\"#d5e8d4\" points=\"244.8528,-425.8234 124.8528,-389.8234 244.8528,-353.8234 364.8528,-389.8234 244.8528,-425.8234\"/>\n",
"<text text-anchor=\"start\" x=\"231.3528\" y=\"-393.6234\" font-family=\"Times,serif\" font-size=\"14.00\" fill=\"#000000\"> </text>\n",
"<text text-anchor=\"start\" x=\"235.3528\" y=\"-393.6234\" font-family=\"Times,serif\" font-weight=\"bold\" font-size=\"14.00\" fill=\"#000000\">mix</text>\n",
"<text text-anchor=\"start\" x=\"192.8528\" y=\"-379.6234\" font-family=\"Times,serif\" font-size=\"14.00\" fill=\"#000000\">node score: 1.0000</text>\n",
"</g>\n",
"<!-- 6180 -->\n",
"<g id=\"node2\" class=\"node\">\n",
"<title>6180</title>\n",
"<polygon fill=\"#ffe6cc\" stroke=\"#ffe6cc\" points=\"222.8528,-310.3675 106.8528,-310.3675 106.8528,-274.3675 222.8528,-274.3675 222.8528,-310.3675\"/>\n",
"<text text-anchor=\"start\" x=\"144.3528\" y=\"-296.1675\" font-family=\"Times,serif\" font-size=\"14.00\" fill=\"#000000\"> </text>\n",
"<text text-anchor=\"start\" x=\"148.3528\" y=\"-296.1675\" font-family=\"Times,serif\" font-weight=\"bold\" font-size=\"14.00\" fill=\"#000000\">cheese</text>\n",
"<text text-anchor=\"start\" x=\"114.8528\" y=\"-282.1675\" font-family=\"Times,serif\" font-size=\"14.00\" fill=\"#000000\">node score:1.0000</text>\n",
"</g>\n",
"<!-- 6169&#45;&gt;6180 -->\n",
"<g id=\"edge1\" class=\"edge\">\n",
"<title>6169&#45;&gt;6180</title>\n",
"<path fill=\"none\" stroke=\"#000000\" d=\"M221.0668,-360.8473C210.0056,-347.3726 196.9532,-331.4722 186.2112,-318.3863\"/>\n",
"<polygon fill=\"#000000\" stroke=\"#000000\" points=\"188.91,-316.1577 179.8599,-310.6491 183.4995,-320.5991 188.91,-316.1577\"/>\n",
"</g>\n",
"<!-- 6170 -->\n",
"<g id=\"node3\" class=\"node\">\n",
"<title>6170</title>\n",
"<ellipse fill=\"#dae8fc\" stroke=\"#dae8fc\" cx=\"325.8528\" cy=\"-292.3675\" rx=\"84.7059\" ry=\"25.4118\"/>\n",
"<text text-anchor=\"start\" x=\"312.8528\" y=\"-296.1675\" font-family=\"Times,serif\" font-size=\"14.00\" fill=\"#000000\"> </text>\n",
"<text text-anchor=\"start\" x=\"316.8528\" y=\"-296.1675\" font-family=\"Times,serif\" font-weight=\"bold\" font-size=\"14.00\" fill=\"#000000\">boil</text>\n",
"<text text-anchor=\"start\" x=\"273.8528\" y=\"-282.1675\" font-family=\"Times,serif\" font-size=\"14.00\" fill=\"#000000\">node score: 1.0000</text>\n",
"</g>\n",
"<!-- 6169&#45;&gt;6170 -->\n",
"<g id=\"edge2\" class=\"edge\">\n",
"<title>6169&#45;&gt;6170</title>\n",
"<path fill=\"none\" stroke=\"#000000\" d=\"M268.9362,-360.8473C278.3329,-349.5415 289.149,-336.5281 298.8117,-324.9023\"/>\n",
"<polygon fill=\"#000000\" stroke=\"#000000\" points=\"301.5852,-327.041 305.2855,-317.1133 296.2018,-322.5666 301.5852,-327.041\"/>\n",
"</g>\n",
"<!-- 6171 -->\n",
"<g id=\"node4\" class=\"node\">\n",
"<title>6171</title>\n",
"<polygon fill=\"#d5e8d4\" stroke=\"#d5e8d4\" points=\"325.8528,-230.9117 205.8528,-194.9117 325.8528,-158.9117 445.8528,-194.9117 325.8528,-230.9117\"/>\n",
"<text text-anchor=\"start\" x=\"312.3528\" y=\"-198.7117\" font-family=\"Times,serif\" font-size=\"14.00\" fill=\"#000000\"> </text>\n",
"<text text-anchor=\"start\" x=\"316.3528\" y=\"-198.7117\" font-family=\"Times,serif\" font-weight=\"bold\" font-size=\"14.00\" fill=\"#000000\">mix</text>\n",
"<text text-anchor=\"start\" x=\"273.8528\" y=\"-184.7117\" font-family=\"Times,serif\" font-size=\"14.00\" fill=\"#000000\">node score: 1.0000</text>\n",
"</g>\n",
"<!-- 6170&#45;&gt;6171 -->\n",
"<g id=\"edge3\" class=\"edge\">\n",
"<title>6170&#45;&gt;6171</title>\n",
"<path fill=\"none\" stroke=\"#000000\" d=\"M325.8528,-266.7622C325.8528,-258.8985 325.8528,-249.989 325.8528,-241.1865\"/>\n",
"<polygon fill=\"#000000\" stroke=\"#000000\" points=\"329.3529,-240.9713 325.8528,-230.9713 322.3529,-240.9714 329.3529,-240.9713\"/>\n",
"</g>\n",
"<!-- 6175 -->\n",
"<g id=\"node5\" class=\"node\">\n",
"<title>6175</title>\n",
"<ellipse fill=\"#dae8fc\" stroke=\"#dae8fc\" cx=\"84.8528\" cy=\"-97.4558\" rx=\"84.7059\" ry=\"25.4118\"/>\n",
"<text text-anchor=\"start\" x=\"68.8528\" y=\"-101.2558\" font-family=\"Times,serif\" font-size=\"14.00\" fill=\"#000000\"> </text>\n",
"<text text-anchor=\"start\" x=\"72.8528\" y=\"-101.2558\" font-family=\"Times,serif\" font-weight=\"bold\" font-size=\"14.00\" fill=\"#000000\">chop</text>\n",
"<text text-anchor=\"start\" x=\"32.8528\" y=\"-87.2558\" font-family=\"Times,serif\" font-size=\"14.00\" fill=\"#000000\">node score: 1.0000</text>\n",
"</g>\n",
"<!-- 6171&#45;&gt;6175 -->\n",
"<g id=\"edge4\" class=\"edge\">\n",
"<title>6171&#45;&gt;6175</title>\n",
"<path fill=\"none\" stroke=\"#000000\" d=\"M274.7429,-174.2438C236.7519,-158.881 184.8016,-137.8732 144.8414,-121.7141\"/>\n",
"<polygon fill=\"#000000\" stroke=\"#000000\" points=\"146.0581,-118.4308 135.4753,-117.9266 143.4339,-124.9203 146.0581,-118.4308\"/>\n",
"</g>\n",
"<!-- 6172 -->\n",
"<g id=\"node7\" class=\"node\">\n",
"<title>6172</title>\n",
"<polygon fill=\"#ffe6cc\" stroke=\"#ffe6cc\" points=\"303.8528,-115.4558 187.8528,-115.4558 187.8528,-79.4558 303.8528,-79.4558 303.8528,-115.4558\"/>\n",
"<text text-anchor=\"start\" x=\"225.3528\" y=\"-101.2558\" font-family=\"Times,serif\" font-size=\"14.00\" fill=\"#000000\"> </text>\n",
"<text text-anchor=\"start\" x=\"229.3528\" y=\"-101.2558\" font-family=\"Times,serif\" font-weight=\"bold\" font-size=\"14.00\" fill=\"#000000\">butter</text>\n",
"<text text-anchor=\"start\" x=\"195.8528\" y=\"-87.2558\" font-family=\"Times,serif\" font-size=\"14.00\" fill=\"#000000\">node score:1.0000</text>\n",
"</g>\n",
"<!-- 6171&#45;&gt;6172 -->\n",
"<g id=\"edge6\" class=\"edge\">\n",
"<title>6171&#45;&gt;6172</title>\n",
"<path fill=\"none\" stroke=\"#000000\" d=\"M302.0668,-165.9356C291.0056,-152.4609 277.9532,-136.5605 267.2112,-123.4746\"/>\n",
"<polygon fill=\"#000000\" stroke=\"#000000\" points=\"269.91,-121.246 260.8599,-115.7374 264.4995,-125.6875 269.91,-121.246\"/>\n",
"</g>\n",
"<!-- 6177 -->\n",
"<g id=\"node8\" class=\"node\">\n",
"<title>6177</title>\n",
"<ellipse fill=\"#dae8fc\" stroke=\"#dae8fc\" cx=\"406.8528\" cy=\"-97.4558\" rx=\"84.7059\" ry=\"25.4118\"/>\n",
"<text text-anchor=\"start\" x=\"389.8528\" y=\"-101.2558\" font-family=\"Times,serif\" font-size=\"14.00\" fill=\"#000000\"> </text>\n",
"<text text-anchor=\"start\" x=\"393.8528\" y=\"-101.2558\" font-family=\"Times,serif\" font-weight=\"bold\" font-size=\"14.00\" fill=\"#000000\">wash</text>\n",
"<text text-anchor=\"start\" x=\"354.8528\" y=\"-87.2558\" font-family=\"Times,serif\" font-size=\"14.00\" fill=\"#000000\">node score: 1.0000</text>\n",
"</g>\n",
"<!-- 6171&#45;&gt;6177 -->\n",
"<g id=\"edge7\" class=\"edge\">\n",
"<title>6171&#45;&gt;6177</title>\n",
"<path fill=\"none\" stroke=\"#000000\" d=\"M349.9362,-165.9356C359.3329,-154.6298 370.149,-141.6164 379.8117,-129.9906\"/>\n",
"<polygon fill=\"#000000\" stroke=\"#000000\" points=\"382.5852,-132.1293 386.2855,-122.2016 377.2018,-127.655 382.5852,-132.1293\"/>\n",
"</g>\n",
"<!-- 6173 -->\n",
"<g id=\"node10\" class=\"node\">\n",
"<title>6173</title>\n",
"<ellipse fill=\"#dae8fc\" stroke=\"#dae8fc\" cx=\"594.8528\" cy=\"-97.4558\" rx=\"84.7059\" ry=\"25.4118\"/>\n",
"<text text-anchor=\"start\" x=\"583.3528\" y=\"-101.2558\" font-family=\"Times,serif\" font-size=\"14.00\" fill=\"#000000\"> </text>\n",
"<text text-anchor=\"start\" x=\"587.3528\" y=\"-101.2558\" font-family=\"Times,serif\" font-weight=\"bold\" font-size=\"14.00\" fill=\"#000000\">cut</text>\n",
"<text text-anchor=\"start\" x=\"542.8528\" y=\"-87.2558\" font-family=\"Times,serif\" font-size=\"14.00\" fill=\"#000000\">node score: 1.0000</text>\n",
"</g>\n",
"<!-- 6171&#45;&gt;6173 -->\n",
"<g id=\"edge9\" class=\"edge\">\n",
"<title>6171&#45;&gt;6173</title>\n",
"<path fill=\"none\" stroke=\"#000000\" d=\"M380.289,-175.19C423.8601,-159.4047 485.0559,-137.2341 530.9487,-120.6076\"/>\n",
"<polygon fill=\"#000000\" stroke=\"#000000\" points=\"532.2878,-123.8452 540.4976,-117.1482 529.9034,-117.2638 532.2878,-123.8452\"/>\n",
"</g>\n",
"<!-- 6176 -->\n",
"<g id=\"node6\" class=\"node\">\n",
"<title>6176</title>\n",
"<polygon fill=\"#ffe6cc\" stroke=\"#ffe6cc\" points=\"142.8528,-36 26.8528,-36 26.8528,0 142.8528,0 142.8528,-36\"/>\n",
"<text text-anchor=\"start\" x=\"66.3528\" y=\"-21.8\" font-family=\"Times,serif\" font-size=\"14.00\" fill=\"#000000\"> </text>\n",
"<text text-anchor=\"start\" x=\"70.3528\" y=\"-21.8\" font-family=\"Times,serif\" font-weight=\"bold\" font-size=\"14.00\" fill=\"#000000\">onion</text>\n",
"<text text-anchor=\"start\" x=\"34.8528\" y=\"-7.8\" font-family=\"Times,serif\" font-size=\"14.00\" fill=\"#000000\">node score:1.0000</text>\n",
"</g>\n",
"<!-- 6175&#45;&gt;6176 -->\n",
"<g id=\"edge5\" class=\"edge\">\n",
"<title>6175&#45;&gt;6176</title>\n",
"<path fill=\"none\" stroke=\"#000000\" d=\"M84.8528,-71.8782C84.8528,-63.7122 84.8528,-54.6289 84.8528,-46.2824\"/>\n",
"<polygon fill=\"#000000\" stroke=\"#000000\" points=\"88.3529,-46.2287 84.8528,-36.2288 81.3529,-46.2288 88.3529,-46.2287\"/>\n",
"</g>\n",
"<!-- 6178 -->\n",
"<g id=\"node9\" class=\"node\">\n",
"<title>6178</title>\n",
"<polygon fill=\"#ffe6cc\" stroke=\"#ffe6cc\" points=\"464.8528,-36 348.8528,-36 348.8528,0 464.8528,0 464.8528,-36\"/>\n",
"<text text-anchor=\"start\" x=\"386.3528\" y=\"-21.8\" font-family=\"Times,serif\" font-size=\"14.00\" fill=\"#000000\"> </text>\n",
"<text text-anchor=\"start\" x=\"390.3528\" y=\"-21.8\" font-family=\"Times,serif\" font-weight=\"bold\" font-size=\"14.00\" fill=\"#000000\">potato</text>\n",
"<text text-anchor=\"start\" x=\"356.8528\" y=\"-7.8\" font-family=\"Times,serif\" font-size=\"14.00\" fill=\"#000000\">node score:1.0000</text>\n",
"</g>\n",
"<!-- 6177&#45;&gt;6178 -->\n",
"<g id=\"edge8\" class=\"edge\">\n",
"<title>6177&#45;&gt;6178</title>\n",
"<path fill=\"none\" stroke=\"#000000\" d=\"M406.8528,-71.8782C406.8528,-63.7122 406.8528,-54.6289 406.8528,-46.2824\"/>\n",
"<polygon fill=\"#000000\" stroke=\"#000000\" points=\"410.3529,-46.2287 406.8528,-36.2288 403.3529,-46.2288 410.3529,-46.2287\"/>\n",
"</g>\n",
"<!-- 6174 -->\n",
"<g id=\"node11\" class=\"node\">\n",
"<title>6174</title>\n",
"<polygon fill=\"#ffe6cc\" stroke=\"#ffe6cc\" points=\"652.8528,-36 536.8528,-36 536.8528,0 652.8528,0 652.8528,-36\"/>\n",
"<text text-anchor=\"start\" x=\"574.3528\" y=\"-21.8\" font-family=\"Times,serif\" font-size=\"14.00\" fill=\"#000000\"> </text>\n",
"<text text-anchor=\"start\" x=\"578.3528\" y=\"-21.8\" font-family=\"Times,serif\" font-weight=\"bold\" font-size=\"14.00\" fill=\"#000000\">carrot</text>\n",
"<text text-anchor=\"start\" x=\"544.8528\" y=\"-7.8\" font-family=\"Times,serif\" font-size=\"14.00\" fill=\"#000000\">node score:1.0000</text>\n",
"</g>\n",
"<!-- 6173&#45;&gt;6174 -->\n",
"<g id=\"edge10\" class=\"edge\">\n",
"<title>6173&#45;&gt;6174</title>\n",
"<path fill=\"none\" stroke=\"#000000\" d=\"M594.8528,-71.8782C594.8528,-63.7122 594.8528,-54.6289 594.8528,-46.2824\"/>\n",
"<polygon fill=\"#000000\" stroke=\"#000000\" points=\"598.3529,-46.2287 594.8528,-36.2288 591.3529,-46.2288 598.3529,-46.2287\"/>\n",
"</g>\n",
"</g>\n",
"</svg>\n"
],
"text/plain": [
"<graphviz.dot.Digraph at 0x7f512f41d490>"
]
},
"metadata": {},
"output_type": "display_data"
},
{
"data": {
"text/markdown": [
"**Recipe Score**: 1.0"
],
"text/plain": [
"<IPython.core.display.Markdown object>"
]
},
"metadata": {},
"output_type": "display_data"
},
{
"data": {
"text/markdown": [
"**Ingredients**:\n",
" * onion\n",
" * carrot\n",
" * potato\n",
" * butter\n",
" * cheese\n",
"\n",
"\n",
"**Instructions**:\n",
"\n",
"| Step | Instruction |\n",
"| ----:|:----------- |\n",
"| 1 | chop onion, wash potato, cut carrot and mix it with butter. Then boil it. |\n",
"| 2 | Mix together the results of step 1. |\n"
],
"text/plain": [
"<IPython.core.display.Markdown object>"
]
},
"metadata": {},
"output_type": "display_data"
},
{
"data": {
"image/svg+xml": [
"<?xml version=\"1.0\" encoding=\"UTF-8\" standalone=\"no\"?>\n",
"<!DOCTYPE svg PUBLIC \"-//W3C//DTD SVG 1.1//EN\"\n",
" \"http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd\">\n",
"<!-- Generated by graphviz version 2.40.1 (20161225.0304)\n",
" -->\n",
"<!-- Title: %3 Pages: 1 -->\n",
"<svg width=\"688pt\" height=\"434pt\"\n",
" viewBox=\"0.00 0.00 687.71 433.82\" xmlns=\"http://www.w3.org/2000/svg\" xmlns:xlink=\"http://www.w3.org/1999/xlink\">\n",
"<g id=\"graph0\" class=\"graph\" transform=\"scale(1 1) rotate(0) translate(4 429.8234)\">\n",
"<title>%3</title>\n",
"<polygon fill=\"#ffffff\" stroke=\"transparent\" points=\"-4,4 -4,-429.8234 683.7056,-429.8234 683.7056,4 -4,4\"/>\n",
"<!-- 5775 -->\n",
"<g id=\"node1\" class=\"node\">\n",
"<title>5775</title>\n",
"<polygon fill=\"#d5e8d4\" stroke=\"#d5e8d4\" points=\"227.8528,-425.8234 107.8528,-389.8234 227.8528,-353.8234 347.8528,-389.8234 227.8528,-425.8234\"/>\n",
"<text text-anchor=\"start\" x=\"214.3528\" y=\"-393.6234\" font-family=\"Times,serif\" font-size=\"14.00\" fill=\"#000000\"> </text>\n",
"<text text-anchor=\"start\" x=\"218.3528\" y=\"-393.6234\" font-family=\"Times,serif\" font-weight=\"bold\" font-size=\"14.00\" fill=\"#000000\">mix</text>\n",
"<text text-anchor=\"start\" x=\"175.8528\" y=\"-379.6234\" font-family=\"Times,serif\" font-size=\"14.00\" fill=\"#000000\">node score: 1.0000</text>\n",
"</g>\n",
"<!-- 5776 -->\n",
"<g id=\"node2\" class=\"node\">\n",
"<title>5776</title>\n",
"<ellipse fill=\"#dae8fc\" stroke=\"#dae8fc\" cx=\"133.8528\" cy=\"-292.3675\" rx=\"84.7059\" ry=\"25.4118\"/>\n",
"<text text-anchor=\"start\" x=\"119.3528\" y=\"-296.1675\" font-family=\"Times,serif\" font-size=\"14.00\" fill=\"#000000\"> </text>\n",
"<text text-anchor=\"start\" x=\"123.3528\" y=\"-296.1675\" font-family=\"Times,serif\" font-weight=\"bold\" font-size=\"14.00\" fill=\"#000000\">heat</text>\n",
"<text text-anchor=\"start\" x=\"81.8528\" y=\"-282.1675\" font-family=\"Times,serif\" font-size=\"14.00\" fill=\"#000000\">node score: 1.0000</text>\n",
"</g>\n",
"<!-- 5775&#45;&gt;5776 -->\n",
"<g id=\"edge1\" class=\"edge\">\n",
"<title>5775&#45;&gt;5776</title>\n",
"<path fill=\"none\" stroke=\"#000000\" d=\"M200.9162,-361.8964C189.5946,-350.1586 176.3608,-336.4383 164.6545,-324.3016\"/>\n",
"<polygon fill=\"#000000\" stroke=\"#000000\" points=\"167.0553,-321.7491 157.5939,-316.9814 162.017,-326.6088 167.0553,-321.7491\"/>\n",
"</g>\n",
"<!-- 5778 -->\n",
"<g id=\"node4\" class=\"node\">\n",
"<title>5778</title>\n",
"<ellipse fill=\"#dae8fc\" stroke=\"#dae8fc\" cx=\"323.8528\" cy=\"-292.3675\" rx=\"84.7059\" ry=\"25.4118\"/>\n",
"<text text-anchor=\"start\" x=\"310.8528\" y=\"-296.1675\" font-family=\"Times,serif\" font-size=\"14.00\" fill=\"#000000\"> </text>\n",
"<text text-anchor=\"start\" x=\"314.8528\" y=\"-296.1675\" font-family=\"Times,serif\" font-weight=\"bold\" font-size=\"14.00\" fill=\"#000000\">boil</text>\n",
"<text text-anchor=\"start\" x=\"271.8528\" y=\"-282.1675\" font-family=\"Times,serif\" font-size=\"14.00\" fill=\"#000000\">node score: 1.0000</text>\n",
"</g>\n",
"<!-- 5775&#45;&gt;5778 -->\n",
"<g id=\"edge3\" class=\"edge\">\n",
"<title>5775&#45;&gt;5778</title>\n",
"<path fill=\"none\" stroke=\"#000000\" d=\"M255.3626,-361.8964C266.9251,-350.1586 280.4404,-336.4383 292.3958,-324.3016\"/>\n",
"<polygon fill=\"#000000\" stroke=\"#000000\" points=\"295.0824,-326.5617 299.6066,-316.9814 290.0955,-321.6493 295.0824,-326.5617\"/>\n",
"</g>\n",
"<!-- 5777 -->\n",
"<g id=\"node3\" class=\"node\">\n",
"<title>5777</title>\n",
"<polygon fill=\"#ffe6cc\" stroke=\"#ffe6cc\" points=\"187.8528,-212.9117 71.8528,-212.9117 71.8528,-176.9117 187.8528,-176.9117 187.8528,-212.9117\"/>\n",
"<text text-anchor=\"start\" x=\"109.3528\" y=\"-198.7117\" font-family=\"Times,serif\" font-size=\"14.00\" fill=\"#000000\"> </text>\n",
"<text text-anchor=\"start\" x=\"113.3528\" y=\"-198.7117\" font-family=\"Times,serif\" font-weight=\"bold\" font-size=\"14.00\" fill=\"#000000\">cheese</text>\n",
"<text text-anchor=\"start\" x=\"79.8528\" y=\"-184.7117\" font-family=\"Times,serif\" font-size=\"14.00\" fill=\"#000000\">node score:1.0000</text>\n",
"</g>\n",
"<!-- 5776&#45;&gt;5777 -->\n",
"<g id=\"edge2\" class=\"edge\">\n",
"<title>5776&#45;&gt;5777</title>\n",
"<path fill=\"none\" stroke=\"#000000\" d=\"M132.8019,-266.7622C132.2539,-253.4123 131.5823,-237.0481 131.0184,-223.3105\"/>\n",
"<polygon fill=\"#000000\" stroke=\"#000000\" points=\"134.501,-222.8122 130.5938,-212.9642 127.5069,-223.0993 134.501,-222.8122\"/>\n",
"</g>\n",
"<!-- 5779 -->\n",
"<g id=\"node5\" class=\"node\">\n",
"<title>5779</title>\n",
"<polygon fill=\"#d5e8d4\" stroke=\"#d5e8d4\" points=\"325.8528,-230.9117 205.8528,-194.9117 325.8528,-158.9117 445.8528,-194.9117 325.8528,-230.9117\"/>\n",
"<text text-anchor=\"start\" x=\"312.3528\" y=\"-198.7117\" font-family=\"Times,serif\" font-size=\"14.00\" fill=\"#000000\"> </text>\n",
"<text text-anchor=\"start\" x=\"316.3528\" y=\"-198.7117\" font-family=\"Times,serif\" font-weight=\"bold\" font-size=\"14.00\" fill=\"#000000\">mix</text>\n",
"<text text-anchor=\"start\" x=\"273.8528\" y=\"-184.7117\" font-family=\"Times,serif\" font-size=\"14.00\" fill=\"#000000\">node score: 1.0000</text>\n",
"</g>\n",
"<!-- 5778&#45;&gt;5779 -->\n",
"<g id=\"edge4\" class=\"edge\">\n",
"<title>5778&#45;&gt;5779</title>\n",
"<path fill=\"none\" stroke=\"#000000\" d=\"M324.3783,-266.7622C324.5397,-258.8985 324.7225,-249.989 324.9032,-241.1865\"/>\n",
"<polygon fill=\"#000000\" stroke=\"#000000\" points=\"328.4068,-241.0411 325.1128,-230.9713 321.4083,-240.8974 328.4068,-241.0411\"/>\n",
"</g>\n",
"<!-- 5784 -->\n",
"<g id=\"node6\" class=\"node\">\n",
"<title>5784</title>\n",
"<ellipse fill=\"#dae8fc\" stroke=\"#dae8fc\" cx=\"84.8528\" cy=\"-97.4558\" rx=\"84.7059\" ry=\"25.4118\"/>\n",
"<text text-anchor=\"start\" x=\"68.8528\" y=\"-101.2558\" font-family=\"Times,serif\" font-size=\"14.00\" fill=\"#000000\"> </text>\n",
"<text text-anchor=\"start\" x=\"72.8528\" y=\"-101.2558\" font-family=\"Times,serif\" font-weight=\"bold\" font-size=\"14.00\" fill=\"#000000\">chop</text>\n",
"<text text-anchor=\"start\" x=\"32.8528\" y=\"-87.2558\" font-family=\"Times,serif\" font-size=\"14.00\" fill=\"#000000\">node score: 1.0000</text>\n",
"</g>\n",
"<!-- 5779&#45;&gt;5784 -->\n",
"<g id=\"edge5\" class=\"edge\">\n",
"<title>5779&#45;&gt;5784</title>\n",
"<path fill=\"none\" stroke=\"#000000\" d=\"M274.7429,-174.2438C236.7519,-158.881 184.8016,-137.8732 144.8414,-121.7141\"/>\n",
"<polygon fill=\"#000000\" stroke=\"#000000\" points=\"146.0581,-118.4308 135.4753,-117.9266 143.4339,-124.9203 146.0581,-118.4308\"/>\n",
"</g>\n",
"<!-- 5782 -->\n",
"<g id=\"node8\" class=\"node\">\n",
"<title>5782</title>\n",
"<polygon fill=\"#ffe6cc\" stroke=\"#ffe6cc\" points=\"303.8528,-115.4558 187.8528,-115.4558 187.8528,-79.4558 303.8528,-79.4558 303.8528,-115.4558\"/>\n",
"<text text-anchor=\"start\" x=\"225.3528\" y=\"-101.2558\" font-family=\"Times,serif\" font-size=\"14.00\" fill=\"#000000\"> </text>\n",
"<text text-anchor=\"start\" x=\"229.3528\" y=\"-101.2558\" font-family=\"Times,serif\" font-weight=\"bold\" font-size=\"14.00\" fill=\"#000000\">butter</text>\n",
"<text text-anchor=\"start\" x=\"195.8528\" y=\"-87.2558\" font-family=\"Times,serif\" font-size=\"14.00\" fill=\"#000000\">node score:1.0000</text>\n",
"</g>\n",
"<!-- 5779&#45;&gt;5782 -->\n",
"<g id=\"edge7\" class=\"edge\">\n",
"<title>5779&#45;&gt;5782</title>\n",
"<path fill=\"none\" stroke=\"#000000\" d=\"M302.0668,-165.9356C291.0056,-152.4609 277.9532,-136.5605 267.2112,-123.4746\"/>\n",
"<polygon fill=\"#000000\" stroke=\"#000000\" points=\"269.91,-121.246 260.8599,-115.7374 264.4995,-125.6875 269.91,-121.246\"/>\n",
"</g>\n",
"<!-- 5786 -->\n",
"<g id=\"node9\" class=\"node\">\n",
"<title>5786</title>\n",
"<ellipse fill=\"#dae8fc\" stroke=\"#dae8fc\" cx=\"406.8528\" cy=\"-97.4558\" rx=\"84.7059\" ry=\"25.4118\"/>\n",
"<text text-anchor=\"start\" x=\"395.3528\" y=\"-101.2558\" font-family=\"Times,serif\" font-size=\"14.00\" fill=\"#000000\"> </text>\n",
"<text text-anchor=\"start\" x=\"399.3528\" y=\"-101.2558\" font-family=\"Times,serif\" font-weight=\"bold\" font-size=\"14.00\" fill=\"#000000\">cut</text>\n",
"<text text-anchor=\"start\" x=\"354.8528\" y=\"-87.2558\" font-family=\"Times,serif\" font-size=\"14.00\" fill=\"#000000\">node score: 1.0000</text>\n",
"</g>\n",
"<!-- 5779&#45;&gt;5786 -->\n",
"<g id=\"edge8\" class=\"edge\">\n",
"<title>5779&#45;&gt;5786</title>\n",
"<path fill=\"none\" stroke=\"#000000\" d=\"M349.9362,-165.9356C359.3329,-154.6298 370.149,-141.6164 379.8117,-129.9906\"/>\n",
"<polygon fill=\"#000000\" stroke=\"#000000\" points=\"382.5852,-132.1293 386.2855,-122.2016 377.2018,-127.655 382.5852,-132.1293\"/>\n",
"</g>\n",
"<!-- 5780 -->\n",
"<g id=\"node11\" class=\"node\">\n",
"<title>5780</title>\n",
"<ellipse fill=\"#dae8fc\" stroke=\"#dae8fc\" cx=\"594.8528\" cy=\"-97.4558\" rx=\"84.7059\" ry=\"25.4118\"/>\n",
"<text text-anchor=\"start\" x=\"577.8528\" y=\"-101.2558\" font-family=\"Times,serif\" font-size=\"14.00\" fill=\"#000000\"> </text>\n",
"<text text-anchor=\"start\" x=\"581.8528\" y=\"-101.2558\" font-family=\"Times,serif\" font-weight=\"bold\" font-size=\"14.00\" fill=\"#000000\">wash</text>\n",
"<text text-anchor=\"start\" x=\"542.8528\" y=\"-87.2558\" font-family=\"Times,serif\" font-size=\"14.00\" fill=\"#000000\">node score: 1.0000</text>\n",
"</g>\n",
"<!-- 5779&#45;&gt;5780 -->\n",
"<g id=\"edge10\" class=\"edge\">\n",
"<title>5779&#45;&gt;5780</title>\n",
"<path fill=\"none\" stroke=\"#000000\" d=\"M380.289,-175.19C423.8601,-159.4047 485.0559,-137.2341 530.9487,-120.6076\"/>\n",
"<polygon fill=\"#000000\" stroke=\"#000000\" points=\"532.2878,-123.8452 540.4976,-117.1482 529.9034,-117.2638 532.2878,-123.8452\"/>\n",
"</g>\n",
"<!-- 5785 -->\n",
"<g id=\"node7\" class=\"node\">\n",
"<title>5785</title>\n",
"<polygon fill=\"#ffe6cc\" stroke=\"#ffe6cc\" points=\"142.8528,-36 26.8528,-36 26.8528,0 142.8528,0 142.8528,-36\"/>\n",
"<text text-anchor=\"start\" x=\"66.3528\" y=\"-21.8\" font-family=\"Times,serif\" font-size=\"14.00\" fill=\"#000000\"> </text>\n",
"<text text-anchor=\"start\" x=\"70.3528\" y=\"-21.8\" font-family=\"Times,serif\" font-weight=\"bold\" font-size=\"14.00\" fill=\"#000000\">onion</text>\n",
"<text text-anchor=\"start\" x=\"34.8528\" y=\"-7.8\" font-family=\"Times,serif\" font-size=\"14.00\" fill=\"#000000\">node score:1.0000</text>\n",
"</g>\n",
"<!-- 5784&#45;&gt;5785 -->\n",
"<g id=\"edge6\" class=\"edge\">\n",
"<title>5784&#45;&gt;5785</title>\n",
"<path fill=\"none\" stroke=\"#000000\" d=\"M84.8528,-71.8782C84.8528,-63.7122 84.8528,-54.6289 84.8528,-46.2824\"/>\n",
"<polygon fill=\"#000000\" stroke=\"#000000\" points=\"88.3529,-46.2287 84.8528,-36.2288 81.3529,-46.2288 88.3529,-46.2287\"/>\n",
"</g>\n",
"<!-- 5787 -->\n",
"<g id=\"node10\" class=\"node\">\n",
"<title>5787</title>\n",
"<polygon fill=\"#ffe6cc\" stroke=\"#ffe6cc\" points=\"464.8528,-36 348.8528,-36 348.8528,0 464.8528,0 464.8528,-36\"/>\n",
"<text text-anchor=\"start\" x=\"386.3528\" y=\"-21.8\" font-family=\"Times,serif\" font-size=\"14.00\" fill=\"#000000\"> </text>\n",
"<text text-anchor=\"start\" x=\"390.3528\" y=\"-21.8\" font-family=\"Times,serif\" font-weight=\"bold\" font-size=\"14.00\" fill=\"#000000\">carrot</text>\n",
"<text text-anchor=\"start\" x=\"356.8528\" y=\"-7.8\" font-family=\"Times,serif\" font-size=\"14.00\" fill=\"#000000\">node score:1.0000</text>\n",
"</g>\n",
"<!-- 5786&#45;&gt;5787 -->\n",
"<g id=\"edge9\" class=\"edge\">\n",
"<title>5786&#45;&gt;5787</title>\n",
"<path fill=\"none\" stroke=\"#000000\" d=\"M406.8528,-71.8782C406.8528,-63.7122 406.8528,-54.6289 406.8528,-46.2824\"/>\n",
"<polygon fill=\"#000000\" stroke=\"#000000\" points=\"410.3529,-46.2287 406.8528,-36.2288 403.3529,-46.2288 410.3529,-46.2287\"/>\n",
"</g>\n",
"<!-- 5781 -->\n",
"<g id=\"node12\" class=\"node\">\n",
"<title>5781</title>\n",
"<polygon fill=\"#ffe6cc\" stroke=\"#ffe6cc\" points=\"652.8528,-36 536.8528,-36 536.8528,0 652.8528,0 652.8528,-36\"/>\n",
"<text text-anchor=\"start\" x=\"574.3528\" y=\"-21.8\" font-family=\"Times,serif\" font-size=\"14.00\" fill=\"#000000\"> </text>\n",
"<text text-anchor=\"start\" x=\"578.3528\" y=\"-21.8\" font-family=\"Times,serif\" font-weight=\"bold\" font-size=\"14.00\" fill=\"#000000\">potato</text>\n",
"<text text-anchor=\"start\" x=\"544.8528\" y=\"-7.8\" font-family=\"Times,serif\" font-size=\"14.00\" fill=\"#000000\">node score:1.0000</text>\n",
"</g>\n",
"<!-- 5780&#45;&gt;5781 -->\n",
"<g id=\"edge11\" class=\"edge\">\n",
"<title>5780&#45;&gt;5781</title>\n",
"<path fill=\"none\" stroke=\"#000000\" d=\"M594.8528,-71.8782C594.8528,-63.7122 594.8528,-54.6289 594.8528,-46.2824\"/>\n",
"<polygon fill=\"#000000\" stroke=\"#000000\" points=\"598.3529,-46.2287 594.8528,-36.2288 591.3529,-46.2288 598.3529,-46.2287\"/>\n",
"</g>\n",
"</g>\n",
"</svg>\n"
],
"text/plain": [
"<graphviz.dot.Digraph at 0x7f512f019550>"
]
},
"metadata": {},
"output_type": "display_data"
},
{
"data": {
"text/markdown": [
"**Recipe Score**: 1.0"
],
"text/plain": [
"<IPython.core.display.Markdown object>"
]
},
"metadata": {},
"output_type": "display_data"
},
{
"data": {
"text/markdown": [
"**Ingredients**:\n",
" * onion\n",
" * carrot\n",
" * potato\n",
" * butter\n",
" * cheese\n",
"\n",
"\n",
"**Instructions**:\n",
"\n",
"| Step | Instruction |\n",
"| ----:|:----------- |\n",
"| 1 | chop onion, cut carrot, wash potato and mix it with butter. Then boil it. |\n",
"| 2 | heat cheese and mix it together with the results of step 1. |\n"
],
"text/plain": [
"<IPython.core.display.Markdown object>"
]
},
"metadata": {},
"output_type": "display_data"
},
{
"data": {
"image/svg+xml": [
"<?xml version=\"1.0\" encoding=\"UTF-8\" standalone=\"no\"?>\n",
"<!DOCTYPE svg PUBLIC \"-//W3C//DTD SVG 1.1//EN\"\n",
" \"http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd\">\n",
"<!-- Generated by graphviz version 2.40.1 (20161225.0304)\n",
" -->\n",
"<!-- Title: %3 Pages: 1 -->\n",
"<svg width=\"688pt\" height=\"434pt\"\n",
" viewBox=\"0.00 0.00 687.71 433.82\" xmlns=\"http://www.w3.org/2000/svg\" xmlns:xlink=\"http://www.w3.org/1999/xlink\">\n",
"<g id=\"graph0\" class=\"graph\" transform=\"scale(1 1) rotate(0) translate(4 429.8234)\">\n",
"<title>%3</title>\n",
"<polygon fill=\"#ffffff\" stroke=\"transparent\" points=\"-4,4 -4,-429.8234 683.7056,-429.8234 683.7056,4 -4,4\"/>\n",
"<!-- 5568 -->\n",
"<g id=\"node1\" class=\"node\">\n",
"<title>5568</title>\n",
"<polygon fill=\"#d5e8d4\" stroke=\"#d5e8d4\" points=\"254.8528,-425.8234 134.8528,-389.8234 254.8528,-353.8234 374.8528,-389.8234 254.8528,-425.8234\"/>\n",
"<text text-anchor=\"start\" x=\"241.3528\" y=\"-393.6234\" font-family=\"Times,serif\" font-size=\"14.00\" fill=\"#000000\"> </text>\n",
"<text text-anchor=\"start\" x=\"245.3528\" y=\"-393.6234\" font-family=\"Times,serif\" font-weight=\"bold\" font-size=\"14.00\" fill=\"#000000\">mix</text>\n",
"<text text-anchor=\"start\" x=\"202.8528\" y=\"-379.6234\" font-family=\"Times,serif\" font-size=\"14.00\" fill=\"#000000\">node score: 1.0000</text>\n",
"</g>\n",
"<!-- 5578 -->\n",
"<g id=\"node2\" class=\"node\">\n",
"<title>5578</title>\n",
"<ellipse fill=\"#dae8fc\" stroke=\"#dae8fc\" cx=\"160.8528\" cy=\"-292.3675\" rx=\"84.7059\" ry=\"25.4118\"/>\n",
"<text text-anchor=\"start\" x=\"142.8528\" y=\"-296.1675\" font-family=\"Times,serif\" font-size=\"14.00\" fill=\"#000000\"> </text>\n",
"<text text-anchor=\"start\" x=\"146.8528\" y=\"-296.1675\" font-family=\"Times,serif\" font-weight=\"bold\" font-size=\"14.00\" fill=\"#000000\">mash</text>\n",
"<text text-anchor=\"start\" x=\"108.8528\" y=\"-282.1675\" font-family=\"Times,serif\" font-size=\"14.00\" fill=\"#000000\">node score: 1.0000</text>\n",
"</g>\n",
"<!-- 5568&#45;&gt;5578 -->\n",
"<g id=\"edge1\" class=\"edge\">\n",
"<title>5568&#45;&gt;5578</title>\n",
"<path fill=\"none\" stroke=\"#000000\" d=\"M227.9162,-361.8964C216.5946,-350.1586 203.3608,-336.4383 191.6545,-324.3016\"/>\n",
"<polygon fill=\"#000000\" stroke=\"#000000\" points=\"194.0553,-321.7491 184.5939,-316.9814 189.017,-326.6088 194.0553,-321.7491\"/>\n",
"</g>\n",
"<!-- 5569 -->\n",
"<g id=\"node4\" class=\"node\">\n",
"<title>5569</title>\n",
"<ellipse fill=\"#dae8fc\" stroke=\"#dae8fc\" cx=\"350.8528\" cy=\"-292.3675\" rx=\"84.7059\" ry=\"25.4118\"/>\n",
"<text text-anchor=\"start\" x=\"337.8528\" y=\"-296.1675\" font-family=\"Times,serif\" font-size=\"14.00\" fill=\"#000000\"> </text>\n",
"<text text-anchor=\"start\" x=\"341.8528\" y=\"-296.1675\" font-family=\"Times,serif\" font-weight=\"bold\" font-size=\"14.00\" fill=\"#000000\">boil</text>\n",
"<text text-anchor=\"start\" x=\"298.8528\" y=\"-282.1675\" font-family=\"Times,serif\" font-size=\"14.00\" fill=\"#000000\">node score: 1.0000</text>\n",
"</g>\n",
"<!-- 5568&#45;&gt;5569 -->\n",
"<g id=\"edge3\" class=\"edge\">\n",
"<title>5568&#45;&gt;5569</title>\n",
"<path fill=\"none\" stroke=\"#000000\" d=\"M282.3626,-361.8964C293.9251,-350.1586 307.4404,-336.4383 319.3958,-324.3016\"/>\n",
"<polygon fill=\"#000000\" stroke=\"#000000\" points=\"322.0824,-326.5617 326.6066,-316.9814 317.0955,-321.6493 322.0824,-326.5617\"/>\n",
"</g>\n",
"<!-- 5579 -->\n",
"<g id=\"node3\" class=\"node\">\n",
"<title>5579</title>\n",
"<polygon fill=\"#ffe6cc\" stroke=\"#ffe6cc\" points=\"214.8528,-212.9117 98.8528,-212.9117 98.8528,-176.9117 214.8528,-176.9117 214.8528,-212.9117\"/>\n",
"<text text-anchor=\"start\" x=\"136.3528\" y=\"-198.7117\" font-family=\"Times,serif\" font-size=\"14.00\" fill=\"#000000\"> </text>\n",
"<text text-anchor=\"start\" x=\"140.3528\" y=\"-198.7117\" font-family=\"Times,serif\" font-weight=\"bold\" font-size=\"14.00\" fill=\"#000000\">cheese</text>\n",
"<text text-anchor=\"start\" x=\"106.8528\" y=\"-184.7117\" font-family=\"Times,serif\" font-size=\"14.00\" fill=\"#000000\">node score:1.0000</text>\n",
"</g>\n",
"<!-- 5578&#45;&gt;5579 -->\n",
"<g id=\"edge2\" class=\"edge\">\n",
"<title>5578&#45;&gt;5579</title>\n",
"<path fill=\"none\" stroke=\"#000000\" d=\"M159.8019,-266.7622C159.2539,-253.4123 158.5823,-237.0481 158.0184,-223.3105\"/>\n",
"<polygon fill=\"#000000\" stroke=\"#000000\" points=\"161.501,-222.8122 157.5938,-212.9642 154.5069,-223.0993 161.501,-222.8122\"/>\n",
"</g>\n",
"<!-- 5570 -->\n",
"<g id=\"node5\" class=\"node\">\n",
"<title>5570</title>\n",
"<polygon fill=\"#d5e8d4\" stroke=\"#d5e8d4\" points=\"352.8528,-230.9117 232.8528,-194.9117 352.8528,-158.9117 472.8528,-194.9117 352.8528,-230.9117\"/>\n",
"<text text-anchor=\"start\" x=\"339.3528\" y=\"-198.7117\" font-family=\"Times,serif\" font-size=\"14.00\" fill=\"#000000\"> </text>\n",
"<text text-anchor=\"start\" x=\"343.3528\" y=\"-198.7117\" font-family=\"Times,serif\" font-weight=\"bold\" font-size=\"14.00\" fill=\"#000000\">mix</text>\n",
"<text text-anchor=\"start\" x=\"300.8528\" y=\"-184.7117\" font-family=\"Times,serif\" font-size=\"14.00\" fill=\"#000000\">node score: 1.0000</text>\n",
"</g>\n",
"<!-- 5569&#45;&gt;5570 -->\n",
"<g id=\"edge4\" class=\"edge\">\n",
"<title>5569&#45;&gt;5570</title>\n",
"<path fill=\"none\" stroke=\"#000000\" d=\"M351.3783,-266.7622C351.5397,-258.8985 351.7225,-249.989 351.9032,-241.1865\"/>\n",
"<polygon fill=\"#000000\" stroke=\"#000000\" points=\"355.4068,-241.0411 352.1128,-230.9713 348.4083,-240.8974 355.4068,-241.0411\"/>\n",
"</g>\n",
"<!-- 5572 -->\n",
"<g id=\"node6\" class=\"node\">\n",
"<title>5572</title>\n",
"<ellipse fill=\"#dae8fc\" stroke=\"#dae8fc\" cx=\"84.8528\" cy=\"-97.4558\" rx=\"84.7059\" ry=\"25.4118\"/>\n",
"<text text-anchor=\"start\" x=\"67.8528\" y=\"-101.2558\" font-family=\"Times,serif\" font-size=\"14.00\" fill=\"#000000\"> </text>\n",
"<text text-anchor=\"start\" x=\"71.8528\" y=\"-101.2558\" font-family=\"Times,serif\" font-weight=\"bold\" font-size=\"14.00\" fill=\"#000000\">wash</text>\n",
"<text text-anchor=\"start\" x=\"32.8528\" y=\"-87.2558\" font-family=\"Times,serif\" font-size=\"14.00\" fill=\"#000000\">node score: 1.0000</text>\n",
"</g>\n",
"<!-- 5570&#45;&gt;5572 -->\n",
"<g id=\"edge5\" class=\"edge\">\n",
"<title>5570&#45;&gt;5572</title>\n",
"<path fill=\"none\" stroke=\"#000000\" d=\"M298.296,-175.0726C254.8598,-159.2774 193.9937,-137.144 148.3679,-120.5526\"/>\n",
"<polygon fill=\"#000000\" stroke=\"#000000\" points=\"149.469,-117.2288 138.875,-117.1005 147.0768,-123.8073 149.469,-117.2288\"/>\n",
"</g>\n",
"<!-- 5574 -->\n",
"<g id=\"node8\" class=\"node\">\n",
"<title>5574</title>\n",
"<ellipse fill=\"#dae8fc\" stroke=\"#dae8fc\" cx=\"272.8528\" cy=\"-97.4558\" rx=\"84.7059\" ry=\"25.4118\"/>\n",
"<text text-anchor=\"start\" x=\"261.3528\" y=\"-101.2558\" font-family=\"Times,serif\" font-size=\"14.00\" fill=\"#000000\"> </text>\n",
"<text text-anchor=\"start\" x=\"265.3528\" y=\"-101.2558\" font-family=\"Times,serif\" font-weight=\"bold\" font-size=\"14.00\" fill=\"#000000\">cut</text>\n",
"<text text-anchor=\"start\" x=\"220.8528\" y=\"-87.2558\" font-family=\"Times,serif\" font-size=\"14.00\" fill=\"#000000\">node score: 1.0000</text>\n",
"</g>\n",
"<!-- 5570&#45;&gt;5574 -->\n",
"<g id=\"edge7\" class=\"edge\">\n",
"<title>5570&#45;&gt;5574</title>\n",
"<path fill=\"none\" stroke=\"#000000\" d=\"M329.0668,-165.9356C319.786,-154.6298 309.1035,-141.6164 299.5601,-129.9906\"/>\n",
"<polygon fill=\"#000000\" stroke=\"#000000\" points=\"302.2164,-127.7103 293.1663,-122.2016 296.8059,-132.1517 302.2164,-127.7103\"/>\n",
"</g>\n",
"<!-- 5571 -->\n",
"<g id=\"node10\" class=\"node\">\n",
"<title>5571</title>\n",
"<polygon fill=\"#ffe6cc\" stroke=\"#ffe6cc\" points=\"491.8528,-115.4558 375.8528,-115.4558 375.8528,-79.4558 491.8528,-79.4558 491.8528,-115.4558\"/>\n",
"<text text-anchor=\"start\" x=\"413.3528\" y=\"-101.2558\" font-family=\"Times,serif\" font-size=\"14.00\" fill=\"#000000\"> </text>\n",
"<text text-anchor=\"start\" x=\"417.3528\" y=\"-101.2558\" font-family=\"Times,serif\" font-weight=\"bold\" font-size=\"14.00\" fill=\"#000000\">butter</text>\n",
"<text text-anchor=\"start\" x=\"383.8528\" y=\"-87.2558\" font-family=\"Times,serif\" font-size=\"14.00\" fill=\"#000000\">node score:1.0000</text>\n",
"</g>\n",
"<!-- 5570&#45;&gt;5571 -->\n",
"<g id=\"edge9\" class=\"edge\">\n",
"<title>5570&#45;&gt;5571</title>\n",
"<path fill=\"none\" stroke=\"#000000\" d=\"M376.9362,-165.9356C388.1356,-152.4609 401.3511,-136.5605 412.2274,-123.4746\"/>\n",
"<polygon fill=\"#000000\" stroke=\"#000000\" points=\"414.9579,-125.6651 418.6582,-115.7374 409.5746,-121.1907 414.9579,-125.6651\"/>\n",
"</g>\n",
"<!-- 5576 -->\n",
"<g id=\"node11\" class=\"node\">\n",
"<title>5576</title>\n",
"<ellipse fill=\"#dae8fc\" stroke=\"#dae8fc\" cx=\"594.8528\" cy=\"-97.4558\" rx=\"84.7059\" ry=\"25.4118\"/>\n",
"<text text-anchor=\"start\" x=\"578.8528\" y=\"-101.2558\" font-family=\"Times,serif\" font-size=\"14.00\" fill=\"#000000\"> </text>\n",
"<text text-anchor=\"start\" x=\"582.8528\" y=\"-101.2558\" font-family=\"Times,serif\" font-weight=\"bold\" font-size=\"14.00\" fill=\"#000000\">chop</text>\n",
"<text text-anchor=\"start\" x=\"542.8528\" y=\"-87.2558\" font-family=\"Times,serif\" font-size=\"14.00\" fill=\"#000000\">node score: 1.0000</text>\n",
"</g>\n",
"<!-- 5570&#45;&gt;5576 -->\n",
"<g id=\"edge10\" class=\"edge\">\n",
"<title>5570&#45;&gt;5576</title>\n",
"<path fill=\"none\" stroke=\"#000000\" d=\"M404.1748,-174.2438C442.3234,-158.881 494.4893,-137.8732 534.6153,-121.7141\"/>\n",
"<polygon fill=\"#000000\" stroke=\"#000000\" points=\"536.0517,-124.9089 544.0203,-117.9266 533.4367,-118.4156 536.0517,-124.9089\"/>\n",
"</g>\n",
"<!-- 5573 -->\n",
"<g id=\"node7\" class=\"node\">\n",
"<title>5573</title>\n",
"<polygon fill=\"#ffe6cc\" stroke=\"#ffe6cc\" points=\"142.8528,-36 26.8528,-36 26.8528,0 142.8528,0 142.8528,-36\"/>\n",
"<text text-anchor=\"start\" x=\"64.3528\" y=\"-21.8\" font-family=\"Times,serif\" font-size=\"14.00\" fill=\"#000000\"> </text>\n",
"<text text-anchor=\"start\" x=\"68.3528\" y=\"-21.8\" font-family=\"Times,serif\" font-weight=\"bold\" font-size=\"14.00\" fill=\"#000000\">potato</text>\n",
"<text text-anchor=\"start\" x=\"34.8528\" y=\"-7.8\" font-family=\"Times,serif\" font-size=\"14.00\" fill=\"#000000\">node score:1.0000</text>\n",
"</g>\n",
"<!-- 5572&#45;&gt;5573 -->\n",
"<g id=\"edge6\" class=\"edge\">\n",
"<title>5572&#45;&gt;5573</title>\n",
"<path fill=\"none\" stroke=\"#000000\" d=\"M84.8528,-71.8782C84.8528,-63.7122 84.8528,-54.6289 84.8528,-46.2824\"/>\n",
"<polygon fill=\"#000000\" stroke=\"#000000\" points=\"88.3529,-46.2287 84.8528,-36.2288 81.3529,-46.2288 88.3529,-46.2287\"/>\n",
"</g>\n",
"<!-- 5575 -->\n",
"<g id=\"node9\" class=\"node\">\n",
"<title>5575</title>\n",
"<polygon fill=\"#ffe6cc\" stroke=\"#ffe6cc\" points=\"330.8528,-36 214.8528,-36 214.8528,0 330.8528,0 330.8528,-36\"/>\n",
"<text text-anchor=\"start\" x=\"252.3528\" y=\"-21.8\" font-family=\"Times,serif\" font-size=\"14.00\" fill=\"#000000\"> </text>\n",
"<text text-anchor=\"start\" x=\"256.3528\" y=\"-21.8\" font-family=\"Times,serif\" font-weight=\"bold\" font-size=\"14.00\" fill=\"#000000\">carrot</text>\n",
"<text text-anchor=\"start\" x=\"222.8528\" y=\"-7.8\" font-family=\"Times,serif\" font-size=\"14.00\" fill=\"#000000\">node score:1.0000</text>\n",
"</g>\n",
"<!-- 5574&#45;&gt;5575 -->\n",
"<g id=\"edge8\" class=\"edge\">\n",
"<title>5574&#45;&gt;5575</title>\n",
"<path fill=\"none\" stroke=\"#000000\" d=\"M272.8528,-71.8782C272.8528,-63.7122 272.8528,-54.6289 272.8528,-46.2824\"/>\n",
"<polygon fill=\"#000000\" stroke=\"#000000\" points=\"276.3529,-46.2287 272.8528,-36.2288 269.3529,-46.2288 276.3529,-46.2287\"/>\n",
"</g>\n",
"<!-- 5577 -->\n",
"<g id=\"node12\" class=\"node\">\n",
"<title>5577</title>\n",
"<polygon fill=\"#ffe6cc\" stroke=\"#ffe6cc\" points=\"652.8528,-36 536.8528,-36 536.8528,0 652.8528,0 652.8528,-36\"/>\n",
"<text text-anchor=\"start\" x=\"576.3528\" y=\"-21.8\" font-family=\"Times,serif\" font-size=\"14.00\" fill=\"#000000\"> </text>\n",
"<text text-anchor=\"start\" x=\"580.3528\" y=\"-21.8\" font-family=\"Times,serif\" font-weight=\"bold\" font-size=\"14.00\" fill=\"#000000\">onion</text>\n",
"<text text-anchor=\"start\" x=\"544.8528\" y=\"-7.8\" font-family=\"Times,serif\" font-size=\"14.00\" fill=\"#000000\">node score:1.0000</text>\n",
"</g>\n",
"<!-- 5576&#45;&gt;5577 -->\n",
"<g id=\"edge11\" class=\"edge\">\n",
"<title>5576&#45;&gt;5577</title>\n",
"<path fill=\"none\" stroke=\"#000000\" d=\"M594.8528,-71.8782C594.8528,-63.7122 594.8528,-54.6289 594.8528,-46.2824\"/>\n",
"<polygon fill=\"#000000\" stroke=\"#000000\" points=\"598.3529,-46.2287 594.8528,-36.2288 591.3529,-46.2288 598.3529,-46.2287\"/>\n",
"</g>\n",
"</g>\n",
"</svg>\n"
],
"text/plain": [
"<graphviz.dot.Digraph at 0x7f512f019550>"
]
},
"metadata": {},
"output_type": "display_data"
},
{
"data": {
"text/markdown": [
"**Recipe Score**: 1.0"
],
"text/plain": [
"<IPython.core.display.Markdown object>"
]
},
"metadata": {},
"output_type": "display_data"
},
{
"data": {
"text/markdown": [
"**Ingredients**:\n",
" * onion\n",
" * carrot\n",
" * potato\n",
" * butter\n",
" * cheese\n",
"\n",
"\n",
"**Instructions**:\n",
"\n",
"| Step | Instruction |\n",
"| ----:|:----------- |\n",
"| 1 | wash potato, cut carrot, chop onion and mix it with butter. Then boil it. |\n",
"| 2 | mash cheese and mix it together with the results of step 1. |\n"
],
"text/plain": [
"<IPython.core.display.Markdown object>"
]
},
"metadata": {},
"output_type": "display_data"
},
{
"data": {
"image/svg+xml": [
"<?xml version=\"1.0\" encoding=\"UTF-8\" standalone=\"no\"?>\n",
"<!DOCTYPE svg PUBLIC \"-//W3C//DTD SVG 1.1//EN\"\n",
" \"http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd\">\n",
"<!-- Generated by graphviz version 2.40.1 (20161225.0304)\n",
" -->\n",
"<!-- Title: %3 Pages: 1 -->\n",
"<svg width=\"688pt\" height=\"434pt\"\n",
" viewBox=\"0.00 0.00 687.85 433.82\" xmlns=\"http://www.w3.org/2000/svg\" xmlns:xlink=\"http://www.w3.org/1999/xlink\">\n",
"<g id=\"graph0\" class=\"graph\" transform=\"scale(1 1) rotate(0) translate(4 429.8234)\">\n",
"<title>%3</title>\n",
"<polygon fill=\"#ffffff\" stroke=\"transparent\" points=\"-4,4 -4,-429.8234 683.8528,-429.8234 683.8528,4 -4,4\"/>\n",
"<!-- 932 -->\n",
"<g id=\"node1\" class=\"node\">\n",
"<title>932</title>\n",
"<polygon fill=\"#d5e8d4\" stroke=\"#d5e8d4\" points=\"411,-425.8234 291,-389.8234 411,-353.8234 531,-389.8234 411,-425.8234\"/>\n",
"<text text-anchor=\"start\" x=\"397.5\" y=\"-393.6234\" font-family=\"Times,serif\" font-size=\"14.00\" fill=\"#000000\"> </text>\n",
"<text text-anchor=\"start\" x=\"401.5\" y=\"-393.6234\" font-family=\"Times,serif\" font-weight=\"bold\" font-size=\"14.00\" fill=\"#000000\">mix</text>\n",
"<text text-anchor=\"start\" x=\"359\" y=\"-379.6234\" font-family=\"Times,serif\" font-size=\"14.00\" fill=\"#000000\">node score: 1.0000</text>\n",
"</g>\n",
"<!-- 933 -->\n",
"<g id=\"node2\" class=\"node\">\n",
"<title>933</title>\n",
"<ellipse fill=\"#dae8fc\" stroke=\"#dae8fc\" cx=\"317\" cy=\"-292.3675\" rx=\"84.7059\" ry=\"25.4118\"/>\n",
"<text text-anchor=\"start\" x=\"304\" y=\"-296.1675\" font-family=\"Times,serif\" font-size=\"14.00\" fill=\"#000000\"> </text>\n",
"<text text-anchor=\"start\" x=\"308\" y=\"-296.1675\" font-family=\"Times,serif\" font-weight=\"bold\" font-size=\"14.00\" fill=\"#000000\">boil</text>\n",
"<text text-anchor=\"start\" x=\"265\" y=\"-282.1675\" font-family=\"Times,serif\" font-size=\"14.00\" fill=\"#000000\">node score: 1.0000</text>\n",
"</g>\n",
"<!-- 932&#45;&gt;933 -->\n",
"<g id=\"edge1\" class=\"edge\">\n",
"<title>932&#45;&gt;933</title>\n",
"<path fill=\"none\" stroke=\"#000000\" d=\"M384.0634,-361.8964C372.7417,-350.1586 359.508,-336.4383 347.8017,-324.3016\"/>\n",
"<polygon fill=\"#000000\" stroke=\"#000000\" points=\"350.2025,-321.7491 340.741,-316.9814 345.1642,-326.6088 350.2025,-321.7491\"/>\n",
"</g>\n",
"<!-- 943 -->\n",
"<g id=\"node11\" class=\"node\">\n",
"<title>943</title>\n",
"<ellipse fill=\"#dae8fc\" stroke=\"#dae8fc\" cx=\"507\" cy=\"-292.3675\" rx=\"84.7059\" ry=\"25.4118\"/>\n",
"<text text-anchor=\"start\" x=\"489.5\" y=\"-296.1675\" font-family=\"Times,serif\" font-size=\"14.00\" fill=\"#000000\"> </text>\n",
"<text text-anchor=\"start\" x=\"493.5\" y=\"-296.1675\" font-family=\"Times,serif\" font-weight=\"bold\" font-size=\"14.00\" fill=\"#000000\">grate</text>\n",
"<text text-anchor=\"start\" x=\"455\" y=\"-282.1675\" font-family=\"Times,serif\" font-size=\"14.00\" fill=\"#000000\">node score: 1.0000</text>\n",
"</g>\n",
"<!-- 932&#45;&gt;943 -->\n",
"<g id=\"edge10\" class=\"edge\">\n",
"<title>932&#45;&gt;943</title>\n",
"<path fill=\"none\" stroke=\"#000000\" d=\"M438.5097,-361.8964C450.0723,-350.1586 463.5876,-336.4383 475.5429,-324.3016\"/>\n",
"<polygon fill=\"#000000\" stroke=\"#000000\" points=\"478.2296,-326.5617 482.7538,-316.9814 473.2427,-321.6493 478.2296,-326.5617\"/>\n",
"</g>\n",
"<!-- 934 -->\n",
"<g id=\"node3\" class=\"node\">\n",
"<title>934</title>\n",
"<polygon fill=\"#d5e8d4\" stroke=\"#d5e8d4\" points=\"313,-230.9117 193,-194.9117 313,-158.9117 433,-194.9117 313,-230.9117\"/>\n",
"<text text-anchor=\"start\" x=\"299.5\" y=\"-198.7117\" font-family=\"Times,serif\" font-size=\"14.00\" fill=\"#000000\"> </text>\n",
"<text text-anchor=\"start\" x=\"303.5\" y=\"-198.7117\" font-family=\"Times,serif\" font-weight=\"bold\" font-size=\"14.00\" fill=\"#000000\">mix</text>\n",
"<text text-anchor=\"start\" x=\"261\" y=\"-184.7117\" font-family=\"Times,serif\" font-size=\"14.00\" fill=\"#000000\">node score: 1.0000</text>\n",
"</g>\n",
"<!-- 933&#45;&gt;934 -->\n",
"<g id=\"edge2\" class=\"edge\">\n",
"<title>933&#45;&gt;934</title>\n",
"<path fill=\"none\" stroke=\"#000000\" d=\"M315.949,-266.7622C315.6194,-258.7311 315.245,-249.6091 314.8762,-240.6244\"/>\n",
"<polygon fill=\"#000000\" stroke=\"#000000\" points=\"318.3722,-240.4521 314.465,-230.6041 311.3781,-240.7393 318.3722,-240.4521\"/>\n",
"</g>\n",
"<!-- 935 -->\n",
"<g id=\"node4\" class=\"node\">\n",
"<title>935</title>\n",
"<polygon fill=\"#ffe6cc\" stroke=\"#ffe6cc\" points=\"116,-115.4558 0,-115.4558 0,-79.4558 116,-79.4558 116,-115.4558\"/>\n",
"<text text-anchor=\"start\" x=\"37.5\" y=\"-101.2558\" font-family=\"Times,serif\" font-size=\"14.00\" fill=\"#000000\"> </text>\n",
"<text text-anchor=\"start\" x=\"41.5\" y=\"-101.2558\" font-family=\"Times,serif\" font-weight=\"bold\" font-size=\"14.00\" fill=\"#000000\">butter</text>\n",
"<text text-anchor=\"start\" x=\"8\" y=\"-87.2558\" font-family=\"Times,serif\" font-size=\"14.00\" fill=\"#000000\">node score:1.0000</text>\n",
"</g>\n",
"<!-- 934&#45;&gt;935 -->\n",
"<g id=\"edge3\" class=\"edge\">\n",
"<title>934&#45;&gt;935</title>\n",
"<path fill=\"none\" stroke=\"#000000\" d=\"M260.1638,-174.7188C217.7136,-158.4952 158.2141,-135.7556 114.7571,-119.1473\"/>\n",
"<polygon fill=\"#000000\" stroke=\"#000000\" points=\"115.7773,-115.7903 105.1867,-115.4896 113.2782,-122.329 115.7773,-115.7903\"/>\n",
"</g>\n",
"<!-- 936 -->\n",
"<g id=\"node5\" class=\"node\">\n",
"<title>936</title>\n",
"<ellipse fill=\"#dae8fc\" stroke=\"#dae8fc\" cx=\"219\" cy=\"-97.4558\" rx=\"84.7059\" ry=\"25.4118\"/>\n",
"<text text-anchor=\"start\" x=\"202\" y=\"-101.2558\" font-family=\"Times,serif\" font-size=\"14.00\" fill=\"#000000\"> </text>\n",
"<text text-anchor=\"start\" x=\"206\" y=\"-101.2558\" font-family=\"Times,serif\" font-weight=\"bold\" font-size=\"14.00\" fill=\"#000000\">wash</text>\n",
"<text text-anchor=\"start\" x=\"167\" y=\"-87.2558\" font-family=\"Times,serif\" font-size=\"14.00\" fill=\"#000000\">node score: 1.0000</text>\n",
"</g>\n",
"<!-- 934&#45;&gt;936 -->\n",
"<g id=\"edge4\" class=\"edge\">\n",
"<title>934&#45;&gt;936</title>\n",
"<path fill=\"none\" stroke=\"#000000\" d=\"M286.0634,-166.9848C274.7417,-155.2469 261.508,-141.5266 249.8017,-129.39\"/>\n",
"<polygon fill=\"#000000\" stroke=\"#000000\" points=\"252.2025,-126.8375 242.741,-122.0697 247.1642,-131.6971 252.2025,-126.8375\"/>\n",
"</g>\n",
"<!-- 940 -->\n",
"<g id=\"node7\" class=\"node\">\n",
"<title>940</title>\n",
"<ellipse fill=\"#dae8fc\" stroke=\"#dae8fc\" cx=\"407\" cy=\"-97.4558\" rx=\"84.7059\" ry=\"25.4118\"/>\n",
"<text text-anchor=\"start\" x=\"395.5\" y=\"-101.2558\" font-family=\"Times,serif\" font-size=\"14.00\" fill=\"#000000\"> </text>\n",
"<text text-anchor=\"start\" x=\"399.5\" y=\"-101.2558\" font-family=\"Times,serif\" font-weight=\"bold\" font-size=\"14.00\" fill=\"#000000\">cut</text>\n",
"<text text-anchor=\"start\" x=\"355\" y=\"-87.2558\" font-family=\"Times,serif\" font-size=\"14.00\" fill=\"#000000\">node score: 1.0000</text>\n",
"</g>\n",
"<!-- 934&#45;&gt;940 -->\n",
"<g id=\"edge6\" class=\"edge\">\n",
"<title>934&#45;&gt;940</title>\n",
"<path fill=\"none\" stroke=\"#000000\" d=\"M339.9366,-166.9848C351.2583,-155.2469 364.492,-141.5266 376.1983,-129.39\"/>\n",
"<polygon fill=\"#000000\" stroke=\"#000000\" points=\"378.8358,-131.6971 383.259,-122.0697 373.7975,-126.8375 378.8358,-131.6971\"/>\n",
"</g>\n",
"<!-- 938 -->\n",
"<g id=\"node9\" class=\"node\">\n",
"<title>938</title>\n",
"<ellipse fill=\"#dae8fc\" stroke=\"#dae8fc\" cx=\"595\" cy=\"-97.4558\" rx=\"84.7059\" ry=\"25.4118\"/>\n",
"<text text-anchor=\"start\" x=\"579\" y=\"-101.2558\" font-family=\"Times,serif\" font-size=\"14.00\" fill=\"#000000\"> </text>\n",
"<text text-anchor=\"start\" x=\"583\" y=\"-101.2558\" font-family=\"Times,serif\" font-weight=\"bold\" font-size=\"14.00\" fill=\"#000000\">chop</text>\n",
"<text text-anchor=\"start\" x=\"543\" y=\"-87.2558\" font-family=\"Times,serif\" font-size=\"14.00\" fill=\"#000000\">node score: 1.0000</text>\n",
"</g>\n",
"<!-- 934&#45;&gt;938 -->\n",
"<g id=\"edge8\" class=\"edge\">\n",
"<title>934&#45;&gt;938</title>\n",
"<path fill=\"none\" stroke=\"#000000\" d=\"M369.0513,-175.541C415.281,-159.5646 480.9347,-136.8755 529.5663,-120.069\"/>\n",
"<polygon fill=\"#000000\" stroke=\"#000000\" points=\"530.7465,-123.3643 539.0548,-116.7898 528.4601,-116.7482 530.7465,-123.3643\"/>\n",
"</g>\n",
"<!-- 937 -->\n",
"<g id=\"node6\" class=\"node\">\n",
"<title>937</title>\n",
"<polygon fill=\"#ffe6cc\" stroke=\"#ffe6cc\" points=\"277,-36 161,-36 161,0 277,0 277,-36\"/>\n",
"<text text-anchor=\"start\" x=\"198.5\" y=\"-21.8\" font-family=\"Times,serif\" font-size=\"14.00\" fill=\"#000000\"> </text>\n",
"<text text-anchor=\"start\" x=\"202.5\" y=\"-21.8\" font-family=\"Times,serif\" font-weight=\"bold\" font-size=\"14.00\" fill=\"#000000\">potato</text>\n",
"<text text-anchor=\"start\" x=\"169\" y=\"-7.8\" font-family=\"Times,serif\" font-size=\"14.00\" fill=\"#000000\">node score:1.0000</text>\n",
"</g>\n",
"<!-- 936&#45;&gt;937 -->\n",
"<g id=\"edge5\" class=\"edge\">\n",
"<title>936&#45;&gt;937</title>\n",
"<path fill=\"none\" stroke=\"#000000\" d=\"M219,-71.8782C219,-63.7122 219,-54.6289 219,-46.2824\"/>\n",
"<polygon fill=\"#000000\" stroke=\"#000000\" points=\"222.5001,-46.2287 219,-36.2288 215.5001,-46.2288 222.5001,-46.2287\"/>\n",
"</g>\n",
"<!-- 941 -->\n",
"<g id=\"node8\" class=\"node\">\n",
"<title>941</title>\n",
"<polygon fill=\"#ffe6cc\" stroke=\"#ffe6cc\" points=\"465,-36 349,-36 349,0 465,0 465,-36\"/>\n",
"<text text-anchor=\"start\" x=\"386.5\" y=\"-21.8\" font-family=\"Times,serif\" font-size=\"14.00\" fill=\"#000000\"> </text>\n",
"<text text-anchor=\"start\" x=\"390.5\" y=\"-21.8\" font-family=\"Times,serif\" font-weight=\"bold\" font-size=\"14.00\" fill=\"#000000\">carrot</text>\n",
"<text text-anchor=\"start\" x=\"357\" y=\"-7.8\" font-family=\"Times,serif\" font-size=\"14.00\" fill=\"#000000\">node score:1.0000</text>\n",
"</g>\n",
"<!-- 940&#45;&gt;941 -->\n",
"<g id=\"edge7\" class=\"edge\">\n",
"<title>940&#45;&gt;941</title>\n",
"<path fill=\"none\" stroke=\"#000000\" d=\"M407,-71.8782C407,-63.7122 407,-54.6289 407,-46.2824\"/>\n",
"<polygon fill=\"#000000\" stroke=\"#000000\" points=\"410.5001,-46.2287 407,-36.2288 403.5001,-46.2288 410.5001,-46.2287\"/>\n",
"</g>\n",
"<!-- 939 -->\n",
"<g id=\"node10\" class=\"node\">\n",
"<title>939</title>\n",
"<polygon fill=\"#ffe6cc\" stroke=\"#ffe6cc\" points=\"653,-36 537,-36 537,0 653,0 653,-36\"/>\n",
"<text text-anchor=\"start\" x=\"576.5\" y=\"-21.8\" font-family=\"Times,serif\" font-size=\"14.00\" fill=\"#000000\"> </text>\n",
"<text text-anchor=\"start\" x=\"580.5\" y=\"-21.8\" font-family=\"Times,serif\" font-weight=\"bold\" font-size=\"14.00\" fill=\"#000000\">onion</text>\n",
"<text text-anchor=\"start\" x=\"545\" y=\"-7.8\" font-family=\"Times,serif\" font-size=\"14.00\" fill=\"#000000\">node score:1.0000</text>\n",
"</g>\n",
"<!-- 938&#45;&gt;939 -->\n",
"<g id=\"edge9\" class=\"edge\">\n",
"<title>938&#45;&gt;939</title>\n",
"<path fill=\"none\" stroke=\"#000000\" d=\"M595,-71.8782C595,-63.7122 595,-54.6289 595,-46.2824\"/>\n",
"<polygon fill=\"#000000\" stroke=\"#000000\" points=\"598.5001,-46.2287 595,-36.2288 591.5001,-46.2288 598.5001,-46.2287\"/>\n",
"</g>\n",
"<!-- 944 -->\n",
"<g id=\"node12\" class=\"node\">\n",
"<title>944</title>\n",
"<polygon fill=\"#ffe6cc\" stroke=\"#ffe6cc\" points=\"567,-212.9117 451,-212.9117 451,-176.9117 567,-176.9117 567,-212.9117\"/>\n",
"<text text-anchor=\"start\" x=\"488.5\" y=\"-198.7117\" font-family=\"Times,serif\" font-size=\"14.00\" fill=\"#000000\"> </text>\n",
"<text text-anchor=\"start\" x=\"492.5\" y=\"-198.7117\" font-family=\"Times,serif\" font-weight=\"bold\" font-size=\"14.00\" fill=\"#000000\">cheese</text>\n",
"<text text-anchor=\"start\" x=\"459\" y=\"-184.7117\" font-family=\"Times,serif\" font-size=\"14.00\" fill=\"#000000\">node score:1.0000</text>\n",
"</g>\n",
"<!-- 943&#45;&gt;944 -->\n",
"<g id=\"edge11\" class=\"edge\">\n",
"<title>943&#45;&gt;944</title>\n",
"<path fill=\"none\" stroke=\"#000000\" d=\"M507.5255,-266.7622C507.7994,-253.4123 508.1353,-237.0481 508.4172,-223.3105\"/>\n",
"<polygon fill=\"#000000\" stroke=\"#000000\" points=\"511.9235,-223.0339 508.6295,-212.9642 504.925,-222.8902 511.9235,-223.0339\"/>\n",
"</g>\n",
"</g>\n",
"</svg>\n"
],
"text/plain": [
"<graphviz.dot.Digraph at 0x7f512f019550>"
]
},
"metadata": {},
"output_type": "display_data"
},
{
"data": {
"text/markdown": [
"**Recipe Score**: 1.0"
],
"text/plain": [
"<IPython.core.display.Markdown object>"
]
},
"metadata": {},
"output_type": "display_data"
},
{
"data": {
"text/markdown": [
"**Ingredients**:\n",
" * onion\n",
" * carrot\n",
" * potato\n",
" * butter\n",
" * cheese\n",
"\n",
"\n",
"**Instructions**:\n",
"\n",
"| Step | Instruction |\n",
"| ----:|:----------- |\n",
"| 1 | wash potato, cut carrot, chop onion and mix it with butter. Then boil it. |\n",
"| 2 | grate cheese and mix it together with the results of step 1. |\n"
],
"text/plain": [
"<IPython.core.display.Markdown object>"
]
},
"metadata": {},
"output_type": "display_data"
},
{
"data": {
"image/svg+xml": [
"<?xml version=\"1.0\" encoding=\"UTF-8\" standalone=\"no\"?>\n",
"<!DOCTYPE svg PUBLIC \"-//W3C//DTD SVG 1.1//EN\"\n",
" \"http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd\">\n",
"<!-- Generated by graphviz version 2.40.1 (20161225.0304)\n",
" -->\n",
"<!-- Title: %3 Pages: 1 -->\n",
"<svg width=\"688pt\" height=\"434pt\"\n",
" viewBox=\"0.00 0.00 687.85 433.82\" xmlns=\"http://www.w3.org/2000/svg\" xmlns:xlink=\"http://www.w3.org/1999/xlink\">\n",
"<g id=\"graph0\" class=\"graph\" transform=\"scale(1 1) rotate(0) translate(4 429.8234)\">\n",
"<title>%3</title>\n",
"<polygon fill=\"#ffffff\" stroke=\"transparent\" points=\"-4,4 -4,-429.8234 683.8528,-429.8234 683.8528,4 -4,4\"/>\n",
"<!-- 1794 -->\n",
"<g id=\"node1\" class=\"node\">\n",
"<title>1794</title>\n",
"<polygon fill=\"#d5e8d4\" stroke=\"#d5e8d4\" points=\"411,-425.8234 291,-389.8234 411,-353.8234 531,-389.8234 411,-425.8234\"/>\n",
"<text text-anchor=\"start\" x=\"397.5\" y=\"-393.6234\" font-family=\"Times,serif\" font-size=\"14.00\" fill=\"#000000\"> </text>\n",
"<text text-anchor=\"start\" x=\"401.5\" y=\"-393.6234\" font-family=\"Times,serif\" font-weight=\"bold\" font-size=\"14.00\" fill=\"#000000\">mix</text>\n",
"<text text-anchor=\"start\" x=\"359\" y=\"-379.6234\" font-family=\"Times,serif\" font-size=\"14.00\" fill=\"#000000\">node score: 1.0000</text>\n",
"</g>\n",
"<!-- 1795 -->\n",
"<g id=\"node2\" class=\"node\">\n",
"<title>1795</title>\n",
"<ellipse fill=\"#dae8fc\" stroke=\"#dae8fc\" cx=\"317\" cy=\"-292.3675\" rx=\"84.7059\" ry=\"25.4118\"/>\n",
"<text text-anchor=\"start\" x=\"304\" y=\"-296.1675\" font-family=\"Times,serif\" font-size=\"14.00\" fill=\"#000000\"> </text>\n",
"<text text-anchor=\"start\" x=\"308\" y=\"-296.1675\" font-family=\"Times,serif\" font-weight=\"bold\" font-size=\"14.00\" fill=\"#000000\">boil</text>\n",
"<text text-anchor=\"start\" x=\"265\" y=\"-282.1675\" font-family=\"Times,serif\" font-size=\"14.00\" fill=\"#000000\">node score: 1.0000</text>\n",
"</g>\n",
"<!-- 1794&#45;&gt;1795 -->\n",
"<g id=\"edge1\" class=\"edge\">\n",
"<title>1794&#45;&gt;1795</title>\n",
"<path fill=\"none\" stroke=\"#000000\" d=\"M384.0634,-361.8964C372.7417,-350.1586 359.508,-336.4383 347.8017,-324.3016\"/>\n",
"<polygon fill=\"#000000\" stroke=\"#000000\" points=\"350.2025,-321.7491 340.741,-316.9814 345.1642,-326.6088 350.2025,-321.7491\"/>\n",
"</g>\n",
"<!-- 1804 -->\n",
"<g id=\"node11\" class=\"node\">\n",
"<title>1804</title>\n",
"<ellipse fill=\"#dae8fc\" stroke=\"#dae8fc\" cx=\"507\" cy=\"-292.3675\" rx=\"84.7059\" ry=\"25.4118\"/>\n",
"<text text-anchor=\"start\" x=\"492.5\" y=\"-296.1675\" font-family=\"Times,serif\" font-size=\"14.00\" fill=\"#000000\"> </text>\n",
"<text text-anchor=\"start\" x=\"496.5\" y=\"-296.1675\" font-family=\"Times,serif\" font-weight=\"bold\" font-size=\"14.00\" fill=\"#000000\">heat</text>\n",
"<text text-anchor=\"start\" x=\"455\" y=\"-282.1675\" font-family=\"Times,serif\" font-size=\"14.00\" fill=\"#000000\">node score: 1.0000</text>\n",
"</g>\n",
"<!-- 1794&#45;&gt;1804 -->\n",
"<g id=\"edge10\" class=\"edge\">\n",
"<title>1794&#45;&gt;1804</title>\n",
"<path fill=\"none\" stroke=\"#000000\" d=\"M438.5097,-361.8964C450.0723,-350.1586 463.5876,-336.4383 475.5429,-324.3016\"/>\n",
"<polygon fill=\"#000000\" stroke=\"#000000\" points=\"478.2296,-326.5617 482.7538,-316.9814 473.2427,-321.6493 478.2296,-326.5617\"/>\n",
"</g>\n",
"<!-- 1796 -->\n",
"<g id=\"node3\" class=\"node\">\n",
"<title>1796</title>\n",
"<polygon fill=\"#d5e8d4\" stroke=\"#d5e8d4\" points=\"313,-230.9117 193,-194.9117 313,-158.9117 433,-194.9117 313,-230.9117\"/>\n",
"<text text-anchor=\"start\" x=\"299.5\" y=\"-198.7117\" font-family=\"Times,serif\" font-size=\"14.00\" fill=\"#000000\"> </text>\n",
"<text text-anchor=\"start\" x=\"303.5\" y=\"-198.7117\" font-family=\"Times,serif\" font-weight=\"bold\" font-size=\"14.00\" fill=\"#000000\">mix</text>\n",
"<text text-anchor=\"start\" x=\"261\" y=\"-184.7117\" font-family=\"Times,serif\" font-size=\"14.00\" fill=\"#000000\">node score: 1.0000</text>\n",
"</g>\n",
"<!-- 1795&#45;&gt;1796 -->\n",
"<g id=\"edge2\" class=\"edge\">\n",
"<title>1795&#45;&gt;1796</title>\n",
"<path fill=\"none\" stroke=\"#000000\" d=\"M315.949,-266.7622C315.6194,-258.7311 315.245,-249.6091 314.8762,-240.6244\"/>\n",
"<polygon fill=\"#000000\" stroke=\"#000000\" points=\"318.3722,-240.4521 314.465,-230.6041 311.3781,-240.7393 318.3722,-240.4521\"/>\n",
"</g>\n",
"<!-- 1797 -->\n",
"<g id=\"node4\" class=\"node\">\n",
"<title>1797</title>\n",
"<polygon fill=\"#ffe6cc\" stroke=\"#ffe6cc\" points=\"116,-115.4558 0,-115.4558 0,-79.4558 116,-79.4558 116,-115.4558\"/>\n",
"<text text-anchor=\"start\" x=\"37.5\" y=\"-101.2558\" font-family=\"Times,serif\" font-size=\"14.00\" fill=\"#000000\"> </text>\n",
"<text text-anchor=\"start\" x=\"41.5\" y=\"-101.2558\" font-family=\"Times,serif\" font-weight=\"bold\" font-size=\"14.00\" fill=\"#000000\">butter</text>\n",
"<text text-anchor=\"start\" x=\"8\" y=\"-87.2558\" font-family=\"Times,serif\" font-size=\"14.00\" fill=\"#000000\">node score:1.0000</text>\n",
"</g>\n",
"<!-- 1796&#45;&gt;1797 -->\n",
"<g id=\"edge3\" class=\"edge\">\n",
"<title>1796&#45;&gt;1797</title>\n",
"<path fill=\"none\" stroke=\"#000000\" d=\"M260.1638,-174.7188C217.7136,-158.4952 158.2141,-135.7556 114.7571,-119.1473\"/>\n",
"<polygon fill=\"#000000\" stroke=\"#000000\" points=\"115.7773,-115.7903 105.1867,-115.4896 113.2782,-122.329 115.7773,-115.7903\"/>\n",
"</g>\n",
"<!-- 1802 -->\n",
"<g id=\"node5\" class=\"node\">\n",
"<title>1802</title>\n",
"<ellipse fill=\"#dae8fc\" stroke=\"#dae8fc\" cx=\"219\" cy=\"-97.4558\" rx=\"84.7059\" ry=\"25.4118\"/>\n",
"<text text-anchor=\"start\" x=\"207.5\" y=\"-101.2558\" font-family=\"Times,serif\" font-size=\"14.00\" fill=\"#000000\"> </text>\n",
"<text text-anchor=\"start\" x=\"211.5\" y=\"-101.2558\" font-family=\"Times,serif\" font-weight=\"bold\" font-size=\"14.00\" fill=\"#000000\">cut</text>\n",
"<text text-anchor=\"start\" x=\"167\" y=\"-87.2558\" font-family=\"Times,serif\" font-size=\"14.00\" fill=\"#000000\">node score: 1.0000</text>\n",
"</g>\n",
"<!-- 1796&#45;&gt;1802 -->\n",
"<g id=\"edge4\" class=\"edge\">\n",
"<title>1796&#45;&gt;1802</title>\n",
"<path fill=\"none\" stroke=\"#000000\" d=\"M286.0634,-166.9848C274.7417,-155.2469 261.508,-141.5266 249.8017,-129.39\"/>\n",
"<polygon fill=\"#000000\" stroke=\"#000000\" points=\"252.2025,-126.8375 242.741,-122.0697 247.1642,-131.6971 252.2025,-126.8375\"/>\n",
"</g>\n",
"<!-- 1800 -->\n",
"<g id=\"node7\" class=\"node\">\n",
"<title>1800</title>\n",
"<ellipse fill=\"#dae8fc\" stroke=\"#dae8fc\" cx=\"407\" cy=\"-97.4558\" rx=\"84.7059\" ry=\"25.4118\"/>\n",
"<text text-anchor=\"start\" x=\"391\" y=\"-101.2558\" font-family=\"Times,serif\" font-size=\"14.00\" fill=\"#000000\"> </text>\n",
"<text text-anchor=\"start\" x=\"395\" y=\"-101.2558\" font-family=\"Times,serif\" font-weight=\"bold\" font-size=\"14.00\" fill=\"#000000\">chop</text>\n",
"<text text-anchor=\"start\" x=\"355\" y=\"-87.2558\" font-family=\"Times,serif\" font-size=\"14.00\" fill=\"#000000\">node score: 1.0000</text>\n",
"</g>\n",
"<!-- 1796&#45;&gt;1800 -->\n",
"<g id=\"edge6\" class=\"edge\">\n",
"<title>1796&#45;&gt;1800</title>\n",
"<path fill=\"none\" stroke=\"#000000\" d=\"M339.9366,-166.9848C351.2583,-155.2469 364.492,-141.5266 376.1983,-129.39\"/>\n",
"<polygon fill=\"#000000\" stroke=\"#000000\" points=\"378.8358,-131.6971 383.259,-122.0697 373.7975,-126.8375 378.8358,-131.6971\"/>\n",
"</g>\n",
"<!-- 1798 -->\n",
"<g id=\"node9\" class=\"node\">\n",
"<title>1798</title>\n",
"<ellipse fill=\"#dae8fc\" stroke=\"#dae8fc\" cx=\"595\" cy=\"-97.4558\" rx=\"84.7059\" ry=\"25.4118\"/>\n",
"<text text-anchor=\"start\" x=\"578\" y=\"-101.2558\" font-family=\"Times,serif\" font-size=\"14.00\" fill=\"#000000\"> </text>\n",
"<text text-anchor=\"start\" x=\"582\" y=\"-101.2558\" font-family=\"Times,serif\" font-weight=\"bold\" font-size=\"14.00\" fill=\"#000000\">wash</text>\n",
"<text text-anchor=\"start\" x=\"543\" y=\"-87.2558\" font-family=\"Times,serif\" font-size=\"14.00\" fill=\"#000000\">node score: 1.0000</text>\n",
"</g>\n",
"<!-- 1796&#45;&gt;1798 -->\n",
"<g id=\"edge8\" class=\"edge\">\n",
"<title>1796&#45;&gt;1798</title>\n",
"<path fill=\"none\" stroke=\"#000000\" d=\"M369.0513,-175.541C415.281,-159.5646 480.9347,-136.8755 529.5663,-120.069\"/>\n",
"<polygon fill=\"#000000\" stroke=\"#000000\" points=\"530.7465,-123.3643 539.0548,-116.7898 528.4601,-116.7482 530.7465,-123.3643\"/>\n",
"</g>\n",
"<!-- 1803 -->\n",
"<g id=\"node6\" class=\"node\">\n",
"<title>1803</title>\n",
"<polygon fill=\"#ffe6cc\" stroke=\"#ffe6cc\" points=\"277,-36 161,-36 161,0 277,0 277,-36\"/>\n",
"<text text-anchor=\"start\" x=\"198.5\" y=\"-21.8\" font-family=\"Times,serif\" font-size=\"14.00\" fill=\"#000000\"> </text>\n",
"<text text-anchor=\"start\" x=\"202.5\" y=\"-21.8\" font-family=\"Times,serif\" font-weight=\"bold\" font-size=\"14.00\" fill=\"#000000\">carrot</text>\n",
"<text text-anchor=\"start\" x=\"169\" y=\"-7.8\" font-family=\"Times,serif\" font-size=\"14.00\" fill=\"#000000\">node score:1.0000</text>\n",
"</g>\n",
"<!-- 1802&#45;&gt;1803 -->\n",
"<g id=\"edge5\" class=\"edge\">\n",
"<title>1802&#45;&gt;1803</title>\n",
"<path fill=\"none\" stroke=\"#000000\" d=\"M219,-71.8782C219,-63.7122 219,-54.6289 219,-46.2824\"/>\n",
"<polygon fill=\"#000000\" stroke=\"#000000\" points=\"222.5001,-46.2287 219,-36.2288 215.5001,-46.2288 222.5001,-46.2287\"/>\n",
"</g>\n",
"<!-- 1801 -->\n",
"<g id=\"node8\" class=\"node\">\n",
"<title>1801</title>\n",
"<polygon fill=\"#ffe6cc\" stroke=\"#ffe6cc\" points=\"465,-36 349,-36 349,0 465,0 465,-36\"/>\n",
"<text text-anchor=\"start\" x=\"388.5\" y=\"-21.8\" font-family=\"Times,serif\" font-size=\"14.00\" fill=\"#000000\"> </text>\n",
"<text text-anchor=\"start\" x=\"392.5\" y=\"-21.8\" font-family=\"Times,serif\" font-weight=\"bold\" font-size=\"14.00\" fill=\"#000000\">onion</text>\n",
"<text text-anchor=\"start\" x=\"357\" y=\"-7.8\" font-family=\"Times,serif\" font-size=\"14.00\" fill=\"#000000\">node score:1.0000</text>\n",
"</g>\n",
"<!-- 1800&#45;&gt;1801 -->\n",
"<g id=\"edge7\" class=\"edge\">\n",
"<title>1800&#45;&gt;1801</title>\n",
"<path fill=\"none\" stroke=\"#000000\" d=\"M407,-71.8782C407,-63.7122 407,-54.6289 407,-46.2824\"/>\n",
"<polygon fill=\"#000000\" stroke=\"#000000\" points=\"410.5001,-46.2287 407,-36.2288 403.5001,-46.2288 410.5001,-46.2287\"/>\n",
"</g>\n",
"<!-- 1799 -->\n",
"<g id=\"node10\" class=\"node\">\n",
"<title>1799</title>\n",
"<polygon fill=\"#ffe6cc\" stroke=\"#ffe6cc\" points=\"653,-36 537,-36 537,0 653,0 653,-36\"/>\n",
"<text text-anchor=\"start\" x=\"574.5\" y=\"-21.8\" font-family=\"Times,serif\" font-size=\"14.00\" fill=\"#000000\"> </text>\n",
"<text text-anchor=\"start\" x=\"578.5\" y=\"-21.8\" font-family=\"Times,serif\" font-weight=\"bold\" font-size=\"14.00\" fill=\"#000000\">potato</text>\n",
"<text text-anchor=\"start\" x=\"545\" y=\"-7.8\" font-family=\"Times,serif\" font-size=\"14.00\" fill=\"#000000\">node score:1.0000</text>\n",
"</g>\n",
"<!-- 1798&#45;&gt;1799 -->\n",
"<g id=\"edge9\" class=\"edge\">\n",
"<title>1798&#45;&gt;1799</title>\n",
"<path fill=\"none\" stroke=\"#000000\" d=\"M595,-71.8782C595,-63.7122 595,-54.6289 595,-46.2824\"/>\n",
"<polygon fill=\"#000000\" stroke=\"#000000\" points=\"598.5001,-46.2287 595,-36.2288 591.5001,-46.2288 598.5001,-46.2287\"/>\n",
"</g>\n",
"<!-- 1806 -->\n",
"<g id=\"node12\" class=\"node\">\n",
"<title>1806</title>\n",
"<polygon fill=\"#ffe6cc\" stroke=\"#ffe6cc\" points=\"567,-212.9117 451,-212.9117 451,-176.9117 567,-176.9117 567,-212.9117\"/>\n",
"<text text-anchor=\"start\" x=\"488.5\" y=\"-198.7117\" font-family=\"Times,serif\" font-size=\"14.00\" fill=\"#000000\"> </text>\n",
"<text text-anchor=\"start\" x=\"492.5\" y=\"-198.7117\" font-family=\"Times,serif\" font-weight=\"bold\" font-size=\"14.00\" fill=\"#000000\">cheese</text>\n",
"<text text-anchor=\"start\" x=\"459\" y=\"-184.7117\" font-family=\"Times,serif\" font-size=\"14.00\" fill=\"#000000\">node score:1.0000</text>\n",
"</g>\n",
"<!-- 1804&#45;&gt;1806 -->\n",
"<g id=\"edge11\" class=\"edge\">\n",
"<title>1804&#45;&gt;1806</title>\n",
"<path fill=\"none\" stroke=\"#000000\" d=\"M507.5255,-266.7622C507.7994,-253.4123 508.1353,-237.0481 508.4172,-223.3105\"/>\n",
"<polygon fill=\"#000000\" stroke=\"#000000\" points=\"511.9235,-223.0339 508.6295,-212.9642 504.925,-222.8902 511.9235,-223.0339\"/>\n",
"</g>\n",
"</g>\n",
"</svg>\n"
],
"text/plain": [
"<graphviz.dot.Digraph at 0x7f512f019550>"
]
},
"metadata": {},
"output_type": "display_data"
},
{
"data": {
"text/markdown": [
"**Recipe Score**: 1.0"
],
"text/plain": [
"<IPython.core.display.Markdown object>"
]
},
"metadata": {},
"output_type": "display_data"
},
{
"data": {
"text/markdown": [
"**Ingredients**:\n",
" * onion\n",
" * carrot\n",
" * potato\n",
" * butter\n",
" * cheese\n",
"\n",
"\n",
"**Instructions**:\n",
"\n",
"| Step | Instruction |\n",
"| ----:|:----------- |\n",
"| 1 | cut carrot, chop onion, wash potato and mix it with butter. Then boil it. |\n",
"| 2 | heat cheese and mix it together with the results of step 1. |\n"
],
"text/plain": [
"<IPython.core.display.Markdown object>"
]
},
"metadata": {},
"output_type": "display_data"
},
{
"data": {
"image/svg+xml": [
"<?xml version=\"1.0\" encoding=\"UTF-8\" standalone=\"no\"?>\n",
"<!DOCTYPE svg PUBLIC \"-//W3C//DTD SVG 1.1//EN\"\n",
" \"http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd\">\n",
"<!-- Generated by graphviz version 2.40.1 (20161225.0304)\n",
" -->\n",
"<!-- Title: %3 Pages: 1 -->\n",
"<svg width=\"600pt\" height=\"434pt\"\n",
" viewBox=\"0.00 0.00 599.71 433.82\" xmlns=\"http://www.w3.org/2000/svg\" xmlns:xlink=\"http://www.w3.org/1999/xlink\">\n",
"<g id=\"graph0\" class=\"graph\" transform=\"scale(1 1) rotate(0) translate(4 429.8234)\">\n",
"<title>%3</title>\n",
"<polygon fill=\"#ffffff\" stroke=\"transparent\" points=\"-4,4 -4,-429.8234 595.7056,-429.8234 595.7056,4 -4,4\"/>\n",
"<!-- 434 -->\n",
"<g id=\"node1\" class=\"node\">\n",
"<title>434</title>\n",
"<polygon fill=\"#d5e8d4\" stroke=\"#d5e8d4\" points=\"410.8528,-425.8234 290.8528,-389.8234 410.8528,-353.8234 530.8528,-389.8234 410.8528,-425.8234\"/>\n",
"<text text-anchor=\"start\" x=\"397.3528\" y=\"-393.6234\" font-family=\"Times,serif\" font-size=\"14.00\" fill=\"#000000\"> </text>\n",
"<text text-anchor=\"start\" x=\"401.3528\" y=\"-393.6234\" font-family=\"Times,serif\" font-weight=\"bold\" font-size=\"14.00\" fill=\"#000000\">mix</text>\n",
"<text text-anchor=\"start\" x=\"358.8528\" y=\"-379.6234\" font-family=\"Times,serif\" font-size=\"14.00\" fill=\"#000000\">node score: 1.0000</text>\n",
"</g>\n",
"<!-- 437 -->\n",
"<g id=\"node2\" class=\"node\">\n",
"<title>437</title>\n",
"<ellipse fill=\"#dae8fc\" stroke=\"#dae8fc\" cx=\"316.8528\" cy=\"-292.3675\" rx=\"84.7059\" ry=\"25.4118\"/>\n",
"<text text-anchor=\"start\" x=\"291.8528\" y=\"-296.1675\" font-family=\"Times,serif\" font-size=\"14.00\" fill=\"#000000\"> </text>\n",
"<text text-anchor=\"start\" x=\"295.8528\" y=\"-296.1675\" font-family=\"Times,serif\" font-weight=\"bold\" font-size=\"14.00\" fill=\"#000000\">simmer</text>\n",
"<text text-anchor=\"start\" x=\"264.8528\" y=\"-282.1675\" font-family=\"Times,serif\" font-size=\"14.00\" fill=\"#000000\">node score: 1.0000</text>\n",
"</g>\n",
"<!-- 434&#45;&gt;437 -->\n",
"<g id=\"edge1\" class=\"edge\">\n",
"<title>434&#45;&gt;437</title>\n",
"<path fill=\"none\" stroke=\"#000000\" d=\"M383.9162,-361.8964C372.5946,-350.1586 359.3608,-336.4383 347.6545,-324.3016\"/>\n",
"<polygon fill=\"#000000\" stroke=\"#000000\" points=\"350.0553,-321.7491 340.5939,-316.9814 345.017,-326.6088 350.0553,-321.7491\"/>\n",
"</g>\n",
"<!-- 435 -->\n",
"<g id=\"node9\" class=\"node\">\n",
"<title>435</title>\n",
"<ellipse fill=\"#dae8fc\" stroke=\"#dae8fc\" cx=\"506.8528\" cy=\"-292.3675\" rx=\"84.7059\" ry=\"25.4118\"/>\n",
"<text text-anchor=\"start\" x=\"495.3528\" y=\"-296.1675\" font-family=\"Times,serif\" font-size=\"14.00\" fill=\"#000000\"> </text>\n",
"<text text-anchor=\"start\" x=\"499.3528\" y=\"-296.1675\" font-family=\"Times,serif\" font-weight=\"bold\" font-size=\"14.00\" fill=\"#000000\">cut</text>\n",
"<text text-anchor=\"start\" x=\"454.8528\" y=\"-282.1675\" font-family=\"Times,serif\" font-size=\"14.00\" fill=\"#000000\">node score: 1.0000</text>\n",
"</g>\n",
"<!-- 434&#45;&gt;435 -->\n",
"<g id=\"edge8\" class=\"edge\">\n",
"<title>434&#45;&gt;435</title>\n",
"<path fill=\"none\" stroke=\"#000000\" d=\"M438.3626,-361.8964C449.9251,-350.1586 463.4404,-336.4383 475.3958,-324.3016\"/>\n",
"<polygon fill=\"#000000\" stroke=\"#000000\" points=\"478.0824,-326.5617 482.6066,-316.9814 473.0955,-321.6493 478.0824,-326.5617\"/>\n",
"</g>\n",
"<!-- 438 -->\n",
"<g id=\"node3\" class=\"node\">\n",
"<title>438</title>\n",
"<polygon fill=\"#d5e8d4\" stroke=\"#d5e8d4\" points=\"312.8528,-230.9117 192.8528,-194.9117 312.8528,-158.9117 432.8528,-194.9117 312.8528,-230.9117\"/>\n",
"<text text-anchor=\"start\" x=\"299.3528\" y=\"-198.7117\" font-family=\"Times,serif\" font-size=\"14.00\" fill=\"#000000\"> </text>\n",
"<text text-anchor=\"start\" x=\"303.3528\" y=\"-198.7117\" font-family=\"Times,serif\" font-weight=\"bold\" font-size=\"14.00\" fill=\"#000000\">mix</text>\n",
"<text text-anchor=\"start\" x=\"260.8528\" y=\"-184.7117\" font-family=\"Times,serif\" font-size=\"14.00\" fill=\"#000000\">node score: 1.0000</text>\n",
"</g>\n",
"<!-- 437&#45;&gt;438 -->\n",
"<g id=\"edge2\" class=\"edge\">\n",
"<title>437&#45;&gt;438</title>\n",
"<path fill=\"none\" stroke=\"#000000\" d=\"M315.8019,-266.7622C315.4722,-258.7311 315.0978,-249.6091 314.7291,-240.6244\"/>\n",
"<polygon fill=\"#000000\" stroke=\"#000000\" points=\"318.225,-240.4521 314.3178,-230.6041 311.2309,-240.7393 318.225,-240.4521\"/>\n",
"</g>\n",
"<!-- 439 -->\n",
"<g id=\"node4\" class=\"node\">\n",
"<title>439</title>\n",
"<ellipse fill=\"#dae8fc\" stroke=\"#dae8fc\" cx=\"84.8528\" cy=\"-97.4558\" rx=\"84.7059\" ry=\"25.4118\"/>\n",
"<text text-anchor=\"start\" x=\"68.8528\" y=\"-101.2558\" font-family=\"Times,serif\" font-size=\"14.00\" fill=\"#000000\"> </text>\n",
"<text text-anchor=\"start\" x=\"72.8528\" y=\"-101.2558\" font-family=\"Times,serif\" font-weight=\"bold\" font-size=\"14.00\" fill=\"#000000\">chop</text>\n",
"<text text-anchor=\"start\" x=\"32.8528\" y=\"-87.2558\" font-family=\"Times,serif\" font-size=\"14.00\" fill=\"#000000\">node score: 1.0000</text>\n",
"</g>\n",
"<!-- 438&#45;&gt;439 -->\n",
"<g id=\"edge3\" class=\"edge\">\n",
"<title>438&#45;&gt;439</title>\n",
"<path fill=\"none\" stroke=\"#000000\" d=\"M263.099,-173.645C227.707,-158.5171 180.0487,-138.1462 142.9167,-122.2745\"/>\n",
"<polygon fill=\"#000000\" stroke=\"#000000\" points=\"144.2879,-119.0544 133.717,-118.3422 141.5365,-125.491 144.2879,-119.0544\"/>\n",
"</g>\n",
"<!-- 444 -->\n",
"<g id=\"node6\" class=\"node\">\n",
"<title>444</title>\n",
"<polygon fill=\"#ffe6cc\" stroke=\"#ffe6cc\" points=\"303.8528,-115.4558 187.8528,-115.4558 187.8528,-79.4558 303.8528,-79.4558 303.8528,-115.4558\"/>\n",
"<text text-anchor=\"start\" x=\"229.8528\" y=\"-101.2558\" font-family=\"Times,serif\" font-size=\"14.00\" fill=\"#000000\"> </text>\n",
"<text text-anchor=\"start\" x=\"233.8528\" y=\"-101.2558\" font-family=\"Times,serif\" font-weight=\"bold\" font-size=\"14.00\" fill=\"#000000\">milk</text>\n",
"<text text-anchor=\"start\" x=\"195.8528\" y=\"-87.2558\" font-family=\"Times,serif\" font-size=\"14.00\" fill=\"#000000\">node score:1.0000</text>\n",
"</g>\n",
"<!-- 438&#45;&gt;444 -->\n",
"<g id=\"edge5\" class=\"edge\">\n",
"<title>438&#45;&gt;444</title>\n",
"<path fill=\"none\" stroke=\"#000000\" d=\"M292.2039,-164.8765C283.2067,-151.7895 272.7518,-136.5822 264.0509,-123.9262\"/>\n",
"<polygon fill=\"#000000\" stroke=\"#000000\" points=\"266.8964,-121.887 258.347,-115.6294 261.1281,-125.8527 266.8964,-121.887\"/>\n",
"</g>\n",
"<!-- 443 -->\n",
"<g id=\"node7\" class=\"node\">\n",
"<title>443</title>\n",
"<polygon fill=\"#ffe6cc\" stroke=\"#ffe6cc\" points=\"437.8528,-115.4558 321.8528,-115.4558 321.8528,-79.4558 437.8528,-79.4558 437.8528,-115.4558\"/>\n",
"<text text-anchor=\"start\" x=\"360.8528\" y=\"-101.2558\" font-family=\"Times,serif\" font-size=\"14.00\" fill=\"#000000\"> </text>\n",
"<text text-anchor=\"start\" x=\"364.8528\" y=\"-101.2558\" font-family=\"Times,serif\" font-weight=\"bold\" font-size=\"14.00\" fill=\"#000000\">water</text>\n",
"<text text-anchor=\"start\" x=\"329.8528\" y=\"-87.2558\" font-family=\"Times,serif\" font-size=\"14.00\" fill=\"#000000\">node score:1.0000</text>\n",
"</g>\n",
"<!-- 438&#45;&gt;443 -->\n",
"<g id=\"edge6\" class=\"edge\">\n",
"<title>438&#45;&gt;443</title>\n",
"<path fill=\"none\" stroke=\"#000000\" d=\"M333.5017,-164.8765C342.4989,-151.7895 352.9538,-136.5822 361.6547,-123.9262\"/>\n",
"<polygon fill=\"#000000\" stroke=\"#000000\" points=\"364.5775,-125.8527 367.3587,-115.6294 358.8092,-121.887 364.5775,-125.8527\"/>\n",
"</g>\n",
"<!-- 442 -->\n",
"<g id=\"node8\" class=\"node\">\n",
"<title>442</title>\n",
"<polygon fill=\"#ffe6cc\" stroke=\"#ffe6cc\" points=\"571.8528,-115.4558 455.8528,-115.4558 455.8528,-79.4558 571.8528,-79.4558 571.8528,-115.4558\"/>\n",
"<text text-anchor=\"start\" x=\"501.3528\" y=\"-101.2558\" font-family=\"Times,serif\" font-size=\"14.00\" fill=\"#000000\"> </text>\n",
"<text text-anchor=\"start\" x=\"505.3528\" y=\"-101.2558\" font-family=\"Times,serif\" font-weight=\"bold\" font-size=\"14.00\" fill=\"#000000\">salt</text>\n",
"<text text-anchor=\"start\" x=\"463.8528\" y=\"-87.2558\" font-family=\"Times,serif\" font-size=\"14.00\" fill=\"#000000\">node score:1.0000</text>\n",
"</g>\n",
"<!-- 438&#45;&gt;442 -->\n",
"<g id=\"edge7\" class=\"edge\">\n",
"<title>438&#45;&gt;442</title>\n",
"<path fill=\"none\" stroke=\"#000000\" d=\"M358.9663,-172.5533C391.457,-156.8001 434.8002,-135.7849 467.3723,-119.9921\"/>\n",
"<polygon fill=\"#000000\" stroke=\"#000000\" points=\"469.2113,-122.9903 476.6824,-115.4781 466.1573,-116.6916 469.2113,-122.9903\"/>\n",
"</g>\n",
"<!-- 440 -->\n",
"<g id=\"node5\" class=\"node\">\n",
"<title>440</title>\n",
"<polygon fill=\"#ffe6cc\" stroke=\"#ffe6cc\" points=\"142.8528,-36 26.8528,-36 26.8528,0 142.8528,0 142.8528,-36\"/>\n",
"<text text-anchor=\"start\" x=\"66.3528\" y=\"-21.8\" font-family=\"Times,serif\" font-size=\"14.00\" fill=\"#000000\"> </text>\n",
"<text text-anchor=\"start\" x=\"70.3528\" y=\"-21.8\" font-family=\"Times,serif\" font-weight=\"bold\" font-size=\"14.00\" fill=\"#000000\">onion</text>\n",
"<text text-anchor=\"start\" x=\"34.8528\" y=\"-7.8\" font-family=\"Times,serif\" font-size=\"14.00\" fill=\"#000000\">node score:1.0000</text>\n",
"</g>\n",
"<!-- 439&#45;&gt;440 -->\n",
"<g id=\"edge4\" class=\"edge\">\n",
"<title>439&#45;&gt;440</title>\n",
"<path fill=\"none\" stroke=\"#000000\" d=\"M84.8528,-71.8782C84.8528,-63.7122 84.8528,-54.6289 84.8528,-46.2824\"/>\n",
"<polygon fill=\"#000000\" stroke=\"#000000\" points=\"88.3529,-46.2287 84.8528,-36.2288 81.3529,-46.2288 88.3529,-46.2287\"/>\n",
"</g>\n",
"<!-- 436 -->\n",
"<g id=\"node10\" class=\"node\">\n",
"<title>436</title>\n",
"<polygon fill=\"#ffe6cc\" stroke=\"#ffe6cc\" points=\"566.8528,-212.9117 450.8528,-212.9117 450.8528,-176.9117 566.8528,-176.9117 566.8528,-212.9117\"/>\n",
"<text text-anchor=\"start\" x=\"488.3528\" y=\"-198.7117\" font-family=\"Times,serif\" font-size=\"14.00\" fill=\"#000000\"> </text>\n",
"<text text-anchor=\"start\" x=\"492.3528\" y=\"-198.7117\" font-family=\"Times,serif\" font-weight=\"bold\" font-size=\"14.00\" fill=\"#000000\">potato</text>\n",
"<text text-anchor=\"start\" x=\"458.8528\" y=\"-184.7117\" font-family=\"Times,serif\" font-size=\"14.00\" fill=\"#000000\">node score:1.0000</text>\n",
"</g>\n",
"<!-- 435&#45;&gt;436 -->\n",
"<g id=\"edge9\" class=\"edge\">\n",
"<title>435&#45;&gt;436</title>\n",
"<path fill=\"none\" stroke=\"#000000\" d=\"M507.3783,-266.7622C507.6523,-253.4123 507.9881,-237.0481 508.27,-223.3105\"/>\n",
"<polygon fill=\"#000000\" stroke=\"#000000\" points=\"511.7763,-223.0339 508.4823,-212.9642 504.7778,-222.8902 511.7763,-223.0339\"/>\n",
"</g>\n",
"</g>\n",
"</svg>\n"
],
"text/plain": [
"<graphviz.dot.Digraph at 0x7f512f019550>"
]
},
"metadata": {},
"output_type": "display_data"
},
{
"data": {
"text/markdown": [
"**Recipe Score**: 1.0"
],
"text/plain": [
"<IPython.core.display.Markdown object>"
]
},
"metadata": {},
"output_type": "display_data"
},
{
"data": {
"text/markdown": [
"**Ingredients**:\n",
" * water\n",
" * salt\n",
" * onion\n",
" * milk\n",
" * potato\n",
"\n",
"\n",
"**Instructions**:\n",
"\n",
"| Step | Instruction |\n",
"| ----:|:----------- |\n",
"| 1 | chop onion and mix it with milk, water and salt. Then simmer it. |\n",
"| 2 | cut potato and mix it together with the results of step 1. |\n"
],
"text/plain": [
"<IPython.core.display.Markdown object>"
]
},
"metadata": {},
"output_type": "display_data"
},
{
"data": {
"image/svg+xml": [
"<?xml version=\"1.0\" encoding=\"UTF-8\" standalone=\"no\"?>\n",
"<!DOCTYPE svg PUBLIC \"-//W3C//DTD SVG 1.1//EN\"\n",
" \"http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd\">\n",
"<!-- Generated by graphviz version 2.40.1 (20161225.0304)\n",
" -->\n",
"<!-- Title: %3 Pages: 1 -->\n",
"<svg width=\"531pt\" height=\"434pt\"\n",
" viewBox=\"0.00 0.00 530.71 433.82\" xmlns=\"http://www.w3.org/2000/svg\" xmlns:xlink=\"http://www.w3.org/1999/xlink\">\n",
"<g id=\"graph0\" class=\"graph\" transform=\"scale(1 1) rotate(0) translate(4 429.8234)\">\n",
"<title>%3</title>\n",
"<polygon fill=\"#ffffff\" stroke=\"transparent\" points=\"-4,4 -4,-429.8234 526.7056,-429.8234 526.7056,4 -4,4\"/>\n",
"<!-- 165 -->\n",
"<g id=\"node1\" class=\"node\">\n",
"<title>165</title>\n",
"<polygon fill=\"#d5e8d4\" stroke=\"#d5e8d4\" points=\"178.8528,-425.8234 58.8528,-389.8234 178.8528,-353.8234 298.8528,-389.8234 178.8528,-425.8234\"/>\n",
"<text text-anchor=\"start\" x=\"165.3528\" y=\"-393.6234\" font-family=\"Times,serif\" font-size=\"14.00\" fill=\"#000000\"> </text>\n",
"<text text-anchor=\"start\" x=\"169.3528\" y=\"-393.6234\" font-family=\"Times,serif\" font-weight=\"bold\" font-size=\"14.00\" fill=\"#000000\">mix</text>\n",
"<text text-anchor=\"start\" x=\"126.8528\" y=\"-379.6234\" font-family=\"Times,serif\" font-size=\"14.00\" fill=\"#000000\">node score: 1.0000</text>\n",
"</g>\n",
"<!-- 157 -->\n",
"<g id=\"node2\" class=\"node\">\n",
"<title>157</title>\n",
"<ellipse fill=\"#dae8fc\" stroke=\"#dae8fc\" cx=\"84.8528\" cy=\"-292.3675\" rx=\"84.7059\" ry=\"25.4118\"/>\n",
"<text text-anchor=\"start\" x=\"70.8528\" y=\"-296.1675\" font-family=\"Times,serif\" font-size=\"14.00\" fill=\"#000000\"> </text>\n",
"<text text-anchor=\"start\" x=\"74.8528\" y=\"-296.1675\" font-family=\"Times,serif\" font-weight=\"bold\" font-size=\"14.00\" fill=\"#000000\">peel</text>\n",
"<text text-anchor=\"start\" x=\"32.8528\" y=\"-282.1675\" font-family=\"Times,serif\" font-size=\"14.00\" fill=\"#000000\">node score: 1.0000</text>\n",
"</g>\n",
"<!-- 165&#45;&gt;157 -->\n",
"<g id=\"edge1\" class=\"edge\">\n",
"<title>165&#45;&gt;157</title>\n",
"<path fill=\"none\" stroke=\"#000000\" d=\"M151.9162,-361.8964C140.5946,-350.1586 127.3608,-336.4383 115.6545,-324.3016\"/>\n",
"<polygon fill=\"#000000\" stroke=\"#000000\" points=\"118.0553,-321.7491 108.5939,-316.9814 113.017,-326.6088 118.0553,-321.7491\"/>\n",
"</g>\n",
"<!-- 163 -->\n",
"<g id=\"node4\" class=\"node\">\n",
"<title>163</title>\n",
"<ellipse fill=\"#dae8fc\" stroke=\"#dae8fc\" cx=\"274.8528\" cy=\"-292.3675\" rx=\"84.7059\" ry=\"25.4118\"/>\n",
"<text text-anchor=\"start\" x=\"260.3528\" y=\"-296.1675\" font-family=\"Times,serif\" font-size=\"14.00\" fill=\"#000000\"> </text>\n",
"<text text-anchor=\"start\" x=\"264.3528\" y=\"-296.1675\" font-family=\"Times,serif\" font-weight=\"bold\" font-size=\"14.00\" fill=\"#000000\">heat</text>\n",
"<text text-anchor=\"start\" x=\"222.8528\" y=\"-282.1675\" font-family=\"Times,serif\" font-size=\"14.00\" fill=\"#000000\">node score: 1.0000</text>\n",
"</g>\n",
"<!-- 165&#45;&gt;163 -->\n",
"<g id=\"edge3\" class=\"edge\">\n",
"<title>165&#45;&gt;163</title>\n",
"<path fill=\"none\" stroke=\"#000000\" d=\"M206.3626,-361.8964C217.9251,-350.1586 231.4404,-336.4383 243.3958,-324.3016\"/>\n",
"<polygon fill=\"#000000\" stroke=\"#000000\" points=\"246.0824,-326.5617 250.6066,-316.9814 241.0955,-321.6493 246.0824,-326.5617\"/>\n",
"</g>\n",
"<!-- 156 -->\n",
"<g id=\"node3\" class=\"node\">\n",
"<title>156</title>\n",
"<polygon fill=\"#ffe6cc\" stroke=\"#ffe6cc\" points=\"138.8528,-212.9117 22.8528,-212.9117 22.8528,-176.9117 138.8528,-176.9117 138.8528,-212.9117\"/>\n",
"<text text-anchor=\"start\" x=\"60.3528\" y=\"-198.7117\" font-family=\"Times,serif\" font-size=\"14.00\" fill=\"#000000\"> </text>\n",
"<text text-anchor=\"start\" x=\"64.3528\" y=\"-198.7117\" font-family=\"Times,serif\" font-weight=\"bold\" font-size=\"14.00\" fill=\"#000000\">potato</text>\n",
"<text text-anchor=\"start\" x=\"30.8528\" y=\"-184.7117\" font-family=\"Times,serif\" font-size=\"14.00\" fill=\"#000000\">node score:1.0000</text>\n",
"</g>\n",
"<!-- 157&#45;&gt;156 -->\n",
"<g id=\"edge2\" class=\"edge\">\n",
"<title>157&#45;&gt;156</title>\n",
"<path fill=\"none\" stroke=\"#000000\" d=\"M83.8019,-266.7622C83.2539,-253.4123 82.5823,-237.0481 82.0184,-223.3105\"/>\n",
"<polygon fill=\"#000000\" stroke=\"#000000\" points=\"85.501,-222.8122 81.5938,-212.9642 78.5069,-223.0993 85.501,-222.8122\"/>\n",
"</g>\n",
"<!-- 164 -->\n",
"<g id=\"node5\" class=\"node\">\n",
"<title>164</title>\n",
"<polygon fill=\"#d5e8d4\" stroke=\"#d5e8d4\" points=\"276.8528,-230.9117 156.8528,-194.9117 276.8528,-158.9117 396.8528,-194.9117 276.8528,-230.9117\"/>\n",
"<text text-anchor=\"start\" x=\"263.3528\" y=\"-198.7117\" font-family=\"Times,serif\" font-size=\"14.00\" fill=\"#000000\"> </text>\n",
"<text text-anchor=\"start\" x=\"267.3528\" y=\"-198.7117\" font-family=\"Times,serif\" font-weight=\"bold\" font-size=\"14.00\" fill=\"#000000\">mix</text>\n",
"<text text-anchor=\"start\" x=\"224.8528\" y=\"-184.7117\" font-family=\"Times,serif\" font-size=\"14.00\" fill=\"#000000\">node score: 1.0000</text>\n",
"</g>\n",
"<!-- 163&#45;&gt;164 -->\n",
"<g id=\"edge4\" class=\"edge\">\n",
"<title>163&#45;&gt;164</title>\n",
"<path fill=\"none\" stroke=\"#000000\" d=\"M275.3783,-266.7622C275.5397,-258.8985 275.7225,-249.989 275.9032,-241.1865\"/>\n",
"<polygon fill=\"#000000\" stroke=\"#000000\" points=\"279.4068,-241.0411 276.1128,-230.9713 272.4083,-240.8974 279.4068,-241.0411\"/>\n",
"</g>\n",
"<!-- 161 -->\n",
"<g id=\"node6\" class=\"node\">\n",
"<title>161</title>\n",
"<ellipse fill=\"#dae8fc\" stroke=\"#dae8fc\" cx=\"115.8528\" cy=\"-97.4558\" rx=\"84.7059\" ry=\"25.4118\"/>\n",
"<text text-anchor=\"start\" x=\"104.3528\" y=\"-101.2558\" font-family=\"Times,serif\" font-size=\"14.00\" fill=\"#000000\"> </text>\n",
"<text text-anchor=\"start\" x=\"108.3528\" y=\"-101.2558\" font-family=\"Times,serif\" font-weight=\"bold\" font-size=\"14.00\" fill=\"#000000\">cut</text>\n",
"<text text-anchor=\"start\" x=\"63.8528\" y=\"-87.2558\" font-family=\"Times,serif\" font-size=\"14.00\" fill=\"#000000\">node score: 1.0000</text>\n",
"</g>\n",
"<!-- 164&#45;&gt;161 -->\n",
"<g id=\"edge5\" class=\"edge\">\n",
"<title>164&#45;&gt;161</title>\n",
"<path fill=\"none\" stroke=\"#000000\" d=\"M237.0551,-170.8215C214.4309,-157.1267 185.986,-139.9086 162.3392,-125.5948\"/>\n",
"<polygon fill=\"#000000\" stroke=\"#000000\" points=\"163.9007,-122.4487 153.5335,-120.2645 160.2758,-128.4371 163.9007,-122.4487\"/>\n",
"</g>\n",
"<!-- 162 -->\n",
"<g id=\"node8\" class=\"node\">\n",
"<title>162</title>\n",
"<polygon fill=\"#ffe6cc\" stroke=\"#ffe6cc\" points=\"334.8528,-115.4558 218.8528,-115.4558 218.8528,-79.4558 334.8528,-79.4558 334.8528,-115.4558\"/>\n",
"<text text-anchor=\"start\" x=\"251.8528\" y=\"-101.2558\" font-family=\"Times,serif\" font-size=\"14.00\" fill=\"#000000\"> </text>\n",
"<text text-anchor=\"start\" x=\"255.8528\" y=\"-101.2558\" font-family=\"Times,serif\" font-weight=\"bold\" font-size=\"14.00\" fill=\"#000000\">olive oil</text>\n",
"<text text-anchor=\"start\" x=\"226.8528\" y=\"-87.2558\" font-family=\"Times,serif\" font-size=\"14.00\" fill=\"#000000\">node score:1.0000</text>\n",
"</g>\n",
"<!-- 164&#45;&gt;162 -->\n",
"<g id=\"edge7\" class=\"edge\">\n",
"<title>164&#45;&gt;162</title>\n",
"<path fill=\"none\" stroke=\"#000000\" d=\"M276.8528,-158.8996C276.8528,-147.9536 276.8528,-136.0871 276.8528,-125.7278\"/>\n",
"<polygon fill=\"#000000\" stroke=\"#000000\" points=\"280.3529,-125.5795 276.8528,-115.5795 273.3529,-125.5795 280.3529,-125.5795\"/>\n",
"</g>\n",
"<!-- 159 -->\n",
"<g id=\"node9\" class=\"node\">\n",
"<title>159</title>\n",
"<ellipse fill=\"#dae8fc\" stroke=\"#dae8fc\" cx=\"437.8528\" cy=\"-97.4558\" rx=\"84.7059\" ry=\"25.4118\"/>\n",
"<text text-anchor=\"start\" x=\"423.3528\" y=\"-101.2558\" font-family=\"Times,serif\" font-size=\"14.00\" fill=\"#000000\"> </text>\n",
"<text text-anchor=\"start\" x=\"427.3528\" y=\"-101.2558\" font-family=\"Times,serif\" font-weight=\"bold\" font-size=\"14.00\" fill=\"#000000\">slice</text>\n",
"<text text-anchor=\"start\" x=\"385.8528\" y=\"-87.2558\" font-family=\"Times,serif\" font-size=\"14.00\" fill=\"#000000\">node score: 1.0000</text>\n",
"</g>\n",
"<!-- 164&#45;&gt;159 -->\n",
"<g id=\"edge8\" class=\"edge\">\n",
"<title>164&#45;&gt;159</title>\n",
"<path fill=\"none\" stroke=\"#000000\" d=\"M316.6506,-170.8215C339.2748,-157.1267 367.7196,-139.9086 391.3664,-125.5948\"/>\n",
"<polygon fill=\"#000000\" stroke=\"#000000\" points=\"393.4298,-128.4371 400.1722,-120.2645 389.8049,-122.4487 393.4298,-128.4371\"/>\n",
"</g>\n",
"<!-- 160 -->\n",
"<g id=\"node7\" class=\"node\">\n",
"<title>160</title>\n",
"<polygon fill=\"#ffe6cc\" stroke=\"#ffe6cc\" points=\"173.8528,-36 57.8528,-36 57.8528,0 173.8528,0 173.8528,-36\"/>\n",
"<text text-anchor=\"start\" x=\"97.3528\" y=\"-21.8\" font-family=\"Times,serif\" font-size=\"14.00\" fill=\"#000000\"> </text>\n",
"<text text-anchor=\"start\" x=\"101.3528\" y=\"-21.8\" font-family=\"Times,serif\" font-weight=\"bold\" font-size=\"14.00\" fill=\"#000000\">onion</text>\n",
"<text text-anchor=\"start\" x=\"65.8528\" y=\"-7.8\" font-family=\"Times,serif\" font-size=\"14.00\" fill=\"#000000\">node score:1.0000</text>\n",
"</g>\n",
"<!-- 161&#45;&gt;160 -->\n",
"<g id=\"edge6\" class=\"edge\">\n",
"<title>161&#45;&gt;160</title>\n",
"<path fill=\"none\" stroke=\"#000000\" d=\"M115.8528,-71.8782C115.8528,-63.7122 115.8528,-54.6289 115.8528,-46.2824\"/>\n",
"<polygon fill=\"#000000\" stroke=\"#000000\" points=\"119.3529,-46.2287 115.8528,-36.2288 112.3529,-46.2288 119.3529,-46.2287\"/>\n",
"</g>\n",
"<!-- 158 -->\n",
"<g id=\"node10\" class=\"node\">\n",
"<title>158</title>\n",
"<polygon fill=\"#ffe6cc\" stroke=\"#ffe6cc\" points=\"495.8528,-36 379.8528,-36 379.8528,0 495.8528,0 495.8528,-36\"/>\n",
"<text text-anchor=\"start\" x=\"417.3528\" y=\"-21.8\" font-family=\"Times,serif\" font-size=\"14.00\" fill=\"#000000\"> </text>\n",
"<text text-anchor=\"start\" x=\"421.3528\" y=\"-21.8\" font-family=\"Times,serif\" font-weight=\"bold\" font-size=\"14.00\" fill=\"#000000\">carrot</text>\n",
"<text text-anchor=\"start\" x=\"387.8528\" y=\"-7.8\" font-family=\"Times,serif\" font-size=\"14.00\" fill=\"#000000\">node score:1.0000</text>\n",
"</g>\n",
"<!-- 159&#45;&gt;158 -->\n",
"<g id=\"edge9\" class=\"edge\">\n",
"<title>159&#45;&gt;158</title>\n",
"<path fill=\"none\" stroke=\"#000000\" d=\"M437.8528,-71.8782C437.8528,-63.7122 437.8528,-54.6289 437.8528,-46.2824\"/>\n",
"<polygon fill=\"#000000\" stroke=\"#000000\" points=\"441.3529,-46.2287 437.8528,-36.2288 434.3529,-46.2288 441.3529,-46.2287\"/>\n",
"</g>\n",
"</g>\n",
"</svg>\n"
],
"text/plain": [
"<graphviz.dot.Digraph at 0x7f512f019550>"
]
},
"metadata": {},
"output_type": "display_data"
},
{
"data": {
"text/markdown": [
"**Recipe Score**: 1.0"
],
"text/plain": [
"<IPython.core.display.Markdown object>"
]
},
"metadata": {},
"output_type": "display_data"
},
{
"data": {
"text/markdown": [
"**Ingredients**:\n",
" * onion\n",
" * potato\n",
" * carrot\n",
" * olive oil\n",
"\n",
"\n",
"**Instructions**:\n",
"\n",
"| Step | Instruction |\n",
"| ----:|:----------- |\n",
"| 1 | cut onion, slice carrot and mix it with olive oil. Then heat it. |\n",
"| 2 | peel potato and mix it together with the results of step 1. |\n"
],
"text/plain": [
"<IPython.core.display.Markdown object>"
]
},
"metadata": {},
"output_type": "display_data"
},
{
"data": {
"image/svg+xml": [
"<?xml version=\"1.0\" encoding=\"UTF-8\" standalone=\"no\"?>\n",
"<!DOCTYPE svg PUBLIC \"-//W3C//DTD SVG 1.1//EN\"\n",
" \"http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd\">\n",
"<!-- Generated by graphviz version 2.40.1 (20161225.0304)\n",
" -->\n",
"<!-- Title: %3 Pages: 1 -->\n",
"<svg width=\"585pt\" height=\"434pt\"\n",
" viewBox=\"0.00 0.00 584.85 433.82\" xmlns=\"http://www.w3.org/2000/svg\" xmlns:xlink=\"http://www.w3.org/1999/xlink\">\n",
"<g id=\"graph0\" class=\"graph\" transform=\"scale(1 1) rotate(0) translate(4 429.8234)\">\n",
"<title>%3</title>\n",
"<polygon fill=\"#ffffff\" stroke=\"transparent\" points=\"-4,4 -4,-429.8234 580.8528,-429.8234 580.8528,4 -4,4\"/>\n",
"<!-- 2368 -->\n",
"<g id=\"node1\" class=\"node\">\n",
"<title>2368</title>\n",
"<polygon fill=\"#d5e8d4\" stroke=\"#d5e8d4\" points=\"300,-425.8234 180,-389.8234 300,-353.8234 420,-389.8234 300,-425.8234\"/>\n",
"<text text-anchor=\"start\" x=\"286.5\" y=\"-393.6234\" font-family=\"Times,serif\" font-size=\"14.00\" fill=\"#000000\"> </text>\n",
"<text text-anchor=\"start\" x=\"290.5\" y=\"-393.6234\" font-family=\"Times,serif\" font-weight=\"bold\" font-size=\"14.00\" fill=\"#000000\">mix</text>\n",
"<text text-anchor=\"start\" x=\"248\" y=\"-379.6234\" font-family=\"Times,serif\" font-size=\"14.00\" fill=\"#000000\">node score: 1.0000</text>\n",
"</g>\n",
"<!-- 2380 -->\n",
"<g id=\"node2\" class=\"node\">\n",
"<title>2380</title>\n",
"<ellipse fill=\"#dae8fc\" stroke=\"#dae8fc\" cx=\"108\" cy=\"-292.3675\" rx=\"84.7059\" ry=\"25.4118\"/>\n",
"<text text-anchor=\"start\" x=\"92\" y=\"-296.1675\" font-family=\"Times,serif\" font-size=\"14.00\" fill=\"#000000\"> </text>\n",
"<text text-anchor=\"start\" x=\"96\" y=\"-296.1675\" font-family=\"Times,serif\" font-weight=\"bold\" font-size=\"14.00\" fill=\"#000000\">bake</text>\n",
"<text text-anchor=\"start\" x=\"56\" y=\"-282.1675\" font-family=\"Times,serif\" font-size=\"14.00\" fill=\"#000000\">node score: 1.0000</text>\n",
"</g>\n",
"<!-- 2368&#45;&gt;2380 -->\n",
"<g id=\"edge1\" class=\"edge\">\n",
"<title>2368&#45;&gt;2380</title>\n",
"<path fill=\"none\" stroke=\"#000000\" d=\"M254.9845,-366.9743C226.6583,-352.5964 189.9893,-333.9838 160.3633,-318.9462\"/>\n",
"<polygon fill=\"#000000\" stroke=\"#000000\" points=\"161.9135,-315.808 151.4122,-314.4028 158.7451,-322.05 161.9135,-315.808\"/>\n",
"</g>\n",
"<!-- 2372 -->\n",
"<g id=\"node4\" class=\"node\">\n",
"<title>2372</title>\n",
"<ellipse fill=\"#dae8fc\" stroke=\"#dae8fc\" cx=\"300\" cy=\"-292.3675\" rx=\"84.7059\" ry=\"25.4118\"/>\n",
"<text text-anchor=\"start\" x=\"275\" y=\"-296.1675\" font-family=\"Times,serif\" font-size=\"14.00\" fill=\"#000000\"> </text>\n",
"<text text-anchor=\"start\" x=\"279\" y=\"-296.1675\" font-family=\"Times,serif\" font-weight=\"bold\" font-size=\"14.00\" fill=\"#000000\">simmer</text>\n",
"<text text-anchor=\"start\" x=\"248\" y=\"-282.1675\" font-family=\"Times,serif\" font-size=\"14.00\" fill=\"#000000\">node score: 1.0000</text>\n",
"</g>\n",
"<!-- 2368&#45;&gt;2372 -->\n",
"<g id=\"edge3\" class=\"edge\">\n",
"<title>2368&#45;&gt;2372</title>\n",
"<path fill=\"none\" stroke=\"#000000\" d=\"M300,-353.8113C300,-345.4239 300,-336.496 300,-328.1199\"/>\n",
"<polygon fill=\"#000000\" stroke=\"#000000\" points=\"303.5001,-327.8873 300,-317.8874 296.5001,-327.8874 303.5001,-327.8873\"/>\n",
"</g>\n",
"<!-- 2370 -->\n",
"<g id=\"node11\" class=\"node\">\n",
"<title>2370</title>\n",
"<ellipse fill=\"#dae8fc\" stroke=\"#dae8fc\" cx=\"492\" cy=\"-292.3675\" rx=\"84.7059\" ry=\"25.4118\"/>\n",
"<text text-anchor=\"start\" x=\"480.5\" y=\"-296.1675\" font-family=\"Times,serif\" font-size=\"14.00\" fill=\"#000000\"> </text>\n",
"<text text-anchor=\"start\" x=\"484.5\" y=\"-296.1675\" font-family=\"Times,serif\" font-weight=\"bold\" font-size=\"14.00\" fill=\"#000000\">cut</text>\n",
"<text text-anchor=\"start\" x=\"440\" y=\"-282.1675\" font-family=\"Times,serif\" font-size=\"14.00\" fill=\"#000000\">node score: 1.0000</text>\n",
"</g>\n",
"<!-- 2368&#45;&gt;2370 -->\n",
"<g id=\"edge10\" class=\"edge\">\n",
"<title>2368&#45;&gt;2370</title>\n",
"<path fill=\"none\" stroke=\"#000000\" d=\"M345.0155,-366.9743C373.3417,-352.5964 410.0107,-333.9838 439.6367,-318.9462\"/>\n",
"<polygon fill=\"#000000\" stroke=\"#000000\" points=\"441.2549,-322.05 448.5878,-314.4028 438.0865,-315.808 441.2549,-322.05\"/>\n",
"</g>\n",
"<!-- 2369 -->\n",
"<g id=\"node3\" class=\"node\">\n",
"<title>2369</title>\n",
"<polygon fill=\"#ffe6cc\" stroke=\"#ffe6cc\" points=\"162,-212.9117 46,-212.9117 46,-176.9117 162,-176.9117 162,-212.9117\"/>\n",
"<text text-anchor=\"start\" x=\"83.5\" y=\"-198.7117\" font-family=\"Times,serif\" font-size=\"14.00\" fill=\"#000000\"> </text>\n",
"<text text-anchor=\"start\" x=\"87.5\" y=\"-198.7117\" font-family=\"Times,serif\" font-weight=\"bold\" font-size=\"14.00\" fill=\"#000000\">cheese</text>\n",
"<text text-anchor=\"start\" x=\"54\" y=\"-184.7117\" font-family=\"Times,serif\" font-size=\"14.00\" fill=\"#000000\">node score:1.0000</text>\n",
"</g>\n",
"<!-- 2380&#45;&gt;2369 -->\n",
"<g id=\"edge2\" class=\"edge\">\n",
"<title>2380&#45;&gt;2369</title>\n",
"<path fill=\"none\" stroke=\"#000000\" d=\"M106.949,-266.7622C106.4011,-253.4123 105.7295,-237.0481 105.1656,-223.3105\"/>\n",
"<polygon fill=\"#000000\" stroke=\"#000000\" points=\"108.6482,-222.8122 104.7409,-212.9642 101.6541,-223.0993 108.6482,-222.8122\"/>\n",
"</g>\n",
"<!-- 2373 -->\n",
"<g id=\"node5\" class=\"node\">\n",
"<title>2373</title>\n",
"<polygon fill=\"#d5e8d4\" stroke=\"#d5e8d4\" points=\"300,-230.9117 180,-194.9117 300,-158.9117 420,-194.9117 300,-230.9117\"/>\n",
"<text text-anchor=\"start\" x=\"286.5\" y=\"-198.7117\" font-family=\"Times,serif\" font-size=\"14.00\" fill=\"#000000\"> </text>\n",
"<text text-anchor=\"start\" x=\"290.5\" y=\"-198.7117\" font-family=\"Times,serif\" font-weight=\"bold\" font-size=\"14.00\" fill=\"#000000\">mix</text>\n",
"<text text-anchor=\"start\" x=\"248\" y=\"-184.7117\" font-family=\"Times,serif\" font-size=\"14.00\" fill=\"#000000\">node score: 1.0000</text>\n",
"</g>\n",
"<!-- 2372&#45;&gt;2373 -->\n",
"<g id=\"edge4\" class=\"edge\">\n",
"<title>2372&#45;&gt;2373</title>\n",
"<path fill=\"none\" stroke=\"#000000\" d=\"M300,-266.7622C300,-258.8985 300,-249.989 300,-241.1865\"/>\n",
"<polygon fill=\"#000000\" stroke=\"#000000\" points=\"303.5001,-240.9713 300,-230.9713 296.5001,-240.9714 303.5001,-240.9713\"/>\n",
"</g>\n",
"<!-- 2375 -->\n",
"<g id=\"node6\" class=\"node\">\n",
"<title>2375</title>\n",
"<polygon fill=\"#ffe6cc\" stroke=\"#ffe6cc\" points=\"116,-115.4558 0,-115.4558 0,-79.4558 116,-79.4558 116,-115.4558\"/>\n",
"<text text-anchor=\"start\" x=\"45.5\" y=\"-101.2558\" font-family=\"Times,serif\" font-size=\"14.00\" fill=\"#000000\"> </text>\n",
"<text text-anchor=\"start\" x=\"49.5\" y=\"-101.2558\" font-family=\"Times,serif\" font-weight=\"bold\" font-size=\"14.00\" fill=\"#000000\">salt</text>\n",
"<text text-anchor=\"start\" x=\"8\" y=\"-87.2558\" font-family=\"Times,serif\" font-size=\"14.00\" fill=\"#000000\">node score:1.0000</text>\n",
"</g>\n",
"<!-- 2373&#45;&gt;2375 -->\n",
"<g id=\"edge5\" class=\"edge\">\n",
"<title>2373&#45;&gt;2375</title>\n",
"<path fill=\"none\" stroke=\"#000000\" d=\"M248.678,-174.2438C208.6027,-158.1051 153.0585,-135.7368 112.2533,-119.3042\"/>\n",
"<polygon fill=\"#000000\" stroke=\"#000000\" points=\"113.3227,-115.9618 102.7392,-115.4728 110.7078,-122.455 113.3227,-115.9618\"/>\n",
"</g>\n",
"<!-- 2376 -->\n",
"<g id=\"node7\" class=\"node\">\n",
"<title>2376</title>\n",
"<ellipse fill=\"#dae8fc\" stroke=\"#dae8fc\" cx=\"219\" cy=\"-97.4558\" rx=\"84.7059\" ry=\"25.4118\"/>\n",
"<text text-anchor=\"start\" x=\"205\" y=\"-101.2558\" font-family=\"Times,serif\" font-size=\"14.00\" fill=\"#000000\"> </text>\n",
"<text text-anchor=\"start\" x=\"209\" y=\"-101.2558\" font-family=\"Times,serif\" font-weight=\"bold\" font-size=\"14.00\" fill=\"#000000\">peel</text>\n",
"<text text-anchor=\"start\" x=\"167\" y=\"-87.2558\" font-family=\"Times,serif\" font-size=\"14.00\" fill=\"#000000\">node score: 1.0000</text>\n",
"</g>\n",
"<!-- 2373&#45;&gt;2376 -->\n",
"<g id=\"edge6\" class=\"edge\">\n",
"<title>2373&#45;&gt;2376</title>\n",
"<path fill=\"none\" stroke=\"#000000\" d=\"M275.9166,-165.9356C266.5199,-154.6298 255.7039,-141.6164 246.0411,-129.9906\"/>\n",
"<polygon fill=\"#000000\" stroke=\"#000000\" points=\"248.651,-127.655 239.5674,-122.2016 243.2676,-132.1293 248.651,-127.655\"/>\n",
"</g>\n",
"<!-- 2378 -->\n",
"<g id=\"node9\" class=\"node\">\n",
"<title>2378</title>\n",
"<polygon fill=\"#ffe6cc\" stroke=\"#ffe6cc\" points=\"438,-115.4558 322,-115.4558 322,-79.4558 438,-79.4558 438,-115.4558\"/>\n",
"<text text-anchor=\"start\" x=\"340\" y=\"-101.2558\" font-family=\"Times,serif\" font-size=\"14.00\" fill=\"#000000\"> </text>\n",
"<text text-anchor=\"start\" x=\"344\" y=\"-101.2558\" font-family=\"Times,serif\" font-weight=\"bold\" font-size=\"14.00\" fill=\"#000000\">black pepper</text>\n",
"<text text-anchor=\"start\" x=\"330\" y=\"-87.2558\" font-family=\"Times,serif\" font-size=\"14.00\" fill=\"#000000\">node score:1.0000</text>\n",
"</g>\n",
"<!-- 2373&#45;&gt;2378 -->\n",
"<g id=\"edge8\" class=\"edge\">\n",
"<title>2373&#45;&gt;2378</title>\n",
"<path fill=\"none\" stroke=\"#000000\" d=\"M323.786,-165.9356C334.8472,-152.4609 347.8996,-136.5605 358.6416,-123.4746\"/>\n",
"<polygon fill=\"#000000\" stroke=\"#000000\" points=\"361.3533,-125.6875 364.993,-115.7374 355.9428,-121.246 361.3533,-125.6875\"/>\n",
"</g>\n",
"<!-- 2374 -->\n",
"<g id=\"node10\" class=\"node\">\n",
"<title>2374</title>\n",
"<polygon fill=\"#ffe6cc\" stroke=\"#ffe6cc\" points=\"572,-115.4558 456,-115.4558 456,-79.4558 572,-79.4558 572,-115.4558\"/>\n",
"<text text-anchor=\"start\" x=\"493.5\" y=\"-101.2558\" font-family=\"Times,serif\" font-size=\"14.00\" fill=\"#000000\"> </text>\n",
"<text text-anchor=\"start\" x=\"497.5\" y=\"-101.2558\" font-family=\"Times,serif\" font-weight=\"bold\" font-size=\"14.00\" fill=\"#000000\">butter</text>\n",
"<text text-anchor=\"start\" x=\"464\" y=\"-87.2558\" font-family=\"Times,serif\" font-size=\"14.00\" fill=\"#000000\">node score:1.0000</text>\n",
"</g>\n",
"<!-- 2373&#45;&gt;2374 -->\n",
"<g id=\"edge9\" class=\"edge\">\n",
"<title>2373&#45;&gt;2374</title>\n",
"<path fill=\"none\" stroke=\"#000000\" d=\"M347.7594,-173.162C382.7011,-157.2495 429.9503,-135.7322 465.1455,-119.7042\"/>\n",
"<polygon fill=\"#000000\" stroke=\"#000000\" points=\"466.6245,-122.8766 474.2747,-115.5468 463.7234,-116.5061 466.6245,-122.8766\"/>\n",
"</g>\n",
"<!-- 2377 -->\n",
"<g id=\"node8\" class=\"node\">\n",
"<title>2377</title>\n",
"<polygon fill=\"#ffe6cc\" stroke=\"#ffe6cc\" points=\"277,-36 161,-36 161,0 277,0 277,-36\"/>\n",
"<text text-anchor=\"start\" x=\"198.5\" y=\"-21.8\" font-family=\"Times,serif\" font-size=\"14.00\" fill=\"#000000\"> </text>\n",
"<text text-anchor=\"start\" x=\"202.5\" y=\"-21.8\" font-family=\"Times,serif\" font-weight=\"bold\" font-size=\"14.00\" fill=\"#000000\">carrot</text>\n",
"<text text-anchor=\"start\" x=\"169\" y=\"-7.8\" font-family=\"Times,serif\" font-size=\"14.00\" fill=\"#000000\">node score:1.0000</text>\n",
"</g>\n",
"<!-- 2376&#45;&gt;2377 -->\n",
"<g id=\"edge7\" class=\"edge\">\n",
"<title>2376&#45;&gt;2377</title>\n",
"<path fill=\"none\" stroke=\"#000000\" d=\"M219,-71.8782C219,-63.7122 219,-54.6289 219,-46.2824\"/>\n",
"<polygon fill=\"#000000\" stroke=\"#000000\" points=\"222.5001,-46.2287 219,-36.2288 215.5001,-46.2288 222.5001,-46.2287\"/>\n",
"</g>\n",
"<!-- 2371 -->\n",
"<g id=\"node12\" class=\"node\">\n",
"<title>2371</title>\n",
"<polygon fill=\"#ffe6cc\" stroke=\"#ffe6cc\" points=\"554,-212.9117 438,-212.9117 438,-176.9117 554,-176.9117 554,-212.9117\"/>\n",
"<text text-anchor=\"start\" x=\"475.5\" y=\"-198.7117\" font-family=\"Times,serif\" font-size=\"14.00\" fill=\"#000000\"> </text>\n",
"<text text-anchor=\"start\" x=\"479.5\" y=\"-198.7117\" font-family=\"Times,serif\" font-weight=\"bold\" font-size=\"14.00\" fill=\"#000000\">potato</text>\n",
"<text text-anchor=\"start\" x=\"446\" y=\"-184.7117\" font-family=\"Times,serif\" font-size=\"14.00\" fill=\"#000000\">node score:1.0000</text>\n",
"</g>\n",
"<!-- 2370&#45;&gt;2371 -->\n",
"<g id=\"edge11\" class=\"edge\">\n",
"<title>2370&#45;&gt;2371</title>\n",
"<path fill=\"none\" stroke=\"#000000\" d=\"M493.051,-266.7622C493.5989,-253.4123 494.2705,-237.0481 494.8344,-223.3105\"/>\n",
"<polygon fill=\"#000000\" stroke=\"#000000\" points=\"498.3459,-223.0993 495.2591,-212.9642 491.3518,-222.8122 498.3459,-223.0993\"/>\n",
"</g>\n",
"</g>\n",
"</svg>\n"
],
"text/plain": [
"<graphviz.dot.Digraph at 0x7f5132a4d550>"
]
},
"metadata": {},
"output_type": "display_data"
},
{
"data": {
"text/markdown": [
"**Recipe Score**: 1.0"
],
"text/plain": [
"<IPython.core.display.Markdown object>"
]
},
"metadata": {},
"output_type": "display_data"
},
{
"data": {
"text/markdown": [
"**Ingredients**:\n",
" * salt\n",
" * carrot\n",
" * butter\n",
" * potato\n",
" * black pepper\n",
" * cheese\n",
"\n",
"\n",
"**Instructions**:\n",
"\n",
"| Step | Instruction |\n",
"| ----:|:----------- |\n",
"| 1 | peel carrot and mix it with salt, black pepper and butter. Then simmer it. |\n",
"| 2 | bake cheese, cut potato and mix it together with the results of step 1. |\n"
],
"text/plain": [
"<IPython.core.display.Markdown object>"
]
},
"metadata": {},
"output_type": "display_data"
},
{
"data": {
"image/svg+xml": [
"<?xml version=\"1.0\" encoding=\"UTF-8\" standalone=\"no\"?>\n",
"<!DOCTYPE svg PUBLIC \"-//W3C//DTD SVG 1.1//EN\"\n",
" \"http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd\">\n",
"<!-- Generated by graphviz version 2.40.1 (20161225.0304)\n",
" -->\n",
"<!-- Title: %3 Pages: 1 -->\n",
"<svg width=\"688pt\" height=\"521pt\"\n",
" viewBox=\"0.00 0.00 687.71 520.74\" xmlns=\"http://www.w3.org/2000/svg\" xmlns:xlink=\"http://www.w3.org/1999/xlink\">\n",
"<g id=\"graph0\" class=\"graph\" transform=\"scale(1 1) rotate(0) translate(4 516.7351)\">\n",
"<title>%3</title>\n",
"<polygon fill=\"#ffffff\" stroke=\"transparent\" points=\"-4,4 -4,-516.7351 683.7056,-516.7351 683.7056,4 -4,4\"/>\n",
"<!-- 5198 -->\n",
"<g id=\"node1\" class=\"node\">\n",
"<title>5198</title>\n",
"<polygon fill=\"#d5e8d4\" stroke=\"#d5e8d4\" points=\"227.8528,-512.7351 107.8528,-476.7351 227.8528,-440.7351 347.8528,-476.7351 227.8528,-512.7351\"/>\n",
"<text text-anchor=\"start\" x=\"214.3528\" y=\"-480.5351\" font-family=\"Times,serif\" font-size=\"14.00\" fill=\"#000000\"> </text>\n",
"<text text-anchor=\"start\" x=\"218.3528\" y=\"-480.5351\" font-family=\"Times,serif\" font-weight=\"bold\" font-size=\"14.00\" fill=\"#000000\">mix</text>\n",
"<text text-anchor=\"start\" x=\"175.8528\" y=\"-466.5351\" font-family=\"Times,serif\" font-size=\"14.00\" fill=\"#000000\">node score: 1.0000</text>\n",
"</g>\n",
"<!-- 5208 -->\n",
"<g id=\"node2\" class=\"node\">\n",
"<title>5208</title>\n",
"<ellipse fill=\"#dae8fc\" stroke=\"#dae8fc\" cx=\"133.8528\" cy=\"-379.2792\" rx=\"84.7059\" ry=\"25.4118\"/>\n",
"<text text-anchor=\"start\" x=\"119.3528\" y=\"-383.0792\" font-family=\"Times,serif\" font-size=\"14.00\" fill=\"#000000\"> </text>\n",
"<text text-anchor=\"start\" x=\"123.3528\" y=\"-383.0792\" font-family=\"Times,serif\" font-weight=\"bold\" font-size=\"14.00\" fill=\"#000000\">heat</text>\n",
"<text text-anchor=\"start\" x=\"81.8528\" y=\"-369.0792\" font-family=\"Times,serif\" font-size=\"14.00\" fill=\"#000000\">node score: 1.0000</text>\n",
"</g>\n",
"<!-- 5198&#45;&gt;5208 -->\n",
"<g id=\"edge1\" class=\"edge\">\n",
"<title>5198&#45;&gt;5208</title>\n",
"<path fill=\"none\" stroke=\"#000000\" d=\"M200.9162,-448.8081C189.5946,-437.0703 176.3608,-423.35 164.6545,-411.2133\"/>\n",
"<polygon fill=\"#000000\" stroke=\"#000000\" points=\"167.0553,-408.6608 157.5939,-403.8931 162.017,-413.5205 167.0553,-408.6608\"/>\n",
"</g>\n",
"<!-- 5199 -->\n",
"<g id=\"node4\" class=\"node\">\n",
"<title>5199</title>\n",
"<ellipse fill=\"#dae8fc\" stroke=\"#dae8fc\" cx=\"323.8528\" cy=\"-379.2792\" rx=\"84.7059\" ry=\"25.4118\"/>\n",
"<text text-anchor=\"start\" x=\"310.8528\" y=\"-383.0792\" font-family=\"Times,serif\" font-size=\"14.00\" fill=\"#000000\"> </text>\n",
"<text text-anchor=\"start\" x=\"314.8528\" y=\"-383.0792\" font-family=\"Times,serif\" font-weight=\"bold\" font-size=\"14.00\" fill=\"#000000\">boil</text>\n",
"<text text-anchor=\"start\" x=\"271.8528\" y=\"-369.0792\" font-family=\"Times,serif\" font-size=\"14.00\" fill=\"#000000\">node score: 1.0000</text>\n",
"</g>\n",
"<!-- 5198&#45;&gt;5199 -->\n",
"<g id=\"edge3\" class=\"edge\">\n",
"<title>5198&#45;&gt;5199</title>\n",
"<path fill=\"none\" stroke=\"#000000\" d=\"M255.3626,-448.8081C266.9251,-437.0703 280.4404,-423.35 292.3958,-411.2133\"/>\n",
"<polygon fill=\"#000000\" stroke=\"#000000\" points=\"295.0824,-413.4734 299.6066,-403.8931 290.0955,-408.561 295.0824,-413.4734\"/>\n",
"</g>\n",
"<!-- 5209 -->\n",
"<g id=\"node3\" class=\"node\">\n",
"<title>5209</title>\n",
"<polygon fill=\"#ffe6cc\" stroke=\"#ffe6cc\" points=\"187.8528,-299.8234 71.8528,-299.8234 71.8528,-263.8234 187.8528,-263.8234 187.8528,-299.8234\"/>\n",
"<text text-anchor=\"start\" x=\"109.3528\" y=\"-285.6234\" font-family=\"Times,serif\" font-size=\"14.00\" fill=\"#000000\"> </text>\n",
"<text text-anchor=\"start\" x=\"113.3528\" y=\"-285.6234\" font-family=\"Times,serif\" font-weight=\"bold\" font-size=\"14.00\" fill=\"#000000\">cheese</text>\n",
"<text text-anchor=\"start\" x=\"79.8528\" y=\"-271.6234\" font-family=\"Times,serif\" font-size=\"14.00\" fill=\"#000000\">node score:1.0000</text>\n",
"</g>\n",
"<!-- 5208&#45;&gt;5209 -->\n",
"<g id=\"edge2\" class=\"edge\">\n",
"<title>5208&#45;&gt;5209</title>\n",
"<path fill=\"none\" stroke=\"#000000\" d=\"M132.8019,-353.6738C132.2539,-340.324 131.5823,-323.9598 131.0184,-310.2222\"/>\n",
"<polygon fill=\"#000000\" stroke=\"#000000\" points=\"134.501,-309.7239 130.5938,-299.8758 127.5069,-310.011 134.501,-309.7239\"/>\n",
"</g>\n",
"<!-- 5200 -->\n",
"<g id=\"node5\" class=\"node\">\n",
"<title>5200</title>\n",
"<polygon fill=\"#d5e8d4\" stroke=\"#d5e8d4\" points=\"325.8528,-317.8234 205.8528,-281.8234 325.8528,-245.8234 445.8528,-281.8234 325.8528,-317.8234\"/>\n",
"<text text-anchor=\"start\" x=\"312.3528\" y=\"-285.6234\" font-family=\"Times,serif\" font-size=\"14.00\" fill=\"#000000\"> </text>\n",
"<text text-anchor=\"start\" x=\"316.3528\" y=\"-285.6234\" font-family=\"Times,serif\" font-weight=\"bold\" font-size=\"14.00\" fill=\"#000000\">mix</text>\n",
"<text text-anchor=\"start\" x=\"273.8528\" y=\"-271.6234\" font-family=\"Times,serif\" font-size=\"14.00\" fill=\"#000000\">node score: 1.0000</text>\n",
"</g>\n",
"<!-- 5199&#45;&gt;5200 -->\n",
"<g id=\"edge4\" class=\"edge\">\n",
"<title>5199&#45;&gt;5200</title>\n",
"<path fill=\"none\" stroke=\"#000000\" d=\"M324.3783,-353.6738C324.5397,-345.8102 324.7225,-336.9007 324.9032,-328.0982\"/>\n",
"<polygon fill=\"#000000\" stroke=\"#000000\" points=\"328.4068,-327.9528 325.1128,-317.883 321.4083,-327.8091 328.4068,-327.9528\"/>\n",
"</g>\n",
"<!-- 5206 -->\n",
"<g id=\"node6\" class=\"node\">\n",
"<title>5206</title>\n",
"<ellipse fill=\"#dae8fc\" stroke=\"#dae8fc\" cx=\"84.8528\" cy=\"-184.3675\" rx=\"84.7059\" ry=\"25.4118\"/>\n",
"<text text-anchor=\"start\" x=\"67.8528\" y=\"-188.1675\" font-family=\"Times,serif\" font-size=\"14.00\" fill=\"#000000\"> </text>\n",
"<text text-anchor=\"start\" x=\"71.8528\" y=\"-188.1675\" font-family=\"Times,serif\" font-weight=\"bold\" font-size=\"14.00\" fill=\"#000000\">wash</text>\n",
"<text text-anchor=\"start\" x=\"32.8528\" y=\"-174.1675\" font-family=\"Times,serif\" font-size=\"14.00\" fill=\"#000000\">node score: 1.0000</text>\n",
"</g>\n",
"<!-- 5200&#45;&gt;5206 -->\n",
"<g id=\"edge5\" class=\"edge\">\n",
"<title>5200&#45;&gt;5206</title>\n",
"<path fill=\"none\" stroke=\"#000000\" d=\"M274.7429,-261.1555C236.7519,-245.7927 184.8016,-224.7849 144.8414,-208.6258\"/>\n",
"<polygon fill=\"#000000\" stroke=\"#000000\" points=\"146.0581,-205.3425 135.4753,-204.8383 143.4339,-211.832 146.0581,-205.3425\"/>\n",
"</g>\n",
"<!-- 5201 -->\n",
"<g id=\"node8\" class=\"node\">\n",
"<title>5201</title>\n",
"<polygon fill=\"#ffe6cc\" stroke=\"#ffe6cc\" points=\"303.8528,-202.3675 187.8528,-202.3675 187.8528,-166.3675 303.8528,-166.3675 303.8528,-202.3675\"/>\n",
"<text text-anchor=\"start\" x=\"225.3528\" y=\"-188.1675\" font-family=\"Times,serif\" font-size=\"14.00\" fill=\"#000000\"> </text>\n",
"<text text-anchor=\"start\" x=\"229.3528\" y=\"-188.1675\" font-family=\"Times,serif\" font-weight=\"bold\" font-size=\"14.00\" fill=\"#000000\">butter</text>\n",
"<text text-anchor=\"start\" x=\"195.8528\" y=\"-174.1675\" font-family=\"Times,serif\" font-size=\"14.00\" fill=\"#000000\">node score:1.0000</text>\n",
"</g>\n",
"<!-- 5200&#45;&gt;5201 -->\n",
"<g id=\"edge7\" class=\"edge\">\n",
"<title>5200&#45;&gt;5201</title>\n",
"<path fill=\"none\" stroke=\"#000000\" d=\"M302.0668,-252.8473C291.0056,-239.3726 277.9532,-223.4722 267.2112,-210.3863\"/>\n",
"<polygon fill=\"#000000\" stroke=\"#000000\" points=\"269.91,-208.1577 260.8599,-202.6491 264.4995,-212.5991 269.91,-208.1577\"/>\n",
"</g>\n",
"<!-- 5211 -->\n",
"<g id=\"node9\" class=\"node\">\n",
"<title>5211</title>\n",
"<ellipse fill=\"#dae8fc\" stroke=\"#dae8fc\" cx=\"406.8528\" cy=\"-184.3675\" rx=\"84.7059\" ry=\"25.4118\"/>\n",
"<text text-anchor=\"start\" x=\"381.8528\" y=\"-188.1675\" font-family=\"Times,serif\" font-size=\"14.00\" fill=\"#000000\"> </text>\n",
"<text text-anchor=\"start\" x=\"385.8528\" y=\"-188.1675\" font-family=\"Times,serif\" font-weight=\"bold\" font-size=\"14.00\" fill=\"#000000\">simmer</text>\n",
"<text text-anchor=\"start\" x=\"354.8528\" y=\"-174.1675\" font-family=\"Times,serif\" font-size=\"14.00\" fill=\"#000000\">node score: 1.0000</text>\n",
"</g>\n",
"<!-- 5200&#45;&gt;5211 -->\n",
"<g id=\"edge8\" class=\"edge\">\n",
"<title>5200&#45;&gt;5211</title>\n",
"<path fill=\"none\" stroke=\"#000000\" d=\"M349.9362,-252.8473C359.3329,-241.5415 370.149,-228.5281 379.8117,-216.9023\"/>\n",
"<polygon fill=\"#000000\" stroke=\"#000000\" points=\"382.5852,-219.041 386.2855,-209.1133 377.2018,-214.5666 382.5852,-219.041\"/>\n",
"</g>\n",
"<!-- 5202 -->\n",
"<g id=\"node12\" class=\"node\">\n",
"<title>5202</title>\n",
"<ellipse fill=\"#dae8fc\" stroke=\"#dae8fc\" cx=\"594.8528\" cy=\"-184.3675\" rx=\"84.7059\" ry=\"25.4118\"/>\n",
"<text text-anchor=\"start\" x=\"583.3528\" y=\"-188.1675\" font-family=\"Times,serif\" font-size=\"14.00\" fill=\"#000000\"> </text>\n",
"<text text-anchor=\"start\" x=\"587.3528\" y=\"-188.1675\" font-family=\"Times,serif\" font-weight=\"bold\" font-size=\"14.00\" fill=\"#000000\">cut</text>\n",
"<text text-anchor=\"start\" x=\"542.8528\" y=\"-174.1675\" font-family=\"Times,serif\" font-size=\"14.00\" fill=\"#000000\">node score: 1.0000</text>\n",
"</g>\n",
"<!-- 5200&#45;&gt;5202 -->\n",
"<g id=\"edge11\" class=\"edge\">\n",
"<title>5200&#45;&gt;5202</title>\n",
"<path fill=\"none\" stroke=\"#000000\" d=\"M380.289,-262.1017C423.8601,-246.3164 485.0559,-224.1458 530.9487,-207.5193\"/>\n",
"<polygon fill=\"#000000\" stroke=\"#000000\" points=\"532.2878,-210.7569 540.4976,-204.0598 529.9034,-204.1755 532.2878,-210.7569\"/>\n",
"</g>\n",
"<!-- 5207 -->\n",
"<g id=\"node7\" class=\"node\">\n",
"<title>5207</title>\n",
"<polygon fill=\"#ffe6cc\" stroke=\"#ffe6cc\" points=\"142.8528,-115.4558 26.8528,-115.4558 26.8528,-79.4558 142.8528,-79.4558 142.8528,-115.4558\"/>\n",
"<text text-anchor=\"start\" x=\"64.3528\" y=\"-101.2558\" font-family=\"Times,serif\" font-size=\"14.00\" fill=\"#000000\"> </text>\n",
"<text text-anchor=\"start\" x=\"68.3528\" y=\"-101.2558\" font-family=\"Times,serif\" font-weight=\"bold\" font-size=\"14.00\" fill=\"#000000\">potato</text>\n",
"<text text-anchor=\"start\" x=\"34.8528\" y=\"-87.2558\" font-family=\"Times,serif\" font-size=\"14.00\" fill=\"#000000\">node score:1.0000</text>\n",
"</g>\n",
"<!-- 5206&#45;&gt;5207 -->\n",
"<g id=\"edge6\" class=\"edge\">\n",
"<title>5206&#45;&gt;5207</title>\n",
"<path fill=\"none\" stroke=\"#000000\" d=\"M84.8528,-158.7612C84.8528,-148.3964 84.8528,-136.3917 84.8528,-125.7674\"/>\n",
"<polygon fill=\"#000000\" stroke=\"#000000\" points=\"88.3529,-125.7151 84.8528,-115.7151 81.3529,-125.7151 88.3529,-125.7151\"/>\n",
"</g>\n",
"<!-- 5204 -->\n",
"<g id=\"node10\" class=\"node\">\n",
"<title>5204</title>\n",
"<ellipse fill=\"#dae8fc\" stroke=\"#dae8fc\" cx=\"406.8528\" cy=\"-97.4558\" rx=\"84.7059\" ry=\"25.4118\"/>\n",
"<text text-anchor=\"start\" x=\"390.8528\" y=\"-101.2558\" font-family=\"Times,serif\" font-size=\"14.00\" fill=\"#000000\"> </text>\n",
"<text text-anchor=\"start\" x=\"394.8528\" y=\"-101.2558\" font-family=\"Times,serif\" font-weight=\"bold\" font-size=\"14.00\" fill=\"#000000\">chop</text>\n",
"<text text-anchor=\"start\" x=\"354.8528\" y=\"-87.2558\" font-family=\"Times,serif\" font-size=\"14.00\" fill=\"#000000\">node score: 1.0000</text>\n",
"</g>\n",
"<!-- 5211&#45;&gt;5204 -->\n",
"<g id=\"edge9\" class=\"edge\">\n",
"<title>5211&#45;&gt;5204</title>\n",
"<path fill=\"none\" stroke=\"#000000\" d=\"M406.8528,-158.7612C406.8528,-150.7873 406.8528,-141.8428 406.8528,-133.303\"/>\n",
"<polygon fill=\"#000000\" stroke=\"#000000\" points=\"410.3529,-133.1794 406.8528,-123.1795 403.3529,-133.1795 410.3529,-133.1794\"/>\n",
"</g>\n",
"<!-- 5205 -->\n",
"<g id=\"node11\" class=\"node\">\n",
"<title>5205</title>\n",
"<polygon fill=\"#ffe6cc\" stroke=\"#ffe6cc\" points=\"464.8528,-36 348.8528,-36 348.8528,0 464.8528,0 464.8528,-36\"/>\n",
"<text text-anchor=\"start\" x=\"388.3528\" y=\"-21.8\" font-family=\"Times,serif\" font-size=\"14.00\" fill=\"#000000\"> </text>\n",
"<text text-anchor=\"start\" x=\"392.3528\" y=\"-21.8\" font-family=\"Times,serif\" font-weight=\"bold\" font-size=\"14.00\" fill=\"#000000\">onion</text>\n",
"<text text-anchor=\"start\" x=\"356.8528\" y=\"-7.8\" font-family=\"Times,serif\" font-size=\"14.00\" fill=\"#000000\">node score:0.8889</text>\n",
"</g>\n",
"<!-- 5204&#45;&gt;5205 -->\n",
"<g id=\"edge10\" class=\"edge\">\n",
"<title>5204&#45;&gt;5205</title>\n",
"<path fill=\"none\" stroke=\"#000000\" d=\"M406.8528,-71.8782C406.8528,-63.7122 406.8528,-54.6289 406.8528,-46.2824\"/>\n",
"<polygon fill=\"#000000\" stroke=\"#000000\" points=\"410.3529,-46.2287 406.8528,-36.2288 403.3529,-46.2288 410.3529,-46.2287\"/>\n",
"</g>\n",
"<!-- 5203 -->\n",
"<g id=\"node13\" class=\"node\">\n",
"<title>5203</title>\n",
"<polygon fill=\"#ffe6cc\" stroke=\"#ffe6cc\" points=\"652.8528,-115.4558 536.8528,-115.4558 536.8528,-79.4558 652.8528,-79.4558 652.8528,-115.4558\"/>\n",
"<text text-anchor=\"start\" x=\"574.3528\" y=\"-101.2558\" font-family=\"Times,serif\" font-size=\"14.00\" fill=\"#000000\"> </text>\n",
"<text text-anchor=\"start\" x=\"578.3528\" y=\"-101.2558\" font-family=\"Times,serif\" font-weight=\"bold\" font-size=\"14.00\" fill=\"#000000\">carrot</text>\n",
"<text text-anchor=\"start\" x=\"544.8528\" y=\"-87.2558\" font-family=\"Times,serif\" font-size=\"14.00\" fill=\"#000000\">node score:1.0000</text>\n",
"</g>\n",
"<!-- 5202&#45;&gt;5203 -->\n",
"<g id=\"edge12\" class=\"edge\">\n",
"<title>5202&#45;&gt;5203</title>\n",
"<path fill=\"none\" stroke=\"#000000\" d=\"M594.8528,-158.7612C594.8528,-148.3964 594.8528,-136.3917 594.8528,-125.7674\"/>\n",
"<polygon fill=\"#000000\" stroke=\"#000000\" points=\"598.3529,-125.7151 594.8528,-115.7151 591.3529,-125.7151 598.3529,-125.7151\"/>\n",
"</g>\n",
"</g>\n",
"</svg>\n"
],
"text/plain": [
"<graphviz.dot.Digraph at 0x7f5132a4d550>"
]
},
"metadata": {},
"output_type": "display_data"
},
{
"data": {
"text/markdown": [
"**Recipe Score**: 0.9914529914529915"
],
"text/plain": [
"<IPython.core.display.Markdown object>"
]
},
"metadata": {},
"output_type": "display_data"
},
{
"data": {
"text/markdown": [
"**Ingredients**:\n",
" * onion\n",
" * carrot\n",
" * potato\n",
" * butter\n",
" * cheese\n",
"\n",
"\n",
"**Instructions**:\n",
"\n",
"| Step | Instruction |\n",
"| ----:|:----------- |\n",
"| 1 | chop and simmer onion |\n",
"| 2 | wash potato, cut carrot and mix it with butter and mix it together with the results of step 1. Then boil it. |\n",
"| 3 | heat cheese and mix it together with the results of step 2. |\n"
],
"text/plain": [
"<IPython.core.display.Markdown object>"
]
},
"metadata": {},
"output_type": "display_data"
},
{
"data": {
"image/svg+xml": [
"<?xml version=\"1.0\" encoding=\"UTF-8\" standalone=\"no\"?>\n",
"<!DOCTYPE svg PUBLIC \"-//W3C//DTD SVG 1.1//EN\"\n",
" \"http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd\">\n",
"<!-- Generated by graphviz version 2.40.1 (20161225.0304)\n",
" -->\n",
"<!-- Title: %3 Pages: 1 -->\n",
"<svg width=\"688pt\" height=\"521pt\"\n",
" viewBox=\"0.00 0.00 687.71 520.74\" xmlns=\"http://www.w3.org/2000/svg\" xmlns:xlink=\"http://www.w3.org/1999/xlink\">\n",
"<g id=\"graph0\" class=\"graph\" transform=\"scale(1 1) rotate(0) translate(4 516.7351)\">\n",
"<title>%3</title>\n",
"<polygon fill=\"#ffffff\" stroke=\"transparent\" points=\"-4,4 -4,-516.7351 683.7056,-516.7351 683.7056,4 -4,4\"/>\n",
"<!-- 6838 -->\n",
"<g id=\"node1\" class=\"node\">\n",
"<title>6838</title>\n",
"<polygon fill=\"#d5e8d4\" stroke=\"#d5e8d4\" points=\"423.8528,-512.7351 303.8528,-476.7351 423.8528,-440.7351 543.8528,-476.7351 423.8528,-512.7351\"/>\n",
"<text text-anchor=\"start\" x=\"410.3528\" y=\"-480.5351\" font-family=\"Times,serif\" font-size=\"14.00\" fill=\"#000000\"> </text>\n",
"<text text-anchor=\"start\" x=\"414.3528\" y=\"-480.5351\" font-family=\"Times,serif\" font-weight=\"bold\" font-size=\"14.00\" fill=\"#000000\">mix</text>\n",
"<text text-anchor=\"start\" x=\"371.8528\" y=\"-466.5351\" font-family=\"Times,serif\" font-size=\"14.00\" fill=\"#000000\">node score: 1.0000</text>\n",
"</g>\n",
"<!-- 6841 -->\n",
"<g id=\"node2\" class=\"node\">\n",
"<title>6841</title>\n",
"<ellipse fill=\"#dae8fc\" stroke=\"#dae8fc\" cx=\"329.8528\" cy=\"-379.2792\" rx=\"84.7059\" ry=\"25.4118\"/>\n",
"<text text-anchor=\"start\" x=\"316.8528\" y=\"-383.0792\" font-family=\"Times,serif\" font-size=\"14.00\" fill=\"#000000\"> </text>\n",
"<text text-anchor=\"start\" x=\"320.8528\" y=\"-383.0792\" font-family=\"Times,serif\" font-weight=\"bold\" font-size=\"14.00\" fill=\"#000000\">boil</text>\n",
"<text text-anchor=\"start\" x=\"277.8528\" y=\"-369.0792\" font-family=\"Times,serif\" font-size=\"14.00\" fill=\"#000000\">node score: 0.7500</text>\n",
"</g>\n",
"<!-- 6838&#45;&gt;6841 -->\n",
"<g id=\"edge1\" class=\"edge\">\n",
"<title>6838&#45;&gt;6841</title>\n",
"<path fill=\"none\" stroke=\"#000000\" d=\"M396.9162,-448.8081C385.5946,-437.0703 372.3608,-423.35 360.6545,-411.2133\"/>\n",
"<polygon fill=\"#000000\" stroke=\"#000000\" points=\"363.0553,-408.6608 353.5939,-403.8931 358.017,-413.5205 363.0553,-408.6608\"/>\n",
"</g>\n",
"<!-- 6839 -->\n",
"<g id=\"node12\" class=\"node\">\n",
"<title>6839</title>\n",
"<ellipse fill=\"#dae8fc\" stroke=\"#dae8fc\" cx=\"519.8528\" cy=\"-379.2792\" rx=\"84.7059\" ry=\"25.4118\"/>\n",
"<text text-anchor=\"start\" x=\"501.8528\" y=\"-383.0792\" font-family=\"Times,serif\" font-size=\"14.00\" fill=\"#000000\"> </text>\n",
"<text text-anchor=\"start\" x=\"505.8528\" y=\"-383.0792\" font-family=\"Times,serif\" font-weight=\"bold\" font-size=\"14.00\" fill=\"#000000\">mash</text>\n",
"<text text-anchor=\"start\" x=\"467.8528\" y=\"-369.0792\" font-family=\"Times,serif\" font-size=\"14.00\" fill=\"#000000\">node score: 1.0000</text>\n",
"</g>\n",
"<!-- 6838&#45;&gt;6839 -->\n",
"<g id=\"edge11\" class=\"edge\">\n",
"<title>6838&#45;&gt;6839</title>\n",
"<path fill=\"none\" stroke=\"#000000\" d=\"M451.3626,-448.8081C462.9251,-437.0703 476.4404,-423.35 488.3958,-411.2133\"/>\n",
"<polygon fill=\"#000000\" stroke=\"#000000\" points=\"491.0824,-413.4734 495.6066,-403.8931 486.0955,-408.561 491.0824,-413.4734\"/>\n",
"</g>\n",
"<!-- 6842 -->\n",
"<g id=\"node3\" class=\"node\">\n",
"<title>6842</title>\n",
"<polygon fill=\"#d5e8d4\" stroke=\"#d5e8d4\" points=\"325.8528,-317.8234 205.8528,-281.8234 325.8528,-245.8234 445.8528,-281.8234 325.8528,-317.8234\"/>\n",
"<text text-anchor=\"start\" x=\"312.3528\" y=\"-285.6234\" font-family=\"Times,serif\" font-size=\"14.00\" fill=\"#000000\"> </text>\n",
"<text text-anchor=\"start\" x=\"316.3528\" y=\"-285.6234\" font-family=\"Times,serif\" font-weight=\"bold\" font-size=\"14.00\" fill=\"#000000\">mix</text>\n",
"<text text-anchor=\"start\" x=\"273.8528\" y=\"-271.6234\" font-family=\"Times,serif\" font-size=\"14.00\" fill=\"#000000\">node score: 1.0000</text>\n",
"</g>\n",
"<!-- 6841&#45;&gt;6842 -->\n",
"<g id=\"edge2\" class=\"edge\">\n",
"<title>6841&#45;&gt;6842</title>\n",
"<path fill=\"none\" stroke=\"#000000\" d=\"M328.8019,-353.6738C328.4722,-345.6428 328.0978,-336.5208 327.7291,-327.5361\"/>\n",
"<polygon fill=\"#000000\" stroke=\"#000000\" points=\"331.225,-327.3638 327.3178,-317.5158 324.2309,-327.6509 331.225,-327.3638\"/>\n",
"</g>\n",
"<!-- 6845 -->\n",
"<g id=\"node4\" class=\"node\">\n",
"<title>6845</title>\n",
"<ellipse fill=\"#dae8fc\" stroke=\"#dae8fc\" cx=\"84.8528\" cy=\"-184.3675\" rx=\"84.7059\" ry=\"25.4118\"/>\n",
"<text text-anchor=\"start\" x=\"73.3528\" y=\"-188.1675\" font-family=\"Times,serif\" font-size=\"14.00\" fill=\"#000000\"> </text>\n",
"<text text-anchor=\"start\" x=\"77.3528\" y=\"-188.1675\" font-family=\"Times,serif\" font-weight=\"bold\" font-size=\"14.00\" fill=\"#000000\">cut</text>\n",
"<text text-anchor=\"start\" x=\"32.8528\" y=\"-174.1675\" font-family=\"Times,serif\" font-size=\"14.00\" fill=\"#000000\">node score: 1.0000</text>\n",
"</g>\n",
"<!-- 6842&#45;&gt;6845 -->\n",
"<g id=\"edge3\" class=\"edge\">\n",
"<title>6842&#45;&gt;6845</title>\n",
"<path fill=\"none\" stroke=\"#000000\" d=\"M274.7429,-261.1555C236.7519,-245.7927 184.8016,-224.7849 144.8414,-208.6258\"/>\n",
"<polygon fill=\"#000000\" stroke=\"#000000\" points=\"146.0581,-205.3425 135.4753,-204.8383 143.4339,-211.832 146.0581,-205.3425\"/>\n",
"</g>\n",
"<!-- 6847 -->\n",
"<g id=\"node6\" class=\"node\">\n",
"<title>6847</title>\n",
"<polygon fill=\"#ffe6cc\" stroke=\"#ffe6cc\" points=\"303.8528,-202.3675 187.8528,-202.3675 187.8528,-166.3675 303.8528,-166.3675 303.8528,-202.3675\"/>\n",
"<text text-anchor=\"start\" x=\"225.3528\" y=\"-188.1675\" font-family=\"Times,serif\" font-size=\"14.00\" fill=\"#000000\"> </text>\n",
"<text text-anchor=\"start\" x=\"229.3528\" y=\"-188.1675\" font-family=\"Times,serif\" font-weight=\"bold\" font-size=\"14.00\" fill=\"#000000\">butter</text>\n",
"<text text-anchor=\"start\" x=\"195.8528\" y=\"-174.1675\" font-family=\"Times,serif\" font-size=\"14.00\" fill=\"#000000\">node score:1.0000</text>\n",
"</g>\n",
"<!-- 6842&#45;&gt;6847 -->\n",
"<g id=\"edge5\" class=\"edge\">\n",
"<title>6842&#45;&gt;6847</title>\n",
"<path fill=\"none\" stroke=\"#000000\" d=\"M302.0668,-252.8473C291.0056,-239.3726 277.9532,-223.4722 267.2112,-210.3863\"/>\n",
"<polygon fill=\"#000000\" stroke=\"#000000\" points=\"269.91,-208.1577 260.8599,-202.6491 264.4995,-212.5991 269.91,-208.1577\"/>\n",
"</g>\n",
"<!-- 6851 -->\n",
"<g id=\"node7\" class=\"node\">\n",
"<title>6851</title>\n",
"<ellipse fill=\"#dae8fc\" stroke=\"#dae8fc\" cx=\"406.8528\" cy=\"-184.3675\" rx=\"84.7059\" ry=\"25.4118\"/>\n",
"<text text-anchor=\"start\" x=\"390.8528\" y=\"-188.1675\" font-family=\"Times,serif\" font-size=\"14.00\" fill=\"#000000\"> </text>\n",
"<text text-anchor=\"start\" x=\"394.8528\" y=\"-188.1675\" font-family=\"Times,serif\" font-weight=\"bold\" font-size=\"14.00\" fill=\"#000000\">bake</text>\n",
"<text text-anchor=\"start\" x=\"354.8528\" y=\"-174.1675\" font-family=\"Times,serif\" font-size=\"14.00\" fill=\"#000000\">node score: 1.0000</text>\n",
"</g>\n",
"<!-- 6842&#45;&gt;6851 -->\n",
"<g id=\"edge6\" class=\"edge\">\n",
"<title>6842&#45;&gt;6851</title>\n",
"<path fill=\"none\" stroke=\"#000000\" d=\"M349.9362,-252.8473C359.3329,-241.5415 370.149,-228.5281 379.8117,-216.9023\"/>\n",
"<polygon fill=\"#000000\" stroke=\"#000000\" points=\"382.5852,-219.041 386.2855,-209.1133 377.2018,-214.5666 382.5852,-219.041\"/>\n",
"</g>\n",
"<!-- 6848 -->\n",
"<g id=\"node10\" class=\"node\">\n",
"<title>6848</title>\n",
"<ellipse fill=\"#dae8fc\" stroke=\"#dae8fc\" cx=\"594.8528\" cy=\"-184.3675\" rx=\"84.7059\" ry=\"25.4118\"/>\n",
"<text text-anchor=\"start\" x=\"578.8528\" y=\"-188.1675\" font-family=\"Times,serif\" font-size=\"14.00\" fill=\"#000000\"> </text>\n",
"<text text-anchor=\"start\" x=\"582.8528\" y=\"-188.1675\" font-family=\"Times,serif\" font-weight=\"bold\" font-size=\"14.00\" fill=\"#000000\">chop</text>\n",
"<text text-anchor=\"start\" x=\"542.8528\" y=\"-174.1675\" font-family=\"Times,serif\" font-size=\"14.00\" fill=\"#000000\">node score: 1.0000</text>\n",
"</g>\n",
"<!-- 6842&#45;&gt;6848 -->\n",
"<g id=\"edge9\" class=\"edge\">\n",
"<title>6842&#45;&gt;6848</title>\n",
"<path fill=\"none\" stroke=\"#000000\" d=\"M380.289,-262.1017C423.8601,-246.3164 485.0559,-224.1458 530.9487,-207.5193\"/>\n",
"<polygon fill=\"#000000\" stroke=\"#000000\" points=\"532.2878,-210.7569 540.4976,-204.0598 529.9034,-204.1755 532.2878,-210.7569\"/>\n",
"</g>\n",
"<!-- 6846 -->\n",
"<g id=\"node5\" class=\"node\">\n",
"<title>6846</title>\n",
"<polygon fill=\"#ffe6cc\" stroke=\"#ffe6cc\" points=\"142.8528,-115.4558 26.8528,-115.4558 26.8528,-79.4558 142.8528,-79.4558 142.8528,-115.4558\"/>\n",
"<text text-anchor=\"start\" x=\"64.3528\" y=\"-101.2558\" font-family=\"Times,serif\" font-size=\"14.00\" fill=\"#000000\"> </text>\n",
"<text text-anchor=\"start\" x=\"68.3528\" y=\"-101.2558\" font-family=\"Times,serif\" font-weight=\"bold\" font-size=\"14.00\" fill=\"#000000\">carrot</text>\n",
"<text text-anchor=\"start\" x=\"34.8528\" y=\"-87.2558\" font-family=\"Times,serif\" font-size=\"14.00\" fill=\"#000000\">node score:1.0000</text>\n",
"</g>\n",
"<!-- 6845&#45;&gt;6846 -->\n",
"<g id=\"edge4\" class=\"edge\">\n",
"<title>6845&#45;&gt;6846</title>\n",
"<path fill=\"none\" stroke=\"#000000\" d=\"M84.8528,-158.7612C84.8528,-148.3964 84.8528,-136.3917 84.8528,-125.7674\"/>\n",
"<polygon fill=\"#000000\" stroke=\"#000000\" points=\"88.3529,-125.7151 84.8528,-115.7151 81.3529,-125.7151 88.3529,-125.7151\"/>\n",
"</g>\n",
"<!-- 6843 -->\n",
"<g id=\"node8\" class=\"node\">\n",
"<title>6843</title>\n",
"<ellipse fill=\"#dae8fc\" stroke=\"#dae8fc\" cx=\"406.8528\" cy=\"-97.4558\" rx=\"84.7059\" ry=\"25.4118\"/>\n",
"<text text-anchor=\"start\" x=\"389.8528\" y=\"-101.2558\" font-family=\"Times,serif\" font-size=\"14.00\" fill=\"#000000\"> </text>\n",
"<text text-anchor=\"start\" x=\"393.8528\" y=\"-101.2558\" font-family=\"Times,serif\" font-weight=\"bold\" font-size=\"14.00\" fill=\"#000000\">wash</text>\n",
"<text text-anchor=\"start\" x=\"354.8528\" y=\"-87.2558\" font-family=\"Times,serif\" font-size=\"14.00\" fill=\"#000000\">node score: 1.0000</text>\n",
"</g>\n",
"<!-- 6851&#45;&gt;6843 -->\n",
"<g id=\"edge7\" class=\"edge\">\n",
"<title>6851&#45;&gt;6843</title>\n",
"<path fill=\"none\" stroke=\"#000000\" d=\"M406.8528,-158.7612C406.8528,-150.7873 406.8528,-141.8428 406.8528,-133.303\"/>\n",
"<polygon fill=\"#000000\" stroke=\"#000000\" points=\"410.3529,-133.1794 406.8528,-123.1795 403.3529,-133.1795 410.3529,-133.1794\"/>\n",
"</g>\n",
"<!-- 6844 -->\n",
"<g id=\"node9\" class=\"node\">\n",
"<title>6844</title>\n",
"<polygon fill=\"#ffe6cc\" stroke=\"#ffe6cc\" points=\"464.8528,-36 348.8528,-36 348.8528,0 464.8528,0 464.8528,-36\"/>\n",
"<text text-anchor=\"start\" x=\"386.3528\" y=\"-21.8\" font-family=\"Times,serif\" font-size=\"14.00\" fill=\"#000000\"> </text>\n",
"<text text-anchor=\"start\" x=\"390.3528\" y=\"-21.8\" font-family=\"Times,serif\" font-weight=\"bold\" font-size=\"14.00\" fill=\"#000000\">potato</text>\n",
"<text text-anchor=\"start\" x=\"356.8528\" y=\"-7.8\" font-family=\"Times,serif\" font-size=\"14.00\" fill=\"#000000\">node score:0.8889</text>\n",
"</g>\n",
"<!-- 6843&#45;&gt;6844 -->\n",
"<g id=\"edge8\" class=\"edge\">\n",
"<title>6843&#45;&gt;6844</title>\n",
"<path fill=\"none\" stroke=\"#000000\" d=\"M406.8528,-71.8782C406.8528,-63.7122 406.8528,-54.6289 406.8528,-46.2824\"/>\n",
"<polygon fill=\"#000000\" stroke=\"#000000\" points=\"410.3529,-46.2287 406.8528,-36.2288 403.3529,-46.2288 410.3529,-46.2287\"/>\n",
"</g>\n",
"<!-- 6849 -->\n",
"<g id=\"node11\" class=\"node\">\n",
"<title>6849</title>\n",
"<polygon fill=\"#ffe6cc\" stroke=\"#ffe6cc\" points=\"652.8528,-115.4558 536.8528,-115.4558 536.8528,-79.4558 652.8528,-79.4558 652.8528,-115.4558\"/>\n",
"<text text-anchor=\"start\" x=\"576.3528\" y=\"-101.2558\" font-family=\"Times,serif\" font-size=\"14.00\" fill=\"#000000\"> </text>\n",
"<text text-anchor=\"start\" x=\"580.3528\" y=\"-101.2558\" font-family=\"Times,serif\" font-weight=\"bold\" font-size=\"14.00\" fill=\"#000000\">onion</text>\n",
"<text text-anchor=\"start\" x=\"544.8528\" y=\"-87.2558\" font-family=\"Times,serif\" font-size=\"14.00\" fill=\"#000000\">node score:1.0000</text>\n",
"</g>\n",
"<!-- 6848&#45;&gt;6849 -->\n",
"<g id=\"edge10\" class=\"edge\">\n",
"<title>6848&#45;&gt;6849</title>\n",
"<path fill=\"none\" stroke=\"#000000\" d=\"M594.8528,-158.7612C594.8528,-148.3964 594.8528,-136.3917 594.8528,-125.7674\"/>\n",
"<polygon fill=\"#000000\" stroke=\"#000000\" points=\"598.3529,-125.7151 594.8528,-115.7151 591.3529,-125.7151 598.3529,-125.7151\"/>\n",
"</g>\n",
"<!-- 6840 -->\n",
"<g id=\"node13\" class=\"node\">\n",
"<title>6840</title>\n",
"<polygon fill=\"#ffe6cc\" stroke=\"#ffe6cc\" points=\"579.8528,-299.8234 463.8528,-299.8234 463.8528,-263.8234 579.8528,-263.8234 579.8528,-299.8234\"/>\n",
"<text text-anchor=\"start\" x=\"501.3528\" y=\"-285.6234\" font-family=\"Times,serif\" font-size=\"14.00\" fill=\"#000000\"> </text>\n",
"<text text-anchor=\"start\" x=\"505.3528\" y=\"-285.6234\" font-family=\"Times,serif\" font-weight=\"bold\" font-size=\"14.00\" fill=\"#000000\">cheese</text>\n",
"<text text-anchor=\"start\" x=\"471.8528\" y=\"-271.6234\" font-family=\"Times,serif\" font-size=\"14.00\" fill=\"#000000\">node score:1.0000</text>\n",
"</g>\n",
"<!-- 6839&#45;&gt;6840 -->\n",
"<g id=\"edge12\" class=\"edge\">\n",
"<title>6839&#45;&gt;6840</title>\n",
"<path fill=\"none\" stroke=\"#000000\" d=\"M520.3783,-353.6738C520.6523,-340.324 520.9881,-323.9598 521.27,-310.2222\"/>\n",
"<polygon fill=\"#000000\" stroke=\"#000000\" points=\"524.7763,-309.9456 521.4823,-299.8758 517.7778,-309.8019 524.7763,-309.9456\"/>\n",
"</g>\n",
"</g>\n",
"</svg>\n"
],
"text/plain": [
"<graphviz.dot.Digraph at 0x7f5132a4d550>"
]
},
"metadata": {},
"output_type": "display_data"
},
{
"data": {
"text/markdown": [
"**Recipe Score**: 0.9722222222222222"
],
"text/plain": [
"<IPython.core.display.Markdown object>"
]
},
"metadata": {},
"output_type": "display_data"
},
{
"data": {
"text/markdown": [
"**Ingredients**:\n",
" * onion\n",
" * carrot\n",
" * potato\n",
" * butter\n",
" * cheese\n",
"\n",
"\n",
"**Instructions**:\n",
"\n",
"| Step | Instruction |\n",
"| ----:|:----------- |\n",
"| 1 | wash and bake potato |\n",
"| 2 | cut carrot, chop onion and mix it with butter and mix it together with the results of step 1. Then boil it. |\n",
"| 3 | mash cheese and mix it together with the results of step 2. |\n"
],
"text/plain": [
"<IPython.core.display.Markdown object>"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"p.plot_population()"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [],
"source": []
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [],
"source": []
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [],
"source": []
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [],
"source": []
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [],
"source": []
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [],
"source": []
}
],
"metadata": {
"file_extension": ".py",
"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.5"
},
"mimetype": "text/x-python",
"name": "python",
"npconvert_exporter": "python",
"pygments_lexer": "ipython3",
"version": 3
},
"nbformat": 4,
"nbformat_minor": 4
}