OptaPlanner - 把example运行起来(运行并浅析Cloud balancing)
經(jīng)過(guò)上面篇長(zhǎng)篇大論的理論之后,在開(kāi)始講解Optaplanner相關(guān)基本概念及用法之前,我們先把他們提供的示例運(yùn)行起來(lái),好先讓大家看看它是如何工作的。OptaPlanner的優(yōu)點(diǎn)不僅僅是提供詳細(xì)豐富的文檔 ,還為各種應(yīng)用場(chǎng)景提供豐富的示例,它的文檔里都是以幾個(gè)簡(jiǎn)單經(jīng)典的例子來(lái)說(shuō)名各種功能特征和深層次概念的,例如Solver, Phase及Move等,以下我們就先把這些示例運(yùn)行起來(lái),先看看整體的情況,下一往篇我們?cè)侔咽纠脑创a導(dǎo)進(jìn)Eclipse,拿一個(gè)簡(jiǎn)單經(jīng)典的示例,講解一下Optaplanner規(guī)劃引擎工作時(shí)需要哪些要素,它是如何工作的。
?
1.下載:
首先得把示例下載回來(lái),大家到Optaplanner的官網(wǎng)就可以看到一個(gè)綠色的按鈕(見(jiàn)下圖),點(diǎn)擊它就可以下載了。它的版本更新非常快,我們就基于7.6.0Final進(jìn)行講解。??
? ? ? ? ? ? ? ? ?
2. 解壓:
下載回來(lái)的壓縮包“optaplanner-distribution-7.6.0.Final.zip”包含了Optaplanner的源碼、各種包(引擎自己的核心包及其依賴(lài)包)、說(shuō)明文件和示例及其源碼。其中示例包括兩個(gè)版本,一個(gè)是基礎(chǔ)Swing的,也就是Java的Windows程序;另一個(gè)是基于Web的,以War包提供,需要自己部署Tomcat等App服務(wù)器來(lái)運(yùn)行。我們著重討論Swing版本的,因?yàn)樗恍枰覀儾渴餉pp服務(wù)器。如果以后大家有需要,我可以另寫(xiě)一篇專(zhuān)門(mén)部署Web版本示例的文章詳細(xì)講解。打開(kāi)壓縮包,里面的文件夾結(jié)構(gòu)如下圖:
3. 試運(yùn)行示例:
因?yàn)閴嚎s包中除了提供源碼,還提供了已編譯的包,只要在你系統(tǒng)中安裝好Java環(huán)境,就可以運(yùn)行起來(lái),先看個(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解壓出來(lái)放在同一文件夾即可,examples子文件夾中的目錄結(jié)構(gòu)如下圖。
3.2 運(yùn)行示例:
如果windows下使用cmd不太熟悉的話(huà),就按我下面的步驟操作.完成之后就可以看到它示例的真容了。示例程序是基于Swing做的,理論上通過(guò)里面的批處理文件就可以運(yùn)行起來(lái),其實(shí)里面就是一些運(yùn)行jar包的命令,只不過(guò)它會(huì)有更多的功能,例如檢查當(dāng)前系統(tǒng)的JRE等等。不過(guò)中間有點(diǎn)小插曲,我使用7.6.0的示例運(yùn)行的時(shí)候,它報(bào)了一個(gè)slf4j找不到的異常,應(yīng)該是一個(gè)日志組件缺少了,我要看看它這個(gè)版本的更新記錄,看是否有相關(guān)的提示,否則我得聯(lián)系一下他們項(xiàng)目組的人才行。后來(lái)我用7.5.0Final的示例可以正常運(yùn)行起來(lái)了。
? ? ? ? ??
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多年前他開(kāi)發(fā)了Optaplanner,前些年他把它貢獻(xiàn)給了JBoss開(kāi)源社區(qū),任這個(gè)項(xiàng)目的頭兒。我在使用Optaplanner做項(xiàng)目的時(shí)候,他們的討論組上向他提過(guò)一些問(wèn)題,他為人相當(dāng)nice且有耐心,給我解答了不少問(wèn)題。
3.3 運(yùn)行示例:
我們選擇一個(gè)比較經(jīng)典的Cloud balancing示例運(yùn)行一下看看。
先說(shuō)明一下這個(gè)示例,這個(gè)示例是模擬在云端進(jìn)行進(jìn)程管理(或稱(chēng)進(jìn)程調(diào)度,或稱(chēng)任務(wù)調(diào)度吧),也就是進(jìn)程分配到不同的計(jì)算資源(也就是計(jì)算機(jī))的方案,演示Optaplanner規(guī)劃引擎是如何在保證每個(gè)進(jìn)程都滿(mǎn)足運(yùn)行要求的情況下,以最節(jié)省成本的方式分配計(jì)算機(jī)資源的。
示例中有兩個(gè)主要實(shí)體概念 - 進(jìn)程(Process,下面跟著官方文檔稱(chēng)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必然滿(mǎn)足CPU,內(nèi)存和帶寬三大要求要求。ps:當(dāng)多個(gè)Process被分配到同一個(gè)Computer時(shí),它的CPU,內(nèi)存和帶寬資源占用是累加的,也就是說(shuō),當(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ī)則。
2. 軟性要求:任何一臺(tái)Computer一旦有任務(wù)分配進(jìn)去,即表示該Computer被占用,需計(jì)算這臺(tái)Computer的成本。Optaplanner規(guī)劃引擎需要找找出一個(gè)方案,在滿(mǎn)足了第1點(diǎn)的硬性要求的前提下,令到這所有被占用的Computer的成本加起來(lái)盡量小(為什么不能說(shuō)最小呢?因?yàn)檫@是一個(gè)NPC問(wèn)題,不一定可以找到成本最小的,也就是 說(shuō)不一定能找到最佳方案的,詳情參考本系列文章中,關(guān)于規(guī)則問(wèn)題與NP, NPC問(wèn)題的篇章).
下圖是我進(jìn)入這個(gè)示例后,選擇了9個(gè)Processes分配到3臺(tái)Computers上的示例。Optaplanner的示例程序都提供這些示例的相關(guān)數(shù)據(jù),只要選擇就可以了,所以還是比較貼心的,但我們自己做項(xiàng)目過(guò)程中,去生成、處理這些數(shù)據(jù)的工作量,就點(diǎn)了系統(tǒng)的不少比例了。
?
?
3.4. 運(yùn)行并解讀示例:
點(diǎn)擊頂端的Solve按鈕,引擎就開(kāi)始工作,它會(huì)不斷嘗試不同的組合方案(這是一個(gè)非常復(fù)雜的過(guò)程,涉及到中種搜索算法Tabu,模擬退火等),找到既滿(mǎn)足Process對(duì)CPU、內(nèi)存和帶寬的要求,且所使用的所有Computer中,成本加起來(lái)盡量小。下面就是運(yùn)行了一段時(shí)間之后,9個(gè)Process分配到了兩個(gè)Computer的情況。所得的方案的好壞,是通過(guò)評(píng)分來(lái)實(shí)現(xiàn)的,關(guān)于評(píng)分,可以查看后面Optaplanner規(guī)劃引擎關(guān)于分?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)。
謝謝。
?另外,若對(duì)此文(或本系列任何內(nèi)容)感興趣,歡迎轉(zhuǎn)載,但請(qǐng)尊重艱辛勞動(dòng),注明出處。為謝!
本系列文章在公眾號(hào)不定時(shí)連載,請(qǐng)關(guān)注公眾號(hào)(讓APS成為可能)及時(shí)接收,二維碼:
如需了解更多關(guān)于Optaplanner的應(yīng)用,請(qǐng)發(fā)電郵致:kentbill@gmail.com
或到討論組發(fā)表你的意見(jiàn):https://groups.google.com/forum/#!forum/optaplanner-cn
若有需要可添加本人微信(13631823503)或QQ(12977379)實(shí)時(shí)溝通,但因本人日常工作繁忙,通過(guò)微信,QQ等工具可能無(wú)法深入溝通,較復(fù)雜的問(wèn)題,建議以郵件或討論組方式提出。(討論組屬于google郵件列表,國(guó)內(nèi)網(wǎng)絡(luò)可能較難訪(fǎng)問(wèn),需自行解決)
?
?
?End.
?
?
?
?
?
轉(zhuǎn)載于:https://www.cnblogs.com/kentzhang/p/8431011.html
總結(jié)
以上是生活随笔為你收集整理的OptaPlanner - 把example运行起来(运行并浅析Cloud balancing)的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: HBuilderX 连接网易mumu手机
- 下一篇: POJ2777(线段树裸题)