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