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混合编程解决线性规划,非线性规划(二次规划)等问题 的相关文章

  • MATLAB:解包函数

    我正在与 Mathworks 的某人讨论 unwrap http www mathworks com access helpdesk help techdoc ref unwrap html函数中对于 以外的跳跃容差有一个 bug 并且希望
  • Google Chrome 的互联网历史记录脚本

    我并不是在寻找 最佳 或最有效的脚本来执行此操作 但我想知道是否存在一个脚本可以从 Google Chrome 中提取一天的互联网历史记录并将其记录到 txt 文件中 我更喜欢用 Python 或 MATLAB 编写 如果你们有不同的方法
  • 有没有办法在 MATLAB 中执行函数内联?

    我可以使用什么语言功能或开箱即用的技巧来完成 MATLAB 中的函数内联 令人烦恼的是 Google 搜索 matlab 内联函数 http www google com search q matlab inline function揭示了
  • Matlab 中二维插值的函数形式

    我需要从二维数据数组构造一个插值函数 我需要返回实际函数的东西的原因是 我需要能够将函数作为我需要进行数值积分的表达式的一部分进行计算 因此 interp2 并没有解决这个问题 它不返回函数 我可以使用 TriScatteredInterp
  • 朴素分类器 matlab

    在 matlab 中测试朴素分类器时 即使我在相同的样本数据上进行训练和测试 我也会得到不同的结果 我想知道我的代码是否正确 是否有人可以帮助解释这是为什么 dimensionality reduction columns 6 U S V
  • 优化数组压缩

    假设我有一个数组k 1 2 0 0 5 4 0 我可以按如下方式计算掩码m k gt 0 1 1 0 0 1 1 0 仅使用掩码 m 和以下操作 左移 右移 And Or 加 减 乘 我可以将 k 压缩为以下形式 1 2 5 4 以下是我目
  • 如何在 MATLAB 中创建带有分级标记颜色的散点图?

    我想在 MATLAB 中绘制一个简单的散点图 标记颜色从光谱的一端到另一端各不相同 例如红色 橙色 黄色 蓝色 紫色 我的数据比较了一段时间内河流的水量和水质 3 个简单的列 时间 水量 质量 我想绘制数量与质量的 x y 散点图 但颜色随
  • 将 Android 应用程序与服务器上的 Matlab 应用程序连接

    我正在 Android 上开发一个应用程序 它将获取图像输入 并将该输入传递到安装 MATLAB 应用程序的服务器 MATLAB 应用程序将计算结果并将其返回到该 Android 应用程序 我想知道我可以使用哪个服务器 如何将 MATLAB
  • 增加 .fig 文件中的散点标记大小

    我有一个图形文件 scatter fig 该图有许多使用 scatter 的散点绘图仪 现在我只有这个无花果文件 我需要增加所有散点的标记大小 手动尝试过 但非常困难 有没有办法我可以做类似的事情 H 图形句柄 s 点 h 设置 s 标记大
  • MATLAB 是否已有 YAML 库/解析器?

    我想使用 YAML 跨多种语言交流一些数据 将其视为 与语言无关的序列化 其中一种语言是 MATLAB 但我似乎找不到该语言的 YAML 库 我在 Google 上检查了 matlab yaml 和 matlab yaml parse 似乎
  • Matlab 的快速 JSON 解析器

    您知道 Matlab 中有一个非常快速的 JSON 解析器吗 目前我正在使用JSONlab http www mathworks com matlabcentral fileexchange 33381 jsonlab a toolbox
  • 在 Matlab 中对列进行排序

    我有 2 列使用 textscan 导入的数据 数据看起来像这样 其中U is undetect and D is detect mydata 51 U 57 D 48 U 47 D my data 4x1 double 4x1 char
  • 使用 python 在网络上部署 matlab 应用程序

    您好 我想使用 python 在网络上部署 matlab 应用程序 有没有办法做到这一点 我已按照数学工作网站上的文档将我的应用程序转换为 jar 文件 java 类 有人能指出我前进的正确方向吗 事实上 您的 Matlab 代码打包为 J
  • matlab矩阵中求子矩阵的通用方法

    我正在寻找一种 好 方法来在更大的矩阵 任意维数 中找到矩阵 模式 Example total rand 3 4 5 sub total 2 3 1 3 3 4 现在我希望这样的事情发生 loc matrixFind total sub 在
  • 类方法的自定义代码完成?

    在 MATLAB 中 可以定义代码建议和完成 如标题为 的文档页面中所述 自定义代码建议和完成 https www mathworks com help matlab matlab prog customize code suggestio
  • MATLAB:比较两个不同长度的数组

    我有两个长度不同的数组 由于采样率不同 需要比较 我想对较大的数组进行下采样以匹配较小的数组的长度 但是该因子不是整数而是小数 举个例子 a 1 1 375 1 75 2 125 2 5 2 875 3 25 b 1 2 3 有什么方法可以
  • 在 Matlab 中显示有理数

    我有两个整数 m n 它们一起形成 m n 形式的有理数 现在我只想以这种理性的形式在 Matlab 中显示它们 我可以通过这样做来做到这一点 char sym m n 所以 如果 例如m 1 n 2 Matlab将显示1 2 然而 如果m
  • MATLAB 图中轴标签与轴之间的距离

    我正在使用 MATLAB 绘制一些数据 我想调整轴标签与轴本身之间的距离 但是 只需向标签的 位置 属性添加一点即可使标签移出图窗窗口 是否有 保证金 属性或类似的东西 在上图中 我想增加数字和标签 Time s 之间的距离 同时自动扩展数
  • 优化 MATLAB 代码(嵌套 for 循环计算相似度矩阵)

    我正在 MATLAB 中基于欧几里德距离计算相似度矩阵 我的代码如下 for i 1 N M N is the size of the matrix x for whose elements I am computing similarit
  • 单元格的 Fieldnames 函数的等效项

    正如标题所说 只是想知道是否有一个函数可以用作字段名 http www mathworks co uk help matlab ref fieldnames html 但适用于单元格 所以如果我有类似的东西 a imread redsqua

随机推荐

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

    上一篇讲到 采用固定分区的方式 会产生页内碎片等缺点 因此引入了动态分区方式 但动态分区又产生了外部碎片 导致内存的利用率也不理想 为了进一步提高内存的利用率 所以就产生了离散的分配方式 理论来源于实际问题 这很好的体现在计算机科学中 离散
  • 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