通過上面篇長篇大論的理論以後,在開始講解Optaplanner相關基本概念及用法以前,咱們先把他們提供的示例運行起來,好先讓你們看看它是如何工做的。OptaPlanner的優勢不只僅是提供詳細豐富的文檔 ,還爲各類應用場景提供豐富的示例,它的文檔裏都是以幾個簡單經典的例子來講名各類功能特徵和深層次概念的,例如Solver, Phase及Move等,如下咱們就先把這些示例運行起來,先看看總體的狀況,下一往篇咱們再把示例的源碼導進Eclipse,拿一個簡單經典的示例,講解一下Optaplanner規劃引擎工做時須要哪些要素,它是如何工做的。java
1.下載:算法
首先得把示例下載回來,你們到Optaplanner的官網就能夠看到一個綠色的按鈕(見下圖),點擊它就能夠下載了。它的版本更新很是快,咱們就基於7.6.0Final進行講解。
圖片描述windows
下載回來的壓縮包「optaplanner-distribution-7.6.0.Final.zip」包含了Optaplanner的源碼、各類包(引擎本身的核心包及其依賴包)、說明文件和示例及其源碼。其中示例包括兩個版本,一個是基礎Swing的,也就是Java的Windows程序;另外一個是基於Web的,以War包提供,須要本身部署Tomcat等App服務器來運行。咱們着重討論Swing版本的,由於它不須要咱們部署App服務器。若是之後你們有須要,我能夠另寫一篇專門部署Web版本示例的文章詳細講解。打開壓縮包,裏面的文件夾結構以下圖:
圖片描述服務器
由於壓縮包中除了提供源碼,還提供了已編譯的包,只要在你係統中安裝好Java環境,就能夠運行起來,先看個究竟了。ps:java要1.8以上。微信
3.1: 解壓示例文件:
你會看到一個包文件夾(binaries),一個源碼文件夾(sources),一個windows批處理命令文件(runExamples.bat)和一個Linux下運行示例的Shell文件 (runExamples.sh). 由於我是在Windows環境下運行的,因此把binaries和runExamples.bat解壓出來放在同一文件夾便可,examples子文件夾中的目錄結構以下圖。
圖片描述網絡
3.2 運行示例:
若是windows下使用cmd不太熟悉的話,就按我下面的步驟操做.完成以後就能夠看到它示例的真容了。示例程序是基於Swing作的,理論上經過裏面的批處理文件就能夠運行起來,其實裏面就是一些運行jar包的命令,只不過它會有更多的功能,例如檢查當前系統的JRE等等。不過中間有點小插曲,我使用7.6.0的示例運行的時候,它報了一個slf4j找不到的異常,應該是一個日誌組件缺乏了,我要看看它這個版本的更新記錄,看是否有相關的提示,不然我得聯繫一下他們項目組的人才行。後來我用7.5.0Final的示例能夠正常運行起來了。工具
圖片描述google
經過鼠標右鍵調出CMD翻譯
圖片描述
運行示例批處理文件
圖片描述日誌
多達18個示例,最簡單的N王后問題,到複雜的車輛路線規劃問題.
7.5.0版本提供了18個示例,已經 包含了幾乎全部Optaplanner規劃引擎具備的特性及應用模式。但其實在他們的Github中提供了更多的示例,有興趣的同窗能夠關注一下Github上optaplanner項目的leader Geoffrey De Smit,他如今是Optaplanner項目的頭兒,也是Optaplanner的做者,10多年前他開發了Optaplanner,前些年他把它貢獻給了JBoss開源社區,任這個項目的頭兒。我在使用Optaplanner作項目的時候,他們的討論組上向他提過一些問題,他爲人至關nice且有耐心,給我解答了很多問題。
3.3 運行示例:
咱們選擇一個比較經典的Cloud balancing示例運行一下看看。
先說明一下這個示例,這個示例是模擬在雲端進行進程管理(或稱進程調度,或稱任務調度吧),也就是進程分配到不一樣的計算資源(也就是計算機)的方案,演示Optaplanner規劃引擎是如何在保證每一個進程都知足運行要求的狀況下,以最節省成本的方式分配計算機資源的。
示例中有兩個主要實體概念 - 進程(Process,下面跟着官方文檔稱Process吧, 能夠理解爲咱們的程序,或任務)和Computer(也就是咱們理解的計算機、服務器了)。每一個Process有CPU速度,內存大小和網絡帶寬三大要求。對應地,每臺Computer也有一個固定的參數,代表該Computer可提供的CPU速度、內存大小和帶寬;Computer另外還有一個屬性就是成本。也就是這臺電腦一但被使用了,就須要花費成本去維護。這個示例的目標是:給出一些Process和一些Computer,Optaplanner規劃引擎在對這些實體進行對比運算,將全部Process分配到指定的一臺Computer, 這個分配方案有兩個要求:
1.硬性要求: Process所分配到的Computer必然知足CPU,內存和帶寬三大要求要求。ps:當多個Process被分配到同一個Computer時,它的CPU,內存和帶寬資源佔用是累加的,也就是說,當臺Computer只有2G內存,若已經有一個內存需求是1G的Process被分配在它上面,那後面能夠再分配給它的Process,其內存要求必然是1G如下的,由於這進修這臺Computer還只剩下1G內存了,CPU和帶寬也是一樣的分配規則。
下圖是我進入這個示例後,選擇了9個Processes分配到3臺Computers上的示例。Optaplanner的示例程序都提供這些示例的相關數據,只要選擇就能夠了,因此仍是比較貼心的,但咱們本身作項目過程當中,去生成、處理這些數據的工做量,就點了系統的很多比例了。
圖片描述
Cloud balancing示例中Process與Computer信息
圖片描述
每一個Process對計算資源的要求
3.4. 運行並解讀示例:
點擊頂端的Solve按鈕,引擎就開始工做,它會不斷嘗試不一樣的組合方案(這是一個很是複雜的過程,涉及到中種搜索算法Tabu,模擬退火等),找到既知足Process對CPU、內存和帶寬的要求,且所使用的全部Computer中,成本加起來儘可能小。下面就是運行了一段時間以後,9個Process分配到了兩個Computer的狀況。所得的方案的好壞,是經過評分來實現的,關於評分,能夠查看後面Optaplanner規劃引擎關於分數方面的文章。
圖片描述
運行結果,以硬分數(反映資源敏合度)和軟分數(反映成本)組成。
好了,到目前爲止咱們已經初成功能運行起了它的示例,你們也能夠嘗試一下其它示例,各個示例的背景,能夠到Optaplanner官網關於示例的章節中查看。我在後面的文章中,也會找幾個具表明性的示例進行翻譯。
在下一篇,咱們就要用這個示例的源碼生成Eclipse中項目,好讓你們能夠更深刻具體瞭解Optaplanner的實現。
謝謝。
End.
Optaplanner開源規劃引擎地址:www.optaplanner.org
*如需瞭解更多關於Optaplanner的應用,請發電郵致:kentbill@gmail.com
或到討論組發表你的意見:https://groups.google.com/for...
如有須要可添加本人微信(13631823503)或QQ(12977379)實時溝通,但因本人平常工做繁忙,經過微信,QQ等工具可能沒法深刻溝通,較複雜的問題,建議以郵件或討論組方式提出。(討論組屬於google郵件列表,國內網絡可能較難訪問,需自行解決)*