多工序、多机台(产线)环境下的排程要点
關(guān)于生產(chǎn)計(jì)劃排程的種類及其特性
釋義:文中提到的資源,是指需要完成一個(gè)生產(chǎn)作業(yè)(或稱任務(wù),生產(chǎn)任務(wù))所需的生產(chǎn)條件,例如機(jī)臺(tái)、原料等,稱為廣義資源。
對(duì)于生產(chǎn)計(jì)劃,常見有以下四種類型:
單一工序,單一資源種類.
單一工序,多資源種類.
多工序,單一資源種類(較少見).
多工序,多資源種類.
下面對(duì)上述四種生產(chǎn)計(jì)劃進(jìn)行逐一分析,本文的分析,著重于計(jì)劃的優(yōu)化實(shí)現(xiàn),而不是硬性規(guī)則的確保。例如通過工序的就緒情況來確定資源的就緒要求,例如MRP等,這些硬性的約束可以通過規(guī)則引擎(例如Drools)來確保在生成計(jì)劃過程中,計(jì)劃的安排滿足各種業(yè)務(wù)規(guī)則;而無需通過規(guī)劃引擎(例如Optaplanner),在滿足了硬性業(yè)務(wù)規(guī)則的基礎(chǔ)上進(jìn)一步優(yōu)化。
單一工序,單一資源種類
對(duì)于單一工序,單一種類資源的情況,是最簡(jiǎn)單的一種排程場(chǎng)景。即一個(gè)產(chǎn)品的生產(chǎn)過程只需使用同一種資源,進(jìn)行一次加工即完成了產(chǎn)品的整個(gè)生產(chǎn)過程。這種情況下,既然是單一工序,那也就沒有了工序的先后資源的限制;單一種類資源,即表示沒有了資源的選擇優(yōu)化。在生產(chǎn)實(shí)踐中,此類生產(chǎn)計(jì)劃通常是對(duì)產(chǎn)品工序路線中,眾多工序中的一個(gè)較重要的工序進(jìn)行制定計(jì)劃時(shí)使用。需要進(jìn)行優(yōu)化的主要是對(duì)資源的使用分配,例如各機(jī)之間實(shí)現(xiàn)負(fù)荷平衡等需求。我們?cè)趯?shí)現(xiàn)這類計(jì)劃時(shí),需要通過設(shè)定機(jī)臺(tái)平衡的約束,讓引擎在為工序分配任務(wù)時(shí),盡可能地實(shí)現(xiàn)同一類機(jī)的負(fù)荷平衡。例如在印刷生產(chǎn)中,對(duì)排在最后的手工工序制定生產(chǎn)計(jì)劃時(shí),需要根據(jù)各個(gè)產(chǎn)線的人力安排情況,按比例安排定額任務(wù)。這些情況可使用“單一工序、單一種類”資源計(jì)劃。
單一工序,多資源種類
單一工序 ,多種類資源情況,僅對(duì)產(chǎn)品的一個(gè)工序進(jìn)行排產(chǎn),僅可用于這個(gè)工序的資源是多種多樣的,并且各種資源之間可以互換的。此類計(jì)劃主要是為了實(shí)現(xiàn)資源的優(yōu)化分配。即按照一定的原則來對(duì)各個(gè)工序進(jìn)行資源安排。例如:各種資源使用成本各不相同,在制定計(jì)劃時(shí),為了降低生產(chǎn)成本,應(yīng)該在確保其它更高優(yōu)先級(jí)的約束或硬性約束的前提下,盡量使用低成本的資源進(jìn)行生產(chǎn)。舉個(gè)實(shí)際的例子,在印刷行業(yè)中,對(duì)于對(duì)印張進(jìn)行印刷的工序,有些印張可以通過CMYK四色印制,也可以通過調(diào)配特殊色,通過專色印制;但前者的成本相比后者更低,前后兩種印刷方式就表示兩種資源。在對(duì)印刷工序定制生產(chǎn)計(jì)劃時(shí),就會(huì)優(yōu)先使用CMYK印刷,但這個(gè)也不是絕對(duì)的,例如如果CMYK資源已經(jīng)超出負(fù)荷時(shí),不動(dòng)用專色印刷就無法實(shí)現(xiàn)按時(shí)交貨時(shí),還是會(huì)放棄成本這個(gè)約束,來遷就交期這個(gè)更高優(yōu)先級(jí)的約束的。
多工序,單一資源種類
多個(gè)工序,單一種類資源的情況,則相對(duì)較少見。即計(jì)劃中需要制定整個(gè)產(chǎn)品工序路線中的所有工序的資源和時(shí)間,其中資源只需要只有一種可選。可以理解到,這種情況對(duì)資源分配的要求就較低了,計(jì)劃著重于對(duì)工序的前后關(guān)系制約了或工序自身的其它因素的優(yōu)化。即是在資源分配上,如第一種情況:“單一資源、單一任務(wù)”一樣,基于資源利用的一些原則進(jìn)行資源分配。而在安排工序的加工時(shí)間問題上,則需要根據(jù)產(chǎn)品的工序路線,實(shí)現(xiàn)對(duì)前后工序在時(shí)間上的次序關(guān)系;而這種次序又受到資源分配的限制。例如:如果印刷的第二工序中(有些企業(yè)稱為印后加工),有過油、過膠、過UV三個(gè)工序,如果有一種機(jī)臺(tái)同時(shí)可以實(shí)現(xiàn)這三種工序的,那么就滿足了“多個(gè)工序、單一資源種類”的場(chǎng)景。這時(shí)候關(guān)于工序的資源分配,會(huì)有相應(yīng)的資源使用約束。但更重要的約束是:一個(gè)產(chǎn)品的多個(gè)工序的處理次序上,這個(gè)次序必然是根據(jù)產(chǎn)品的工序路線設(shè)定的資源來執(zhí)行的,否則就違反了硬性約束。所以,綜合上述的資源分配和工序資源兩種要求,我們需要面對(duì)的是兩上互相矛盾的問題:1. 對(duì)于同一個(gè)產(chǎn)品需要確保其執(zhí)行的工序與工序路線上設(shè)定的一致, 2.對(duì)于一個(gè)資源(例如機(jī)臺(tái))上的生產(chǎn)效率而言,如何可以實(shí)現(xiàn)更多的同工序連接生產(chǎn),因?yàn)榧词故鞘褂猛毁Y源,通常在該資源上,不同工序的生產(chǎn)任務(wù)之間的切換,會(huì)產(chǎn)生成本的,有可能是時(shí)間成本,也有可能是具體的貨幣成本。所以,難點(diǎn)就在于如何平衡上面兩個(gè)問題,從而實(shí)現(xiàn)資源利用率最大化和工序資源不被違反。
多工序,多資源種類
多個(gè)工序,多資源種類的和產(chǎn)計(jì)劃,也是目前最為常見,也是最為復(fù)雜的生產(chǎn)計(jì)劃,是本文討論的重點(diǎn)。多工序與前一個(gè)問題一樣,是針對(duì)整個(gè)產(chǎn)品的工序路線進(jìn)行排產(chǎn)。而且生產(chǎn)各個(gè)工序所用的資源是不同種類的。因此,這種情況我們面對(duì)了兩個(gè)相對(duì)零散也有交互的矛盾:1.對(duì)于一個(gè)產(chǎn)品而言,其多個(gè)工序是依據(jù)工序路線形成生產(chǎn)資源的; 2.多種資源就表示各個(gè)生產(chǎn)工序所使用的資源有可能不一樣,也有可能一樣的。因?yàn)楣ば虻那昂蟠涡虻南拗圃颍?dāng)引擎在對(duì)一個(gè)工序完成了資源分配后,進(jìn)一步進(jìn)行生產(chǎn)時(shí)間的分配,但因?yàn)橥划a(chǎn)品的工序執(zhí)行次序,是需要按照工序路線的先后次序來執(zhí)行的,也就是說計(jì)劃中,除了需要分配好的資源外,還要確保這個(gè)資源在指定的時(shí)間段內(nèi),沒有被其它產(chǎn)品的生產(chǎn)任務(wù)占用。那么當(dāng)同時(shí)對(duì)多個(gè)產(chǎn)品進(jìn)行排產(chǎn)時(shí),各個(gè)產(chǎn)品的工序路線形成的工序生產(chǎn)序列和資源分配方案,很容易就形成了膠著狀態(tài),甚至在多個(gè)資源之間會(huì)出現(xiàn)死鎖狀態(tài)。
下面,我們以多個(gè)不同種類的機(jī)臺(tái),處理工序路線上多個(gè)工序的案例,來計(jì)劃“多工序、多資源種類”的情況,并分析需要實(shí)現(xiàn)這種計(jì)劃,所需的技巧、技術(shù)難點(diǎn)和可能出現(xiàn)的情況,及其應(yīng)對(duì)方法.
多工序與多機(jī)臺(tái)的場(chǎng)景描述
規(guī)劃過程中用到的概念
為了便于描述規(guī)劃過程中的各種情況,現(xiàn)先定義以下概念:
任務(wù)或生產(chǎn)任務(wù):一個(gè)產(chǎn)品的一個(gè)工序的生產(chǎn)作業(yè)稱作一個(gè)任務(wù),例如印刷后加工有:過膠 -> 燙金 -> 絲印,則表示這個(gè)產(chǎn)品的后加工中有三個(gè)任務(wù),分別是過膠任務(wù), 燙金任務(wù)和絲印任務(wù)。
工序路線任務(wù)鏈:一個(gè)產(chǎn)品中的不同工序?qū)?yīng)的生產(chǎn)作業(yè),其次序是由其工序路線確定的,一個(gè)產(chǎn)品的所有生產(chǎn)作業(yè)序列,即任務(wù)序列,稱為工序路線任務(wù)鏈.
機(jī)臺(tái)任務(wù)鏈:多個(gè)任務(wù)被分配在一個(gè)機(jī)臺(tái)上時(shí),同一時(shí)間只能處理一個(gè)產(chǎn)品,即同一時(shí)間只能進(jìn)行一個(gè)任務(wù),這些同在一機(jī)臺(tái)上形成的任務(wù)序列,稱為機(jī)臺(tái)任務(wù)鏈接.
前置任務(wù),后置任務(wù):同一產(chǎn)品上多個(gè)任務(wù),根據(jù)工序路線的規(guī)定形成與工序次序一次的生產(chǎn)任務(wù)次序(即工序路線任務(wù)鏈)。在鏈中兩個(gè)相鄰的任務(wù),前者稱作后者的前置任務(wù);后者稱作前者的后置任務(wù)。
前一任務(wù),后一任務(wù):分布于同一機(jī)臺(tái)上的多個(gè)工序任務(wù)(即機(jī)臺(tái)任務(wù)鏈),在機(jī)臺(tái)任務(wù)鏈中相個(gè)相鄰的任務(wù);前者稱為后者的前一任務(wù),后者稱作前者的前一任務(wù)。
多工序、多機(jī)臺(tái)排程里的限制
下面我們來針對(duì)實(shí)用性最強(qiáng),制造業(yè)面對(duì)最多的場(chǎng)景 :多工序、多臺(tái)機(jī)臺(tái)場(chǎng)景展開討論。處理這類生產(chǎn)計(jì)劃,有以下兩個(gè)因素處理起來最為麻煩。
1. 多任務(wù)與多機(jī)臺(tái)的匹配
因?yàn)樵诖诺挠?jì)劃要素中,任務(wù)與機(jī)臺(tái)的種類都存在多樣性,且可能存一種任務(wù)可分配到多種機(jī)臺(tái),一種機(jī)臺(tái)可以做多種任務(wù)的情況,因此,任務(wù)與機(jī)臺(tái)的匹配問題會(huì)相對(duì)其它三種生產(chǎn)計(jì)劃復(fù)雜一些。但往往這也是體現(xiàn)出Optaplanner價(jià)值的其中一個(gè)要點(diǎn)。
2. 工序路線任務(wù)鏈與機(jī)臺(tái)任務(wù)鏈之間存在互相制約關(guān)系
一個(gè)產(chǎn)品的工序中線確定的任務(wù)序列,與分配于同一機(jī)臺(tái)上的任務(wù)序列,在加工次序上存在互相制約。加工次序體現(xiàn)在加工的時(shí)間先后。即一個(gè)產(chǎn)品的任務(wù)序列,必然按其工序路線,存在一定的先后次序。而當(dāng)個(gè)產(chǎn)品被分配到各個(gè)機(jī)臺(tái)上進(jìn)行生產(chǎn)作業(yè)時(shí),因?yàn)樯a(chǎn)路線上存在時(shí)間先后次序,會(huì)令到一個(gè)機(jī)臺(tái)上多個(gè)任務(wù)需要按次序生產(chǎn)的時(shí)候,每個(gè)任務(wù)的作業(yè)時(shí)間段可能并不是緊密連接。因?yàn)楫?dāng)準(zhǔn)備在機(jī)臺(tái)上啟動(dòng)一個(gè)任務(wù)時(shí),這個(gè)任務(wù)的前置工序可能尚未完成,從而令到該任務(wù)所在的機(jī)臺(tái)已就緒(其前一任務(wù)已完成,機(jī)臺(tái)已為該任務(wù)準(zhǔn)備就緒),但因?yàn)樗那爸霉ば蜻€沒完成,導(dǎo)致它無法開始,因?yàn)橐坏╅_始就違反了工序路線約束,從而令該機(jī)臺(tái)上排在它后面的其它后任務(wù)都要推遲,而這些任務(wù)被推遲,又有可能導(dǎo)致它們自身的后置任務(wù)需要推遲,從而會(huì)出現(xiàn)機(jī)臺(tái)任務(wù)鏈和工序路線任務(wù)鏈互相影響。我們稱這種情況為“連鎖反應(yīng)”,解決好這種連鎖反應(yīng),是解決排程的關(guān)鍵。
因?yàn)樯鲜雒枋龅倪B鎖反應(yīng)的情況出現(xiàn),有可能令出現(xiàn)環(huán)狀影響的情況。因?yàn)橐粋€(gè)正常的產(chǎn)計(jì)劃會(huì)存在時(shí)間與空間兩個(gè)主要維度,其中的空間維度本文的場(chǎng)景中就是機(jī)臺(tái),表示為一個(gè)任務(wù)被分配到了指定機(jī)臺(tái)。而時(shí)間維度則體現(xiàn)為任務(wù)的開始時(shí)間和結(jié)束時(shí)間(事實(shí)上結(jié)束時(shí)間可以通過開始時(shí)間推導(dǎo)出來),即確定一個(gè)任務(wù)的計(jì)劃開始時(shí)刻。那么就需要有一個(gè)邏輯,對(duì)各個(gè)已分配空間(即機(jī)臺(tái))的任務(wù)進(jìn)行時(shí)間推導(dǎo)。任務(wù)的時(shí)間推導(dǎo)我們需要通過Optaplanner的afterEntityChanged事件來進(jìn)行(這個(gè)事件僅出現(xiàn)于Chained Through Time模式, 以后將會(huì)有專門的文章講述Optaplanner的時(shí)間分配模式,其中Chained Through Time模式是重點(diǎn)),而推導(dǎo)的起源(就是從哪個(gè)任務(wù)開始推)我們通常是以當(dāng)前Move(Move是Optaplanner的最小作業(yè)單位)所處理的任務(wù)開始,這個(gè)任務(wù)我們稱為震動(dòng)源。經(jīng)過它的工序路線任務(wù)鏈傳遞到機(jī)臺(tái)任務(wù)鏈,再由機(jī)臺(tái)任務(wù)鏈的影響回工序路線任務(wù)鏈,當(dāng)這種環(huán)狀的影響線路,經(jīng)過一系列的連鎖反應(yīng),正好返回來對(duì)震動(dòng)源進(jìn)行推導(dǎo)的時(shí)候, 那么相當(dāng)于又開始了輪與上一輪一樣的推導(dǎo)路線,就會(huì)無限地推導(dǎo)下去,死循環(huán)就產(chǎn)生了。我們需要準(zhǔn)確識(shí)別這種連鎖反應(yīng)會(huì)否產(chǎn)生死循環(huán),并當(dāng)確實(shí)產(chǎn)生死循環(huán)時(shí),就要將當(dāng)前的move標(biāo)識(shí)的不合法,在開啟時(shí)間推導(dǎo)之前,通過Optaplanner的Move Selection Filter將當(dāng)前的move取消,從而避免產(chǎn)生程序溢出,令系統(tǒng)崩潰。下面會(huì)舉實(shí)際的死循環(huán)例子說明這種情況。
下面我們先明確多任務(wù)多機(jī)臺(tái)生產(chǎn)計(jì)劃的基礎(chǔ)約束,再討論死循環(huán)的具體產(chǎn)生經(jīng)過。
計(jì)劃約束
每個(gè)工序只能分配到指定的機(jī)臺(tái);
除產(chǎn)品的首個(gè)工序外,所有任務(wù)都有一個(gè)前置任務(wù),它的開始條件是它的前置任務(wù)已結(jié)束,即同一產(chǎn)品的工序根據(jù)工序路線存在FS關(guān)系。
同一機(jī)臺(tái)同一時(shí)間只能處理同一任務(wù)。即分配到機(jī)臺(tái)上的工序生產(chǎn)任務(wù),而生產(chǎn)時(shí)間不能重疊。
排程過程中產(chǎn)生的死循環(huán)
例如下圖:紅框的任務(wù)Task1, Task2, Task3表示了一個(gè)產(chǎn)品的工序路線上的3個(gè)工序?qū)?yīng)的任務(wù),即表示這三個(gè)任務(wù)形成了工序路線任務(wù)鏈,它們分別分布于machine1, machine2, machine3三個(gè)機(jī)臺(tái)。根據(jù)工序路線任務(wù)鏈的次序約束,其生產(chǎn)次序是Task1 -> Task2-> Task3. 而藍(lán)色背景的兩個(gè)任務(wù)則是另外一個(gè)產(chǎn)品的工序路線任務(wù)鏈,根據(jù)該產(chǎn)品的工序路線,它的生產(chǎn)門外漢是TaskA -> TaskB, 可以看到這兩個(gè)工序的次序跟紅框工序中的Task2, Task3的次序是倒過來的。而從機(jī)臺(tái)machine2的機(jī)臺(tái)任務(wù)鏈上,我們可以看到,存在一個(gè)這樣的生產(chǎn)次序關(guān)系:TaskB -> Task 2。那么在Optaplanner通過一個(gè)Move來產(chǎn)生一個(gè)可能的方案,并對(duì)這個(gè)方案中各個(gè)任務(wù)的開始時(shí)間進(jìn)行推導(dǎo)時(shí),就有可能組合出如圖中的狀態(tài),從而出現(xiàn)死循環(huán),因?yàn)橐粋€(gè)產(chǎn)品的工序需要按工序路線任務(wù)鏈的次序執(zhí)行,而一個(gè)機(jī)臺(tái)上生產(chǎn)機(jī)臺(tái)任務(wù)鏈中的任務(wù)也是存在先后關(guān)系的,也即具有時(shí)序性的,一個(gè)機(jī)臺(tái)在同一時(shí)間只能生產(chǎn)一個(gè)任務(wù),也就有了一個(gè)機(jī)臺(tái)自身的生產(chǎn)任務(wù)也是一個(gè)次序鏈的。從圖中可以看出,存在了這么一個(gè)環(huán)狀的生產(chǎn)任務(wù)次序:Task2-> Task3 -> TaskA -> TaskB ->Task2,
即當(dāng)Task1, Task2, Task3, TaskA, TaskB中任意一個(gè)任務(wù)的開始時(shí)間被推導(dǎo)時(shí),它都將成為上述死循環(huán)描述中的震動(dòng)源,從而產(chǎn)生死循環(huán)。
實(shí)際多工序多機(jī)臺(tái)生產(chǎn)計(jì)劃中的約束
在實(shí)際制造中,除了上述討論的三個(gè)主要約束外,還會(huì)存在非常多企業(yè)自身業(yè)務(wù)場(chǎng)景相關(guān)的限制因素,會(huì)更大程度上限制生產(chǎn)活動(dòng)的執(zhí)行。而這此限制需要正確地反映到生產(chǎn)計(jì)劃中,否則最終產(chǎn)生的計(jì)劃就無法執(zhí)行。本文只列出對(duì)生成計(jì)劃的正確性有影響的、各計(jì)劃均會(huì)存在的共性因素;而那些與各個(gè)行業(yè)、企業(yè)的業(yè)務(wù)相關(guān)的個(gè)性化因素,則不在本文考慮范圍內(nèi),各位在自己設(shè)計(jì)系統(tǒng)時(shí)考慮即可。例如:印刷行業(yè)中的印刷后加工工序,做完灑金粉工序,是需要等待一定時(shí)間,令金粉固化后,才能進(jìn)入下一工序的,那么也就是說這個(gè)工序與下一個(gè)工序之間存在一個(gè)最短時(shí)間間隔的限制,否則是會(huì)產(chǎn)生質(zhì)量事故的,因此是一個(gè)硬約束。
任務(wù)死循環(huán)的檢測(cè)經(jīng)驗(yàn)
因?yàn)樯a(chǎn)計(jì)劃的復(fù)雜性,造成工序任務(wù)鏈與機(jī)臺(tái)任務(wù)鏈之間存在異常復(fù)雜的制約,需要對(duì)Optaplanner產(chǎn)生的可能方案進(jìn)行合法性判斷,識(shí)別任務(wù)的開始時(shí)間推導(dǎo)過程中,是否存在死循環(huán)的可能,則需要非常嚴(yán)謹(jǐn)?shù)倪壿嫹治雠c正確的模型與算法設(shè)計(jì)。現(xiàn)分享一下本農(nóng)在此類項(xiàng)目中,在這方面遇到的問題。
當(dāng)時(shí)我把機(jī)臺(tái)任務(wù)鏈、工序路線任務(wù)鏈設(shè)計(jì)出來,并明確了模型中各實(shí)體的職責(zé)和關(guān)系后。發(fā)現(xiàn)了時(shí)間推導(dǎo)存在死循環(huán)的可能。因?yàn)槲艺J(rèn)為對(duì)Optaplanner將要規(guī)劃出來的可能方案中的各種任務(wù)的關(guān)系已經(jīng)有足夠認(rèn)識(shí),就根據(jù)推導(dǎo)過程中可以出現(xiàn)的情況進(jìn)行死循環(huán)檢測(cè),檢測(cè)過程也相當(dāng)簡(jiǎn)單。因?yàn)楫?dāng)一個(gè)可能方案中任務(wù)的時(shí)空關(guān)系一旦確定之后,所有的任務(wù)即構(gòu)成了一個(gè)有向圖(directed graph),那么我檢查這個(gè)有向圖是否存在環(huán)即可。我嘗試過使用隊(duì)列結(jié)構(gòu)對(duì)這個(gè)圖進(jìn)行廣度優(yōu)先遍歷,并識(shí)別環(huán)是否存在。也嘗試過通過遞歸方式進(jìn)行深度優(yōu)先遍歷(其實(shí)遞歸使用的數(shù)據(jù)結(jié)構(gòu)就是棧,知曉VC++的同學(xué)應(yīng)該從WinAPI32編程中學(xué)習(xí)過函數(shù)調(diào)用的機(jī)制,其實(shí)調(diào)用調(diào)用路徑就是一個(gè)棧)。無論怎么嘗試,檢測(cè)結(jié)果就是無法完美、全面。因?yàn)槲覀冺?xiàng)目中需要考慮的因素更多,出現(xiàn)意想不到的可能性更大。因此,有段時(shí)間我自己都覺得,不太可能解決這個(gè)問題,盟生了放棄的念頭。幸好我遇到一個(gè)好領(lǐng)導(dǎo),我的老板(我們這里都叫上級(jí)做老板)Jeffrey給了我非常多機(jī)會(huì)和支持,并不時(shí)跟我一起分析,他也了解到問題的復(fù)雜性,并給予理解與鼓勵(lì)。最終我的解決辦法是:對(duì)Optaplanner在規(guī)劃過程中產(chǎn)生的每個(gè)可能方案,都進(jìn)行模型上的抽象與簡(jiǎn)化,去除一些不影響死循環(huán)判斷的因素,把它歸約成一個(gè)正正式式的有向圖,并通過一些成熟的有向圖環(huán)檢測(cè)的算法對(duì)其進(jìn)行判斷。其實(shí)思路主就是:把之前根據(jù)復(fù)雜的業(yè)務(wù)規(guī)則實(shí)現(xiàn)不同的邏輯進(jìn)行分支檢測(cè)的方法,倒過來,將含有一些業(yè)務(wù)因素的有向圖,歸約成數(shù)學(xué)算法可以處理的規(guī)范有向圖,再對(duì)其進(jìn)行檢測(cè)。目前這個(gè)功能已經(jīng)相當(dāng)穩(wěn)定,再她不會(huì)時(shí)不時(shí)出現(xiàn)意想不到的情況了。關(guān)于有向圖的環(huán)檢測(cè)算法,網(wǎng)上有很多,大家自己找或者自己研究都能弄出來,就不在本文深究了。
通過Selection Filter對(duì)不合法方案進(jìn)行過濾
其實(shí)若我們只研究本文中提出的多任務(wù)多機(jī)臺(tái)生產(chǎn)任務(wù)的最基本三個(gè)約束的話,上文提到的不合法方案就只剩下任務(wù)死循環(huán)方案了。若在現(xiàn)實(shí)項(xiàng)目開發(fā)中,一個(gè)方案不合法的定義會(huì)更多,更豐富,且更復(fù)雜。一旦我們通過各種手段檢測(cè)出一個(gè)方案是不合法的。我們就可以通過Selection Filter,在Optaplanner對(duì)的VariableListener對(duì)象的afterEntityChanged事件處理方法之前,把事個(gè)move放棄掉。關(guān)于Selection FIlter的用法,大家可以先從Optaplanner的開發(fā)手冊(cè)中查看,我將會(huì)專門撰寫Selection Filter相關(guān)的文章對(duì)其進(jìn)行說明。
小結(jié)
自此,本文描述了基于Optaplanner設(shè)計(jì)APS排產(chǎn)引擎時(shí),遇到比較棘手的問題。包括:計(jì)劃類型的識(shí)別,由任務(wù)組成的工序鏈與機(jī)臺(tái)鏈,任務(wù)與機(jī)臺(tái)之間的匹配,工序鏈與機(jī)鏈之間的膠著可能性與循環(huán)識(shí)別與處理。希望能幫到大家。
本人也是初初研究APS排程引擎,都還是在不斷探索中,有不正確的地方,還請(qǐng)多多提點(diǎn)。為謝。
本系列文章在公眾號(hào)不定時(shí)連載,請(qǐng)關(guān)注公眾號(hào)(讓APS成為可能)及時(shí)接收,二維碼:
如需了解更多關(guān)于Optaplanner的應(yīng)用,請(qǐng)發(fā)電郵致:kentbill@gmail.com
或到討論組發(fā)表你的意見:https://groups.google.com/forum/
若有需要可添加本人微信(13631823503)或QQ(12977379)實(shí)時(shí)溝通,但因本人日常工作繁忙,通過微信,QQ等工具可能無法深入溝通,較復(fù)雜的問題,建議以郵件或討論組方式提出。(討論組屬于google郵件列表,國(guó)內(nèi)網(wǎng)絡(luò)可能較難訪問,需自行解決)
總結(jié)
以上是生活随笔為你收集整理的多工序、多机台(产线)环境下的排程要点的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。
                            
                        - 上一篇: 使用FreeSSL申请免费证书
 - 下一篇: iOS 16自定义锁定屏幕使用方法