{"id":247,"date":"2020-04-02T12:46:22","date_gmt":"2020-04-02T12:46:22","guid":{"rendered":"http:\/\/www.lancaster.ac.uk\/stor-i-student-sites\/matthew-randall\/?p=247"},"modified":"2020-04-02T12:46:22","modified_gmt":"2020-04-02T12:46:22","slug":"heuristic-search-part-2-linear-search-methods","status":"publish","type":"post","link":"https:\/\/www.lancaster.ac.uk\/stor-i-student-sites\/matthew-randall\/2020\/04\/02\/heuristic-search-part-2-linear-search-methods\/","title":{"rendered":"Heuristic Search Part 2: Linear Search Methods"},"content":{"rendered":"\t\t<div data-elementor-type=\"wp-post\" data-elementor-id=\"247\" class=\"elementor elementor-247\">\n\t\t\t\t\t\t<section class=\"elementor-section elementor-top-section elementor-element elementor-element-d8c8d02 elementor-section-boxed elementor-section-height-default elementor-section-height-default\" data-id=\"d8c8d02\" data-element_type=\"section\" data-e-type=\"section\">\n\t\t\t\t\t\t<div class=\"elementor-container elementor-column-gap-default\">\n\t\t\t\t\t<div class=\"elementor-column elementor-col-100 elementor-top-column elementor-element elementor-element-aefab6d\" data-id=\"aefab6d\" data-element_type=\"column\" data-e-type=\"column\">\n\t\t\t<div class=\"elementor-widget-wrap elementor-element-populated\">\n\t\t\t\t\t\t<div class=\"elementor-element elementor-element-32db9b4 elementor-widget elementor-widget-text-editor\" data-id=\"32db9b4\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t<p>Recently, I published blog post introducing the concept of heuristic search, this can be found\u00a0<a href=\"https:\/\/www.lancaster.ac.uk\/stor-i-student-sites\/matthew-randall\/2020\/04\/01\/heuristic-search-part-1-introduction-and-basic-search-methods\/?preview=true&amp;_thumbnail_id=245\" target=\"_blank\" rel=\"noopener\">here<\/a>. This is a continuation of that post, in which I will discuss linear space search methods, in particular branch and bound.<\/p>\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/section>\n\t\t\t\t<section class=\"elementor-section elementor-top-section elementor-element elementor-element-a7d2787 elementor-section-boxed elementor-section-height-default elementor-section-height-default\" data-id=\"a7d2787\" data-element_type=\"section\" data-e-type=\"section\">\n\t\t\t\t\t\t<div class=\"elementor-container elementor-column-gap-default\">\n\t\t\t\t\t<div class=\"elementor-column elementor-col-100 elementor-top-column elementor-element elementor-element-e45b9b4\" data-id=\"e45b9b4\" data-element_type=\"column\" data-e-type=\"column\">\n\t\t\t<div class=\"elementor-widget-wrap elementor-element-populated\">\n\t\t\t\t\t\t<div class=\"elementor-element elementor-element-c4bb390 elementor-widget elementor-widget-text-editor\" data-id=\"c4bb390\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t<p><a style=\"background-color: #ffffff\" href=\"https:\/\/books.google.co.uk\/books?hl=en&amp;lr=&amp;id=3k5MVjKzBP4C&amp;oi=fnd&amp;pg=PP1&amp;dq=Heuristic+search:+theory+and+applications&amp;ots=hFQ54cytLx&amp;sig=VywpX_79BVohMAQBwaM6RS2aq0I&amp;redir_esc=y#v=onepage&amp;q=Heuristic%20search%3A%20theory%20and%20applications&amp;f=false\" target=\"_blank\" rel=\"noopener\">Linear space search methods<\/a>\u00a0involve the exploration of a search tree in a systematic exploration of the solution space for a problem. Often the search tree analysed is considerably larger than the problem graph for the problem itself. These algorithms often consider the search tree nodes as members in a search space. Search trees are designed to be simple to analyse in comparison to their underlying problem graphs due to each node having a unique path between it and the root. This<br \/>means that members of the solution space in the search space are paths.<\/p>\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/section>\n\t\t\t\t<section class=\"elementor-section elementor-top-section elementor-element elementor-element-38712c6 elementor-section-boxed elementor-section-height-default elementor-section-height-default\" data-id=\"38712c6\" data-element_type=\"section\" data-e-type=\"section\">\n\t\t\t\t\t\t<div class=\"elementor-container elementor-column-gap-default\">\n\t\t\t\t\t<div class=\"elementor-column elementor-col-100 elementor-top-column elementor-element elementor-element-6cf41ec\" data-id=\"6cf41ec\" data-element_type=\"column\" data-e-type=\"column\">\n\t\t\t<div class=\"elementor-widget-wrap elementor-element-populated\">\n\t\t\t\t\t\t<div class=\"elementor-element elementor-element-fe38755 elementor-widget elementor-widget-heading\" data-id=\"fe38755\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"heading.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t<h2 class=\"elementor-heading-title elementor-size-default\">Branch and bound<\/h2>\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/section>\n\t\t\t\t<section class=\"elementor-section elementor-top-section elementor-element elementor-element-e33fa4b elementor-section-boxed elementor-section-height-default elementor-section-height-default\" data-id=\"e33fa4b\" data-element_type=\"section\" data-e-type=\"section\">\n\t\t\t\t\t\t<div class=\"elementor-container elementor-column-gap-default\">\n\t\t\t\t\t<div class=\"elementor-column elementor-col-50 elementor-top-column elementor-element elementor-element-245a7aa\" data-id=\"245a7aa\" data-element_type=\"column\" data-e-type=\"column\">\n\t\t\t<div class=\"elementor-widget-wrap elementor-element-populated\">\n\t\t\t\t\t\t<div class=\"elementor-element elementor-element-b669184 elementor-widget elementor-widget-text-editor\" data-id=\"b669184\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t<p><a style=\"background-color: #ffffff\" href=\"http:\/\/n automatic method of solving discrete programming problems\" target=\"_blank\" rel=\"noopener\">Branch and bound<\/a>\u00a0is a method often used in operational research in order to find solutions to complicated\u00a0<a href=\"https:\/\/janders.eecg.utoronto.ca\/1387\/readings\/b_and_b.pdf\" target=\"_blank\" rel=\"noopener\">combinatorial optimisation problems<\/a>. Here, the set of all possible solutions are represented as a tree with the complete set of all possible solutions at the root. Branching refers to the creation of sub-problems, and bounding refers to the dismissal of partial solutions which are worse than the currently found optimal solution. Hence, in order to achieve this, the upper and lower bounds for optimal solutions, U and L, must be calculated at each branch on the tree. In order to apply the branch and bound method to problems with a general solution space, depth first search is used with U and L applied at each stage. Here, the principle of depth first search can be applied, thus creating a branch and bound search tree.<\/p>\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/div>\n\t\t\t\t<div class=\"elementor-column elementor-col-50 elementor-top-column elementor-element elementor-element-b52e20e\" data-id=\"b52e20e\" data-element_type=\"column\" data-e-type=\"column\">\n\t\t\t<div class=\"elementor-widget-wrap elementor-element-populated\">\n\t\t\t\t\t\t<div class=\"elementor-element elementor-element-907e698 elementor-widget elementor-widget-image\" data-id=\"907e698\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"image.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<img fetchpriority=\"high\" decoding=\"async\" width=\"960\" height=\"640\" src=\"https:\/\/www.lancaster.ac.uk\/stor-i-student-sites\/matthew-randall\/wp-content\/uploads\/sites\/11\/2020\/04\/rope-4587474_960_720.jpg\" class=\"attachment-large size-large wp-image-250\" alt=\"\" srcset=\"https:\/\/www.lancaster.ac.uk\/stor-i-student-sites\/matthew-randall\/wp-content\/uploads\/sites\/11\/2020\/04\/rope-4587474_960_720.jpg 960w, https:\/\/www.lancaster.ac.uk\/stor-i-student-sites\/matthew-randall\/wp-content\/uploads\/sites\/11\/2020\/04\/rope-4587474_960_720-300x200.jpg 300w, https:\/\/www.lancaster.ac.uk\/stor-i-student-sites\/matthew-randall\/wp-content\/uploads\/sites\/11\/2020\/04\/rope-4587474_960_720-768x512.jpg 768w\" sizes=\"(max-width: 960px) 100vw, 960px\" \/>\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/section>\n\t\t\t\t<section class=\"elementor-section elementor-top-section elementor-element elementor-element-6b716c3 elementor-section-boxed elementor-section-height-default elementor-section-height-default\" data-id=\"6b716c3\" data-element_type=\"section\" data-e-type=\"section\">\n\t\t\t\t\t\t<div class=\"elementor-container elementor-column-gap-default\">\n\t\t\t\t\t<div class=\"elementor-column elementor-col-100 elementor-top-column elementor-element elementor-element-bee37bb\" data-id=\"bee37bb\" data-element_type=\"column\" data-e-type=\"column\">\n\t\t\t<div class=\"elementor-widget-wrap elementor-element-populated\">\n\t\t\t\t\t\t<div class=\"elementor-element elementor-element-8439a11 elementor-widget elementor-widget-text-editor\" data-id=\"8439a11\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t<p>Consider an example where a problem has a solution space representing all possible configurations of a system, and the aim is to find the configuration\u00a0which minimises some objective function. The branch and bound algorithm progresses by iterating the<br \/>following steps at each of a set of predetermined branching points.<\/p>\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/section>\n\t\t\t\t<section class=\"elementor-section elementor-top-section elementor-element elementor-element-d779877 elementor-section-boxed elementor-section-height-default elementor-section-height-default\" data-id=\"d779877\" data-element_type=\"section\" data-e-type=\"section\">\n\t\t\t\t\t\t<div class=\"elementor-container elementor-column-gap-default\">\n\t\t\t\t\t<div class=\"elementor-column elementor-col-100 elementor-top-column elementor-element elementor-element-6ef67e7\" data-id=\"6ef67e7\" data-element_type=\"column\" data-e-type=\"column\">\n\t\t\t<div class=\"elementor-widget-wrap elementor-element-populated\">\n\t\t\t\t\t\t<div class=\"elementor-element elementor-element-5670d9d elementor-widget elementor-widget-text-editor\" data-id=\"5670d9d\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t<ul><li>Firstly, the problem is branched using a branching rule specific to the problem in order to produce two or more (usually disjoint) subsets of the solution space.<\/li><li>Second, a heuristic is used to estimate a lower bound on the value of the objective function for any candidate solution contained in the first branch from the branching point, which is at that point the lowest value for L found. The algorithm then does the same for each of set of solutions for each branch sequentially and determines whether or not its lower bound is greater than the current lowest found lower bound for all branches which have already been checked. If this is the case, then the that branch is pruned and that set of possible solutions discarded.<\/li><\/ul>\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/section>\n\t\t\t\t<section class=\"elementor-section elementor-top-section elementor-element elementor-element-d424d1d elementor-section-boxed elementor-section-height-default elementor-section-height-default\" data-id=\"d424d1d\" data-element_type=\"section\" data-e-type=\"section\">\n\t\t\t\t\t\t<div class=\"elementor-container elementor-column-gap-default\">\n\t\t\t\t\t<div class=\"elementor-column elementor-col-100 elementor-top-column elementor-element elementor-element-3671836\" data-id=\"3671836\" data-element_type=\"column\" data-e-type=\"column\">\n\t\t\t<div class=\"elementor-widget-wrap elementor-element-populated\">\n\t\t\t\t\t\t<div class=\"elementor-element elementor-element-f2e8162 elementor-widget elementor-widget-text-editor\" data-id=\"f2e8162\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t<p>This results in only a single branch remaining, on which the process can now be repeated so as to repeatedly branch the set of possible solutions until the optimal solution has been found. An advantage of this method is the ability to keep track of the upper bound as well as the lower bound and stop branching when the gap between lower and upper bounds reaches a certain threshold and so solutions can be considered good enough.<\/p>\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/section>\n\t\t\t\t<\/div>\n\t\t","protected":false},"excerpt":{"rendered":"<p>Recently, I published blog post introducing the concept of heuristic search, this can be found&nbsp;here. This is a continuation of that post, in which I will discuss linear space search methods, in particular branch and bound. Linear space search methods&nbsp;involve the exploration of a search tree in a systematic exploration of the solution space for [&hellip;]<\/p>\n","protected":false},"author":11,"featured_media":249,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"_monsterinsights_skip_tracking":false,"_monsterinsights_sitenote_active":false,"_monsterinsights_sitenote_note":"","_monsterinsights_sitenote_category":0,"footnotes":""},"categories":[24],"tags":[28,27,26,25],"class_list":["post-247","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-operational-research","tag-heuristic-search","tag-heuristics","tag-operational-research","tag-or"],"_links":{"self":[{"href":"https:\/\/www.lancaster.ac.uk\/stor-i-student-sites\/matthew-randall\/wp-json\/wp\/v2\/posts\/247","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.lancaster.ac.uk\/stor-i-student-sites\/matthew-randall\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.lancaster.ac.uk\/stor-i-student-sites\/matthew-randall\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.lancaster.ac.uk\/stor-i-student-sites\/matthew-randall\/wp-json\/wp\/v2\/users\/11"}],"replies":[{"embeddable":true,"href":"https:\/\/www.lancaster.ac.uk\/stor-i-student-sites\/matthew-randall\/wp-json\/wp\/v2\/comments?post=247"}],"version-history":[{"count":4,"href":"https:\/\/www.lancaster.ac.uk\/stor-i-student-sites\/matthew-randall\/wp-json\/wp\/v2\/posts\/247\/revisions"}],"predecessor-version":[{"id":264,"href":"https:\/\/www.lancaster.ac.uk\/stor-i-student-sites\/matthew-randall\/wp-json\/wp\/v2\/posts\/247\/revisions\/264"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/www.lancaster.ac.uk\/stor-i-student-sites\/matthew-randall\/wp-json\/wp\/v2\/media\/249"}],"wp:attachment":[{"href":"https:\/\/www.lancaster.ac.uk\/stor-i-student-sites\/matthew-randall\/wp-json\/wp\/v2\/media?parent=247"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.lancaster.ac.uk\/stor-i-student-sites\/matthew-randall\/wp-json\/wp\/v2\/categories?post=247"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.lancaster.ac.uk\/stor-i-student-sites\/matthew-randall\/wp-json\/wp\/v2\/tags?post=247"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}