{ "cells": [ { "cell_type": "markdown", "metadata": {}, "source": [ "## hw2 - searching the burning building" ] }, { "cell_type": "code", "execution_count": 1, "metadata": {}, "outputs": [], "source": [ "from hw2a import *\n", "from notebook4e import *\n", "import numpy as np" ] }, { "cell_type": "code", "execution_count": 2, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "hours\n", "# is it greater than 0?\n", " OK got: 2 expected: . at 0x7ea5e3552cb0>\n", "temp(node)\n", " OK got: 70 expected: 70\n", " OK got: 500 expected: 500\n", " OK got: 60 expected: 60\n", "No temp for node: ENTRANCE\n", " OK got: None expected: None\n", "room_depth_first\n", " OK got: (['S19', 'S29', 'S39', 'S49', 'H49', 'H48', 'H47', 'H46', 'R46', 'R45', 'R44', 'H44', 'H43', 'H42', 'H41', 'H40', 'S40', 'S30', 'S20'], 125, 26) expected: (['S19', 'S29', 'S39', 'S49', 'H49', 'H48', 'H47', 'H46', 'R46', 'R45', 'R44', 'H44', 'H43', 'H42', 'H41', 'H40', 'S40', 'S30', 'S20'], 125, 26)\n", " OK got: (['S30', 'S40', 'H40', 'H41', 'H42', 'H43', 'H44', 'H45', 'H46', 'H47', 'H48', 'H49', 'S49', 'S39', 'S29', 'S19', 'EXIT'], 115, 21) expected: (['S30', 'S40', 'H40', 'H41', 'H42', 'H43', 'H44', 'H45', 'H46', 'H47', 'H48', 'H49', 'S49', 'S39', 'S29', 'S19', 'EXIT'], 115, 21)\n", " OK got: (['S19', 'S29', 'S39', 'S49', 'H49', 'H48', 'H47', 'H46', 'R46', 'R45', 'R44', 'H44', 'H43', 'H42', 'H41', 'H40', 'S40', 'S30', 'H30', 'H31', 'H32', 'H33', 'H34', 'H35', 'R35'], 150, 68) expected: (['S19', 'S29', 'S39', 'S49', 'H49', 'H48', 'H47', 'H46', 'R46', 'R45', 'R44', 'H44', 'H43', 'H42', 'H41', 'H40', 'S40', 'S30', 'H30', 'H31', 'H32', 'H33', 'H34', 'H35', 'R35'], 150, 68)\n", " OK got: (['S19', 'S29', 'S39', 'S49', 'H49', 'H48', 'H47', 'H46', 'R46', 'R45', 'R44', 'H44', 'H43', 'H42', 'H41', 'H40', 'S40', 'S30', 'S20'], 125, 26) expected: (['S19', 'S29', 'S39', 'S49', 'H49', 'H48', 'H47', 'H46', 'R46', 'R45', 'R44', 'H44', 'H43', 'H42', 'H41', 'H40', 'S40', 'S30', 'S20'], 125, 26)\n", "room_breadth_first\n", " OK got: (['S19', 'H19', 'H18', 'H17', 'H16', 'H15', 'H14', 'H13', 'H12', 'H11', 'H10', 'S10', 'S20'], 75, 77) expected: (['S19', 'H19', 'H18', 'H17', 'H16', 'H15', 'H14', 'H13', 'H12', 'H11', 'H10', 'S10', 'S20'], 75, 77)\n", " OK got: (['H20', 'H21', 'H22', 'H23', 'H24', 'H25', 'H26', 'H27', 'H28', 'H29', 'S29', 'S19', 'EXIT'], 75, 83) expected: (['H20', 'H21', 'H22', 'H23', 'H24', 'H25', 'H26', 'H27', 'H28', 'H29', 'S29', 'S19', 'EXIT'], 75, 83)\n", " OK got: (['S19', 'S29', 'S39', 'H39', 'H38', 'H37', 'H36', 'H35', 'R35'], 60, 51) expected: (['S19', 'S29', 'S39', 'H39', 'H38', 'H37', 'H36', 'H35', 'R35'], 60, 51)\n", " OK got: (['S19', 'H19', 'H18', 'H17', 'H16', 'H15', 'H14', 'H13', 'H12', 'H11', 'H10', 'S10', 'S20'], 75, 77) expected: (['S19', 'H19', 'H18', 'H17', 'H16', 'H15', 'H14', 'H13', 'H12', 'H11', 'H10', 'S10', 'S20'], 75, 77)\n", "room_best_first\n", " OK got: (['S19', 'H19', 'H18', 'H17', 'H16', 'H15', 'H14', 'H13', 'H12', 'H11', 'H10', 'S10', 'S20'], 75, 23) expected: (['S19', 'H19', 'H18', 'H17', 'H16', 'H15', 'H14', 'H13', 'H12', 'H11', 'H10', 'S10', 'S20'], 75, 23)\n", " OK got: (['S10', 'H10', 'H11', 'H12', 'H13', 'H14', 'H15', 'H16', 'H17', 'H18', 'H19', 'S19', 'EXIT'], 75, 23) expected: (['S10', 'H10', 'H11', 'H12', 'H13', 'H14', 'H15', 'H16', 'H17', 'H18', 'H19', 'S19', 'EXIT'], 75, 23)\n", " OK got: (['S19', 'H19', 'H18', 'H17', 'H16', 'H15', 'H14', 'H13', 'H12', 'H11', 'H10', 'S10', 'S20', 'S30', 'H30', 'H31', 'H32', 'H33', 'H34', 'H35', 'R35'], 120, 85) expected: (['S19', 'H19', 'H18', 'H17', 'H16', 'H15', 'H14', 'H13', 'H12', 'H11', 'H10', 'S10', 'S20', 'S30', 'H30', 'H31', 'H32', 'H33', 'H34', 'H35', 'R35'], 120, 85)\n", " OK got: (['S19', 'H19', 'H18', 'H17', 'H16', 'H15', 'H14', 'H13', 'H12', 'H11', 'H10', 'S10', 'S20'], 75, 23) expected: (['S19', 'H19', 'H18', 'H17', 'H16', 'H15', 'H14', 'H13', 'H12', 'H11', 'H10', 'S10', 'S20'], 75, 23)\n", "room_worst_first\n", " OK got: (['S19', 'S29', 'S39', 'H39', 'H38', 'H37', 'H36', 'R36', 'R35', 'R34', 'H34', 'H33', 'H32', 'H31', 'H30', 'S30', 'S20'], 105, 36) expected: (['S19', 'S29', 'S39', 'H39', 'H38', 'H37', 'H36', 'R36', 'R35', 'R34', 'H34', 'H33', 'H32', 'H31', 'H30', 'S30', 'S20'], 105, 36)\n", " OK got: (['S30', 'H30', 'H31', 'H32', 'H33', 'H34', 'R34', 'R35', 'R36', 'H36', 'H37', 'H38', 'H39', 'S39', 'S29', 'S19', 'EXIT'], 105, 85) expected: (['S30', 'H30', 'H31', 'H32', 'H33', 'H34', 'R34', 'R35', 'R36', 'H36', 'H37', 'H38', 'H39', 'S39', 'S29', 'S19', 'EXIT'], 105, 85)\n", " OK got: (['S19', 'S29', 'S39', 'H39', 'H38', 'H37', 'H36', 'R36', 'R35'], 60, 10) expected: (['S19', 'S29', 'S39', 'H39', 'H38', 'H37', 'H36', 'R36', 'R35'], 60, 10)\n", " OK got: (['S19', 'S29', 'S39', 'H39', 'H38', 'H37', 'H36', 'R36', 'R35', 'R34', 'H34', 'H33', 'H32', 'H31', 'H30', 'S30', 'S20'], 105, 36) expected: (['S19', 'S29', 'S39', 'H39', 'H38', 'H37', 'H36', 'R36', 'R35', 'R34', 'H34', 'H33', 'H32', 'H31', 'H30', 'S30', 'S20'], 105, 36)\n", "room_astar\n", " OK got: (['S19', 'H19', 'H18', 'H17', 'H16', 'H15', 'H14', 'H13', 'H12', 'H11', 'H10', 'S10', 'S20'], 75, 18) expected: (['S19', 'H19', 'H18', 'H17', 'H16', 'H15', 'H14', 'H13', 'H12', 'H11', 'H10', 'S10', 'S20'], 75, 18)\n", " OK got: (['H20', 'H21', 'H22', 'H23', 'H24', 'H25', 'H26', 'H27', 'H28', 'H29', 'S29', 'S19', 'EXIT'], 75, 14) expected: (['H20', 'H21', 'H22', 'H23', 'H24', 'H25', 'H26', 'H27', 'H28', 'H29', 'S29', 'S19', 'EXIT'], 75, 14)\n", "\n", "debug examples\n", "\n", " OK got: (['S19', 'S29', 'S39', 'S49', 'H49', 'H48', 'H47', 'H46', 'R46', 'R45', 'R44', 'H44', 'H43', 'H42', 'H41', 'H40', 'S40', 'S30', 'S20', 'S10', 'H10', 'H11', 'H12', 'H13', 'H14', 'H15', 'R15'], 170, 34, ['EXIT', 'S19', 'S29', 'S39', 'S49', 'H49', 'R49', 'H48', 'R48', 'H47', 'R47', 'H46', 'R46', 'R45', 'R44', 'H44', 'H43', 'R43', 'R42', 'H42', 'H41', 'R41', 'H40', 'S40', 'S30', 'S20', 'S10', 'H10', 'H11', 'H12', 'H13', 'H14', 'H15', 'R15']) expected: (['S19', 'S29', 'S39', 'S49', 'H49', 'H48', 'H47', 'H46', 'R46', 'R45', 'R44', 'H44', 'H43', 'H42', 'H41', 'H40', 'S40', 'S30', 'S20', 'S10', 'H10', 'H11', 'H12', 'H13', 'H14', 'H15', 'R15'], 170, 34, ['EXIT', 'S19', 'S29', 'S39', 'S49', 'H49', 'R49', 'H48', 'R48', 'H47', 'R47', 'H46', 'R46', 'R45', 'R44', 'H44', 'H43', 'R43', 'R42', 'H42', 'H41', 'R41', 'H40', 'S40', 'S30', 'S20', 'S10', 'H10', 'H11', 'H12', 'H13', 'H14', 'H15', 'R15'])\n", " OK got: (['S19', 'H19', 'H18', 'H17', 'H16', 'H15', 'R15'], 40, 31, ['EXIT', 'S19', 'H19', 'S29', 'H18', 'R19', 'H29', 'S39', 'H17', 'R18', 'H28', 'R29', 'H39', 'S49', 'H16', 'R17', 'H27', 'R28', 'H38', 'R39', 'H49', 'H15', 'R16', 'H26', 'R27', 'H37', 'R38', 'H48', 'R49', 'H14', 'R15']) expected: (['S19', 'H19', 'H18', 'H17', 'H16', 'H15', 'R15'], 40, 31, ['EXIT', 'S19', 'H19', 'S29', 'H18', 'R19', 'H29', 'S39', 'H17', 'R18', 'H28', 'R29', 'H39', 'S49', 'H16', 'R17', 'H27', 'R28', 'H38', 'R39', 'H49', 'H15', 'R16', 'H26', 'R27', 'H37', 'R38', 'H48', 'R49', 'H14', 'R15'])\n", " OK got: (['S19', 'H19', 'H18', 'H17', 'H16', 'H15', 'R15'], 40, 17, ['EXIT', 'S19', 'H19', 'H18', 'H17', 'H16', 'H15', 'H14', 'H13', 'H12', 'H11', 'H10', 'R11', 'R12', 'R13', 'R14', 'R15']) expected: (['S19', 'H19', 'H18', 'H17', 'H16', 'H15', 'R15'], 40, 17, ['EXIT', 'S19', 'H19', 'H18', 'H17', 'H16', 'H15', 'H14', 'H13', 'H12', 'H11', 'H10', 'R11', 'R12', 'R13', 'R14', 'R15'])\n", " OK got: (['S19', 'H19', 'H18', 'H17', 'H16', 'H15', 'R15'], 40, 67, ['EXIT', 'S19', 'S29', 'S39', 'H39', 'H38', 'H37', 'H36', 'R36', 'R35', 'R34', 'H34', 'H35', 'H33', 'H32', 'H31', 'H30', 'R31', 'R32', 'R33', 'R37', 'R38', 'R39', 'S30', 'H29', 'H28', 'H27', 'H26', 'H25', 'R25', 'H24', 'H23', 'H22', 'H21', 'H20', 'S20', 'S40', 'H40', 'H41', 'H42', 'H43', 'H44', 'R44', 'R45', 'R46', 'H45', 'H46', 'H47', 'H48', 'H49', 'R49', 'S49', 'H19', 'H18', 'H17', 'H16', 'H15', 'H14', 'H13', 'H12', 'H11', 'H10', 'R11', 'R12', 'R13', 'R14', 'R15']) expected: (['S19', 'H19', 'H18', 'H17', 'H16', 'H15', 'R15'], 40, 67, ['EXIT', 'S19', 'S29', 'S39', 'H39', 'H38', 'H37', 'H36', 'R36', 'R35', 'R34', 'H34', 'H35', 'H33', 'H32', 'H31', 'H30', 'R31', 'R32', 'R33', 'R37', 'R38', 'R39', 'S30', 'H29', 'H28', 'H27', 'H26', 'H25', 'R25', 'H24', 'H23', 'H22', 'H21', 'H20', 'S20', 'S40', 'H40', 'H41', 'H42', 'H43', 'H44', 'R44', 'R45', 'R46', 'H45', 'H46', 'H47', 'H48', 'H49', 'R49', 'S49', 'H19', 'H18', 'H17', 'H16', 'H15', 'H14', 'H13', 'H12', 'H11', 'H10', 'R11', 'R12', 'R13', 'R14', 'R15'])\n", " OK got: (['S19', 'H19', 'H18', 'H17', 'H16', 'H15', 'R15'], 40, 8, ['EXIT', 'S19', 'H19', 'H18', 'H17', 'H16', 'H15', 'R15']) expected: (['S19', 'H19', 'H18', 'H17', 'H16', 'H15', 'R15'], 40, 8, ['EXIT', 'S19', 'H19', 'H18', 'H17', 'H16', 'H15', 'R15'])\n", " OK got: (['S19', 'S29', 'S39', 'S49', 'H49', 'H48', 'H47', 'H46', 'R46', 'R45', 'R44', 'H44', 'H43', 'H42', 'H41', 'H40', 'S40', 'S30', 'H30', 'H31', 'H32', 'H33', 'H34', 'H35', 'R35'], 150, 68, ['EXIT', 'S19', 'S29', 'S39', 'S49', 'H49', 'R49', 'H48', 'R48', 'H47', 'R47', 'H46', 'R46', 'R45', 'R44', 'H44', 'H43', 'R43', 'R42', 'H42', 'H41', 'R41', 'H40', 'S40', 'S30', 'S20', 'S10', 'H10', 'H11', 'H12', 'H13', 'H14', 'H15', 'R15', 'R16', 'H16', 'H17', 'H18', 'R18', 'R17', 'R14', 'R13', 'R12', 'R11', 'H20', 'H21', 'H22', 'H23', 'H24', 'H25', 'R25', 'R26', 'H26', 'H27', 'H28', 'R28', 'R27', 'R24', 'R23', 'R22', 'R21', 'H30', 'H31', 'H32', 'H33', 'H34', 'H35', 'R35']) expected: (['S19', 'S29', 'S39', 'S49', 'H49', 'H48', 'H47', 'H46', 'R46', 'R45', 'R44', 'H44', 'H43', 'H42', 'H41', 'H40', 'S40', 'S30', 'H30', 'H31', 'H32', 'H33', 'H34', 'H35', 'R35'], 150, 68, ['EXIT', 'S19', 'S29', 'S39', 'S49', 'H49', 'R49', 'H48', 'R48', 'H47', 'R47', 'H46', 'R46', 'R45', 'R44', 'H44', 'H43', 'R43', 'R42', 'H42', 'H41', 'R41', 'H40', 'S40', 'S30', 'S20', 'S10', 'H10', 'H11', 'H12', 'H13', 'H14', 'H15', 'R15', 'R16', 'H16', 'H17', 'H18', 'R18', 'R17', 'R14', 'R13', 'R12', 'R11', 'H20', 'H21', 'H22', 'H23', 'H24', 'H25', 'R25', 'R26', 'H26', 'H27', 'H28', 'R28', 'R27', 'R24', 'R23', 'R22', 'R21', 'H30', 'H31', 'H32', 'H33', 'H34', 'H35', 'R35'])\n", " OK got: (['S19', 'S29', 'S39', 'H39', 'H38', 'H37', 'H36', 'H35', 'R35'], 60, 51, ['EXIT', 'S19', 'H19', 'S29', 'H18', 'R19', 'H29', 'S39', 'H17', 'R18', 'H28', 'R29', 'H39', 'S49', 'H16', 'R17', 'H27', 'R28', 'H38', 'R39', 'H49', 'H15', 'R16', 'H26', 'R27', 'H37', 'R38', 'H48', 'R49', 'H14', 'R15', 'H25', 'R26', 'H36', 'R37', 'H47', 'R48', 'H13', 'R14', 'H24', 'R25', 'H35', 'R36', 'H46', 'R47', 'H12', 'R13', 'H23', 'R24', 'H34', 'R35']) expected: (['S19', 'S29', 'S39', 'H39', 'H38', 'H37', 'H36', 'H35', 'R35'], 60, 51, ['EXIT', 'S19', 'H19', 'S29', 'H18', 'R19', 'H29', 'S39', 'H17', 'R18', 'H28', 'R29', 'H39', 'S49', 'H16', 'R17', 'H27', 'R28', 'H38', 'R39', 'H49', 'H15', 'R16', 'H26', 'R27', 'H37', 'R38', 'H48', 'R49', 'H14', 'R15', 'H25', 'R26', 'H36', 'R37', 'H47', 'R48', 'H13', 'R14', 'H24', 'R25', 'H35', 'R36', 'H46', 'R47', 'H12', 'R13', 'H23', 'R24', 'H34', 'R35'])\n", " OK got: (['S19', 'H19', 'H18', 'H17', 'H16', 'H15', 'H14', 'H13', 'H12', 'H11', 'H10', 'S10', 'S20', 'S30', 'H30', 'H31', 'H32', 'H33', 'H34', 'H35', 'R35'], 120, 85, ['EXIT', 'S19', 'H19', 'H18', 'H17', 'H16', 'H15', 'H14', 'H13', 'H12', 'H11', 'H10', 'R11', 'R12', 'R13', 'R14', 'R15', 'R16', 'R17', 'R18', 'R19', 'S10', 'S20', 'H20', 'H21', 'R21', 'H22', 'R22', 'R23', 'H23', 'H24', 'R24', 'H25', 'H26', 'R26', 'H27', 'R27', 'H28', 'R28', 'H29', 'R29', 'S29', 'R25', 'S30', 'S40', 'H40', 'H41', 'R41', 'H42', 'R42', 'R43', 'H43', 'H44', 'H45', 'H46', 'H47', 'R47', 'H48', 'R48', 'H49', 'R49', 'S49', 'H30', 'H31', 'H32', 'H33', 'R31', 'R32', 'R33', 'R44', 'R46', 'S39', 'H39', 'H38', 'H37', 'R37', 'R38', 'R39', 'H34', 'H35', 'H36', 'R45', 'R34', 'R36', 'R35']) expected: (['S19', 'H19', 'H18', 'H17', 'H16', 'H15', 'H14', 'H13', 'H12', 'H11', 'H10', 'S10', 'S20', 'S30', 'H30', 'H31', 'H32', 'H33', 'H34', 'H35', 'R35'], 120, 85, ['EXIT', 'S19', 'H19', 'H18', 'H17', 'H16', 'H15', 'H14', 'H13', 'H12', 'H11', 'H10', 'R11', 'R12', 'R13', 'R14', 'R15', 'R16', 'R17', 'R18', 'R19', 'S10', 'S20', 'H20', 'H21', 'R21', 'H22', 'R22', 'R23', 'H23', 'H24', 'R24', 'H25', 'H26', 'R26', 'H27', 'R27', 'H28', 'R28', 'H29', 'R29', 'S29', 'R25', 'S30', 'S40', 'H40', 'H41', 'R41', 'H42', 'R42', 'R43', 'H43', 'H44', 'H45', 'H46', 'H47', 'R47', 'H48', 'R48', 'H49', 'R49', 'S49', 'H30', 'H31', 'H32', 'H33', 'R31', 'R32', 'R33', 'R44', 'R46', 'S39', 'H39', 'H38', 'H37', 'R37', 'R38', 'R39', 'H34', 'H35', 'H36', 'R45', 'R34', 'R36', 'R35'])\n", " OK got: (['S19', 'S29', 'S39', 'H39', 'H38', 'H37', 'H36', 'R36', 'R35'], 60, 10, ['EXIT', 'S19', 'S29', 'S39', 'H39', 'H38', 'H37', 'H36', 'R36', 'R35']) expected: (['S19', 'S29', 'S39', 'H39', 'H38', 'H37', 'H36', 'R36', 'R35'], 60, 10, ['EXIT', 'S19', 'S29', 'S39', 'H39', 'H38', 'H37', 'H36', 'R36', 'R35'])\n" ] } ], "source": [ "main()" ] }, { "cell_type": "code", "execution_count": 3, "metadata": {}, "outputs": [], "source": [ "np.int = int # Turnaround to resolve deprecated conflict\n", "# import networkx as nx\n" ] }, { "cell_type": "code", "execution_count": 4, "metadata": {}, "outputs": [], "source": [ "%matplotlib inline\n", "import networkx as nx\n", "import matplotlib.pyplot as plt\n", "from matplotlib import lines\n", "\n", "from ipywidgets import interact\n", "import ipywidgets as widgets\n", "from IPython.display import display\n", "import time" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Data for burning building" ] }, { "cell_type": "code", "execution_count": 5, "metadata": {}, "outputs": [], "source": [ "\n", "xnode_colors = {node: 'white' for node in room_map.locations.keys()}\n", "xnode_positions = room_map.locations\n", "xnode_label_pos = { k:[v[0],v[1]-10] for k,v in room_map.locations.items() }\n", "xedge_weights = {(k, k2) : v2 for k, v in room_map.graph_dict.items() for k2, v2 in v.items()}\n", "\n", "room_graph_data = { 'graph_dict' : room_map.graph_dict,\n", " 'node_colors': xnode_colors,\n", " 'node_positions': xnode_positions,\n", " 'node_label_positions': xnode_label_pos,\n", " 'edge_weights': xedge_weights\n", "}\n" ] }, { "cell_type": "code", "execution_count": 6, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "{'H10': (40, 50), 'H11': (50, 50), 'H12': (60, 50), 'H13': (70, 50), 'H14': (80, 50), 'H15': (90, 50), 'H16': (100, 50), 'H17': (110, 50), 'H18': (120, 50), 'H19': (130, 50), 'S10': (40, 50), 'R11': (50, 60), 'R12': (60, 60), 'R13': (70, 60), 'R14': (80, 60), 'R15': (90, 60), 'R16': (100, 60), 'R17': (110, 60), 'R18': (120, 60), 'R19': (130, 60), 'S19': (140, 50), 'EXIT': (165, 40), 'H20': (40, 75), 'H21': (50, 75), 'H22': (60, 75), 'H23': (70, 75), 'H24': (80, 75), 'H25': (90, 75), 'H26': (100, 75), 'H27': (110, 75), 'H28': (120, 75), 'H29': (130, 75), 'S20': (40, 75), 'R21': (50, 85), 'R22': (60, 85), 'R23': (70, 85), 'R24': (80, 85), 'R25': (90, 85), 'R26': (100, 85), 'R27': (110, 85), 'R28': (120, 85), 'R29': (130, 85), 'S29': (140, 75), 'H30': (40, 100), 'H31': (50, 100), 'H32': (60, 100), 'H33': (70, 100), 'H34': (80, 100), 'H35': (90, 100), 'H36': (100, 100), 'H37': (110, 100), 'H38': (120, 100), 'H39': (130, 100), 'S30': (40, 100), 'R31': (50, 110), 'R32': (60, 110), 'R33': (70, 110), 'R34': (80, 110), 'R35': (90, 110), 'R36': (100, 110), 'R37': (110, 110), 'R38': (120, 110), 'R39': (130, 110), 'S39': (140, 100), 'H40': (40, 125), 'H41': (50, 125), 'H42': (60, 125), 'H43': (70, 125), 'H44': (80, 125), 'H45': (90, 125), 'H46': (100, 125), 'H47': (110, 125), 'H48': (120, 125), 'H49': (130, 125), 'S40': (40, 125), 'R41': (50, 135), 'R42': (60, 135), 'R43': (70, 135), 'R44': (80, 135), 'R45': (90, 135), 'R46': (100, 135), 'R47': (110, 135), 'R48': (120, 135), 'R49': (130, 135), 'S49': (140, 125)}\n" ] } ], "source": [ "room_locations = room_map.locations\n", "print(room_locations)" ] }, { "cell_type": "code", "execution_count": 7, "metadata": { "scrolled": true }, "outputs": [ { "ename": "ValueError", "evalue": "too many values to unpack (expected 3)", "output_type": "error", "traceback": [ "\u001b[0;31m---------------------------------------------------------------------------\u001b[0m", "\u001b[0;31mValueError\u001b[0m Traceback (most recent call last)", "\u001b[0;32m/tmp/ipykernel_1326870/4033054162.py\u001b[0m in \u001b[0;36m\u001b[0;34m\u001b[0m\n\u001b[0;32m----> 1\u001b[0;31m \u001b[0mshow_map\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mroom_graph_data\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m", "\u001b[0;32m/home/httpd/html/zoo/classes/cs370/aima/notebook4e.py\u001b[0m in \u001b[0;36mshow_map\u001b[0;34m(graph_data, node_colors)\u001b[0m\n\u001b[1;32m 964\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 965\u001b[0m \u001b[0;31m# add edge lables to the graph\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m--> 966\u001b[0;31m \u001b[0mnx\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mdraw_networkx_edge_labels\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mG\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mpos\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0mnode_positions\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0medge_labels\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0medge_weights\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mfont_size\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0;36m14\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m 967\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 968\u001b[0m \u001b[0;31m# add a legend\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n", "\u001b[0;32m~/.local/lib/python3.10/site-packages/networkx/drawing/nx_pylab.py\u001b[0m in \u001b[0;36mdraw_networkx_edge_labels\u001b[0;34m(G, pos, edge_labels, label_pos, font_size, font_color, font_family, font_weight, alpha, bbox, horizontalalignment, verticalalignment, ax, rotate, clip_on, node_size, nodelist, connectionstyle, hide_ticks)\u001b[0m\n\u001b[1;32m 1555\u001b[0m )\n\u001b[1;32m 1556\u001b[0m \u001b[0;32melse\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m-> 1557\u001b[0;31m text_items[edge] = CurvedArrowText(\n\u001b[0m\u001b[1;32m 1558\u001b[0m \u001b[0marrow\u001b[0m\u001b[0;34m,\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 1559\u001b[0m \u001b[0mlabel\u001b[0m\u001b[0;34m,\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n", "\u001b[0;32m~/.local/lib/python3.10/site-packages/networkx/drawing/nx_pylab.py\u001b[0m in \u001b[0;36m__init__\u001b[0;34m(self, arrow, label_pos, labels_horizontal, ax, *args, **kwargs)\u001b[0m\n\u001b[1;32m 1370\u001b[0m \u001b[0max\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mplt\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mgca\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 1371\u001b[0m \u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0max\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0max\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m-> 1372\u001b[0;31m \u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mx\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0my\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mangle\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0m_update_text_pos_angle\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0marrow\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m 1373\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 1374\u001b[0m \u001b[0;31m# Create text object\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n", "\u001b[0;32m~/.local/lib/python3.10/site-packages/networkx/drawing/nx_pylab.py\u001b[0m in \u001b[0;36m_update_text_pos_angle\u001b[0;34m(self, arrow)\u001b[0m\n\u001b[1;32m 1408\u001b[0m \u001b[0;31m# Fractional label position\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 1409\u001b[0m \u001b[0mpath_disp\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0m_get_arrow_path_disp\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0marrow\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m-> 1410\u001b[0;31m \u001b[0;34m(\u001b[0m\u001b[0mx1\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0my1\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0;34m(\u001b[0m\u001b[0mcx\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mcy\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0;34m(\u001b[0m\u001b[0mx2\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0my2\u001b[0m\u001b[0;34m)\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mpath_disp\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mvertices\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m 1411\u001b[0m \u001b[0;31m# Text position at a proportion t along the line in display coords\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 1412\u001b[0m \u001b[0;31m# default is 0.5 so text appears at the halfway point\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n", "\u001b[0;31mValueError\u001b[0m: too many values to unpack (expected 3)" ] }, { "data": { "image/png": "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FhbqL3/5i3x9fSVJL730kuLj45WVlaU6dep4omRbuFlfp0yZomHDhumpp56SJLVs2VIvvfSSJk2apF/84hdyOByeKNljTFxjrVq1SgcPHlRKSopq1aolSfriiy9Uq1YtJSYm6q677nLPzgCAF2LEo41c/kD73XffKS8v77rLFBUVacyYMXr55ZfLXExcdvkD3MCBA0t/1rRpU0VGRmr16tUuq70q2Lx5syZNmqTJkyfLx4c/HRMq09Ps7OzSD3S4vor2df/+/UpISFDfvn3dUJ19laev33//vebNm6e///3vbq7Onsp7rN53332qV6+eYmJiNHv2bDdWaE8/1tdvv/1WLVu2VEJCglq2bKnmzZvr0UcfveVuB66oip5bP/nkE4WFhen+++93Q3X29GM9jYqKkr+/vz7++GMVFxcrJydHX3zxhXr06EHoeBM/1tf8/HwFBgaW+VlQUJCOHTumw4cPu6tMr2HiGis/P18Oh6NMXwMDA+Xj46OVK1e6rHYAsAPSExvx8/PT559/rqlTpyosLEw9e/bUCy+8oHXr1pUu8+qrryo8PFxPPvnkdbdx4sQJ+fr6XvNhrX79+jpx4oRL6/dmCQkJpR86Lr+uvOXs4sWLGjNmjP7xj3+ocePGHqzUPlzR03nz5mnp0qWaMGGCq8r2eib72qtXLwUGBuq2225T79699ec//9nV5XstE33NyMjQE088oSlTpig0NNRdpXstEz0NCQnRm2++qZkzZ2r+/Pnq37+/Ro8eralTp7prN7yOib4eOHBAhw8f1owZM/T5559rypQp2r179y19S6Dp96ySkhJ9+umneuSRRxQQEODK0r2WiZ42b95cixcv1quvvqqAgADVrFlT27Zt07x589y1G17HRF8HDRqkOXPmaNGiRSopKdHevXv11ltvSfrhvexWY+IaKzo6WiEhIZo4caIuXryoixcv6oUXXlBxcfEt2VMAuBK3WtvM/fffryFDhig5OVlr1qxRQkKC3nrrLb322muKiYnR559/rtTU1Apv17KsW+62iivFxsbqww8/LPOz7du3695775UkPf3004qJiWHUQgWY7umqVas0duxY/f3vf9cdd9xhvF67MNnXr776Sjk5OdqyZYsmTpyoSZMm6aWXXnJJ3d7ORF/HjRunJ598UtHR0S6t1S5M9LROnTr61a9+VfrfUVFRysrK0uuvv65x48a5pnAvZ6KvJSUlys/P15QpU9SmTRtJP9x62bZtW23YsEF33nmn63bAS5l+z1qwYIGOHj2qn/3sZ8ZrtQsTPT1x4oTGjx+vRx55RGPGjFFOTo5eeeUVjRo1SomJibfkHSgm+vrEE08oLS1NI0aMUGFhoWrUqKFnnnlGf/jDH0pvab/VOHuNVbduXc2aNUtPPvmk3n//ffn4+GjMmDHq1q3bLdtTAChlwfbGjx9v+fv7Wy+99JLlcDgsX1/f0pcky8fHx2rcuLFlWZa1dOlSS5J18uTJMtto37699corr3iifI979NFHrSFDhlzz8w0bNliSrIMHD1oRERGWj49PaV99fHwsSZavr6/129/+9pp1f/GLX1h9+/Z1Q/XeyXRPk5OTrdDQUOvtt9920x54J1ccq5dNmTLFCggIsAoLC125C17JVF8v//f1lvnggw/cvVse5cpj9fPPP7cCAwNdWb7XMtXXV155xfLz8yuzjZKSEsvPz8+aOXOmW/bFm7jieB0+fLjVq1cvd5TvlUz19OWXX7a6dOlSZhtHjx61JFnJyclu2RdvYvpYLSoqso4dO2bl5+db8+fPtyRZmZmZ7todr1eRa6wrnTp1yjp79qxlWZZVv3596/XXX3dz5QDgXRjxWAW0b99eRUVF+vnPf37NhBuDBg3SmDFj9MQTT0iSunfvLn9/fy1evLh02WPHjmnXrl3q1auX22u3i0WLFqmgoKD0vzds2KDHH39cSUlJuu222zxYmX2Vt6crVqzQkCFD9Ic//EHPPvusByq1l8oeqyUlJSoqKlJxcbH8/HhruFp5+rpt27Yy63z77bd67bXXtH79eh7RcB2VPVZTU1PVsGFDd5RoS+Xpa0xMjIqKipSWlqZWrVpJ+uH266KiIkVERHikbm9XkeM1PT1d33//vT7++GN3l2kr5elpbm7uNaPFLv/3rfpYgB9TkWPV19e39P1p+vTp6tmzJzOwX6Ei11hXuvxIq8TERJ08eVLDhw93S70A4K24urSR06dP68EHH9Tjjz+uTp06KTQ0VCkpKXr99dfVv39/NWvW7Jp1/P391aBBA7Vt21aSVLNmTY0fP14TJ05UvXr1FB4erueff16dOnVitrWbuHwr2mVZWVmSpHbt2pV5XubOnTtVUFCgrKwsXbhwofSWjC5durirVNsoT0+TkpI0ZMgQPfXUU3r44YdLn0Pq6+urunXrurdgmyhPX6dMmaLAwEB17NhR1apVU0pKil566SU98MADt+yzyH5MefraoUOHMsukpKTIx8fnmp/jB+Xp6RdffCF/f3917dpVPj4+mjt3rt577z1NmjTJ7fXaRXn6etddd6lbt256/PHH9c4770iSnn32Wd15552Kiopya712Ud7PAZL06aefqnr16ho1apTb6rOj8vR0yJAhevvtt/Xf//3fGjt2rHJycvTb3/5WTZs2Vffu3d1esx2Up69ZWVmaNWuW4uLilJ+fr88++0yzZs3S8uXL3V6vNzBxjSVJn332mdq1a6d69eppzZo1euaZZ/Tcc8+VWQYAbkUEjzYSEhKi6Ohovfvuu9q/f7/y8/PVuHFjjR07Vi+//HK5t/P222/Lz89Po0eP1qVLl9S/f39NnjyZ548YcM8995SZDbBr166SfniGJiru888/V25urt588029+eabpT+PiIjQoUOHPFeYzfn5+ekvf/mL9u3bJ8uyFBERoV/84hd67rnnPF0acI0//elPOnz4sHx9fdWmTRt9+umnt+zzHU3x8fHRvHnz9PTTTys2NlZBQUEaMGCA/va3v92Sz8wzybIsffLJJ3r44YcVHBzs6XJsLz4+XtOmTdPrr7+uN954Q0FBQYqOjlZCQoKqV6/u6fJsbfLkyZo4caIsy1LPnj2VlJR0yz5D29Q11p49e/TSSy/pzJkzat68uX73u9/x2QoAJDksEhEAAAAAAAAAhvG1NgAAAAAAAADjCB4BAAAAAAAAGEfwCAAAAAAAAMA4gkcAAAAAAAAAxhE8AgAAAAAAADCO4BEAAAAAAACAcQSPVZzD4fB0CQAAAABQZXCNBQDlR/AIAAAAAAAAwDiCRwAAAAAAAADGETwCAAAAAAAAMI7gEQAAAAAAAIBxBI8AAAAAAAAAjCN4BAAAAAAAAGAcwSMAAAAAAAAA4wgeAQAAAAAAABhH8AgAAAAAAADAOIJHAAAAAAAAAMYRPAIAAAAAAAAwjuARAAAAAAAAgHEEjwAAAAAAAACMI3gEAAAAAAAAYBzBIwAAAAAAAADjCB4BAAAAAAAAGEfwCAAAAAAAAMA4gkcAAAAAAAAAxhE8AgAAAAAAADDOz9MFAHZx7tw5HT9+XJcuXVKNGjXUvHlzVatWzdNl2d7x48d16tQpWZal8PBwNW3aVA6Hw9Nl2VpRUZEOHTqkc+fOKTAwUI0aNVLt2rU9XZbtZWdn69ixY7p48aJq1KihiIgIBQYGeros28vIyNDJkydVXFys2rVrKyIignOAk4qLi0vPAdWqVVPDhg1Vp04dT5dlexcuXNDRo0d14cIFhYaGqlmzZgoODvZ0WbaXmZmpzMxMFRUVqVatWoqIiJCPD2MjnFFSUqJDhw7p7Nmz8vf3V4MGDVSvXj1PlwUAuEU5LMuyPF0EXMfhcIh/4sqzLEvr1q3T8ePHSz8MBwcH6/z589q3b58KCgoUFRWliIgIT5dqK3l5eUpMTNSlS5cUERGh+vXry+Fw6NSpUzp48KD8/f0VHx+v6tWre7pUW0lPT9eaNWvk5+enNm3aKCwsTHl5eTpy5IiysrJUr1499e7dm1CnAizL0saNG3X48GHVrFlTzZs3V/Xq1ZWdna39+/crLy9PnTt3VuvWrT1dqq0UFBQoMTFRFy9eVJMmTdSwYUP5+voqKytL+/fvl6+vr+Lj41WjRg1Pl2orJ0+eVHJysnx9fXXbbbepVq1aKigo0NGjR3Xq1CnVqlVLffv2JdSpoC1btmj//v0KDQ1VixYtFBISopycHKWlpSk3N1ft27dXZGSkp8u0laKiIi1btkzZ2dlq1KiRGjVqJD8/P505c0b79u2Tw+FQXFycatWq5elSbeXMmTNavny5JJWeA4qKinT8+HGdOHFCNWrUUFxcnPz8GHviLK6xAKD8CB6rON4UKy89PV2JiYnq16+fGjdufN1lLocSe/fu1ahRo/ggVw6rV6/WqVOnNHDgQAUFBV13mYKCAi1evFjBwcHq16+fmyu0n5KSEs2ePVtNmjRRz549bxgsZmZmasmSJYqJiVHz5s3dW6QNZWVlaf78+YqNjb1pv1JTU7V9+3aNGjWKUdDlkJKSoiNHjmjgwIEKCQm57jKFhYVKTEyUw+HQwIED3Vyh/ViWpW+++UZ16tRR7969bxgsnj59WosWLVK3bt3Utm1bN1dpP+fPn9ecOXPUq1cv3XbbbTdcbseOHdq4caMeeOABRkCWw9atW7V7924NGjRINWvWvO4yxcXFSkpK0qVLlzR06FA3V2hP3333nUJCQtS3b1/5+vped5nz589r4cKFioyMVMeOHd1cYdXCNRYAlB/BYxXHm2LlHD16VCkpKbr33nvLtXxubq6++uorPfLIIzf8sAcpKSlJtWvXVqdOncq1/J49e3Tw4EHdfffdLq7MvizL0uTJkzVy5MgbXsBdbcGCBWrduvVNL6RvdSdPnlRiYqJGjx5drhGiBQUFmjp1qsaNG0f4eBOrV69WtWrVFBUVVa7lDx48qO3bt2vYsGEursy+LMvStGnTNGjQoHLfTp2YmKj69evr9ttvd3F19nXu3DnNnTtXDz/8cLlGiBYVFWnKlCkaPXo04eNNpKSkqKCgQL169SrX8sePH9fatWt1//33u7gye5s1a5ZiYmLUqFGjci2/cuVKBQcHq1u3bi6urOriGgsAyo97bYCrXLp0ScnJyeUOHSUpODhYo0eP1qxZs1xYmb1t3bpVISEh5Q4dJalt27Zq0qSJ1q9f78LK7O2bb77RiBEjyh06StLgwYO1bds2nTt3znWF2VhRUZESEhLKHTpKUrVq1TRu3DjNnDnTxdXZ1549e2RZVrlDR0lq0aKF2rZtq+TkZBdWZm/ff/+9BgwYUKFnOMbHx+vQoUPKzMx0YWX2ZVmW5syZo3HjxpX7tnQ/Pz/95Cc/4XPATRw8eFDZ2dnlDh0lqXHjxoqKitKSJUtcWJm9LVq0SNHR0eUOHSWpd+/eOnPmjA4fPuzCygAA+AHBI3CVpUuX6r777qvwesHBwWratKlOnDjhgqrsb//+/RUKHC7r0KGDjh075oKK7C87O1shISEKCwur8LojRozQsmXLzBdVBSxbtkwjR46s8LMwq1Wrpg4dOigtLc1Fldnb9u3bFRMTU+H12rRpo8zMTEaWXEdeXp4kVWrSiHvuuUcrV640XVKVsGrVKg0ePLjC5wA/Pz/16tVLW7dudVFl9rZp0ybFx8dXeL2IiAhlZ2erpKTEBVXZW3FxsXJzc9W0adMKr3vXXXdp48aNLqgKAICyCB6Bq+Tl5VV6ptpevXpp1apVhiuyvyNHjlTqQ/Fl7du31/bt2w1WVDUkJiZW6iJOknx9fVVSUsKF3HVkZ2dXelKTLl26KDU11WxBVUBWVpbCw8Mrvf6dd97JyOfrWLp0aaXPAQ6HQ35+fiosLDRclf1lZmaqfv36lVr3tttu0759+wxXZH85OTlOTRjXt2/f0klT8B9JSUmKi4ur9PpBQUHKzc01VxAAANdB8AhcYdOmTU4978bhcMjHx0fFxcUGq7K/DRs2VGq042Xt2rXTnj17DFZUNRQVFTk1oVGfPn24hfUqe/fuVZs2bZzaRkBAQOlINPwgOTlZsbGxlV6/adOmjHy+jry8PKeeJxgfH8/I56ukp6dX6JbV66lZs6bOnz9vqKKqYdmyZZUOySUpPDxcp0+fNlhR1XDu3LlK3fVwWXx8vBITE80VBADAdRA8Alc4fvy4WrZs6dQ2GjZsyIfjq1SrVq3Ct6xdbxv4j4KCAqdGj0g/3J7JxXFZe/bscXqmz1atWuno0aOGKqoa/Pz8yv2svBvhHHAtZ3sSGhqq/Px8Q9VUDdu2bXN6wo327dsz6vE6nD1eOQdcy9meBAQE8BgLAIDLETwCVzDx4YuRDq7BB+OynLkdGDdm6hyQnZ1toJqqw0RfOQeUVVhY6NSI58voa1kFBQUKCAhwahs1atTgHAC34O8XAGAHBI/AFZwdlSdJFy5cUEhIiIFqcKVly5bJ4XDw+r9X3bp1deDAAU//s1Q5Js4B2dnZioqK8vgx4k2vGTNmON3XdevWeXw/vOlVrVo17d+/3+m+oiwTz728ePGi0yPSgfJwOJx/zwIAwNUIHoEr1KxZU1lZWU5t48SJE05NolAVmZi8oE+fPrIsi9cVL2ee7Sb9cHHMrWtlNWzYUEeOHHFqG0ePHlV2drbHjw9vej3wwANO/9t0797d4/vhba/GjRs71dOCggKCi6u0atVKu3fvdmob+/fvV/Pmzc0UVEUUFRXJspwbncdESNdyticlJSU8lxwA4HIEj8AVevfu7fSsiQUFBYQ5V2ndurVTk8Okp6erQYMGBiuqGi6HD5W1dOlS9evXz2BF9te9e3dt2LDBqW1kZ2crNDTUUEVVQ5cuXbRp06ZKr3/27FkeLXADzoQGiYmJnAOu0qZNG+3du9epbZw4caLSs2JXVb169dLKlSsrvX5ubq4CAwMNVlQ1VKtWzanJzJKTk9W7d2+DFQEAcC2CR+AKPj4+cjgclb6Q27p1q9MTU1RFnTp10vbt2yu9/tq1a9WzZ0+DFVUNvXr10po1ayq1rmVZRp5lVtVcvoW1oKCgUusfOHBALVq0MFyV/bVs2VIHDx6s9PpJSUkEZNfRr18/p2alvnjxIo8GuY6QkBBduHChUutmZmaqXr16hiuyvwYNGigzM7PS6ycmJqp///4GK6oanJ2VOisrS3Xq1DFYEQAA1yJ4BK4SFxen+fPnV3i9kpISbdmyRW3atHFBVfZXr169Sj2TMD09XaGhodwOeB2NGjXSwYMHK3WrVWJiou68804XVGV/8fHx+u677yq8nmVZWrlypdMz4lZVTZs21a5duyq8XlZWlvz9/eXr6+uCquytVq1aOn36dKVGPK1evZovym6gsucASVq0aBEjyG6gdevWSk1NrfB62dnZKiwsZMTjdQQHBysvL69SQfnmzZt12223uaAqAADKIngErlK7dm01a9asQrcEWZalqVOnauTIka4rzOb69OmjzZs3KyMjo9zrnDlzRsuXL9eAAQNcWJm93X///Zo6dWqFRummpKQoJCRETZs2dWFl9lW9enV16NBBS5cuLfc6lmVpxowZGjJkiAsrs7c77rhD+/fv1+HDh8u9TnZ2tubPn09fb+K+++7TtGnTKvQFxNatW1VUVMQXZTfg7++v6OjoCn8J+fXXX+uuu+7ii7Ib6NKli06ePKl9+/aVe53c3Fx9/fXXGjFihAsrs7eRI0dq1qxZunTpUrnX2bNnj7KystSpUycXVgYAwA8clrNPeoZXczgcTj/M+1a1detWHThwQEOGDJG/v/8Nlzt9+rTmzp2rkSNHKiwszH0F2tS3336rxo0bKyoq6qbLbdu2Tbt379YDDzzARdyPuHjxombOnKl77rnnps8VKy4uVkJCgurVq6cePXq4sUJ72rVrl3bs2KFhw4bd9Jb0c+fO6dtvv9U999yjunXrurFCe1qwYIFq1qypnj173vRve/fu3dq0aZMeeugh+fjwPenN5Ofna/r06RowYMBNJ5wpKSnRkiVLVL16dcXExLixQntKS0vThg0bNGLECAUFBd1wuQsXLmjOnDnq16+f0xP+3AqWLl0qX19f9e3b96bngAMHDmjVqlUaM2aM/Pz83Fih/RQWFmr69OmKjY296cRGlmUpKSlJknh8hZO4xgKA8iN4rOJ4U3ROTk6Oli1bpsLCQkVHR5deUFiWpU2bNunw4cOqXbu2YmNjuTCugLS0NG3ZskUBAQGKj48vvaArKChQYmKicnNz1b59e7Vr187DldqHZVlatWqVMjMz1ahRI0VHR5de0J08eVIrV66Uj4+P+vbtq1q1anm4Wvu4ePGiEhMTlZ+frx49eigiIkLSD/3eunWr9u/fr5o1ayouLo4L4wo4cuSINmzYIH9/f/Xv31/Vq1eX9MPMt8uW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f/21Dhw4oHvvvdcTu+M1TPT1shdeeEFNmjRxZ/ley1RfX3nlFWVkZJS+Xn75ZXfvitcw0dM5c+booYce0k9+8hNt3rxZa9as0eOPP+6J3fEazva1V69eZY7RjIwMvfTSSwoJCdHgwYM9tVseZ+J4HTp0qPLy8rR06VJt3rxZvXv31ogRI5SWluaJXfI4Z3uanp6uu+66Sy1bttS6deuUkJCgHTt26LHHHvPQHnmfs2fPqri4WK1bt67QehEREQoICNCJEydcVBkA2JQF23r33Xet06dPV3r9t956y2A19vXoo49aQ4YMKfOz559/3qpdu/YN19myZYslydq9e/c1v5s1a5bFn5b5vl723nvv3XQbVZmrevrtt99akqxLly4Zq9VOTPZ1zpw5Vvv27a2dO3dakqwNGza4pGY7MNXXiIgI64033nBZnXZioqdFRUVW06ZNrQ8//NCltdqJq86tbdq0sZ544gljddqNib6eOnXKkmQlJiaWLlNYWGj5+PhYs2bNck3hXsxETz/44AMrPDzcKioqKl1m69atliRr3759rincZr755psy/amIkpISa/bs2YYrAgB7Y8SjjTkcDtWuXbvS67dv31779u0zWFHVcODAASUkJMjf3/+6v7948aI+++wzNWvWTM2bN3dvcTZmqq/Z2dmqVauWi6q0FxM9PXPmjL788kvdeeedCgwMdGG19lHZvh47dkxPPvmkvvzySwUFBbmpWvtw5nh98803FR4eri5duui1115TQUGBGyr2fpXp6caNG3X06FEFBASoW7duatCggQYOHKjNmze7sXLvZuLcmpSUpL1792rChAkurNReKtPX8PBwRUZGasqUKbpw4YKKi4v14YcfKjQ0VDExMW6s3jtVpqf5+fny9/eXr69v6XKX37NWrlzp8pq9XUlJiUpKSsr0pyIcDod8fX1VVFRkuDIAsDFPJ5+onMzMTGvu3LlObaOoqMj685//bKgi+3r00UctX19fq3r16lZgYKAlyZJk/e1vfyuz3HvvvWdVr17dkmS1bdv2ht8KM+LxB6b7almWdfjwYSs8PPyWHa1rsqe//vWvreDgYEuSFR0dbZ06dcpdu+F1TPS1qKjIio2Ntd58803Lsizr4MGDjHg0dLy+9dZbVmJiorVlyxbro48+ssLDw63x48e7c1e8homeTp8+3ZJkNWvWzJo1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vLxyvmXx8vLKfu4q7HO1Z18tV66cAgMDNX/+fPn5+alz5873XdbV83DW7fDhwzkeH/Pj559/tvuUWABQkFA8eig/Pz+dO3fOrvtYtmwZXwO6j7CwMNWtW1d/+9vflJSUpC5duujq1auaMWOGbt68qYSEBCUkJOS4wMGZM2e0d+/e7EL4TgGRnJzsoq1wP3md6/nz59WuXTuVL19en332mRITE7OXyczMdPHWuIe8znTLli368ssvtW/fPp0+fVqxsbEaNGiQqlatqtatW7t4a9xHXuf62GOPqV69etm3mjVrSpKqV6+uihUrunJT3Ep+9tcpU6Zo7969OnnypBYsWKBRo0apZ8+eqly5sou3xj3kdabFixfXH/7wB73//vtavXq1Dh8+rFdffVVXr17V0KFDXbw17iM/rwOkXy/OcejQIY0cOdJFyd1bXufaokULlSpVSlarVfv27dORI0c0fvx4nThxQt27d3fx1riH/OyrX3zxhXbv3q0jR47oyy+/1B//+Ed9/PHHppzGydOFhIRkl7j5dezYMVWrVs2kRADg+bgyhgdr0qSJdu7cma8Tl2dlZSkhIYGLozzA2LFjZbVa1bx5c23dulWSssuEO9avX6+wsDBJ0nvvvaeZM2dm/65Ro0Z3LYO8zXXNmjU6evSojh49elfJcPLkSVWtWtVZsd1aXmbq7++vRYsW6b333lNycrIeffRRPfPMM9lHO+D/y+tjAHInL3MtWrSo5s+frw8//FBpaWmqUqWKRo4cqTfeeMMV0d1WXvfVTz75REWKFNGIESOUkpKixo0ba/369YX2wjL3k5/HgH//+9+qXbs2V1x+gLzMtXTp0oqOjtY777yjDh06KD09XbVr19bSpUvVuHFjV8R3S3ndV7dv3673339fycnJqlWrlr7++msNGzbM2bHdVpkyZXTp0iWVKVMmz+tev37d7nNEAkBBYzHy+h0JuJW//vWvmjBhQp5PBj1v3jw1adJEjz/+uIOSAQAAAIBnycrK0uzZs/NVxs6ePVsDBgzg4A4A+A2+au3hRo4cqU8//fS+57m5l5iYGPn6+lI6AgAAAMBveHl5qWPHjvrmm2/ytN6KFSvUunVrSkcA+B2OeCwAzpw5o1mzZumll15S2bJl77tcenq65s6dq4CAAPXp08eJCQEAAADAc5w7d05xcXHq1auXgoKC7rtc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5eV137/9wjJTM+YaGxur5cuXa+7cuWrVqpUaN26sr776SgEBAbLZbIVyrmbsq4MHD1ZCQoJ++eUXXb58WR988IEuXbr0wNM4uXoezrqtXr1aV65cydM8f+/69esqXry4XfcBAAUJxaOHqly58n3fdOXW1q1b1bZtW5MS2S81NVU///yzW3x15v3339fEiRN1/vx5V0cpUPIz1/j4eIWFhal27dqaO3eufHw4UPu3zNhX7xwBlZaWZlYsj5fXudpsNu3bt0979+7V3r17sy8sM3v2bE2cONGRUT2KGfvr3r17JcktnivcQV5n2qRJExUtWlSHDx/O/llWVpaOHz+uKlWqOCqmx7FnX502bZr69++vEiVKOCCZZ8vrXFNSUiT9emG03/Ly8sp+7irs7NlXy5Urp8DAQM2fP19+fn7q3LmzAxJ6lvr162vXrl123cfq1avtPk8kABQkFI8eLCkpSbdu3cr3+tu3b3fpiblff/11ff/99zp58qS2bdumvn376ubNmxoxYoTLMt0RFhamunXr6m9/+5ukX4+427t3r44cOSJJOnTokPbu3ZvjE9EzZ85o79692ed2u1NAJCcnOz2/u8rrXM+fP6927dqpfPny+uyzz5SYmKiEhAQlJCTwFZb/k9eZbtmyRV9++aX27dun06dPKzY2VoMGDVLVqlXVunVrl22Hu8nrXB977DHVq1cv+1azZk1JUvXq1VWxYkXXbIQbys/+OmXKFO3du1cnT57UggULNGrUKPXs2VOVK1d22Xa4k7zOtHjx4vrDH/6g999/X6tXr9bhw4f16quv6urVqxo6dKjLtsPd5Od1gPTrxTkOHTqU44rh+P/yOtcWLVqoVKlSslqt2rdvn44cOaLx48frxIkT6t69u8u2w53kZ1/94osvtHv3bh05ckRffvml/vjHP+rjjz9WyZIlXbEJbqVIkSLKyMh46NG8DxIdHa2aNWvqD3/4g7Zt22bXfQFAgWDAY12+fNmYM2dOvta9cOGC8cUXX5icKG8GDBhghISEGL6+vsajjz5q9O7d2zh48KDTc4wYMcLo1q3bXT+fPXu2UaRIEePUqVPG+++/b0i662az2XLcz72WWb9+vfM2xo2YMVebzXbP30syTp486dwNcgNmzHTPnj1GWFiYUapUKaNIkSJG1apVjT/84Q/G2bNnnbw17sOsx4DfOnny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un37toO3wD2ZNdffOnr0qIKCghQYGOiAxO7PrJmeOnVKFovlrlt0dLSDt8A9mbmvGoahzz77TLVq1VLRokUVEhKit956y4Hp3ZdZc/3ggw/uub9aLBZdvHjRwVvhXszcV1evXq0WLVooKChIpUuXVq9evXTkyBEHpndfZs51wYIFatiwoYoVK6YqVarok08+cWBy92fGe6zjx4/r+eefV5kyZVS8eHH1799fFy5ccPKWAM7VoEEDTZkyRefOndOrr76qRYsWqWLFinrhhRf0ww8/6LfHuS1dulQ9evTIdekoSV26dNHPP/+sy5cvOyI+nITi0cP06dNH27dv1/Tp03XkyBGtWLFCzz77bPYf4s2bN9WyZUt9+umn972PMWPGaPHixZo7d642btyoGzduqHv37srMzHTWZnikrKwsjRgxQsOHD7/n7zMzM+Xn56c//vGP6tatm5PTeaaHzXTz5s2qX7++Fi1apAMHDujll1/WSy+9pDlz5jg5qWd52FyLFCmiESNGaM2aNTp8+LA+++wzTZ8+Xe+++66Tk3qWh831jtu3b2vgwIFq27atk5J5rtzONDo6WvHx8dm3Dh06OCmhZ8rNXMeNG6evvvpKEydO1E8//aSVK1eyzz7Ew+b6+uuv59hP4+Pj1a5dO4WFhals2bJOTusZHjbTkydPqlevXmrTpo327NmjdevW6datW+ratauTk3qWh8111apVGjx4sF566SUdOHBAX331laZMmaIvvvjCyUndh73vsW7evKkuXbrIMAzFxMTohx9+0O3bt9WjRw9lZWU5c1MAlyhSpIh69+6t5cuX69ChQ3riiSf04osvqlatWvr44491+PBhFStWLF8XpenZs+c9y354Dh9XB0DuXbt2TRs3btTatWvVsWNHSVKVKlXUrFmz7GWGDRsm6ddzItzL9evXNX36dNlsNnXu3FmSFBUVpSpVqmjdunV6+umnHbwVnutf//qXJGny5Mlas2bNXb8PCAjQ//7v/0r69ZDza9euOTOeR3rYTCdMmJDj3y+//LLWr1+vxYsXa/DgwU7J6IkeNtcaNWrkOFdKlSpVFBcXp40bNzotoyd62FzvePPNN9WgQQO1a9dO33//vbPieaTczjQ4OFjly5d3ViyP97C5Hj58WP/617+0f/9+1a5dO/vnjRo1clpGT/SwuQYGBuY4yvns2bPa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\n", "text/plain": [ "
" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "show_map(room_graph_data)" ] }, { "cell_type": "code", "execution_count": 8, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "{'H10': [40, 40],\n", " 'H11': [50, 40],\n", " 'H12': [60, 40],\n", " 'H13': [70, 40],\n", " 'H14': [80, 40],\n", " 'H15': [90, 40],\n", " 'H16': [100, 40],\n", " 'H17': [110, 40],\n", " 'H18': [120, 40],\n", " 'H19': [130, 40],\n", " 'S10': [40, 40],\n", " 'R11': [50, 50],\n", " 'R12': [60, 50],\n", " 'R13': [70, 50],\n", " 'R14': [80, 50],\n", " 'R15': [90, 50],\n", " 'R16': [100, 50],\n", " 'R17': [110, 50],\n", " 'R18': [120, 50],\n", " 'R19': [130, 50],\n", " 'S19': [140, 40],\n", " 'EXIT': [165, 30],\n", " 'H20': [40, 65],\n", " 'H21': [50, 65],\n", " 'H22': [60, 65],\n", " 'H23': [70, 65],\n", " 'H24': [80, 65],\n", " 'H25': [90, 65],\n", " 'H26': [100, 65],\n", " 'H27': [110, 65],\n", " 'H28': [120, 65],\n", " 'H29': [130, 65],\n", " 'S20': [40, 65],\n", " 'R21': [50, 75],\n", " 'R22': [60, 75],\n", " 'R23': [70, 75],\n", " 'R24': [80, 75],\n", " 'R25': [90, 75],\n", " 'R26': [100, 75],\n", " 'R27': [110, 75],\n", " 'R28': [120, 75],\n", " 'R29': [130, 75],\n", " 'S29': [140, 65],\n", " 'H30': [40, 90],\n", " 'H31': [50, 90],\n", " 'H32': [60, 90],\n", " 'H33': [70, 90],\n", " 'H34': [80, 90],\n", " 'H35': [90, 90],\n", " 'H36': [100, 90],\n", " 'H37': [110, 90],\n", " 'H38': [120, 90],\n", " 'H39': [130, 90],\n", " 'S30': [40, 90],\n", " 'R31': [50, 100],\n", " 'R32': [60, 100],\n", " 'R33': [70, 100],\n", " 'R34': [80, 100],\n", " 'R35': [90, 100],\n", " 'R36': [100, 100],\n", " 'R37': [110, 100],\n", " 'R38': [120, 100],\n", " 'R39': [130, 100],\n", " 'S39': [140, 90],\n", " 'H40': [40, 115],\n", " 'H41': [50, 115],\n", " 'H42': [60, 115],\n", " 'H43': [70, 115],\n", " 'H44': [80, 115],\n", " 'H45': [90, 115],\n", " 'H46': [100, 115],\n", " 'H47': [110, 115],\n", " 'H48': [120, 115],\n", " 'H49': [130, 115],\n", " 'S40': [40, 115],\n", " 'R41': [50, 125],\n", " 'R42': [60, 125],\n", " 'R43': [70, 125],\n", " 'R44': [80, 125],\n", " 'R45': [90, 125],\n", " 'R46': [100, 125],\n", " 'R47': [110, 125],\n", " 'R48': [120, 125],\n", " 'R49': [130, 125],\n", " 'S49': [140, 115]}" ] }, "execution_count": 8, "metadata": {}, "output_type": "execute_result" } ], "source": [ "xnode_label_pos" ] }, { "cell_type": "code", "execution_count": 9, "metadata": {}, "outputs": [ { "data": { "text/html": [ "\n", "\n", "\n", "\n", " \n", " \n", " \n", "\n", "\n", "

\n", "\n", "
def show_map(graph_data, node_colors=None):\n",
       "    G = nx.Graph(graph_data['graph_dict'])\n",
       "    node_colors = node_colors or graph_data['node_colors']\n",
       "    node_positions = graph_data['node_positions']\n",
       "    node_label_pos = graph_data['node_label_positions']\n",
       "    edge_weights = graph_data['edge_weights']\n",
       "\n",
       "    # set the size of the plot\n",
       "    plt.figure(figsize=(18, 13))\n",
       "    # draw the graph (both nodes and edges) with locations from romania_locations\n",
       "    nx.draw(G, pos={k: node_positions[k] for k in G.nodes()},\n",
       "            node_color=[node_colors[node] for node in G.nodes()], linewidths=0.3, edgecolors='k')\n",
       "\n",
       "    # draw labels for nodes\n",
       "    node_label_handles = nx.draw_networkx_labels(G, pos=node_label_pos, font_size=14)\n",
       "\n",
       "    # add a white bounding box behind the node labels\n",
       "    [label.set_bbox(dict(facecolor='white', edgecolor='none')) for label in node_label_handles.values()]\n",
       "\n",
       "    # add edge lables to the graph\n",
       "    nx.draw_networkx_edge_labels(G, pos=node_positions, edge_labels=edge_weights, font_size=14)\n",
       "\n",
       "    # add a legend\n",
       "    white_circle = lines.Line2D([], [], color="white", marker='o', markersize=15, markerfacecolor="white")\n",
       "    orange_circle = lines.Line2D([], [], color="orange", marker='o', markersize=15, markerfacecolor="orange")\n",
       "    red_circle = lines.Line2D([], [], color="red", marker='o', markersize=15, markerfacecolor="red")\n",
       "    gray_circle = lines.Line2D([], [], color="gray", marker='o', markersize=15, markerfacecolor="gray")\n",
       "    green_circle = lines.Line2D([], [], color="green", marker='o', markersize=15, markerfacecolor="green")\n",
       "    plt.legend((white_circle, orange_circle, red_circle, gray_circle, green_circle),\n",
       "               ('Un-explored', 'Frontier', 'Currently Exploring', 'Explored', 'Final Solution'),\n",
       "               numpoints=1, prop={'size': 16}, loc=(.8, .75))\n",
       "\n",
       "    # show the plot. No need to use in notebooks. nx.draw will show the graph itself.\n",
       "    plt.show()\n",
       "
\n", "\n", "\n" ], "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "psource(show_map)" ] }, { "cell_type": "code", "execution_count": 10, "metadata": {}, "outputs": [], "source": [ "def tree_breadth_search_for_vis(problem):\n", " \"\"\"Search through the successors of a problem to find a goal.\n", " The argument frontier should be an empty queue.\n", " Don't worry about repeated paths to a state. [Figure 3.7]\"\"\"\n", " \n", " # we use these two variables at the time of visualisations\n", " iterations = 0\n", " all_node_colors = []\n", " node_colors = {k : 'white' for k in problem.graph.nodes()}\n", " \n", " #Adding first node to the queue\n", " frontier = deque([Node(problem.initial)])\n", " \n", " node_colors[Node(problem.initial).state] = \"orange\"\n", " iterations += 1\n", " all_node_colors.append(dict(node_colors))\n", " \n", " while frontier:\n", " #Popping first node of queue\n", " node = frontier.popleft()\n", " \n", " # modify the currently searching node to red\n", " node_colors[node.state] = \"red\"\n", " iterations += 1\n", " all_node_colors.append(dict(node_colors))\n", " \n", " if problem.goal_test(node.state):\n", " # modify goal node to green after reaching the goal\n", " node_colors[node.state] = \"green\"\n", " iterations += 1\n", " all_node_colors.append(dict(node_colors))\n", " return(iterations, all_node_colors, node)\n", " \n", " frontier.extend(node.expand(problem))\n", " \n", " for n in node.expand(problem):\n", " node_colors[n.state] = \"orange\"\n", " iterations += 1\n", " all_node_colors.append(dict(node_colors))\n", "\n", " # modify the color of explored nodes to gray\n", " node_colors[node.state] = \"gray\"\n", " iterations += 1\n", " all_node_colors.append(dict(node_colors))\n", " \n", " return None\n", "\n", "def breadth_first_tree_search(problem):\n", " \"Search the shallowest nodes in the search tree first.\"\n", " iterations, all_node_colors, node = tree_breadth_search_for_vis(problem)\n", " return(iterations, all_node_colors, node)" ] }, { "cell_type": "code", "execution_count": 11, "metadata": {}, "outputs": [], "source": [ "from ipywidgets import *" ] }, { "cell_type": "code", "execution_count": 12, "metadata": {}, "outputs": [ { "data": { "application/vnd.jupyter.widget-view+json": { "model_id": "58e47ca6772a47658aad2f1e10b2c49c", "version_major": 2, "version_minor": 0 }, "text/plain": [ "interactive(children=(IntSlider(value=0, description='iteration', max=1), Output()), _dom_classes=('widget-int…" ] }, "metadata": {}, "output_type": "display_data" }, { "data": { "application/vnd.jupyter.widget-view+json": { "model_id": "5246592a7fbb44ca92afc03b22563bb4", "version_major": 2, "version_minor": 0 }, "text/plain": [ "interactive(children=(ToggleButton(value=False, description='visualize'), Output()), _dom_classes=('widget-int…" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "all_node_colors = []\n", "room_problem = GraphProblem('R18', 'EXIT', room_map)\n", "a, b, c = breadth_first_tree_search(room_problem)\n", "display_visual(room_graph_data, user_input=False, \n", " algorithm=breadth_first_tree_search, \n", " problem=room_problem)" ] }, { "cell_type": "code", "execution_count": 13, "metadata": {}, "outputs": [], "source": [ "def tree_depth_search_for_vis(problem):\n", " \"\"\"Search through the successors of a problem to find a goal.\n", " The argument frontier should be an empty queue.\n", " Don't worry about repeated paths to a state. [Figure 3.7]\"\"\"\n", " \n", " # we use these two variables at the time of visualisations\n", " iterations = 0\n", " all_node_colors = []\n", " node_colors = {k : 'white' for k in problem.graph.nodes()}\n", " \n", " #Adding first node to the stack\n", " frontier = [Node(problem.initial)]\n", " \n", " node_colors[Node(problem.initial).state] = \"orange\"\n", " iterations += 1\n", " all_node_colors.append(dict(node_colors))\n", " \n", " while frontier:\n", " #Popping first node of stack\n", " node = frontier.pop()\n", " \n", " # modify the currently searching node to red\n", " node_colors[node.state] = \"red\"\n", " iterations += 1\n", " all_node_colors.append(dict(node_colors))\n", " \n", " if problem.goal_test(node.state):\n", " # modify goal node to green after reaching the goal\n", " node_colors[node.state] = \"green\"\n", " iterations += 1\n", " all_node_colors.append(dict(node_colors))\n", " return(iterations, all_node_colors, node)\n", " \n", " frontier.extend(node.expand(problem))\n", " \n", " for n in node.expand(problem):\n", " node_colors[n.state] = \"orange\"\n", " iterations += 1\n", " all_node_colors.append(dict(node_colors))\n", "\n", " # modify the color of explored nodes to gray\n", " node_colors[node.state] = \"gray\"\n", " iterations += 1\n", " all_node_colors.append(dict(node_colors))\n", " \n", " return None\n", "\n", "def depth_first_tree_search(problem):\n", " \"Search the deepest nodes in the search tree first.\"\n", " iterations, all_node_colors, node = tree_depth_search_for_vis(problem)\n", " return(iterations, all_node_colors, node)" ] }, { "cell_type": "code", "execution_count": 14, "metadata": {}, "outputs": [ { "data": { "application/vnd.jupyter.widget-view+json": { "model_id": "b2c86e9068064c0c89a2566855cb49e5", "version_major": 2, "version_minor": 0 }, "text/plain": [ "interactive(children=(IntSlider(value=0, description='iteration', max=1), Output()), _dom_classes=('widget-int…" ] }, "metadata": {}, "output_type": "display_data" }, { "data": { "application/vnd.jupyter.widget-view+json": { "model_id": "e83ebd200b78495981423aa8964aa1ee", "version_major": 2, "version_minor": 0 }, "text/plain": [ "interactive(children=(ToggleButton(value=False, description='visualize'), Output()), _dom_classes=('widget-int…" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "all_node_colors = []\n", "room_problem = GraphProblem('R35', 'EXIT', room_map)\n", "a, b, c = breadth_first_tree_search(room_problem)\n", "display_visual(room_graph_data, user_input=False, \n", " algorithm=depth_first_tree_search, \n", " problem=room_problem)" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [] } ], "metadata": { "kernelspec": { "display_name": "Python 3 (ipykernel)", "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.10.12" } }, "nbformat": 4, "nbformat_minor": 2 }