Optano.Modeling 简单教程

news2024/12/24 20:14:10

前言

在工作中遇到两个需求,将两个数学公式用 .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,教程到此结束。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/670034.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

AI操作视频的工具最新最强集合

AI的进化日新月异&#xff0c;很多之前只是在想象中的操作&#xff0c;已经有很多可以使用AI来完成了。最新的Stable Diffusion,ControlNet,EBsynth有哪些神奇的应用&#xff0c;如何一键替换视频中人物和场景&#xff0c;如何根据文字描述即可生成梦幻视频&#xff1f;我们整理…

DFS/回溯/动态规划算法的融会贯通

学算法认准 labuladong 后台回复课程查看精品课 点击卡片可搜索文章&#x1f447; 在线学习网站&#xff1a; https://labuladong.gitee.io/algo/ 经常有读者后台问我&#xff0c;DFS算法/回溯算法/动态规划算法之间的区别和联系是什么&#xff1f; 对于这个问题&#xff0c;我…

私有化部署的无忧·企业文档2.1.7新版本核心功能介绍

无忧企业文档是一款针对企业用户提供在线文档、协同编辑、知识管理的基础化办公工具&#xff0c;产品采用B/S构架。功能覆盖场景包括&#xff1a;在线文档的私有化部署、团队协同、知识管理、在线文档识别的扩展、文档权限化管理等等场景。本次2.1.7版本更新了以下几个核心功能…

【机器学习】十大算法之一 “线性回归”

作者主页&#xff1a;爱笑的男孩。的博客_CSDN博客-深度学习,活动,python领域博主爱笑的男孩。擅长深度学习,活动,python,等方面的知识,爱笑的男孩。关注算法,python,计算机视觉,图像处理,深度学习,pytorch,神经网络,opencv领域.https://blog.csdn.net/Code_and516?typeblog个…

什么是事件委托

文章目录 导文文章重点具体而言&#xff0c;事件委托包含两个主要角色&#xff1a;通过使用事件委托&#xff0c;可以实现以下优势&#xff1a; 代码示例 导文 事件委托是一种在软件开发中常用的设计模式&#xff0c;用于处理事件和回调函数。它允许一个对象&#xff08;委托对…

数据帧转发过程中IP地址及MAC地址的变化

数据帧在交换机间转发 帧经过交换机时&#xff0c;其源、目标MAC是不会变的。 交换机内部的CPU会在每个端口成功连接时&#xff0c;通过将MAC地址和端口对应&#xff0c;形成一张MAC表。在今后的通讯中&#xff0c;发往该MAC地址的数据包将仅送往其对应的端口&#xff0c;而不…

odoo字段加密以及模糊显示

在信息时代&#xff0c;信息本身是把双刃剑&#xff0c;一方面它服务于我们的生产、生活、使我们受益&#xff1b; 一方面,信息的泄露可能对我们构成巨大的威胁。因此&#xff0c;客观上就需要一种有力的安全措施来保护机密数据不被窃取或篡改 。 数据加密与解密从宏观上讲是非…

[2022]DyOb-SLAM : Dynamic Object Tracking SLAM System

1.作者 Rushmian Annoy Wadud、Wei Sun 2.时间 2022 3.整体架构 DyOb-SLAM是DynaSLAM和VDO-SLAM的结合: 基于先验信息使用Mask RCNN分割出动态目标通过基于光流和场景流的算法对运动目标进行跟踪对静态点进行BA优化 输出&#xff1a; 当前帧显示ORB特征以及Masj信息和对…

探索Zabbix API:企业监控管理工具

新钛云服已累计为您分享754篇技术干货 Zabbix是一种流行的开源监控解决方案&#xff0c;其强大的API功能为用户提供了灵活且可扩展的监控管理能力。本文将介绍Zabbix API的基本概念和用法&#xff0c;以及如何利用API来简化监控配置、数据获取和自动化任务等方面的工作。 在现代…

数据结构 树

树的基本概念 树是一种非线性的数据结构&#xff0c;它由节点&#xff08;node&#xff09;和边&#xff08;edge&#xff09;组成。树的基本概念包括以下要点&#xff1a; 树由一个根节点&#xff08;root&#xff09;开始&#xff0c;根节点没有父节点&#xff0c;它可以有…

华为OD机试之阿里巴巴找黄金(III)(Java源码)

文章目录 阿里巴巴找黄金&#xff08;III&#xff09; 阿里巴巴找黄金&#xff08;III&#xff09; 题目描述 一贫如洗的椎夫阿里巴巴在去砍柴的路上&#xff0c;无意中发现了强盗集团的藏宝地&#xff0c;藏宝地有编号从0~N的箱子&#xff0c;每个箱子上面贴有一个数字。阿里…

Rancher创建arm架构的下游k8s集群

目录 前言添加自定义集群镜像源配置使用支持ARM架构的docker镜像 前言 费了些时间在成功在华为云arm架构的服务器上搭建了k8s集群&#xff0c;期间问题不断&#xff0c;以下是三个关键点&#xff1a; 确保网络能正常拉取所需镜像拉取的镜像需支持arm架构 否则报错&#xff1a…

SOFAStack 的下一个五年

文&#xff5c;宋顺&#xff08;GitHub ID&#xff1a;nobodyiam) SOFAStack 社区开源负责人 蚂蚁集团高级技术专家 本文 3861 字 阅读 11 分钟 #01 回顾开源这五年 回想起 2018 年 4 月 19 日 SOFAStack 首次开源&#xff0c;当时的官宣文章中就提到了我们开源的初心&#xf…

C++——map/mutimap再理解

目录 1. map 1.1 map介绍 1.2 map的构造 1.3 map插入和删除 1.4 map的迭代器 1.5 map[ ]运算符重载 1.6 map的查找find 1.7 map的删除erase 1.8 map的其它函数 1.9 map的总结 2. multimap 2.1 multimap的介绍 2.2 mutimap的使用 1. map 1.1 map介绍 1、map是关联…

多窗口通信

1、基本概念 BroadcastChannel接口代理了一个命名频道&#xff0c;可以让指定 origin 下的任意 browsing context 来订阅它。它允许同源的不同浏览器窗口&#xff0c;Tab 页&#xff0c;frame 或者 iframe 下的不同文档之间相互通信。通过触发一个 message 事件&#xff0c;消…

第3讲:使用ajax技术实现异步登录功能(XMLHttpRequest)

封装XMLHttpRequest对象&#xff0c;实现ajax异步登录功能&#xff1b;用三种不同的方法实现登录功能&#xff0c; 方法一&#xff1a;返回文本内容&#xff1b; 方法二&#xff1a;返回JSON格式数据&#xff1b; 方法三&#xff1a;使用fastJSON生成JSON数据&#xff0c;返…

Tensorboard‘s sample_per_plugin

Tensorboard’s sample_per_plugin Tensorboard’s sample_per_plugin controls the step size of the slider. Draw the train images to tensorboard: step 0 writer SummaryWriter() for imgs, labels in train_loader:grid torchvision.utils.make_grid(imgs)writer.…

Android 设计中心 | 助您为各种设备类型轻松打造精彩界面

作者 / Android 开发者体验部设计负责人 Adhithya Ramakumar 和 Android 高级开发者关系工程师 Rebecca Gutteridge 我们推出了 Android 设计中心&#xff0c;帮助开发者更轻松地针对各种类型的设备构建引人注目的界面。 Android 设计中心https://developer.android.google.cn/…

转型内卷下,IT部门如何突围?

在数字化转型极度“内卷”的环境下&#xff0c;传统的IT运维方式无法应对当前的数字化发展需求&#xff0c;在转型过程中&#xff0c;IT部门不但要加深技术与业务的融合&#xff0c;还需要控制成本创造更高的效益。对信息部门的要求进一步提升。 需要明确的是&#xff0c;降本…

废品回收系统开发详细流程--干货分享

废品回收系统的未来可谓是一片光明。随着人们环保意识的不断提高&#xff0c;越来越多的人开始关注废品回收和再利用。这种趋势也在推动着废品回收系统的发展。 目前&#xff0c;各大城市都已经建立了自己的废品回收体系&#xff0c;并且逐渐形成了规模化、产业化运作。同时&a…