c#与matlab混合编程解决线性规划,非线性规划(二次规划)等问题

2023-11-08

网上已经有很多类似方法,上一篇是Lingo,本篇是matlab,两个软件在解决最优解方面各有优势。
matlab软件中自带许多函数:
1:非线性规划:
[x,fval]=fmincon(fun,x0,A,b,Aeq,beq,lb,ub,nonlcon,);
fun: 目标函数
x0:最优解的初始值
A,B: 线性约束不等式 A * x <= b;
Aeq,Beq: 线性约束等式 Aeq * x = Beq;
lb: 自变量下届
ub: 自变量上界
nonlcon:非线性约束函数

2:线性规划:
[x,fval]= linprog(f,A,b,Aeq,beq,lb,ub,x0)

3:二次规划:
[S,y] =quadprog(H,f,A,B,Aeq,beq,lb,ub,x0)

本片着重讲解C#调用matlab解决二次规划问题
所用目标函数和约束条件还是上一篇的例子
目标函数:
min=(x1-80)^2 + (x2-10)^2 + (x3-10)^2
约束条件:
-x1 * 0.216 -x2 * 0.392 +x3 * 2.120 = y1;
-x1 * 0.0020-x2 * 0.176 + x3 * 0.336 =y2;
-x1 * (1-0.0943)* 0.282 -x2 (1-0.0833) 0.462 + x3 * (1-0.087)* 0.296 = y3;
1< x1,x2,x3<99;
-0.5<y1,y2,y3<0.5;
x1+x2+x3 =100;

首先看看matlab如何解决:
其中H = diag([2,2,2]);比较难理解可以参考此博主的这篇文章:
https://blog.csdn.net/jbb0523/article/details/50598641
在这里插入图片描述接下来展示C#项目调用matlab的方法
首先在matlab写好文件
在这里插入图片描述其次在matlab命令行中输入deploytool,有如下选择
在这里插入图片描述选择Library Compiler, 1:.Net Assembly 2:选择刚保存好的.m文件 3:点击Package
在这里插入图片描述

做完上述操作后,在bin目录下可以看到myquadprog文件目录,找到里面的dll,放到项目中引用
在这里插入图片描述
如下图所示,添加myquadprog.dll ,之前也做过fmincom,linprog的测试了,所以会有这两个引用。

在这里插入图片描述接下来项目编写脚本

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using myLinprog;
using myfmincom;
using myquadprog;
using MathWorks.MATLAB.NET.Arrays; 

namespace XianXingGuiHua
{
    class Program
    {
        static void Main(string[] args)
        {
            //MWArray Hs = (MWNumericArray)new double[3, 3];
            //Hs[1] = 2;   测试,将界面的值依次赋予
            //Hs[2] = 0;
            //Hs[3] = 0;
            //Hs[4] = 0;
            //Hs[5] = 2;
            //Hs[6] = 0;
            //Hs[7] = 0;
            //Hs[8] = 0;
            //Hs[9] = 2; 


            MWArray H = (MWNumericArray)new double[,] { { 2, 0, 0 }, { 0, 2,0 }, { 0, 0, 2 } };
            MWArray ff = (MWNumericArray)new double[] { -140, -20, -40 };
            MWArray AA = (MWNumericArray)new double[,] { { -0.216, -0.392, 2.120 }, 
                                                         { 0.216, 0.392, -2.120 },
                                                         { -0.02,-0.176,0.336 },
                                                         { 0.02,0.176,-0.336 },
                                                         { -(1-0.0943)*0.282,-(1-0.0833)*0.462,(1-0.087)*2.698 },
                                                         {(1-0.0943)*0.282,(1-0.0833)*0.462,-(1-0.087)*2.698 }
                                                       };
            MWArray bb = (MWNumericArray)new double[] { 0.5, 0.5, 0.5, 0.5, 0.5, 0.5 };
            MWArray Aeqq = (MWNumericArray)new double[] { 1, 1, 1 };
            MWArray Beqq = (MWNumericArray)new double[] { 100 };
            MWArray lbb = (MWNumericArray)new double[] { 0, 0, 0 };
            MWArray ubb = (MWNumericArray)new double[] { };
            MWArray x00 = (MWNumericArray)new double[] { 1, 1, 1,1 };
            MWArray[] agrsInn = new MWArray[] { (MWNumericArray)H, (MWNumericArray)ff, (MWNumericArray)AA, (MWNumericArray)bb, (MWNumericArray)Aeqq, (MWNumericArray)Beqq, (MWNumericArray)lbb, (MWNumericArray)ubb, (MWNumericArray)x00 };//输入参数            


            MWArray[] agrsOutt = new MWArray[2]; //输出存放的数组

            myquadprog.Class1 mf = new myquadprog.Class1(); //二次规划
            mf.myquadprog(2, ref agrsOutt, agrsInn);  


            Console.WriteLine("x最优值为 : \t");


            int c1 = int.Parse(Double.Parse(agrsOutt[0][1].ToString()).ToString("#0."));
            int c2 = int.Parse(Double.Parse(agrsOutt[0][2].ToString()).ToString("#0."));
            int c3 = int.Parse(Double.Parse(agrsOutt[0][3].ToString()).ToString("#0."));

            Console.WriteLine(agrsOutt[0][1] + "----" + agrsOutt[0][2] + "----" + agrsOutt[0][3]);

            Console.WriteLine("得到的y值为 : \t" + agrsOutt[1]);
            Console.ReadKey();
    
        }
    }
}



运行结果如下:
在这里插入图片描述
最后成功解决,但是有一个小问题,就是限定整数的问题,在线性规划上,matlab有intprog函数解决,但是像此例子,非线性规划,还是比较特殊的二次规划,就没办法解决最优解是整数的问题了,所以这时候只能用lingo解决了,大家如果对matlab精深,有更好的方法欢迎讨论,共同研究一下。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

c#与matlab混合编程解决线性规划,非线性规划(二次规划)等问题 的相关文章

  • 图像堆栈的最大强度投影

    我正在尝试重新创建该功能 max array 3 来自 MatLab 它可以获取 N 个图像的 300x300px 图像堆栈 我在这里说 图像 因为我正在处理图像 实际上这只是一个大的双数组 300x300xN 并创建一个 300x300
  • 如何在Matlab中自定义轮廓线?

    我正在准备一个等高线图 我应该在其中突出显示特定级别的等高线 例如 我的轮廓线值位于 1 和 1 之间 我想突出显示与值 0 相对应的线 我尝试使用以下过程来执行此操作 M c contourf longitude latitude del
  • Matlab:如何显示数组的“真实”值?

    我有一个在脚本中计算的向量 计算后 我将值显示到命令窗口 显示如下 finalResults 1 0e 05 0 0001 0 0 0005 0 0002 0 0001 0 0027 0 0033 0 0001 0 0000 0 0000
  • 按元素出现的频率对数组元素进行排序

    是否可以在 matlab octave 中使用sort函数根据元素的相对频率对数组进行排序 例如数组 m 4 4 4 10 10 10 4 4 5 应该产生这个数组 5 10 10 10 4 4 4 4 4 5是出现频率较低的元素 位于顶部
  • Matlab 字段名索引[重复]

    这个问题在这里已经有答案了 所以我有一个包含多个表的元胞数组 我试图访问表的第一个列名称 c table1 table2 table3 以下两行都给了我错误 fieldnames c 1 1 fieldnames c 1 1 Error i
  • 如何在 Matlab 中对数组应用低通或高通滤波器?

    有没有一种简单的方法可以将低通或高通滤波器应用于 MATLAB 中的数组 我对 MATLAB 的强大功能 或数学的复杂性 有点不知所措 需要一个简单的函数或一些指导 因为我无法从文档或网络搜索中找到答案 看着那 这filter http w
  • MATLAB 特征函数

    我很好奇哪里可以找到完整的描述FEATURE功能 它接受哪些论点 没有找到文档 我只听说过memstats and getpid 还要别的吗 gt gt which feature built in undocumented 注意 更完整的
  • 两个向量之间的欧氏距离(单行矩阵)

    我有两个向量 单行矩阵 假设我们已经知道长度len A x1 x2 x3 x4 x5 B y1 y2 y3 y4 y5 计算它们之间的欧几里德距离最快的方法是什么 我的第一次尝试是 diff A B sum 0 for column 1 l
  • Matlab 和 Python 中的优化算法(dog-leg trust-region)

    我正在尝试使用 Matlab 和 Python 中的狗腿信赖域算法求解一组非线性方程 在Matlab中有fsolve https www mathworks com help optim ug fsolve html其中此算法是默认算法 而
  • Matlab:如何更改矩阵的存储方式?从 1x1x3 到 1x3?

    我目前有 val 1 0 7216 val 2 0 7216 val 3 0 7216 但我想要 0 7216 0 716 0 721 我可以做什么样的操作来做到这一点 The reshape函数将在这里解决问题 Arrange the e
  • 在 Matlab 中高效获取像素坐标

    我想在 Matlab 中创建一个函数 给定一个图像 该函数将允许人们通过单击图像中的像素来选择该像素并返回该像素的坐标 理想情况下 人们能够连续单击图像中的多个像素 并且该函数会将所有相应的坐标存储在一个矩阵中 有没有办法在Matlab中做
  • matlab中的排列函数是如何工作的

    这是一个有点愚蠢的问题 但我似乎无法弄清楚排列在 matlab 中是如何工作的 以文档为例 A 1 2 3 4 permute A 2 1 ans 1 3 2 4 到底是怎么回事 这如何告诉 matlab 3 和 2 需要交换 哇 这是我迄
  • matlab中的正则逻辑回归代码

    我正在尝试正则化 LR 在 matlab 中使用以下公式很简单 成本函数 J theta 1 m sum y i log h x i 1 y i log 1 h x i lambda 2 m sum theta j 梯度 J theta t
  • 检测植物图片中的所有分支

    我想知道有什么可以检测下图中的所有绿色树枝 目前我开始应用 Frangi 过滤器 options struct FrangiScaleRange 5 5 FrangiScaleRatio 1 FrangiBetaOne 1 FrangiBe
  • 如何使用 MATLAB 的 substruct 函数创建表示使用“end”的引用的结构?

    我想使用substruct http www mathworks com help matlab ref substruct html函数创建一个结构体以供使用subsref 目的是使用索引字符串subsref而不是通常的 符号 因为我正在
  • 如何更改Plotyy第二轴的颜色和字体大小?

    我使用 MATLAB 的plotyy 函数绘制了两条曲线 AX H1 H2 plotyy voltage span amplitude voltage span Ca SR The problem is that I cannot chan
  • glpk.LPX 向后兼容性?

    较新版本的glpk没有LPXapi 旧包需要它 我如何使用旧包 例如COBRA http opencobra sourceforge net openCOBRA Welcome html 与较新版本的glpk 注意COBRA适用于 MATL
  • “Desort”向量(撤消排序)

    在Matlab中 sort返回排序后的向量和索引向量 显示哪个向量元素已移动到以下位置 v ix sort u Here v是一个包含所有元素的向量u 但已排序 ix是一个向量 显示每个元素的原始位置v in u 使用 Matlab 的语法
  • 在matlab中绘制给定区域内(两个圆之间)的向量场

    我想在 Matlab 中绘制下面的向量场 u cos x x 0 y y 0 v sin x x 0 y y 0 我可以在网格中轻松完成 例如 x 和 y 方向从 2 到 2 x 0 2 y 0 1 x y meshgrid 2 0 2 2
  • ROC曲线和libsvm

    给定一条 ROC 曲线plotroc m see here http www csie ntu edu tw cjlin libsvmtools roc curve for binary svm 理论问题 如何选择要使用的最佳阈值 编程问题

随机推荐

  • 内存管理技术——离散分配方式

    上一篇讲到 采用固定分区的方式 会产生页内碎片等缺点 因此引入了动态分区方式 但动态分区又产生了外部碎片 导致内存的利用率也不理想 为了进一步提高内存的利用率 所以就产生了离散的分配方式 理论来源于实际问题 这很好的体现在计算机科学中 离散
  • Gateway中判断是否满足过滤条件的代码片段

    SpringBootTest class MybaisplusApplicationTests private String startWith base login base logout base sendVerificationCod
  • Digital Pre-Distortion (数字预失真)以及用途

    Digital Pre Distortion 数字预失真 以及用途 2014 04 04 10 09 29 分类 FPGA 标签 fpga 数字预失真 通信基础 wcdma 功率放大器 举报 字号 订阅 http blog 163 com
  • 主机浏览器访问 VMware中Centos7 中运行的nginx

    VMware中Centos7 中nginx启动之后 通过curl http localhot 能够正常访问 虚拟机外部浏览器访问 确访问不到 原因是端口没设置 执行firewall cmd zone public add port 80 t
  • 大小写转换 蓝桥杯

    问题描述 编写一个程序 输入一个字符串 长度不超过20 然后把这个字符串内的每一个字符进行大小写变换 即将大写字母变成小写 小写字母变成大写 然后把这个新的字符串输出 输入格式 输入一个字符串 而且这个字符串当中只包含英文字母 不包含其他类
  • 从头搭建Android源码编译环境(Ubuntu 18.04 / 20.04 / 22.04)

    在新安装的Ubuntu上 版本20 04LTS 完成搭建Android源码编译环境步骤如下 顺带说一句 当前用的比较多的Ubuntu是18 04和20 04 在实际项目中一直在用 可用性和稳定性都没问题 最新的Ubuntu22 04版本 系
  • javase 基本运算符和三大流程

    范围 2 字节 X 8 1 2 字节 X 8 1 1 主要区别是数据大小范围 1 byte 一个字节 128 127 2 short 两个字节 32768 32767 3 int 四个字节 2147483648 2147483647 4 l
  • UGUI图片跟随文本框长度改变位置

    这次要完成一个功能 需要钻石图标跟随数字的长度改变位置 之前使用了Layout Group排版 在数字改变的时候会出现一点小问题 这次使用锚点去进行跟随 设置文本框的属性 使其从右往左排版 并添加ContentSizeFitter组件 使其
  • 智慧图书馆:自助阅读,安全防盗

    RFID技术在智慧图书馆建设中具有重要作用 可为构建书香校园智慧阅读新生态提供强有力的保障 RFID技术可以用来识别 追踪和保护图书馆的所有资料 通过RFID系统可实现图书借还 上架 查找 馆藏盘点等功能 大大的改进管理方式 提高工作效率
  • “囚徒”李一男回归华为真相揭密

    作者 周遊 时间 2006 09 25 11 44 50 来源 中国计算机报 name google ads frame marginwidth 0 marginheight 0 src http pagead2 googlesyndica
  • 自然语言处理技术之词向量:GloVe单词表示的全局向量(glove.840B.300d、glove.6B)

    目录 一 词向量介绍 二 GloVe学习词向量的词嵌入模型 三 词向量入门 代码下载 四 训练 五 模型概述 六 可视化 七 发布历史 一 词向量介绍 自然语言处理 NLP 中的词向量是将文本中的词汇表示为数值向量的技术 词向量的主要作用是
  • 物理机服务器应该注意的事

    物理机服务器应该注意的事 1 选址 服务器是个非常重要的硬件产品 对机房的也是有一定的要求的 比如温度 安全性 噪音 电源稳定性等等问题都需要解决 但是不是每个人都会选择自己建立一个机房 毕竟各方面加起来的成本都太高 这个时候可以选择一个专
  • @SpringBootApplication 相当于 @Configuration、@EnableAutoConfiguration 、 @ComponentScan 三个的作用

    ComponentScan 如果不设置basePackage的话 默认会扫描包的所有类 所以最好还是写上basePackage 减少加载时间 默认扫描 class路径 比如这个注解在com wuhulala 下面 那么会扫描这个包下的所有类
  • pycharm安装opencv-python失败的手动解决办法

    解决方法 直接将opencv python文件下载到本地 把文件放到对应pycharm项目的Lib site packages路径下 在这里分享window系统的opencv python文件下载链接 链接 https pan baidu
  • ACC测试理论--google软件测试之道

    ACC测试理论 A Attribute 特质 在测试之前 需了解产品的特质是什么 即客户为何需要选择此产品的原因 Chrome的定位是快速 安全 稳定和优雅 特质所拥有的特点如下 简单 如果你不能几分钟内列举出来 说明你还没有足够理解你的产
  • CMake添加gcov代码覆盖测试支持

    CMake添加gcov代码覆盖测试支持 金庆的专栏 在根CMakeList txt中添加ENABLE GCOV选项 OPTION ENABLE GCOV Enable gcov debug Linux builds only OFF IF
  • 基数排序python

    一 基数排序介绍 基数排序 radix sort 属于 分配式排序 distribution sort 又称 桶子法 bucket sort 或bin sort 顾名思义 它是透过键值的部份资讯 将要排序的元素分配至某些 桶 中 藉以达到排
  • Shopify速度优化

    对于很多出海的商家 网站速度的加载快慢一直是大家困扰的问题 首先我们先认识下什么是网站速度和网页速度 网站速度是用户浏览网站时的网站加载速度 从第一页加载到访客点入浏览 最后在购物车页面 结账 这个速度由一些服务来评分 例如 Google
  • Influxdb 1.2版本优化之旅(经验证,适用于influxdb1.4版本)

    一 常见异常 1 max series per database exceeded 异常 err max series per database exceeded java lang RuntimeException error max s
  • c#与matlab混合编程解决线性规划,非线性规划(二次规划)等问题

    网上已经有很多类似方法 上一篇是Lingo 本篇是matlab 两个软件在解决最优解方面各有优势 matlab软件中自带许多函数 1 非线性规划 x fval fmincon fun x0 A b Aeq beq lb ub nonlcon