数学建模:Yalmip求解线性与非线性优化问题

🔆 文章首发于我的个人博客:欢迎大佬们来逛逛

线性优化

使用 Yalmip 求解线性规划最优值:

m i n { − x 1 − 2 x 2 + 3 x 3 } x 1 + x 2 ⩾ 3 x 2 + x 3 ⩾ 3 x 1 + x 3 = 4 0 ≤ x 1 , x 2 , x 3 ≤ 2 \begin{gathered}min\{-x_1-2x_2+3x_3\} \\x_1+x_2\geqslant3 \\x_2+x_3\geqslant3 \\x_1+x_3=4 \\0\leq x_1,x_2,x_3\leq2 \end{gathered} min{x12x2+3x3}x1+x23x2+x33x1+x3=40x1,x2,x32

  • 使用 sdpvar 来构建实数解,如果要求解整数类型,则使用 intvar;如果是01类型,使用binvar
  • 构建目标函数
  • 构建约定与LB,UB上下限,其中 ≥ ≤ == 等约束直接照抄即可
  • optimize求解最优值
  • 打印结果…
clc;clear;
%
p = sdpvar(3,1);
%% 构建目标函数
Objective = -p(1)-2*p(2)+3*p(3);
%% 构建约束
Constraints = [0<=p<=2,(p(1)+p(2)>=3),(p(2)+p(3)>=3),(p(1)+p(3)==4)];
%% 求解最优值
optimize(Constraints,Objective);
%%
% 三个变量的解
P=double(p);
% 目标优化值
Obj=double(Objective);
objstr=['目标函数最优值:',num2str(Obj)];
disp(objstr)
for i=1:length(P)xstr=['x',num2str(i),'的值为:',num2str(P(i))];disp(xstr)
end

整数规划

在 optimize 函数中添加如下参数来实现 01整数规划

  • options = sdpsettings(‘solver’, ‘bnb’, ‘bnb.solver’, ‘fmincon’);
  • options = sdpsettings(‘solver’,‘bmibnb’, ‘bmibnb.uppersolver’, ‘fmincon’); 全局最优,但是速度慢

案例(1)

在这里插入图片描述

在这里插入图片描述

clc;clear;p = binvar(6,4); % 01整数规划
%%
c = [4,2,3,4;6,4,5,5;7,6,7,6;7,8,8,6;7,9,8,6;7,10,8,6;
];
%%
f = -sum(sum(p.*c));
%% 构建约束:注意二维矩阵的构建方法
cons = [];
for j = 1:size(c,2)cons = [cons,(sum(p(:,j))>=1)];
end
%%
for i = 1:size(c,1)cons = [cons,(sum(p(i,:))==1)];
end
%% 整数规划
% options = sdpsettings('solver', 'bnb', 'bnb.solver', 'fmincon');
options = sdpsettings('solver','bmibnb', 'bmibnb.uppersolver', 'fmincon');
%%
optimize(cons,f,options);%%
% 三个变量的解
P=double(p);
% 目标优化值
Obj=double(-f);
objstr=['目标函数最优值:',num2str(Obj)];
disp(objstr)
disp(P);

案例(2)

在这里插入图片描述

在这里插入图片描述

clc;clear;p = intvar(7,1);
%%
f = sum(p);
%%
% 必须写上限制范围
cons = [0<=p,(p(1)+2*p(2)+p(7)>=100),(3*p(3)+2*p(4)+p(5)+p(7)>=100),(4*p(1)+p(2)+2*p(4)+4*p(5)+6*p(6)+p(7)>=100)];
%% 整数规划
% options = sdpsettings('solver', 'bnb', 'bnb.solver', 'fmincon');
% options = sdpsettings('solver','bmibnb', 'bmibnb.uppersolver', 'fmincon');
%%
optimize(cons,f);%%
% 三个变量的解
P=double(p);
% 目标优化值
Obj=double(f);
objstr=['目标函数最优值:',num2str(Obj)];
disp(objstr)
for i=1:length(P)xstr=['x',num2str(i),'的值为:',num2str(P(i))];disp(xstr)
end

案例(3)

在这里插入图片描述
在这里插入图片描述

clc;clear;p = binvar(5,8);
%%
c = [ 30 25 18 32 27 19 22 26;29 31 19 18 21 20 30 19;28 29 30 19 19 22 23 26;29 30 19 24 25 19 18 21;21 20 18 17 16 14 16 18];%% 
f = sum(sum(c.*p));%%
constraints = [];
for j = 1:size(c,2)constraints = [constraints,(sum(p(:,j))<=1)];
endfor i = 1:size(c,1)constraints = [constraints,(sum(p(i,:))==1)];
end
%%
options = sdpsettings('solver','bmibnb', 'bmibnb.uppersolver', 'fmincon');%% 
optimize(constraints,f,options);%%
% 三个变量的解
P=double(p);
% 目标优化值
Obj=double(f);
objstr=['目标函数最优值:',num2str(Obj)];
disp(objstr)
disp(P);

非线性规划

max ⁡ f ( x ) = 2 x 1 + 3 x 1 2 + 3 x 2 + x 2 2 + x 3 , s. t. { x 1 + 2 x 1 2 + x 2 + 2 x 2 2 + x 3 ⩽ 10 , x 1 + x 1 2 + x 2 + x 2 2 − x 3 ⩽ 50 , 2 x 1 + x 1 2 + 2 x 2 + x 3 ⩽ 40 , x 1 2 + x 3 = 2 , x 1 + 2 x 2 ⩾ 1 , x 1 ⩾ 0 , x 2 , x 3 不约束 . \max f(x)=2x_1+3x_1^2+3x_2+x_2^2+x_3,\\\text{s. t.}\quad\begin{cases}x_1+2x_1^2+x_2+2x_2^2+x_3\leqslant10,\\x_1+x_1^2+x_2+x_2^2-x_3\leqslant50,\\2x_1+x_1^2+2x_2+x_3\leqslant40,\\x_1^2+x_3=2,\\x_1+2x_2\geqslant1,\\x_1\geqslant0,x_2,x_3\text{ 不约束}.\end{cases} maxf(x)=2x1+3x12+3x2+x22+x3,s. t. x1+2x12+x2+2x22+x310,x1+x12+x2+x22x350,2x1+x12+2x2+x340,x12+x3=2,x1+2x21,x10,x2,x3 不约束.

clc;clear;p = sdpvar(3,1);
%% 
f = -2*p(1)-3*p(1)^2-3*p(2)-p(2)^2-p(3);%%
Cons = [(p(1)>=0),(p(1)+2*p(1)^2+p(2)+2*p(2)^2+p(3)<=10),(p(1)+p(1)^2+p(2)+p(2)^2-p(3)<=50),(2*p(1)+p(1)^2+2*p(2)+p(3)<=40),(p(1)^2+p(3)==2),(p(1)+2*p(2)>=1)];
%%
% options = sdpsettings('solver','bmibnb', 'bmibnb.uppersolver', 'fmincon');
%% 
optimize(Cons,f);
%%
% 三个变量的解
P=double(p);
% 目标优化值
Obj=double(-f);
objstr=['目标函数最优值:',num2str(Obj)];
disp(objstr)
disp(P);

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

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Python|小游戏之猫捉老鼠!!!

最近闲(mang)来(dao)无(fei)事(qi)&#xff0c;喜欢研究一些小游戏&#xff0c;本篇文章我主要介绍使用 turtle 写的一个很简单的猫捉老鼠的小游戏&#xff0c;主要是通过鼠标控制老鼠(Tom)的移动&#xff0c;躲避通过电脑控制的猫(Jerry)的追捕。 游戏主体思考逻辑&#xff1…

es5的实例__proto__(原型链) prototype(原型对象) {constructor:构造函数}

现在看这张图开始变得云里雾里&#xff0c;所以简单回顾一下 prototype 的基本内容&#xff0c;能够基本读懂这张图的脉络。 先介绍一个基本概念&#xff1a; function Person() {}Person.prototype.name KK;let person1 new Person();在上面的例子中&#xff0c; Person …

C++:日期类

学习目标&#xff1a; 加深对四个默认构造函数的理解&#xff1a; 1.构造函数 2.析构函数 3.拷贝构造 4.运算符重载 实现功能 1.比较日期的大小 2.日期-天数 3.前/后置&#xff0c;-- 这里基本会使用运算符重载 定义一个日期类 class Date { public://1.全缺省参数的构造函数Da…

简明易懂:Python中的分支与循环

文章目录 前言分支结构if 语句&#xff1a;单一条件判断else语句&#xff1a;提供备选方案elif 语句&#xff1a;多条件判断嵌套的分支结构&#xff1a;复杂条件逻辑 循环结构for循环&#xff1a;遍历序列range()函数与for循环while循环&#xff1a;条件重复循环控制&#xff1…

spring boot项目生成容器并运行

一个安静的周末&#xff0c;shigen又睡懒觉了&#xff0c;上次说的拖延症的惩罚来了&#xff1a;早晚各100个健腹轮练习&#xff0c;早上的已经完成了。今天的文章来的有点晚&#xff0c;但是依旧保持质量。 springboot项目生成容器并运行 背景 将springboot项目打包成jar包&…

植物根系基因组与数据分析

1.背景 这段内容主要是关于植物对干旱胁迫的反应&#xff0c;并介绍了生活在植物体内外以及根际的真菌和细菌的作用。然而&#xff0c;目前对这些真菌和细菌的稳定性了解甚少。作者通过调查微生物群落组成和微生物相关性的方法&#xff0c;对农业系统中真菌和细菌对干旱的抗性…

大屏开发,浏览器的可视区域和设备的分辨率

在线屏幕检测 - 显示器检测 - 显示器坏点检测工具

【高危】Apache Airflow Spark Provider 反序列化漏洞 (CVE-2023-40195)

zhi.oscs1024.com​​​​​ 漏洞类型反序列化发现时间2023-08-29漏洞等级高危MPS编号MPS-qkdx-17bcCVE编号CVE-2023-40195漏洞影响广度广 漏洞危害 OSCS 描述Apache Airflow Spark Provider是Apache Airflow项目的一个插件&#xff0c;用于在Airflow中管理和调度Apache Spar…

mac软件安装后打开软件显示损坏

#mac传输安装包后安装后打开软件显示损坏处理方式 以postman为例&#xff0c;输入前面的代码&#xff0c;打开访达&#xff0c;把有问题的软件拉到命令行窗口&#xff0c;确认即可 sudo xattr -r -d com.apple.quarantine /Applications/Postman.app sudo xattr -r -d com.ap…

docker 安装 MySQL5.7

1、拉取镜像 docker pull mysql:5.7 2、创建容器 docker run \ -d \ -p 3306:3306 \ --name mysql \ --privilegedtrue \ -v /var/docker/mysql/log:/var/log/mysql \ -v /var/docker/mysql/data:/var/lib/mysql \ -v /var/docker/mysql/conf:/etc/mysql/conf.d \ -e MYSQL_…

外贸爬虫系统

全球智能搜索 全球智能搜索 支持全球所有国家搜索引擎&#xff0c;及社交平台&#xff0c;精准定位优质的外贸客户&#xff0c;免翻墙 全球任意国家地区实时采集 搜索引擎全网邮箱电话采集 社交平台一键查看采集&#xff08;Facebook,Twitter,Linkedin等&#xff09; 职位…

从零开始搭建AI网站(6):如何使用响应式编程

响应式编程&#xff08;Reactive Programming&#xff09;是一种编程范式&#xff0c;旨在处理异步数据流和事件流。它通过使用观察者模式和函数式编程的概念&#xff0c;将数据流和事件流抽象为可观察的序列&#xff0c;然后通过操作这些序列来实现各种功能。 在响应式编程中…

python+requests实现接口自动化测试

这两天一直在找直接用python做接口自动化的方法&#xff0c;在网上也搜了一些博客参考&#xff0c;今天自己动手试了一下。 一、整体结构 上图是项目的目录结构&#xff0c;下面主要介绍下每个目录的作用。 Common:公共方法:主要放置公共的操作的类&#xff0c;比如数据库sql…

css 左右宽固定,中间自适应——双飞翼布局

最近面试的时候遇到一个提问说&#xff0c;如何做到一个左右宽度固定&#xff0c;中间自适应的布局&#xff0c;我的答案不重要&#xff0c;重要的是不是面试官想听到的答案&#xff0c;这样问大概率他想听到的答案一定是双飞翼布局&#xff0c;所以今天就手敲一个双飞翼布局让…

Tauri打包windows应用配置中文界面

使用 Tauri Rust 开发桌面应用&#xff0c;在 windows 系统上&#xff0c;打包后安装包名称后缀、安装界面、相关说明默认都是英文的。如果要默认显示为中文&#xff0c;则需要在 tauri.conf.json 中配置相应参数。 前言 默认情况下&#xff0c;在 windows 系统打完的 mis 包…

Linux串口驱动

《I.MX6ULL 参考手册》第 3561 页的“Chapter 55 Universal Asynchronous Receiver/Transmitter(UART) I.MX6ULL串口原理 1.1UART与USART UART是异步通信&#xff0c;USART是异步/同步通信&#xff0c;比UART多了一条时钟线 USART 的全称是 Universal Synchronous/Asynchr…

vim练级攻略(精简版)

vim推荐配置: curl -sLf https://gitee.com/HGtz2222/VimForCpp/raw/master/install.sh -o ./install.sh && bash ./install.sh 0. 规定 Ctrl-λ 等价于 <C-λ> :command 等价于 :command <回车> n 等价于 数字 blank字符 等价于 空格&#xff0c;tab&am…

Code Snippet的使用

文章目录 前言Code Snippet:就是咱们在VS中敲的prop、propfull、ctol【构造器快捷键】、for等快捷键&#xff0c;然后按tab键自动生成代码1.VS自带的&#xff1a;prop、propfull、ctol【构造器快捷键】、for等快捷键&#xff0c;直接使用2.自定义Snippet&#xff1a; 巨人的肩膀…

macOS上制作arm64的jdk17镜像

公司之前一直用的openjdk17的镜像&#xff0c;docker官网可以直接下载&#xff0c;但是最近对接的一个项目&#xff0c;对方用的是jdk17&#xff0c;在对接的时候有加解密异常的问题&#xff0c;为了排查是不是jdk版本的问题&#xff0c;需要制作jdk17的镜像。docker官网上的第…

ISO/IEC标准之Mpeg-1到Mpeg21对应哪些ISO/IEC标准(三十八)

简介: CSDN博客专家,专注Android/Linux系统,分享多mic语音方案、音视频、编解码等技术,与大家一起成长! 优质专栏:Audio工程师进阶系列【原创干货持续更新中……】🚀 人生格言: 人生从来没有捷径,只有行动才是治疗恐惧和懒惰的唯一良药. 更多原创,欢迎关注:Android…