4.5. 使用 Java 语言调用 MindOpt¶
本节通过一个简单的示例展示如何使用 Java 语言调用 MindOpt 实现优化模型的读取与求解。
4.5.1. 编辑.java文件¶
以下我们将展示如何在 .java
文件中调用 MindOpt JAVA API 读取优化问题模型文件并进行求解。
首先导入 Java mindopt 包:
1import com.alibaba.damo.mindopt.*;
然后创建环境和优化模型:
9 MDOEnv env = new MDOEnv();
10 MDOModel model = null;
之后调用 MDOModel.MDOModel
的构造函数来读取 MPS/LP 格式的优化问题:
21 model = new MDOModel(env, args[0]);
最后使用 MDOModel.optimize
来求解问题,并调用 MDOModel.get
来得到最优解的目标函数值。
22 model.optimize();
23 System.out.println("Obj value: " + model.get(MDO.DoubleAttr.ObjVal));
以下为完整的源代码文件 ReadMps.java。
1import com.alibaba.damo.mindopt.*;
2
3public class ReadMps {
4 public static void main(String[] args) throws MDOException {
5 if (args.length != 1) {
6 return;
7 }
8
9 /*------------------------------------------------------------------*/
10 /* Step 1. Create a model and change the parameters. */
11 /*------------------------------------------------------------------*/
12 /* Create an empty model. */
13 MDOEnv env = new MDOEnv();
14 MDOModel model = null;
15
16 try {
17 /*--------------------------------------------------------------*/
18 /* Step 2. Input model. */
19 /*--------------------------------------------------------------*/
20 /* Read model from file. */
21 model = new MDOModel(env, args[0]);
22
23 /*--------------------------------------------------------------*/
24 /* Step 3. Solve the problem and print the result. */
25 /*--------------------------------------------------------------*/
26 /* Solve the problem. */
27 model.optimize();
28 /* Print the result. */
29 System.out.println("Obj value: " + model.get(MDO.DoubleAttr.ObjVal));
30 } catch (MDOException e) {
31 System.out.println(e.getMessage());
32 } finally {
33 /* Dispose of model and environment */
34 if (model != null) {
35 model.dispose();
36 }
37 env.dispose();
38 }
39 }
40 }
在安装路径 <MDOHOME>/<VERSION>/examples/java
下可以找到更多 Java 语言相关示例文件。
4.5.2. Linux和macOS平台上编译¶
我们在安装路径 <MDOHOME>/<VERSION>/examples/java
下提供了示例文件。以 linux x86 为例,执行以下指令编译示例代码并执行优化求解:
javac -cp .:<MDOHOME>/linux64-x86/lib/mindoptj.jar ReadMps.java
java -cp .:<MDOHOME>/linux64-x86/lib/mindoptj.jar -Djava.library.path=$MINDOPT_HOME/linux64-x86/lib/ ReadMps ../data/afiro.mps
同时我们也提供了 run.sh 脚本,可以通过以下指令来编译和执行示例代码:
bash run.sh
4.5.3. Windows平台上编译¶
我们在安装路径 <MDOHOME>\<VERSION>\examples\java
下提供了示例文件。执行以下指令编译示例代码并执行优化求解:
javac -cp .;<MDOHOME>\win64-x86\lib\mindoptj.jar ReadMps.java
java -cp .;<MDOHOME>\win64-x86\lib\mindoptj.jar -Djava.library.path=%MINDOPT_HOME%\win64-x86\bin ReadMps ..\data\afiro.mps
同时我们也提供了 run.bat 脚本,可以通过以下指令来编译和执行示例代码:
run.bat