4.6. 使用 C# 语言调用 MindOpt

本节通过一个简单的示例展示如何使用 C# 语言调用 MindOpt 实现优化模型的读取与求解。

4.6.1. 编辑.cs文件

以下我们将展示如何在 .cs 文件中调用 MindOpt C# API 读取优化问题模型文件并进行求解。

首先导入 C# mindopt 包:

1using Mindopt;

然后创建环境和优化模型:

16            MDOEnv env = new MDOEnv();
17            MDOModel? model = null;

之后调用 MDOModel.MDOModel 的构造函数来读取 MPS/LP 格式的优化问题:

25                model = new MDOModel(env, args[0]);

最后使用 MDOModel.Optimize 来求解问题,并调用 MDOModel.Get 来得到最优解的目标函数值。

31                model.Optimize();
32                Console.WriteLine($"Obj value: {model.Get(MDO.DoubleAttr.ObjVal)}");

以下为完整的源代码文件 ReadMps.cs

 1using Mindopt;
 2
 3namespace Example
 4{
 5    public class ReadMps
 6    {
 7        public static void Main(string[] args)
 8        {
 9            if (args.Length != 1)
10                return;
11
12            /*------------------------------------------------------------------*/
13            /* Step 1. Create a model and change the parameters.                */
14            /*------------------------------------------------------------------*/
15            /* Create an empty model. */
16            MDOEnv env = new MDOEnv();
17            MDOModel? model = null;
18
19            try
20            {
21                /*--------------------------------------------------------------*/
22                /* Step 2. Input model.                                         */
23                /*--------------------------------------------------------------*/
24                /* Read model from file. */
25                model = new MDOModel(env, args[0]);
26
27                /*--------------------------------------------------------------*/
28                /* Step 3. Solve the problem and print the result.              */
29                /*--------------------------------------------------------------*/
30                /* Solve the problem. */
31                model.Optimize();
32                /* Print the result. */
33                Console.WriteLine($"Obj value: {model.Get(MDO.DoubleAttr.ObjVal)}");
34            }
35            catch (MDOException e)
36            {
37                Console.WriteLine(e.Message);
38            }
39            finally
40            {
41                /* Dispose of model and environment */
42                if (model != null) model.Dispose();
43                env.Dispose();
44            }
45        }
46    }
47}

在安装路径 <MDOHOME>/<VERSION>/examples/csharp 下可以找到更多 C# 语言相关示例文件。

4.6.2. Linux和macOS平台上编译

我们在安装路径 <MDOHOME>/<VERSION>/examples/csharp 下提供了示例文件。以 linux x86 / .NET SDK 7.x 为例,执行以下指令拷贝任意示例文件至 csproject 下,编译并执行优化求解:

cd <MDOHOME>/<VERSION>/examples/csharp
cp ReadMps.cs csproject
cd csproject
dotnet build
dotnet run ../../data/afiro.mps --framework netcoreapp7.0

4.6.3. Windows平台上编译

我们在安装路径 <MDOHOME>\<VERSION>\examples\csharp 下提供了示例文件。以 .NET SDK 7.x 为例,执行以下指令拷贝任意示例文件至 csproject 下,编译并执行优化求解:

cd <MDOHOME>\<VERSION>\examples\csharp
copy ReadMps.cs csproject
cd csproject
dotnet build
dotnet run ..\..\data\afiro.mps --framework netcoreapp7.0

Note

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

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