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 包控制台通过命令下载。
Nuget

第二种是直接在 Visual Studio 自带的 Nuget 库中下载
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); //A
            var Y = new Variable("Y", 52, 124, VariableType.Continuous);//B
            model.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 往后面排
        }
    }
}

第三步:运行结果

Nuget

结语

OK,教程到此结束。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值