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

Note

  • 为使应用程序能够正确地定位到动态库,用户需在环境变量中指定动态库的路径。若环境变量未指定,则用户需按照操作系统查找动态库的逻辑,将动态库文件置于合适位置。关于环境变量的设置,请参阅 安装说明

  • 关于 Java 语言编译器版本的支持,请参阅 支持平台 中的说明。