智能算法(GA、DBO等)求解零空閑流水車間調度問題(NIFSP)

先做一個聲明:文章是由我的個人公眾號中的推送直接復制粘貼而來,因此對智能優化算法感興趣的朋友,可關注我的個人公眾號:啟發式算法討論。我會不定期在公眾號里分享不同的智能優化算法,經典的,或者是近幾年提出的新型智能優化算法,并附MATLAB代碼。

本期的主要參考資料:

[1] 潘全科, 高亮, 李新宇. 流水車間調度及其優化算法[M]. 武漢: 華中科技大學出版社, 2013.

不允許機器停止運轉,這就是所謂的零空閑調度問題。圖1(a)所示為一個3×3的零空閑流水車間調度問題的甘特圖,由于機器連續運轉的要求,當第一個工件到達機器2時,該機器并不能立即開工。與圖1(b)所示的置換流水車間調度相比,機器2的開工時間有所滯后。因此,零空閑流水車間調度問題不同于一般的置換流水車間調度問題。

圖片

圖1

01
問題描述

這里主要考慮以最大完成時間為優化目標的零空閑流水車間調度問題(no-idle flow-shop scheduling problem, NIFSP),記為Fm|perm, no-idle|Cmax。當m≥3時,這類調度問題就是NP-Hard 問題。

Fm|perm, no-idle|Cmax問題可描述為:有n個工件按照相同的工藝路線在m臺機器上加工,約定所有機器上工件的加工次序都相同,要求在同一機器上加工的相鄰兩工件之間沒有空閑時間。假設機器之間存在無限大的緩沖區,一個工件不能同時由多臺機器加工,一臺機器也不能同時加工多個工件。已知工件在各機器上的加工時間。問題是如何安排各工件的生產次序,使得最大完成時間取值最小。

02
數學模型

(以下內容截自推文開頭提到的參考書籍,潘老師的那本書。)

圖片

圖片

03
加工性能指標計算

最大完成時間(Cmax)是研究零空閑流水車間調度問題最常用的加工性能指標。NIFSP的最大完工時間有五種計算方法,其時間復雜度均為O(nm)。

方法一:計算機器之間的開工時間差

方法二:Kalezynski和Kamburowski方法(轉化為F2|perm|Cmax)

方法三:前向計算法

方法四:反向計算法

方法五:雙向計算法

這里主要介紹前向計算法。(以下內容截自推文開頭提到的參考書籍,潘老師的那本書。)其他計算方法也可以在這本書籍里查閱。選擇前向計算法是為了方便畫甘特圖。

圖片

圖片

圖片

04
智能算法(GA、DBO等)編碼方法

對于遺傳算法(GA),因為其算法本身是離散的,通過選擇、交叉、變異產生下一代。因此,一條染色體就代表一種調度方案。即工件的排序即是它的個體編碼。例如,10個工件的排序方案,用MATLAB初始化GA的一個個體(一條染色體)就是:

x=randperm(10);

效果如下所示:

圖片

但是對于粒子群優化(PSO)、麻雀搜索算法(SSA)、蜣螂優化(DBO)等,它們本身是針對連續優化問題提出的,所以在編碼時需要經過進一步的處理。與GA一樣,一個調度方案(工件排序)表示一個個體,可以采用SPV規則,將實數編碼轉成整數編碼。例如,10個工件的排序方案,用MATLAB初始化DBO的一個個體(一條染色體)就是:

jobNum=10; %?工件數x=unifrnd(0,1,[1?jobNum]);?%?產生10個[0,1]之間隨機數os?=?1:1:jobNum;?%?產生從1到10的數列[~,?up_index]?=?sort(x);?%?對x進行降序排序, 得到位置序列x?=?os(up_index);?%?按照位置序列排序工件,?得到一個調度方案

效果如下:

圖片

此外,與SPV規則相反,Li等提出最大排序值法(Largest rank value, LRV),也是將連續值映射成離散排列常用的方法之一。如圖2所示,LRV將代表種群個體的一組連續值按降序排列生成一組工件排序。(參考文獻:[2] LI X, YIN M. An opposition-based differential evolution algorithm for permutation flow shop scheduling based on diversity measure [J]. Advances in Engineering Software, 2013, 55(8): 10-31.)

圖片

圖2 最大排序值法的表示方法

05
數值實驗

這里對DBO求解NIFSP的效果進行簡單測試,調度問題算例選用Rec(21個)。最大迭代次數T設置為2000,種群規模NP設為60。下面展示的結果都是算法隨機運行一次得到的結果。

首先,以Rec05(20工件×5機器為例),展示DBO隨機運行一次的求解結果。圖3繪制了種群每代的最優適宜度收斂曲線和平均適宜度收斂曲線:

圖片

圖3 DBO-NIFSP對于Rec05的收斂曲線

圖4繪制了調度結果的甘特圖:

圖片

圖4 DBO-NIFSP對于Rec05的甘特圖

其次,以Rec11(20工件×10機器為例),展示DBO隨機運行一次的求解結果,如圖5和圖6所示。

圖片

圖5 DBO-NIFSP對于Rec11的收斂曲線

圖片

圖6 DBO-NIFSP對于Rec11的甘特圖

最后,以Rec41(75工件×20機器為例),展示DBO隨機運行一次的求解結果,如圖7和圖8所示。

圖片

圖7 DBO-NIFSP對于Rec41的收斂曲線

圖片

圖8 DBO-NIFSP對于Rec41的甘特圖

06
MATLAB代碼

智能算法(GA、PSO、DE、GWO、SSA、DBO等)求解零空閑流水車間調度問題(no-idle flow-shop scheduling problem, NIFSP)的MATLAB代碼,其中:main.m是主函數,直接運行即可;以算法簡稱命名的.m算法代碼;gantt_chart.m用來繪制甘特圖;objective.m是目標函數,即計算Makespan;method.pdf用來說明Makespan的計算方法,代碼采用的是前向計算方法;Car.xlsx和Rec.xlsx是流水車間調度的兩個經典測試集。

輸出結果包括Makespan、工件排序、計算時間、最優適宜度收斂曲線、平均適宜度收斂曲線、甘特圖。

博主選擇了十種算法來求解NIFSP。主要是幾種經典算法和幾個近幾年的高引算法。對應的MATLAB代碼鏈接如下:

遺傳算法(GA)求解NIFSP

差分進化(DE)求解NIFSP關注公眾號,里面有鏈接
粒子群優化(PSO)求解NIFSP關注公眾號,里面有鏈接
灰狼優化(GWO)求解NIFSP關注公眾號,里面有鏈接
鯨魚優化算法(WOA)求解NIFSP關注公眾號,里面有鏈接
哈里斯鷹優化(HHO)求解NIFSP關注公眾號,里面有鏈接
麻雀搜索算法(SSA)求解NIFSP關注公眾號,里面有鏈接
非洲禿鷲優化算法(AVOA)求解NIFSP關注公眾號,里面有鏈接
蜣螂優化(DBO)求解NIFSP關注公眾號,里面有鏈接
星鴉優化算法(NOA)求解NIFSP關注公眾號,里面有鏈接
以上十種智能優化算法(GA、DE、PSO、GWO、WOA、HHO、SSA、AVOA、DBO、NOA)求解NIFSP的全家桶關注公眾號,里面有鏈接

可通過下方鏈接下載代碼清單,在里面尋找需要的算法代碼,然后去對應的鏈接獲取。清單會同步更新,一旦有新的代碼,就可以在清單里找到。清單里面有部分代碼是開源獲取的。可隨時免費下載。

鏈接:https://pan.baidu.com/s/1SFDMplrL7tiqGZlrpOSGYg

提取碼:8023

此外,歡迎添加算法交流群進行交流:912369858

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/394679.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/394679.shtml
英文地址,請注明出處:http://en.pswp.cn/news/394679.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

《構建之法》讀后感 二

個人感受部分: 01. 過去的我對自己的職業沒有一個規劃,認為讀大學就是拿畢業證,至于以后找到什么樣的工作從來沒有考慮過。在拿到一個軟件作業時,總是在設計階段就把它想得特別完美,想讓他沒有任何出錯的做出來&#x…

android 簡單實現圓角,Android 實現圓角圖片的簡單實例

Android 實現圓角圖片的簡單實例實現效果圖:本來想在網上找個圓角的例子看一看,不盡人意啊,基本都是官方的Demo的那張原理圖,稍后會貼出。于是自己自定義了個View,實現圖片的圓角以及圓形效果。效果圖:Andr…

zookeeper介紹及集群的搭建(利用虛擬機)

ZooKeeper ?   ZooKeeper是一個分布式的,開放源碼(apache)的分布式應用程序協調服務,是Google的Chubby一個開源的實現,是Hadoop和Hbase、dubbox、kafka的重要組件。它主要用來解決分布式集群中應用系統的一致性問題…

pythondict初始化_利用defaultdict對字典進行全局初始化。

通常我們在操作字典時,如果讀取的鍵未被初始化,則會拋出KeyError的錯誤,這個是我們都很熟悉的。那么一般的解決方式是使用異常處理或者是調用字典的get方法來避免出現這個異常。 可以看到,這兩種寫法都比較繁瑣,第二種…

標準庫類型String

定義和初始化string對象 初始化string對象方式 string s1 默認初始化,s1是一個空串 string s2(s1) s2是s1的副本 string s2 s1 等價于s2(s1), s2是s1的副本 string s3("value") s3是字面值"value"的副本,除了字面值最后的那個…

輕量級數據庫中間件利器Sharding-JDBC深度解析(有彩蛋)

講師介紹張亮 當當架構部總監 負責分布式中間件和私有云平臺建設 目前主導開源項目:Elastic-Job及Sharding-JDBC 主題簡介: 1、關系型數據庫中間件核心功能介紹 2、Sharding-JDBC架構及內核解析 3、Sharding-JDBC未來展望 一、關系型數據庫中間件核心功…

python字典嵌套字典的情況下獲取某個key的value

最近在用python寫接口的測試程序,期間用到解析字典獲取某個key的value,由于多個接口返回的字典格式不是固定的并存在多層嵌套的情況。在字典的方法中也沒有找到可直接達到目的的方法(也可能是我對字典的方法了解的不深的緣故),于是自己寫了個…

系統在此應用程序堆棧溢出_從部署我的第一個完整堆棧Web應用程序中學到的經驗教訓...

系統在此應用程序堆棧溢出by Will Abramson威爾艾布拉姆森(Will Abramson) 從部署我的第一個完整堆棧Web應用程序中學到的經驗教訓 (Lessons learned from deploying my first full-stack web application) I recently achieved one of my long-term goals: deploying my firs…

const 常量_條款03:盡可能使用const

const 允許你指定一個語義約束(也就是指定一個“不該被改動”的對象),而編譯器會強制實施這項約束。1、const指針如果關鍵字const出現在星號左邊,表示被指物是常量;如果出現在星號右邊,表示指針自身是常量&…

javascript高級程序設計---js事件思維導圖

繪制思維軟件與平時用的筆記,以及導出功能,這三個問題綜合起來,于是我把思維導圖分開畫 1、js事件的基本概念 2、js事件的事件處理程序 3、js事件的事件對象 轉載于:https://www.cnblogs.com/Jamie1032797633/p/10567419.html

jq挑戰30天——打字機效果+小程序

<!doctype html><html><head><meta charset"utf-8"><title>基于jQuery實現的打字機效果-jq22.com</title><script src"http://libs.baidu.com/jquery/1.11.3/jquery.min.js"></script><style></…

和 Thrift 的一場美麗邂逅

一. 與 Thrift 的初識 也許大多數人接觸 Thrift 是從序列化開始的。每次搜索 “java序列化” “方式”、“對比” 或 “性能” 等關鍵字時&#xff0c;搜索引擎總是會返回一大堆有關各種序列化方式的使用方法或者性能對比的結果給你&#xff0c;而其中必定少不了 Thrift&#…

instagram技術_Instagram9位科技女孩進行技術采訪的主要技巧

instagram技術by Rachel通過瑞秋 Instagram9位科技女孩進行技術采訪的主要技巧 (Top tips for technical interviews from nine of Instagram’s tech girls) My job-hunt came to an end a few weeks ago. After endless phone interviews, coding challenges, and on-sites,…

彈出框 每次打開 滾動條置頂_微信置頂文字怎么弄?微信置頂一句話教程

今日支付寶紅包支付寶首頁搜索511501453馬上領取紅包(支付寶雙十二活動&#xff0c;瓜分15億紅包)(領取后一定要記得使用&#xff0c;不然會浪費的呦&#xff0c;更會影響第二天的領取&#xff01;)奶思靚機“ 一 個 有 用 的 公 眾 號 の ”嗨&#xff0c;最近很流行在微信上面…

Python學習_字符串格式化

#!/usr/bin/env python # -*- coding:utf-8 -*-# 百分號格式化 # %[(name)[flags][width].[precision]]typecode # name : 指定占位符的key # flags : - 空格 0 # width : 寬度 # precision : 小數點后保留的位數 # typecode : 必需,數據類型 # 字符串里面有%的時候, %%表示一…

python 3 面向過程編程

python 3 面向過程編程 核心是過程&#xff08;流水線式思維&#xff09;&#xff0c;過程即解決問題的步驟&#xff0c;面向過程的設計就像設計好一條工業流水線&#xff0c;是一種機械式的思維方式。 1、優點&#xff1a;程序結構清晰&#xff0c;可以把復雜的問題簡單化&…

在ionic/cordova中使用百度地圖插件

在ionic項目中&#xff0c;如果想實現定位功能&#xff0c;可以使用ng-cordova提供的cordova-plugin-geolocation。 但由于高墻的緣故&#xff0c;國內andorid環境下&#xff0c;此插件不起作用&#xff08;ios環境下可用&#xff09;。 國內比較好的是現實使用百度地圖提供的A…

django國際化與html語言,Django 國際化

Django 國際化Django 支持國際化&#xff0c;多語言。Django的國際化是默認開啟的&#xff0c;如果您不需要國際化支持&#xff0c;那么您可以在您的設置文件中設置 USE_I18N False&#xff0c;那么Django會進行一些優化&#xff0c;不加載國際化支持機制。NOTE: 18表示Intern…

mongo 刪除節點_將生產節點/ Express Mongo App部署到AWS —反思

mongo 刪除節點在AWS中部署生產Web應用程序的經驗教訓 (Lessons learned deploying a production web application in AWS) 背景 (Background) This is not a code-based tutorial. It consists of all the things I wish I knew before I started the project and the steps I…

漢諾塔問題遞歸算法python代碼_[python]漢諾塔問題遞歸實現

一、問題描述及算法步驟 漢諾塔問題的大意是有三根柱子a, b, c&#xff0c;現在a柱有N個盤子從下往上尺寸遞減排列&#xff0c;要求&#xff1a; 1. 將a上的盤子移動到c柱上; 2. 每次移動一個盤子; 3. 柱子上的盤子始終必須是大的在下面image.png 漢諾塔問題的經典實現算法步驟…