摘要:后來我用的示例可以正常運(yùn)行起來了。運(yùn)行示例我們選擇一個(gè)比較經(jīng)典的示例運(yùn)行一下看看。軟性要求任何一臺(tái)一旦有任務(wù)分配進(jìn)去,即表示該被占用,需計(jì)算這臺(tái)的成本。討論組屬于郵件列表,國(guó)內(nèi)網(wǎng)絡(luò)可能較難訪問,需自行解決
經(jīng)過上面篇長(zhǎng)篇大論的理論之后,在開始講解Optaplanner相關(guān)基本概念及用法之前,我們先把他們提供的示例運(yùn)行起來,好先讓大家看看它是如何工作的。OptaPlanner的優(yōu)點(diǎn)不僅僅是提供詳細(xì)豐富的文檔 ,還為各種應(yīng)用場(chǎng)景提供豐富的示例,它的文檔里都是以幾個(gè)簡(jiǎn)單經(jīng)典的例子來說名各種功能特征和深層次概念的,例如Solver, Phase及Move等,以下我們就先把這些示例運(yùn)行起來,先看看整體的情況,下一往篇我們?cè)侔咽纠脑创a導(dǎo)進(jìn)Eclipse,拿一個(gè)簡(jiǎn)單經(jīng)典的示例,講解一下Optaplanner規(guī)劃引擎工作時(shí)需要哪些要素,它是如何工作的。
1.下載:
首先得把示例下載回來,大家到Optaplanner的官網(wǎng)就可以看到一個(gè)綠色的按鈕(見下圖),點(diǎn)擊它就可以下載了。它的版本更新非??欤覀兙突?.6.0Final進(jìn)行講解。
圖片描述
解壓:
下載回來的壓縮包“optaplanner-distribution-7.6.0.Final.zip”包含了Optaplanner的源碼、各種包(引擎自己的核心包及其依賴包)、說明文件和示例及其源碼。其中示例包括兩個(gè)版本,一個(gè)是基礎(chǔ)Swing的,也就是Java的Windows程序;另一個(gè)是基于Web的,以War包提供,需要自己部署Tomcat等App服務(wù)器來運(yùn)行。我們著重討論Swing版本的,因?yàn)樗恍枰覀儾渴餉pp服務(wù)器。如果以后大家有需要,我可以另寫一篇專門部署Web版本示例的文章詳細(xì)講解。打開壓縮包,里面的文件夾結(jié)構(gòu)如下圖:
圖片描述
試運(yùn)行示例:
因?yàn)閴嚎s包中除了提供源碼,還提供了已編譯的包,只要在你系統(tǒng)中安裝好Java環(huán)境,就可以運(yùn)行起來,先看個(gè)究竟了。ps:java要1.8以上。
3.1: 解壓示例文件:
你會(huì)看到一個(gè)包文件夾(binaries),一個(gè)源碼文件夾(sources),一個(gè)windows批處理命令文件(runExamples.bat)和一個(gè)Linux下運(yùn)行示例的Shell文件 (runExamples.sh). 因?yàn)槲沂窃赪indows環(huán)境下運(yùn)行的,所以把binaries和runExamples.bat解壓出來放在同一文件夾即可,examples子文件夾中的目錄結(jié)構(gòu)如下圖。
圖片描述
3.2 運(yùn)行示例:
如果windows下使用cmd不太熟悉的話,就按我下面的步驟操作.完成之后就可以看到它示例的真容了。示例程序是基于Swing做的,理論上通過里面的批處理文件就可以運(yùn)行起來,其實(shí)里面就是一些運(yùn)行jar包的命令,只不過它會(huì)有更多的功能,例如檢查當(dāng)前系統(tǒng)的JRE等等。不過中間有點(diǎn)小插曲,我使用7.6.0的示例運(yùn)行的時(shí)候,它報(bào)了一個(gè)slf4j找不到的異常,應(yīng)該是一個(gè)日志組件缺少了,我要看看它這個(gè)版本的更新記錄,看是否有相關(guān)的提示,否則我得聯(lián)系一下他們項(xiàng)目組的人才行。后來我用7.5.0Final的示例可以正常運(yùn)行起來了。
圖片描述
通過鼠標(biāo)右鍵調(diào)出CMD
圖片描述
運(yùn)行示例批處理文件
圖片描述
多達(dá)18個(gè)示例,最簡(jiǎn)單的N王后問題,到復(fù)雜的車輛路線規(guī)劃問題.
7.5.0版本提供了18個(gè)示例,已經(jīng) 包含了幾乎所有Optaplanner規(guī)劃引擎具有的特性及應(yīng)用模式。但其實(shí)在他們的Github中提供了更多的示例,有興趣的同學(xué)可以關(guān)注一下Github上optaplanner項(xiàng)目的leader Geoffrey De Smit,他現(xiàn)在是Optaplanner項(xiàng)目的頭兒,也是Optaplanner的作者,10多年前他開發(fā)了Optaplanner,前些年他把它貢獻(xiàn)給了JBoss開源社區(qū),任這個(gè)項(xiàng)目的頭兒。我在使用Optaplanner做項(xiàng)目的時(shí)候,他們的討論組上向他提過一些問題,他為人相當(dāng)nice且有耐心,給我解答了不少問題。
3.3 運(yùn)行示例:
我們選擇一個(gè)比較經(jīng)典的Cloud balancing示例運(yùn)行一下看看。
先說明一下這個(gè)示例,這個(gè)示例是模擬在云端進(jìn)行進(jìn)程管理(或稱進(jìn)程調(diào)度,或稱任務(wù)調(diào)度吧),也就是進(jìn)程分配到不同的計(jì)算資源(也就是計(jì)算機(jī))的方案,演示Optaplanner規(guī)劃引擎是如何在保證每個(gè)進(jìn)程都滿足運(yùn)行要求的情況下,以最節(jié)省成本的方式分配計(jì)算機(jī)資源的。
示例中有兩個(gè)主要實(shí)體概念 - 進(jìn)程(Process,下面跟著官方文檔稱Process吧, 可以理解為我們的程序,或任務(wù))和Computer(也就是我們理解的計(jì)算機(jī)、服務(wù)器了)。每個(gè)Process有CPU速度,內(nèi)存大小和網(wǎng)絡(luò)帶寬三大要求。對(duì)應(yīng)地,每臺(tái)Computer也有一個(gè)固定的參數(shù),表明該Computer可提供的CPU速度、內(nèi)存大小和帶寬;Computer另外還有一個(gè)屬性就是成本。也就是這臺(tái)電腦一但被使用了,就需要花費(fèi)成本去維護(hù)。這個(gè)示例的目標(biāo)是:給出一些Process和一些Computer,Optaplanner規(guī)劃引擎在對(duì)這些實(shí)體進(jìn)行對(duì)比運(yùn)算,將所有Process分配到指定的一臺(tái)Computer, 這個(gè)分配方案有兩個(gè)要求:
1.硬性要求: Process所分配到的Computer必然滿足CPU,內(nèi)存和帶寬三大要求要求。ps:當(dāng)多個(gè)Process被分配到同一個(gè)Computer時(shí),它的CPU,內(nèi)存和帶寬資源占用是累加的,也就是說,當(dāng)臺(tái)Computer只有2G內(nèi)存,若已經(jīng)有一個(gè)內(nèi)存需求是1G的Process被分配在它上面,那后面可以再分配給它的Process,其內(nèi)存要求必然是1G以下的,因?yàn)檫@進(jìn)修這臺(tái)Computer還只剩下1G內(nèi)存了,CPU和帶寬也是同樣的分配規(guī)則。
軟性要求:任何一臺(tái)Computer一旦有任務(wù)分配進(jìn)去,即表示該Computer被占用,需計(jì)算這臺(tái)Computer的成本。Optaplanner規(guī)劃引擎需要找找出一個(gè)方案,在滿足了第1點(diǎn)的硬性要求的前提下,令到這所有被占用的Computer的成本加起來盡量小(為什么不能說最小呢?因?yàn)檫@是一個(gè)NPC問題,不一定可以找到成本最小的,也就是 說不一定能找到最佳方案的,詳情參考本系列文章中,關(guān)于規(guī)則問題與NP, NPC問題的篇章).
下圖是我進(jìn)入這個(gè)示例后,選擇了9個(gè)Processes分配到3臺(tái)Computers上的示例。Optaplanner的示例程序都提供這些示例的相關(guān)數(shù)據(jù),只要選擇就可以了,所以還是比較貼心的,但我們自己做項(xiàng)目過程中,去生成、處理這些數(shù)據(jù)的工作量,就點(diǎn)了系統(tǒng)的不少比例了。
圖片描述
Cloud balancing示例中Process與Computer信息
圖片描述
每個(gè)Process對(duì)計(jì)算資源的要求
3.4. 運(yùn)行并解讀示例:
點(diǎn)擊頂端的Solve按鈕,引擎就開始工作,它會(huì)不斷嘗試不同的組合方案(這是一個(gè)非常復(fù)雜的過程,涉及到中種搜索算法Tabu,模擬退火等),找到既滿足Process對(duì)CPU、內(nèi)存和帶寬的要求,且所使用的所有Computer中,成本加起來盡量小。下面就是運(yùn)行了一段時(shí)間之后,9個(gè)Process分配到了兩個(gè)Computer的情況。所得的方案的好壞,是通過評(píng)分來實(shí)現(xiàn)的,關(guān)于評(píng)分,可以查看后面Optaplanner規(guī)劃引擎關(guān)于分?jǐn)?shù)方面的文章。
圖片描述
運(yùn)行結(jié)果,以硬分?jǐn)?shù)(反映資源敏合度)和軟分?jǐn)?shù)(反映成本)組成。
好了,到目前為止我們已經(jīng)初成功能運(yùn)行起了它的示例,大家也可以嘗試一下其它示例,各個(gè)示例的背景,可以到Optaplanner官網(wǎng)關(guān)于示例的章節(jié)中查看。我在后面的文章中,也會(huì)找?guī)讉€(gè)具代表性的示例進(jìn)行翻譯。
在下一篇,我們就要用這個(gè)示例的源碼生成Eclipse中項(xiàng)目,好讓大家可以更深入具體了解Optaplanner的實(shí)現(xiàn)。
謝謝。
End.
Optaplanner開源規(guī)劃引擎地址:www.optaplanner.org
*如需了解更多關(guān)于Optaplanner的應(yīng)用,請(qǐng)發(fā)電郵致:[email protected]
或到討論組發(fā)表你的意見:https://groups.google.com/for...
若有需要可添加本人微信(13631823503)或QQ(12977379)實(shí)時(shí)溝通,但因本人日常工作繁忙,通過微信,QQ等工具可能無法深入溝通,較復(fù)雜的問題,建議以郵件或討論組方式提出。(討論組屬于google郵件列表,國(guó)內(nèi)網(wǎng)絡(luò)可能較難訪問,需自行解決)*
文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請(qǐng)注明本文地址:http://systransis.cn/yun/19980.html
摘要:近些年一直在制造業(yè),做過,當(dāng)過小組負(fù)責(zé)人。要滿足智能制造中,實(shí)現(xiàn)對(duì)機(jī)臺(tái)進(jìn)行分鐘級(jí)甚至秒級(jí)的生產(chǎn)指令下達(dá)。這個(gè)核心是怎么實(shí)現(xiàn)的呢那就需要一個(gè)很牛的引擎。事實(shí)上業(yè)務(wù)規(guī)則分兩種,很多個(gè)層次。這個(gè)時(shí)候排程引擎就派上用場(chǎng)了。 當(dāng)碼農(nóng)有10多年了,由建筑行業(yè)軟件,各種MIS,通用物流定制平臺(tái),CCTV客戶端(是閉路電視,不是央視喔)啥都做過。最后小試一下創(chuàng)業(yè),不過那都是鬧著玩的,不到一年就回到...
摘要:大會(huì)以機(jī)器學(xué)習(xí)資料中心和云端安全為主要議題,為未來發(fā)展做戰(zhàn)略規(guī)劃。在年,谷歌開發(fā)了一個(gè)內(nèi)部深度學(xué)習(xí)基礎(chǔ)設(shè)施叫做,這個(gè)設(shè)施允許谷歌人創(chuàng)建更大的神經(jīng)網(wǎng)絡(luò)和擴(kuò)容實(shí)訓(xùn)成千上萬個(gè)核心。 導(dǎo)言 Google近日3月23-24日在美國(guó)舊金山舉辦首次谷歌云平臺(tái)(Google Cloud Platform) GCP NEXT大會(huì),參會(huì)人數(shù)超過2000人。GCP NEXT大會(huì)以機(jī)器學(xué)習(xí)、資料中心和云端安全...
摘要:經(jīng)過年時(shí)間的發(fā)展,到目前為止,最新穩(wěn)定版為版本。的發(fā)展剛出生的時(shí)候,引起了很多開源社區(qū)的關(guān)注,并且也有個(gè)人和企業(yè)開始嘗試使用。通過項(xiàng)目搭建過程來對(duì)比的差異和優(yōu)勢(shì)。當(dāng)然它的作用不僅于此,后續(xù)會(huì)逐步揭開它的真實(shí)面目。而和就相當(dāng)于當(dāng)年的和的關(guān)系。 要了解Spring Boot的發(fā)展背景,還得從2004年Spring ...
摘要:越來越多的各類信息系統(tǒng)和信息終端將依托云計(jì)算平臺(tái)而存在,越來越多的研發(fā)和業(yè)務(wù)流程將依托云計(jì)算平臺(tái)來支撐。介紹了這么多國(guó)外云計(jì)算的背景,是因?yàn)?,?guó)內(nèi)云計(jì)算服務(wù)提供商都是學(xué)習(xí)仿照亞馬遜等公司的云計(jì)算服務(wù)產(chǎn)品的。 云計(jì)算一詞源自2006年8月9日,Google首席執(zhí)行官Eric Schmidt在搜索引擎大會(huì)上首次提出了云計(jì)算(Cloud Computing)的概念。云計(jì)算目前還沒有公認(rèn)的定義。美...
摘要:客戶端負(fù)載均衡器是一個(gè)客戶端負(fù)載均衡器,可以讓你對(duì)和客戶端的行為進(jìn)行大量控制,已經(jīng)使用了,因此,如果你使用,此部分也適用。 客戶端負(fù)載均衡器:Ribbon Ribbon是一個(gè)客戶端負(fù)載均衡器,可以讓你對(duì)HTTP和TCP客戶端的行為進(jìn)行大量控制,F(xiàn)eign已經(jīng)使用了Ribbon,因此,如果你使用@FeignClient,此部分也適用。 Ribbon中的一個(gè)核心概念是命名客戶端,每個(gè)負(fù)載均...
閱讀 1552·2021-11-04 16:10
閱讀 2814·2021-09-30 09:48
閱讀 2853·2019-08-29 11:31
閱讀 1591·2019-08-28 18:22
閱讀 3240·2019-08-26 13:44
閱讀 1332·2019-08-26 13:42
閱讀 2856·2019-08-26 10:20
閱讀 767·2019-08-23 17:00