網絡規劃中的啟發式算法 --數學化的經驗

2021-02-15 小鼴鼠談供應鏈

本文為公眾號「小鼴鼠談供應鏈」的第46篇原創文章,轉載需附帶作者和出處,如需加白名單請在後臺留言。

上一篇聊了《網絡規劃中的重心法--人人能懂的算法》,所謂人人能懂得前提是你沒完全忘記初中數學。所幸的是會點開這類標題讀的小夥伴,果然都能想起來勾股定理,算是人人能懂了。這篇來聊一下,理論上是依賴經驗人人都能做的: 網絡規劃中的啟發式算法。但人人能做不代表結果能做好,啟發式算法有高效的地方,也能把人帶溝裡。

先看定義,啟發式算法(heuristic algorithm):一個基於直觀或經驗構造的算法,在可接受的花費(指計算時間和空間)下給出待解決組合優化問題每一個實例的一個可行解,該可行解與最優解的偏離程度一般不能被預計。

在網絡規劃中,所謂的最短路徑問題有很多種意思, 使用啟發式算法指的是一個在一個搜尋樹的節點上定義的函數,用於評估從此節點到目標節點最便宜的路徑。啟發式算法是一種技術,這種技術使得在可接受的計算成本內去搜尋最好的解,但不一定能保證所得的可行解是最優解,甚至在多數情況下,無法闡述所得解同最優解的近似程度。


看到這裡還能忍住沒關掉這文的小夥伴給自己鼓個掌,堅持著再看點背景內容就更明白些了。物流網絡規劃是算法的應用,它的抽象表達方式就是數學模型。運籌學的的一個分支是解決離散的優化問題,通過對數學的應用解決離散事件的最優編排、分組、順序或篩選。應用於信息技術、經濟管理、工業工程、交通運輸等領域。

通俗的解釋就是,人在解決問題時所採取的一種根據經驗規則進行發現的方法。其特點是在解決問題時,利用過去的經驗,選擇已經行之有效的方法,而不是系統地、以確定的 步驟去尋求答案。啟發式解決問題的方法是與算法相對立的。算法是把各種可能性都一一進行嘗試,最終能找到問題的答案,但它是在很大的問題空間內,花費大量 的時間和精力才能求得答案。啟發式方法則是在有限的搜索空間內,大大減少嘗試的數量,能迅速地達到問題的解決。但由於這種方法具有嘗試錯誤的特點,所以也 有失敗的可能性。科學家的許多重大發現,常常是利用極為簡單的啟發式規則。

啟發式算法的優勢是相對簡單直觀,多數情況下運算快,程序簡單易於修改,但它的劣勢是表現不穩定,不能保證最優解,算法的好壞依賴於實際問題、經驗和設計者的技術,可能無法避免陷入局部最優解。

比如生產製造企業有2個工廠,客戶分布在8個區域,規劃建立3處配送中心,有5個配送中心備選,分別已知各備選配送中心的固定成本和單位變動成本,各工廠產量和各區域客戶需求量,利用啟發式算法可以求解。抱歉公式輸入太過耗時,書上的直接拍照貼上來又不清晰,就不解釋具體算法了。這個簡單的案例中,啟發式算法可以快速找出不同貨量區間下的倉庫選點。


算法是程序設計的靈魂,代表著用系統的方法描述解決問題的策略與機制。作為網絡規劃程序的使用者,即便不需要清楚具體的公式,也需要了解算法背後的底層邏輯,這樣才能在實際應用時的比較選擇中做出更靠譜的判斷。希望這篇對你了解算法有幫助。

相關焦點

  • 啟發式算法 --數學化的經驗
    這篇來聊一下,理論上是依賴經驗人人都能做的: 網絡規劃中的啟發式算法。但人人能做不代表結果能做好,啟發式算法有高效的地方,也能把人帶溝裡。先看定義,啟發式算法(heuristic algorithm):一個基於直觀或經驗構造的算法,在可接受的花費(指計算時間和空間)下給出待解決組合優化問題每一個實例的一個可行解,該可行解與最優解的偏離程度一般不能被預計。
  • 【平臺】啟發式算法簡談(一)
    求解要選擇算法,只有我們對各種算法的優缺點都很熟悉後才能根據實際問題選出有效的算法。但是對各種算法都了如指掌是不現實的,但多知道一些,會使你的選擇集更大,找出最好算法的概率越大。現在研一,要開題了些點文獻綜述,願與大家分享。大自然是神奇的,它造就了很多巧妙的手段和運行機制。受大自然的啟發,人們從大自然的運行規律中找到了許多解決實際問題的方法。
  • blast啟發式算法概述
    啟發式算法是一種來自於經驗的算法,區別於有精確數學推理的算法。
  • 自動駕駛路徑規劃技術-A*啟發式搜索算法
    ,相比於Dijkstra算法,它提供了搜索方向的啟發性指引信息,在大多數情況下大大降低了Dijkstra算法無效的冗餘的擴展搜索,因此也成為自動駕駛路徑規劃中的首選算法。1968年發明的A*算法就是把啟發式方法(heuristic approaches)如BFS,和常規方法如Dijsktra算法結合在一起的算法。有點不同的是,類似BFS的啟發式方法經常給出一個近似解而不是保證最佳解。然而,儘管A*基於無法保證最佳解的啟發式方法,A*卻能保證找到一條最短路徑。1.3 A*算法我將集中討論A*算法。
  • 再談啟發式搜索算法
    這個算法可用來執行最優搜索、廣度優先搜索或深度優先搜索。在廣度優先搜索中,新節點只要放在OPEN的尾部即可(先進先出, FIFO),節點不用重排。在深度優先搜索中,新節點放在OPEN的開始(後進先出,LIFO)。在最優(也叫啟發式)搜索中,按照節點的啟發式方式來重排OPEN。
  • 自我代碼提升之啟發式算法(番外篇)
    旅行商本期給大家帶來一些啟發式算法的介紹和代碼實現。嚴格來說,啟發式算法並不屬於機器學習領域的方法,其解決的問題也並不是分類和回歸預測,因此本篇屬於該系列番外篇。啟發式算法簡介  在數學建模的經典問題當中,有一種問題是最優化問題,即在給定條件下,給出能夠是的目標實現最優的答案的方法。對預測類問題,如果要確保找出最優的解,那麼可能需要遍歷嘗試所有可能的選擇,在絕大多數場景下,面對指數增長的搜索空間,幾乎是不可取的。
  • 路徑規划算法學習
    算法原理:參考路徑規划算法學習Day1https://blog.csdn.net/CltCj/article/details/110529598此方法會結合網絡佔用法-柵格法來進行實現提示:本文會用matlab實現Dijkstra算法,並且會分享一些函數用法的連結,也是本人學習得來,供大家參考,批評指正。
  • 【算法】混合整數規劃/離散優化的精確算法--分支定界法及優化求解器
    (線性規劃的可行域是藍色線段內部所有的區域)凸包(Convex Hull):整數規劃所有可行解的凸包圍,即圖中紅線組成的多面體(想像多維的情況)。凸包是未知的,已知的是藍線的不等式,並且凸包是非常難求解的,或者形成凸包需要指數數量級的線性不等式(圖中紅線)。如果知道了凸包的所有線性表示,那麼整數規劃問題就可以等價為求解一個凸包表示的線性規劃問題。
  • 什麼是啟發式?什麼是產生式?
    下面會進行簡要地分析和說明。啟發式算法(heuristic algorithm)是相對於最優化算法提出的。一個問題的最優算法求得該問題每個實例的最優解。例如它常能發現很不錯的解,但也沒辦法證明它不會得到較壞的解;它通常可在合理時間解出答案,但也沒辦法知道它是否每次都可以這樣的速度求解。有時候人們會發現在某些特殊情況下,啟發式算法會得到很壞的答案或效率極差,然而造成那些特殊情況的數據組合,也許永遠不會在現實世界出現。因此現實世界中啟發式算法常用來解決問題。啟發式算法處理許多實際問題時通常可以在合理時間內得到不錯的答案。
  • 論文精選|利用有效的啟發式和迭代貪婪算法實現分布式環境中阻塞流程車間的生產調度
    將 NEH 擴展至DPFSP,從在第一步中使用什麼優先級規則對作業進行排序和如何在第二步中增強插入過程來進行改進。基於這一思想,本文提出了五種算法,分別稱為NEH2L、NEH2D、NEH2E、NEH2E _ ex和NEH2EE。
  • 啟發式算法之遞歸與去遞歸
    啟發式算法之遞歸與去遞歸一個問題的複雜性
  • 路徑規划算法:A*算法
    A*算法是啟發式搜索,是一種儘可能基於現有信息的搜索策略,也就是說搜索過程中儘量利用目前已知的諸如迭代步數,以及從初始狀態和當前狀態到目標狀態估計所需的費用等信息
  • A*算法簡介
    啟發式算法(heuristic algorithm),是相對於最優算法的一種算法類型。在許多算法 中,我們最終得到了一個問題的最優解;但在有些算法中,我們通過我們構造的方法, 最終得到了一個在我們的邏輯內認為可行的解,但這個解並不一定是最優解,甚至其相 對於最優解的偏離程度都是我們難以評估的。這種算法被我們稱作啟發式算法。(詳見百度百科「啟發式算法」)    2.
  • 模擬退火算法詳解
    搜索算法包括盲目搜索和啟發式搜索,按照預定的控制策略實行搜索,在搜索控制中獲取的中間信息不用來改進控制搜索,稱為盲目搜索,反之,稱為啟發式搜索。關於「啟發式」有兩種看法:(1)任何有助於找到問題的解,但不能保證找到解的方法均是啟發式方法;(2)有助於加速求解過程和找到較優解的方法是啟發式方法。盲目搜索有深度優先、廣度優先、代價優先、向前、向後、雙向。。。
  • 計算機科學中最重要的32個算法
    )的Christoph Koutschan博士在自己的頁面上發布了一篇文章,提到他做了一個調查,參與者大多數是計算機科學家,他請這些科學家投票選出最重要的算法,以下是這次調查的結果,按照英文名稱字母順序排序。
  • AI先驅、A*算法發明者Nils Nilsson去世
    Nils Nilsson 教授是人工智慧領域的元老級人物,他在搜索、規劃、知識表示等方面作出了卓越的貢獻。據 Nils Nilsson 教授個人主頁介紹,他在斯坦福國際研究院(SRI International)人工智慧中心工作了 23 年,致力於統計和神經網絡模式識別方法的研究。
  • 如何進行可用性啟發式評估
    作為用戶體驗專家,你可以自由選擇調研的方法,甚至可以使用超越傳統工具的方法,但是今天,我想回歸簡單,談一談啟發式評估方法。什麼是啟發式評估?「啟發式評估是指安排一組評估人員檢查界面,並判斷其是否與公認的可用性原則相符(「啟發法」)。」
  • AutoLayout 中的線性規劃 - Simplex 算法
    本文與 iOS 關係不大,多半偏向 paper 的學習和算法介紹,請讀者根據興趣自行閱讀。溫習線性規劃當我們在 Storyboard 上建立完一堆約束後,發現其實所有的約束都可以用多個約束間的不等式關係來描述。於是乎將 UI 的布局問題,就轉化成了一個線性規劃問題。如何求解這個線性規劃問題呢?
  • 計算機、數學、運籌學等領域的36個重要算法
    A *搜索算法  圖搜索算法,用於查找從給定初始節點到給定目標節點的路徑。它採用啟發式估計,通過估計通過該節點的最佳路徑對每個節點進行排名。它按照此啟發式估計的順序訪問節點。因此,A *算法是最佳優先搜索的示例。  2.   波束搜索 波束搜索是一種搜索算法,它是最佳優先搜索的優化。與最佳優先搜索一樣,它使用啟發式函數來評估它檢查的每個節點的承諾。
  • 數學、運籌學、計算機等領域的36個重要算法
    A *搜索算法  圖搜索算法,用於查找從給定初始節點到給定目標節點的路徑。它採用啟發式估計,通過估計通過該節點的最佳路徑對每個節點進行排名。它按照此啟發式估計的順序訪問節點。因此,A *算法是最佳優先搜索的示例。  2.   波束搜索 波束搜索是一種搜索算法,它是最佳優先搜索的優化。與最佳優先搜索一樣,它使用啟發式函數來評估它檢查的每個節點的承諾。