精品国产人成在线_亚洲高清无码在线观看_国产在线视频国产永久2021_国产AV综合第一页一个的一区免费影院黑人_最近中文字幕MV高清在线视频

0
  • 聊天消息
  • 系統消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發帖/加入社區
會員中心
創作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內不再提示

混合算法求解作業車間調度問題代碼解讀+完整JAVA代碼

電子設計 ? 來源:電子設計 ? 作者:電子設計 ? 2020-12-24 16:51 ? 次閱讀

前兩篇文章中,我們介紹了FJSP問題,并梳理了一遍HA算法。這一篇文章對小編實現的(很亂很爛的)代碼進行簡單解讀。

往期回顧:

種群進化+鄰域搜索的混合算法(GA+TS)求解作業車間調度問題(JSP)-算法介紹

混合算法(GA+TS)求解作業車間調度問題(JSP)-禁忌搜索部分

代碼下載請關注公眾號,后臺回復【FJSPHA】即可,不包括【】

代碼框架

代碼分為5個包,第一部分Data為用到的各類結構,第二部分GA為GA部分+第一個TS,第三部分主函數,第四、五部分是兩個TS。

算例放置在input文件夾中,這里準備了Mk系列算例,Kacem系列算例和論文中的簡單算例test.txt。

Main

算例輸入:

Main中還有一個輸出為CSV的函數,需要一個jar包,已經放在下載鏈接里了,不需要的同學也可以刪除。

Data

一堆亂七八糟的結構。這里簡單講一下Solution類和Graph類。

Solution類中包含多個print函數,比較重要的包括繪制甘特圖以及check解是否合法。

operationMatrix是解的主題,存放某個工件的某道工序的開始、結束時間,所在加工機器。

Graph類表示析取圖。nodeList是每臺機器上的node。其中起始點、終止點我單獨提取出來設置了兩個類。Graph中還包含了獲取critical path的DFS和update starting time & end time的Bellman算法。

GA

MyHybridAlgorithm類是GA的主函數。小編在實現的時候進行了多種測試,比如迭代的noImprove次數達到limit時進行擾動:

選擇哪種Tabu:

讀者在閱讀的時候請自己注意。

算法相關的參數我都做了初始化,請自行查找修改:

交叉、變異等操作包含在ChromosomeOperation類中,計算適應度的函數在CaculateFitness類中,TabuSearch1類是基于編碼的tabu,這里都不多展示了。

NeighbourSearch

這個包包含的是基于析取圖的tabu。NeighbourAlgorithms類相當于Main,包含解轉化為圖的函數:

TabuSearch2類為tabu主函數。NeighbourGraph類存放析取圖鄰域搜索產生的解。

DeleteNeighbourGraph類為析取圖中暫時去掉某個點后的情況,PM、PJ、SM、SJ代表precede、succeed、machine、job四條邊對應的點,deleteNode為刪去的點。

其中還有findLandR位置的二分查找函數,insert時的估值函數:

NeighbourSearch2

這個包為第三個基于甘特圖的tabu。

RTS類為tabu的主函數。解通過:ArrayList<ArrayList<Operation>> 的形式表示。

replan函數中包含了在甘特圖上進行swap操作后更新解的方法,有詳細注釋:

總結

到這里已經大致梳理了一遍代碼,但其中還有很多細節沒有講到,包括很多東西實現的不好,歡迎隨時和我交流。

由于是自己研究時寫的代碼,其中很多東西會比較亂,但是代碼中做了很多注解,仔細閱讀應該能看得懂的!

下載的壓縮包里包括我學習過程中看過的大部分文獻,包括主要參考的文獻,大家可以進一步閱讀研究。

審核編輯:符乾江
聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規問題,請聯系本站處理。 舉報投訴
  • 算法
    +關注

    關注

    23

    文章

    4599

    瀏覽量

    92643
  • JAVA
    +關注

    關注

    19

    文章

    2958

    瀏覽量

    104548
  • 代碼
    +關注

    關注

    30

    文章

    4748

    瀏覽量

    68355
收藏 人收藏

    評論

    相關推薦

    java反編譯能拿到源碼嗎

    Java反編譯是一種將編譯后的Java字節碼(.class文件)轉換回Java代碼的過程。雖然反編譯可以幫助理解代碼的邏輯和結構,但它并不
    的頭像 發表于 09-02 11:03 ?731次閱讀

    java反編譯的代碼可以修改么

    Java反編譯是一種將編譯后的Java字節碼(.class文件)轉換回源代碼的過程。反編譯后的代碼可以進行修改,但是需要注意,反編譯代碼的質
    的頭像 發表于 09-02 11:00 ?514次閱讀

    探討AI編寫代碼技術,以及提高代碼質量的關鍵:靜態代碼分析工具Perforce Helix QAC & Klocwork

    令軟件開發人員夜不能寐的事情比比皆是。如今,他們最關心的問題不再是如何用自己喜歡的語言(C、C++、Erlang、Java 等)表達最新的算法,而是人工智能(AI)。 本文中,我們將介紹AI編寫代碼
    的頭像 發表于 06-05 14:10 ?371次閱讀

    淺析FreeRTOS任務調度器的三種調度算法和應用

    FreeRTOS在MCU領域應用非常廣泛,今天就給大家講解一下FreeRTOS調度器中的三種調度算法,以及在瑞薩RZ/T2L MPU中的應用。
    的頭像 發表于 05-10 14:02 ?6996次閱讀
    淺析FreeRTOS任務<b class='flag-5'>調度</b>器的三種<b class='flag-5'>調度</b><b class='flag-5'>算法</b>和應用

    FreeRTOS任務調度器的三種調度算法講解(下)

    配置如下時,調度算法就會變成不帶時間片的搶占式調度
    的頭像 發表于 03-21 13:46 ?2487次閱讀
    FreeRTOS任務<b class='flag-5'>調度</b>器的三種<b class='flag-5'>調度</b><b class='flag-5'>算法</b>講解(下)

    g代碼和m代碼表示什么功能

    G代碼和M代碼是數控機床程序中常用的兩種指令代碼,用于控制數控機床的工作動作和運動方式。 G代碼是指控制機床工作動作的指令代碼,它是一種簡單
    的頭像 發表于 02-14 15:49 ?4009次閱讀

    淺談代碼優化與過度設計

    本文記錄了作者從“代碼優化”到“過度設計”的典型思考過程,這過程中涉及了很多Java的語法糖及設計模式的東西,很典型,能啟發思考,遂記錄下來。 有一天Review師妹的代碼,看到一行很難看的
    的頭像 發表于 01-19 10:05 ?517次閱讀
    淺談<b class='flag-5'>代碼</b>優化與過度設計

    Spring Boot和飛騰派融合構建的農業物聯網系統-改進自適應加權融合算法

    接上集: 上次實驗我們已經完成多傳感器融合算法的設計,本次實驗注意完成改進自適應加權融合算法設計。 一、背景 通過利用溫室控制系統來管理溫室內的各種設備并控制溫度、濕度,可以更好地探索和掌握環境因素
    發表于 01-06 12:18

    【飛騰派4G版免費試用】Spring Boot和飛騰派融合構建的農業物聯網系統-數據融合算法

    5.提交測試如下圖所示: 數據融合算法測試:將提交的數據存入mysql,對融合算法進行測試:步驟如下:1.開啟開發板2.將jar復制到開放麒麟的桌面上3.執行java -jar
    發表于 12-26 20:59

    傳感器數據融合算法python代碼

    的原理和應用,并給出一些使用Python編程語言實現傳感器數據融合算法的示例代碼。 首先,讓我們來了解傳感器數據融合算法的原理。傳感器數據融合算法的一個關鍵概念是通過多個傳感器的數據來
    的頭像 發表于 12-15 10:28 ?1377次閱讀

    devicestates指令故障代碼基本概念

    “devicestates”指令故障代碼是指在設備管理系統中發生錯誤或故障時,系統生成的特定代碼或消息。這些代碼和消息旨在為用戶或技術支持人員提供有關設備故障的信息和診斷。通過檢查和解讀
    的頭像 發表于 12-08 14:19 ?1513次閱讀

    java redis鎖處理并發代碼

    問題。 本文將詳細介紹如何在Java代碼中使用Redis實現并發代碼的鎖處理。我們將分為以下幾個方面來討論: Redis分布式鎖的原理 Redis分布式鎖的實現方式 在Java中使用R
    的頭像 發表于 12-04 11:04 ?922次閱讀

    java文檔注釋的作用

    Java文檔注釋(JavaDoc)是一種特殊的注釋格式,用于對Java代碼中的類、方法和字段進行解釋和說明。它有助于開發人員理解代碼的功能、使用和注意事項,并且還可以用于生成軟件文檔
    的頭像 發表于 11-28 17:02 ?873次閱讀

    java中的注釋有三類分別是

    Java編程語言中,注釋是非常重要的一部分,它們提供了對代碼的解釋和說明。注釋可以幫助開發人員更好地理解代碼,使代碼更易于維護和理解。在Java
    的頭像 發表于 11-28 16:47 ?1169次閱讀

    PID算法代碼實現

    PID算法代碼實現 舵機控制 在對舵機的控制中,我采用的是位置式PD算法。 將左右電感的偏差值賦給error,再代入公式進行解算,最后傳給舵機輸出子函數,控制舵機正確打角。 void
    的頭像 發表于 11-28 15:57 ?631次閱讀