本文來源於公眾號【程序猿聲】,作者舟寒丶
作業車間調度問題
問題模型
舉個栗子
有關禁忌搜索算法的內容,公眾號內有詳細教程:
干貨 |【算法】禁忌搜索算法(Tabu Search,TS)超詳細通俗解析附C++代碼實例
禁忌搜索算法求解帶時間窗的車輛路徑規划問題詳解(附Java代碼)
大家可以點擊超鏈接回顧相關知識,這里就不再細說了。
一般而言,用禁忌搜索算法解決問題時,需要注意的點無非就是以下幾個:初始解的生成;禁忌對象的選擇;鄰域動作算子的選擇。
我們簡單介紹代碼中使用的算子:
代碼展示
代碼是github上的開源代碼,作者是Thiebout Dewitte。具體代碼比較長,講解需要花很長的篇幅,但是注解比較詳細,因此就不在此展示了。我們簡單介紹一下輸入輸出,感興趣的朋友可以文末看到下載方式,自行下載研究。
輸入部分
輸入算例格式如下:
第一行為注釋部分,第二行數字分別為工件數、機器數。
輸出部分
運行代碼時,可以多種運行方式:
在Main.java文件內選擇所需運行模式,算例設置也在同一文件中。
測試單一算例:使用opendeurdagKulak()方法。將測試算例路徑放入Main.java中:
測試算例附帶在代碼內。
結果生成在編譯器內部:
前三行按照機器順序排列,cost表示總耗時,最后一行表示最長耗時的加工順序。
測試多個算例,分別生成table1、2:
在上方輸入算例所在文件夾,下方輸入輸出部分文件名。
table輸出可放置在LaTeX環境中,在此就不展示了。
代碼下載
進入公眾號輸入【JSPTS】不帶【】,即可下載對應Java代碼。