摘要:后來我用的示例可以正常運行起來了。運行示例我們選擇一個比較經典的示例運行一下看看。軟性要求任何一臺一旦有任務分配進去,即表示該被占用,需計算這臺的成本。討論組屬于郵件列表,國內網絡可能較難訪問,需自行解決
經過上面篇長篇大論的理論之后,在開始講解Optaplanner相關基本概念及用法之前,我們先把他們提供的示例運行起來,好先讓大家看看它是如何工作的。OptaPlanner的優點不僅僅是提供詳細豐富的文檔 ,還為各種應用場景提供豐富的示例,它的文檔里都是以幾個簡單經典的例子來說名各種功能特征和深層次概念的,例如Solver, Phase及Move等,以下我們就先把這些示例運行起來,先看看整體的情況,下一往篇我們再把示例的源碼導進Eclipse,拿一個簡單經典的示例,講解一下Optaplanner規劃引擎工作時需要哪些要素,它是如何工作的。
1.下載:
首先得把示例下載回來,大家到Optaplanner的官網就可以看到一個綠色的按鈕(見下圖),點擊它就可以下載了。它的版本更新非常快,我們就基于7.6.0Final進行講解。
圖片描述
解壓:
下載回來的壓縮包“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的示例可以正常運行起來了。
圖片描述
通過鼠標右鍵調出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和帶寬也是同樣的分配規則。
軟性要求:任何一臺Computer一旦有任務分配進去,即表示該Computer被占用,需計算這臺Computer的成本。Optaplanner規劃引擎需要找找出一個方案,在滿足了第1點的硬性要求的前提下,令到這所有被占用的Computer的成本加起來盡量小(為什么不能說最小呢?因為這是一個NPC問題,不一定可以找到成本最小的,也就是 說不一定能找到最佳方案的,詳情參考本系列文章中,關于規則問題與NP, NPC問題的篇章).
下圖是我進入這個示例后,選擇了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郵件列表,國內網絡可能較難訪問,需自行解決)*
文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。
轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/19980.html
摘要:近些年一直在制造業,做過,當過小組負責人。要滿足智能制造中,實現對機臺進行分鐘級甚至秒級的生產指令下達。這個核心是怎么實現的呢那就需要一個很牛的引擎。事實上業務規則分兩種,很多個層次。這個時候排程引擎就派上用場了。 當碼農有10多年了,由建筑行業軟件,各種MIS,通用物流定制平臺,CCTV客戶端(是閉路電視,不是央視喔)啥都做過。最后小試一下創業,不過那都是鬧著玩的,不到一年就回到...
摘要:大會以機器學習資料中心和云端安全為主要議題,為未來發展做戰略規劃。在年,谷歌開發了一個內部深度學習基礎設施叫做,這個設施允許谷歌人創建更大的神經網絡和擴容實訓成千上萬個核心。 導言 Google近日3月23-24日在美國舊金山舉辦首次谷歌云平臺(Google Cloud Platform) GCP NEXT大會,參會人數超過2000人。GCP NEXT大會以機器學習、資料中心和云端安全...
摘要:經過年時間的發展,到目前為止,最新穩定版為版本。的發展剛出生的時候,引起了很多開源社區的關注,并且也有個人和企業開始嘗試使用。通過項目搭建過程來對比的差異和優勢。當然它的作用不僅于此,后續會逐步揭開它的真實面目。而和就相當于當年的和的關系。 要了解Spring Boot的發展背景,還得從2004年Spring ...
摘要:越來越多的各類信息系統和信息終端將依托云計算平臺而存在,越來越多的研發和業務流程將依托云計算平臺來支撐。介紹了這么多國外云計算的背景,是因為,國內云計算服務提供商都是學習仿照亞馬遜等公司的云計算服務產品的。 云計算一詞源自2006年8月9日,Google首席執行官Eric Schmidt在搜索引擎大會上首次提出了云計算(Cloud Computing)的概念。云計算目前還沒有公認的定義。美...
摘要:客戶端負載均衡器是一個客戶端負載均衡器,可以讓你對和客戶端的行為進行大量控制,已經使用了,因此,如果你使用,此部分也適用。 客戶端負載均衡器:Ribbon Ribbon是一個客戶端負載均衡器,可以讓你對HTTP和TCP客戶端的行為進行大量控制,Feign已經使用了Ribbon,因此,如果你使用@FeignClient,此部分也適用。 Ribbon中的一個核心概念是命名客戶端,每個負載均...
閱讀 1538·2021-11-04 16:10
閱讀 2774·2021-09-30 09:48
閱讀 2839·2019-08-29 11:31
閱讀 1578·2019-08-28 18:22
閱讀 3225·2019-08-26 13:44
閱讀 1319·2019-08-26 13:42
閱讀 2845·2019-08-26 10:20
閱讀 754·2019-08-23 17:00