Optano.Modeling 简单教程

前言

在工作中遇到两个需求,将两个数学公式用 .NET 的数学库找到数学公式中某个未知数的最优解,我尝试了几个数学库都没有办法完美解决我的需求,直到找到 Optano.Modeling
Optano.Modeling 官网:Optano.Modeling 官网

Optano.Modeling 是什么?

Optano.Modeling 是一个基于 .NET 平台的开源的建模库,用于数学优化和线性规划问题的建模和求解。它提供了一组丰富的功能和 API,使用户能够轻松地定义和解决各种优化问题。
Optano.Modeling 库提供了一个灵活且易于使用的对象导向接口,使您可以通过定义变量、目标函数、约束条件等来构建您的优化模型。它支持多种类型的变量(例如整数、布尔、连续)和多种优化问题(例如线性规划、混合整数规划、二次规划等)。
Optano.Modeling 库还允许用户选择不同的求解器来求解优化问题。它支持多个求解器,包括开源求解器(如 GLPK、CBC)和商业求解器(如Gurobi、CPLEX),根据用户的需求和许可证选择最合适的求解器。
Optano.Modeling 库的使用非常灵活和可扩展,您可以以编程方式使用 C#来构建和求解优化模型。该库提供了丰富的文档和示例代码,以帮助用户更好地理解和使用 Optano.Modeling。
总而言之,Optano.Modeling 是一个功能强大且易于使用的建模库,用于在数学优化和线性规划领域构建和求解优化问题。它为用户提供了灵活性和效率,以解决各种优化挑战。

怎么用 ?

看一下下面的需求

公式:X+Y = A+F-M-G+V         
求解目标:在满足约束下,使得 X 最大
约束条件:
52 ≤ Y ≤ 124
X ≥ 23
根据以上,求得 X 、Y测试数据
A=32
F=68
M=45
G=89
V=301结果
X=215
Y=52

第一步:导包

有两个选择一个是去 Nuget 官方库 中搜索 OPTANO Modeling 然后在 Visual Studio 的 Nuget 包控制台通过命令下载。

第二种是直接在 Visual Studio 自带的 Nuget 库中下载

需要下载两个包: OPTANO Modeling 简单理解是用来构建函数的,即建模库;Gurobi 是用来求解函数的,即求解器。

第二步:编码

接下来就来到快乐的编码环节了~

namespace MathStore
{internal class Require{public static void Main(string[] args) {double A = 32;double F = 68;double M = 45;double G = 89;double V = 301;double Sum = A+F-M-G+V;// 创建优化模型Model model = new Model();// 添加变量,这里参数不明白的可以转到定义中去看一下官方注释var X = new Variable("X", 23, double.PositiveInfinity, VariableType.Continuous); //Avar Y = new Variable("Y", 52, 124, VariableType.Continuous);//Bmodel.AddVariable(X);model.AddVariable(Y);// 添加目标函数,目标函数什么意思,猜一下,就是需要被算出最优解的函数,在我们的需求中是要使 X 最大,那么我们的求解目标就是找到 X 的最优解Objective objective = new Objective(X);//Maximize:最大,如果需求是 X 的最小呢?应该引用什么参数?Minimize:最小objective.Sense = ObjectiveSense.Maximize;//将目标函数添加进模型中model.AddObjective(objective);// 添加约束条件model.AddConstraint(X+Y == Sum);model.AddConstraint(Y >= 52);model.AddConstraint(Y <= 124);model.AddConstraint(X >= 23);	// 求解线性规划问题var solver = new GurobiSolver(); // 使用Gurobi作为求解器,也可以选择其他求解器var solution = solver.Solve(model);		// 输出解决方案Console.WriteLine($"优化状态: {solution.Status}");Console.WriteLine($"X 的最优解: {solution.GetVariableValue("A")}");Console.WriteLine($"Y 的最优解: {solution.GetVariableValue("B")}");// 在 model 中变量名是从 A 起始的,按照向 model 中添加变量的顺序依次从 A 往后面排}}
}

第三步:运行结果

结语

OK,教程到此结束。

本文链接:https://my.lmcjl.com/post/2798.html

展开阅读全文

4 评论

留下您的评论.