java調用aimms 以AIMMS SDK的官方示例Basic爲例(詳細介紹)

引言:
關於什麼是AIMMS SDK,以及如何下載安裝AIMMS SDK,我會另寫一篇文章。本文假設已經安裝了AIMMS SDK,在此基礎上,本文以AIMMS SDK自帶的一個Java工程 Basic 爲例,詳細講解如何修改配置文件、如何在AIMMS裏建立對應模型,以及如何運行java程序向現有的AIMMS模型傳數據並求解。

需要安裝的軟件:

軟 件 版 本 下載地址
eclipse eclipse-java-juno-SR2-win32-x86_64 http://download.csdn.net/detail/aqtata/8476729
AIMMS Aimms-4.32.6.884-x64.exe(**2017.3.21爲止最新版**) https://download.aimms.com/aimms/download/data/4.32/6.884/Aimms-4.32.6.884-x64.exe 官網
AIMMS SDK AimmsSDK-1.3.0.0.msi https://download.aimms.com/aimms/download/data/SDK/AimmsSDK-1.3.0.0.msi 官網

一、Eclipse中對basic工程的改動

1.在eclispe中導入AIMMS SDK自帶例子——basic

打開eclipse,菜單欄File->Import


這裏寫圖片描述
圖1 導入工程

如圖2,在彈出的窗口中,選擇“Browse”瀏覽到Basic案例的目錄,即AIMMS_SDK_HOME \examples\java\basic,其中AIMMS_SDK_HOME是AIMMS SDK的安裝目錄。例如,
D:\softwares_diy\AimmsSDK\examples\java\basic,

這裏寫圖片描述
圖2 選擇要導入的工程 – basic

然後依次選擇Next ->Finish,或者直接選擇“Finish”。如圖3、圖4所示。

這裏寫圖片描述
圖3 導入工程 –basic


這裏寫圖片描述
圖4 完成導入

2.修改配置文件

工程導入以後,pom.xml有錯誤提示。如圖5,雙擊打開pom.xml,在打開文件的底部,切換到pom.xml選項卡。
錯誤提示是由於配置文件pom.xml裏的AIMMS SDK版本與實際安裝的版本不一致。
如果沒有錯誤提示,則不用修改pom.xml文件,可跳過①,直接進行②。

這裏寫圖片描述
圖5 打開pom.xml

這裏寫圖片描述
圖6 pom.xml文件解決版本不一致問題

查看AIMMS SDK版本,並將aimmssdk jar包拷貝。
① 查看版本
打開AIMMS_SDK_HOME\java\com\aimms\aimmssdk\1.2.3.2 目錄,可見aimmssdk-1.2.3.2.jar包(按你的版本來),可知,aimmssdk版本是1.2.3.2

    <properties>
        <AimmsSdkVersion>1.2.3.0</AimmsSdkVersion>
        <slf4jVersion>1.6.1</slf4jVersion>
    </properties>

修改爲:

    <properties>
        <AimmsSdkVersion>1.2.3.2</AimmsSdkVersion>
        <slf4jVersion>1.6.1</slf4jVersion>
    </properties>

② 拷貝包
將AIMMS_SDK_HOME\java\com\aimms\aimmssdk\1.2.3.2\aimmssdk-1.2.3.2.jar 拷貝到C:\Users\lenovo.m2\repository\com\aimms\aimmssdk\1.2.3.2下。
保存eclispe工程,發現工程目錄的Maven Dependencies下多了一個包,如圖7所示。


這裏寫圖片描述
圖7

提示:若沒有進行②拷貝包這一步,即沒有將aimmssdk-1.2.3.2.jar拷貝到C:\Users\lenovo.m2\repository\com\aimms\aimmssdk\1.2.3.2,工程會有錯誤,

這裏寫圖片描述
圖8

解決辦法:

一是手動按照前面②拷貝包將aimmssdk包拷貝到指定位置;
二是右鍵工程名basic->Build path->Configure Build Path,添加外部包,圖9-13.


這裏寫圖片描述
圖9 Build Path

如圖10,點擊“Add External JARs…”,

這裏寫圖片描述
圖10 導入外部包

如圖11,瀏覽到AIMMS_SDK_HOME\java\com\aimms\aimmssdk\1.2.3.2\aimmssdk-1.2.3.2.jar

這裏寫圖片描述
圖11 瀏覽到aimmssdk jar包


這裏寫圖片描述
圖12

右鍵工程,點擊Refresh刷新工程,工程已無錯誤。並且如圖12,aimmssdk包已經自動添加到C:\Users\lenovo.m2\repository\com\aimms\aimmssdk\1.2.3.2目錄下了。

這裏寫圖片描述
圖13

二、AIMMS中建立模型

1.查看basic工程

src\main\java下com.aimms.aimmssdk.examples.basic下的Basic.java 文件。並依次在AIMMS建立模型。
可以看出,這個模型的問題是:已知兩個供應商的供應能力、三個需求方的各自需求,從供應商往需求方運輸貨物的單位運輸成本也已知,目標是在滿足供需關係的前提下最小化運輸成本。

2.在AIMMS中建立模型

(1)建立AIMMS工程,命名。如圖14.


這裏寫圖片描述
圖14 新建AIMMS項目 – JavaConnAimms

(2)建立集合set 、參數parameter和變量 variable
set: Suppliers ,Index爲s
set: Consumers ,Index爲c

parameter:Supply , Index domain(索引域)爲(s) , Range(範圍)是nonnegative。
parameter:Demand , Index domain爲(c) , Range是nonnegative。
parameter:UnitTransportCost Index domain爲(s,c) ,Range是nonnegative。

variable:Transport Index domain爲(s,c) ,Range是nonnegative。
variable:TotalCost Range是free即可。

註釋:變量 Transport指的是從供應商s到需求方c運輸的貨物量。

(3)建立約束條件constraints和數學規劃mathematical program
要滿足的約束條件有兩個:一是要滿足客戶的需求;二是不得超出供應商的供貨能力。因此添加兩個約束:
constraints:SupplyRestrict ,Index domain爲(s),SupplyRestrict 的Definition(在此處定義約束條件的表達式)爲:
sum[c,Transport(s,c)] <= Supply(s)

constraints:DemandRequirement ,Index domain爲 (c) , Definition爲:
sum[s,Transport(s,c)] >= Demand(c)

constraints:CostConstraint ,定義目標TotalCost的表達式,單位運輸成本*運輸量:
TotalCost >= UnitTransportCost(s,c) * Transport(s,c)

mathematical program:TransportProgram ,Objective目標爲TotalCost,Direction方向是minimize,其他默認。

(4)編寫MainExecution主程序。求解數學規劃模型:TransportProgram,寫入:

empty Transport,TotalCost;
solve TransportProgram;

建好後,如圖15所示,


這裏寫圖片描述
圖15 建好的AIMMS工程 – JavaConnAimms

然後關閉AIMMS工程文件(一定要關閉):
菜單欄選擇close project,彈出框提示是否compile工程,選擇是,退出AIMMS,如圖16,

這裏寫圖片描述
圖16

三、在Eclipse中運行主程序

因爲main文件中用到了args數組參數,如圖17所示,


這裏寫圖片描述
圖17 basic 工程的Main.java文件

第一個參數 args[0],指定 AIMMS軟件安裝目錄
第二個參數 args[1],指定 AIMMS工程文件的位置,具體到.aimms文件。
所以運行程序時需要進行Launch configuration

1.新建Launch configuration

右鍵工程名basic -> Run as -> Run Configurations,如圖18所示。


這裏寫圖片描述
圖18 進行運行配置 Run Configuration

如圖19,點擊Java Application,再點擊大圖中紅色框裏的圖標,即新建一個launch configuration。

這裏寫圖片描述
圖19 新建Launch configuration

2.進入Arguments選項卡,填寫參數

新建Launch configuration後,進入Arguments選項卡,在Program arguments處輸入以下兩行,並用空格隔開,

第一個參數指定AIMMS軟件的安裝目錄:
“C:\Users\lenovo\AppData\Local\AIMMS\IFA\Aimms\4.32.6.884-x64”
第二個參數指定AIMMS工程.aimms文件的位置:“C:\Users\lenovo\Documents\My AIMMS Projects\JavaConnAimms\JavaConnAimms.aimms”

二者用空格隔開。


這裏寫圖片描述
圖20 AIMMS安裝目錄


這裏寫圖片描述
圖21 AIMMS工程文件的位置

3.參數填寫完畢後,運行程序

如圖22,然後依次點擊Apply -> Run,


這裏寫圖片描述
圖22 Launch configuration 給定運行參數

4.查看運行結果

執行第3步後,會自動打開AIMMS軟件,會出現如圖23的提示,選擇是,併爲數據文件起個名字,如first


這裏寫圖片描述
圖23 運行程序後詢問是否保存data


這裏寫圖片描述
圖24 保存data 並命名爲first

此時,查看eclipse中控制檯的輸出內容.
如圖25,顯示在滿足需求的前提下,該模型的最小成本約爲174.86,從供應商到客戶的運輸量也求出來了。

這裏寫圖片描述
圖25 eclispe中程序輸出結果——最小成本以及決策變量值

完畢!

這個例子是通過java連接AIMMS實現傳遞模型數據、調用MainExecution過程求解模型並展示結果,很簡單,接下來可以根據你的模型進行復雜的AIMMS調用。

幾天後,我會介紹另外一個自帶案例,但是不會像本文這麼“囉嗦”了。對於一些簡單操作則只有文字說明,不再截圖。


如果覺得有用,歡迎收藏與關注!
如果有任何問題,也歡迎評論,一起交流!
發私信我有可能看不到,所以有事儘量評論哦。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章