数学建模-数学规划(Matlab)

article/2025/9/16 15:07:20

目录

一、线性规划求解

二、非线性规划问题

 三、整数规划(包括0-1规划)

四、最大最小化模型

五、多目标规划模型


注意:代码文件仅供参考,一定不要直接用于自己的数模论文中
国赛对于论文的查重要求非常严格,代码雷同也算作抄袭
如何修改代码避免查重的方法:https://www.bilibili.com/video/av59423231   //清风数学建模

在给定条件下,按照某一衡量指标(目标函数)求计划。 

一、线性规划求解

 根据题弄A x b等矩阵,列式子用matlab求解

[x fval] = linprog(c, A, b, Aeq, beq, lb)
fval = -fval % 注意这个fval要取负号(原来是求最大值,我们添加负号变成了最小值问题)

例题1:生产决策问题

%% 生产决策问题
format long g   %可以将Matlab的计算结果显示为一般的长数字格式(默认会保留四位小数,或使用科学计数法)
% (1) 系数向量
c = zeros(9,1); % 初始化目标函数的系数向量全为0
c(1) = 1.25 -0.25 -300/6000*5;  % x1前面的系数是c1
c(2) = 1.25 -0.25 -321/10000*7;
c(3) = -250 / 4000 * 6;
c(4)  = -783/7000*4;
c(5) = -200/4000 * 7;
c(6) = -300/6000*10;
c(7) = -321 / 10000 * 9;
c(8) = 2-0.35-250/4000*8;
c(9) = 2.8-0.5-321/10000*12-783/7000*11;
c = -c;  % 我们求的是最大值,所以这里需要改变符号
% (2) 不等式约束
A = zeros(5,9);
A(1,1) = 5;  A(1,6) = 10;
A(2,2) = 7;  A(2,7) = 9; A(2,9) = 12;
A(3,3) = 6;  A(3,8) = 8;
A(4,4) = 4;  A(4,9) = 11;
A(5,5) = 7;  
b = [6000 10000 4000 7000 4000]';
% (3) 等式约束
Aeq = [1 1 -1 -1 -1 0 0 0 0;0 0 0 0 0 1 1 -1 0];
beq = [0 0]';
%(4)上下界
lb = zeros(9,1);% 进行求解
[x fval] = linprog(c, A, b, Aeq, beq, lb)
fval = -fval
% fval =
%           1146.56650246305
%  注意,本题应该是一个整数规划的例子,我们在后面的整数规划部分再来重新求解。
intcon = 1:9;
[x,fval]=intlinprog(c,intcon,A,b,Aeq,beq,lb)
fval = -fval

例题二:投料问题

%% 投料问题
clear,clc
format long g   %可以将Matlab的计算结果显示为一般的长数字格式(默认会保留四位小数,或使用科学计数法)
% (1) 系数向量
a=[1.25  8.75  0.5  5.75  3  7.25];  % 工地的横坐标
b=[1.25  0.75  4.75	5  6.5  7.25];   % 工地的纵坐标
x = [5  2];  % 料场的横坐标
y = [1  7];  % 料场的纵坐标
c = [];  % 初始化用来保存工地和料场距离的向量 (这个向量就是我们的系数向量)
for  j =1:2for i = 1:6c = [c;  sqrt( (a(i)-x(j))^2 + (b(i)-y(j))^2)];  % 每循环一次就在c的末尾插入新的元素end
end
% (2) 不等式约束
A =zeros(2,12);
A(1,1:6) = 1;
A(2,7:12) = 1;
b = [20,20]';
% (3) 等式约束
Aeq = zeros(6,12);  
for i = 1:6Aeq(i,i) = 1;  Aeq(i,i+6) = 1;
end
% Aeq = [eye(6),eye(6)]  % 两个单位矩阵横着拼起来
beq = [3 5 4 7 6 11]';  % 每个工地的日需求量
%(4)上下界
lb = zeros(12,1);% 进行求解
[x fval] = linprog(c, A, b, Aeq, beq, lb)
x = reshape(x,6,2)  % 将x变为6行2列便于观察(reshape函数是按照列的顺序进行转换的,也就是第一列读完,读第二列,即x1对应x_1,1,x2对应x_2,1)

二、非线性规划问题

非线性代表一般有如x^2这种非一元线性。这种题也算是数学规划中最难的一类,一般代码放一个文件夹里,有许多函数需要写。

如果函数出现函数或变量 ‘XXX’ 无法识别的问题:

例题1选址问题(上面的投料问题第二问)


%% 使用蒙特卡罗的方法来找初始值(推荐)
clc,clear;
n=10000000; %生成的随机数组数
x1=unifrnd(-100,100,n,1);  % 生成在[-100,100]之间均匀分布的随机数组成的n行1列的向量构成x1
x2=unifrnd(-100,100,n,1);  % 生成在[-100,100]之间均匀分布的随机数组成的n行1列的向量构成x2
fmin=+inf; % 初始化函数f的最小值为正无穷(后续只要找到一个比它小的我们就对其更新)
for i=1:nx = [x1(i), x2(i)];  %构造x向量, 这里千万别写成了:x =[x1, x2]if ((x(1)-1)^2-x(2)<=0)  & (-2*x(1)+3*x(2)-6 <= 0)     % 判断是否满足条件result = -x(1)^2-x(2)^2 +x(1)*x(2)+2*x(1)+5*x(2) ;  % 如果满足条件就计算函数值if  result  < fmin  % 如果这个函数值小于我们之前计算出来的最小值fmin = result;  % 那么就更新这个函数值为新的最小值x0 = x;  % 并且将此时的x1 x2更新为初始值endend
end
disp('蒙特卡罗选取的初始值为:'); disp(x0)
A = [-2 3]; b = 6;
[x,fval] = fmincon(@fun1,x0,A,b,[],[],[],[],@nonlfun1)
fval = -fval  
function f = fun1(x)% 注意:这里的f实际上就是目标函数,函数的返回值也是f% 输入值x实际上就是决策变量,由x1和x2组成的向量% fun1是函数名称,到时候会被fmincon函数调用, 可以任意取名% 保存的m文件和函数名称得一致,也要为fun1.m
%      max  f(x) = x1^2 +x2^2 -x1*x2 -2x1 -5x2f = -x(1)^2-x(2)^2 +x(1)*x(2)+2*x(1)+5*x(2) ; 
end
function [c,ceq] = nonlfun1(x)% 注意:这里的c实际上就是非线性不等式约束,ceq实际上就是非线性等式约束% 输入值x实际上就是决策变量,由x1和x2组成的一个向量% 返回值有两个,一个是非线性不等式约束c,一个是非线性等式约束ceq% nonlfun1是函数名称,到时候会被fmincon函数调用, 可以任意取名,但不能和目标函数fun1重名% 保存的m文件和函数名称得一致,也要为nonlfun1.m
%     -(x1-1)^2 +x2 >= 0 c = [(x(1)-1)^2-x(2)];   % 千万別写成了: (x1-1)^2 -x2ceq = [];  % 不存在非线性等式约束,所以用[]表示
end

飞行管理问题:非常难,不再粘贴代码了,看更新12

 三、整数规划(包括0-1规划)

例题像动态规划问题,如背包问题、指派问题(游泳接力)、钢管切割问题。这里就放一个背包问题。

%% 背包问题(货车运送货物的问题)
c = -[540 200 180 350 60 150 280 450 320 120];  % 目标函数的系数矩阵(最大化问题记得加负号)
intcon=[1:10];  % 整数变量的位置(一共10个决策变量,均为0-1整数变量)
A = [6 3 4 5 1 2 3 5 4 2];  b = 30;   % 线性不等式约束的系数矩阵和常数项向量(物品的重量不能超过30)
Aeq = []; beq =[];  % 不存在线性等式约束
lb = zeros(10,1);  % 约束变量的范围下限
ub = ones(10,1);  % 约束变量的范围上限
%最后调用intlinprog()函数
[x,fval]=intlinprog(c,intcon,A,b,Aeq,beq,lb,ub)
fval = -fval

四、最大最小化模型

这类问题就是在最糟糕的条件下选择最优解。

%% 最大最小化模型  :   min{max[f1,f2,···,fm]}
x0 = [6, 6];      % 给定初始值
lb = [3, 4];  % 决策变量的下界
ub = [8, 10];  % 决策变量的上界
[x,feval] = fminimax(@Fun,x0,[],[],[],[],lb,ub)
max(feval)
% x =
%     8.0000    8.5000
% feval =
%    13.5000    5.5000    5.5000   12.5000    8.5000    8.5000    5.5000   13.5000    9.5000    0.5000
% 结论:
% 在坐标为(8,8.5)处建立供应中心可以使该点到各需求点的最大距离最小,最小的最大距离为13.5单位。
function f = Fun(x)a=[1 4 3 5 9 12 6 20 17 8];b=[2 10 8 18 1 4 5 10 8 9];%  函数向量f=zeros(10,1);for i = 1:10f(i) = abs(x(1)-a(i))+abs(x(2)-b(i));  end
% f(1) = abs(x(1)-a(1))+abs(x(2)-b(1));  
% f(2) = abs(x(1)-a(2))+abs(x(2)-b(2));
% f(3) = abs(x(1)-a(3))+abs(x(2)-b(3));
% f(4) = abs(x(1)-a(4))+abs(x(2)-b(4));
% f(5) = abs(x(1)-a(5))+abs(x(2)-b(5));
% f(6) = abs(x(1)-a(6))+abs(x(2)-b(6));
% f(7) = abs(x(1)-a(7))+abs(x(2)-b(7));
% f(8) = abs(x(1)-a(8))+abs(x(2)-b(8));
% f(9) = abs(x(1)-a(9))+abs(x(2)-b(9));
% f(10) = abs(x(1)-a(10))+abs(x(2)-b(10));
end 

五、多目标规划模型

多个目标处理,如企业在保证利润最大化时候要保证污染最小,但比方不能无脑利润最大化,因此需要引入权重(例如层次分析法)

 

%%  多目标规划问题
w1 = 0.4;  w2 = 0.6;  % 两个目标函数的权重  x1 = 5  x2 = 2
w1 = 0.5;  w2 = 0.5;  % 两个目标函数的权重  x1 = 5  x2 = 2
w1 = 0.3;  w2 = 0.7;  % 两个目标函数的权重  x1 = 1  x2 = 6
c = [w1/30*2+w2/2*0.4 ;w1/30*5+w2/2*0.3];  % 线性规划目标函数的系数
A = [-1 -1];  b = -7; % 不等式约束
lb = [0 0]'; ub = [5 6]'; % 上下界
[x,fval] = linprog(c,A,b,[],[],lb,ub)
f1 = 2*x(1)+5*x(2)
f2 = 0.4*x(1) + 0.3*x(2)%% 敏感性分析
clear;clc
W1 = 0.1:0.001:0.5;  W2 = 1- W1;  
n =length(W1);
F1 = zeros(n,1);  F2 = zeros(n,1);   X1 = zeros(n,1);  X2 = zeros(n,1);   FVAL = zeros(n,1);
A = [-1 -1];  b = -7; % 不等式约束
lb = [0 0]; ub = [5 6]; % 上下界
for i = 1:nw1 = W1(i);  w2 = W2(i);c = [w1/30*2+w2/2*0.4 ;w1/30*5+w2/2*0.3];  % 线性规划目标函数的系数[x,fval] = linprog(c,A,b,[],[],lb,ub);F1(i) = 2*x(1)+5*x(2);F2(i) = 0.4*x(1) + 0.3*x(2);X1(i) = x(1);X2(i) = x(2);FVAL(i) = fval;
end% 「Matlab」“LaTex字符汇总”讲解:https://blog.csdn.net/Robot_Starscream/article/details/89386748
% 在图上可以加上数据游标,按住Alt加鼠标左键可以设置多个数据游标出来。
figure(1) 
plot(W1,F1,W1,F2)
xlabel('f_{1}的权重') 
ylabel('f_{1}和f_{2}的取值')
legend('f_{1}','f_{2}')figure(2)
plot(W1,X1,W1,X2)
xlabel('f_{1}的权重') 
ylabel('x_{1}和x_{2}的取值')
legend('x_{1}','x_{2}')figure(3)
plot(W1,FVAL)  % 看起来是两个直线组合起来的下半部分
xlabel('f_{1}的权重') 
ylabel('综合指标的值')


http://chatgpt.dhexx.cn/article/63cjXNmC.shtml

相关文章

【数学建模】MATLAB

MATLAB 一、基本介绍二、矩阵运算三、编程基础四、常见函数以及其他五、二维图形绘制六、三维图形绘制七、运算符八、流程控制语句九、自定义函数十、画图进阶 一、基本介绍 MATLAB 是美国MathWorks公司出品的商业数学软件&#xff0c;用于算法开发、数据可视化、数据分析以及…

【数学建模】数学建模学习1---线性规划(例题+matlab代码实现)

1 线性规划 在人们的生产实践中&#xff0c;经常会遇到如何利用现有资源来安排生产&#xff0c;以取得最大经济效益的问题。此类问题构成了运筹学的一个重要分支—数学规划&#xff0c;而线性规划(Linear Programming 简记 LP)则是数学规划的一个重要分支。自从 1947 年 G. B. …

数学建模之matlab入门篇

随着美赛的推进&#xff0c;数学建模用到matlab的越来越多&#xff0c;然而对matlab不熟悉的还很多&#xff0c;在此写下matlab基础篇&#xff0c;一是帮助没有了解过matlab的同学入门&#xff0c;二是帮助自己巩固知识。 时间紧迫&#xff0c;直接开始&#xff01;此篇文章包…

数学建模-MATLAB三维作图

导出图片用无压缩tif会更清晰 帮助文档&#xff1a;doc 函数名 matlab代码导出为PDF 新建实时脚本或右键文件转换为实时脚本实时编辑器-全部运行-内嵌显示保存为PDF

数学建模专栏 | 开篇:如何备战数学建模竞赛之 MATLAB 编程

作 者 简 介 卓金武&#xff0c;MathWorks中国高级工程师&#xff0c;教育业务经理&#xff0c;在数据分析、数据挖掘、机器学习、数学建模、量化投资和优化等科学计算方面有多年工作经验&#xff0c;现主要负责MATLAB校园版业务。曾2次获全国大学生数学建模竞赛一等奖&#x…

MATLAB数学建模:常用建模函数

常用建模函数 本文将对常用于 MATLAB 建模的函数&#xff0c;如曲线拟合函数、参数估计函数、插值函数等&#xff0c;作详细介绍。 文章目录 常用建模函数1. 曲线拟合函数1.1 多项式拟合1.2 加权最小方差拟合1.3 非线性曲线拟合 2. 参数估计函数2.1 点估计2.1.1 最大似然法2.1…

【数学建模】数学建模学习2---整数规划(例题+matlab代码实现)

文章目录 1 概论1.1 定义1.2 整数规划的分类1.3 整数规划特点1.4 求解方法分类 2 分枝定界法3 0 −1型整数规划3.1 引入0 −1变量的实际问题3.1.1 投资场所的选定——相互排斥的计划3.1.2 相互排斥的约束条件3.1.3 关于固定费用的问题&#xff08;Fixed Cost Problem&#xff0…

Matlab数学建模(五):优化模型之标准模型

一、学习目标 &#xff08;1&#xff09;了解最优化模型。 &#xff08;2&#xff09;掌握线性规划的优化求解。 &#xff08;3&#xff09;掌握整数规划的优化求解。 &#xff08;4&#xff09;了解Matlab的图形化应用。 二、实例演练 1、谈谈你对最优化模型的了解。 最优…

Matlab 数学建模算法大全

Matlab 数学建模算法大全 第一章 线性规划…1 第二章 整数规划…16 第三章 非线性规划…32 第四章 动态规划…56 第五章 图与网络…68 第六章 排队论…118 第七章 对策论…154 第八章 层次分析法…167 第九章 插值与拟合…175 第十章 数据的统计描述和分析…201 第十一章 方差分…

数学建模专栏 | 第三篇:MATLAB数据建模方法(上) —常用方法

以数据为基础而建立数学模型的方法称为数据建模方法&#xff0c; 包括回归、统计、机器学习、深度学习、灰色预测、主成分分析、神经网络、时间序列分析等方法&#xff0c; 其中最常用的方法还是回归方法。 本讲主要介绍在数学建模中常用几种回归方法的 MATLAB 实现过程。 根据…

快速MATLAB学习,数学建模

文章目录 MATLAB1.简单加减乘除2.help的用法3.数据类型3.1整数3.2浮点数3.3复数3.4逻辑型3.5矩阵1 普通矩阵2转置矩阵3拉伸4逆矩阵6三维矩阵7等差矩阵8重复矩阵7全一的矩阵9结构体 4.变量的使用4.1特殊变量4.2>>iskeyword 5.矩阵的四则运算矩阵下标 6.程序结构6.1for循环…

利用MATLAB进行数学建模

一、用给定的多项式&#xff0c;如yx3-6x25x-3&#xff0c;产生一组数据(xi,yi&#xff0c;i1,2,…,n),再在yi上添加随机干扰(可用rand产生(0,1)均匀分布随机数,或用rands产生N(0,1)分布随机数)&#xff0c;然后用xi和添加了随机干扰的yi作的3次多项式拟合&#xff0c;与原系数…

【数学建模】常用模型算法及MATLAB代码汇总

大家好&#xff0c;我是程序员史迪仔。 这篇文章是在大学准备数学建模比赛时&#xff0c;整理的学习笔记&#xff0c;没想到阅读量、点赞量和收藏量还是可以的&#xff0c;很高兴我的文章能给大家带来帮助&#xff01; 一、蒙特卡洛算法二、数据拟合三、数据插值四、图论1、最…

2022数学建模国赛备赛阶段性记录(1-1)

数学建模国赛培训记录&#xff0c;主要使用软件为MATLAB&#xff0c;主要内容为在数学建模竞赛中常用的操作、数学与模型以及部分练习题的解析。 一、常规操作 1、基本运算 MATLAB内四则运算相当于计算机的加减乘除&#xff0c;对应输入数字、运算符&#xff0c;回车即可得出…

Matlab与数学建模

一、学习目标。 (1)了解Matlab与数学建模竞赛的关系。 (2)掌握Matlab数学建模的第一个小实例—评估股票价值与风险。 (3)掌握Matlab数学建模的回归算法。 二、实例演练。 1、谈谈你对Matlab与数学建模竞赛的了解。 Matlab在数学建模中使用广泛:MATLAB 是公认的最优秀的数…

MATLAB在数学建模中的应用

MATLAB在数学建模中的应用 一.预备知识 1.1.关于MATLAB软件 由于科学技术及计算机的飞速发展,各类数学软件不断涌现&#xff0c;这使在解决各类复杂的问题变得非常简单。常用的数学软件有Mathematica、MATLAB、SAS等软件。MATLAB是“Matrix Laboratory"的缩写&#xff…

数学建模——matlab基本使用

一&#xff1a;命令窗口两个常用基本命令 清除工作区&#xff1a;clear。清屏&#xff1a;clc。 二&#xff1a;变量与基本运算 圆周率表示&#xff1a;pi。lnx代码化&#xff1a;log(x)。e^x代码化&#xff1a;exp(x) x代表次数。sin(x):sin(x);cos(x):cos(x);tan(x):tan(x…

MATLAB数学建模-规划模型总结| MATLAB求解

目录 1 线性规划问题&#xff08;LP&#xff09; 风格1 风格2 2 非线性规划 3 动态规划 A星算法 基于dijkstra的概率路线图 4 多目标规划 帕累托最优 支配&#xff08;Dominace&#xff09; 不可支配解集 帕累托最优解集 帕累托最优前沿面 线性加权法 约束转化法…

MATLAB--数学建模作图大全及代码说明

目录 1、二维曲线 2、二维渐变图 3、二维散点图 4、条形图 5、填充图 6、多Y轴图 7、三维曲线图 8、三维散点图 9、三维伪彩图 10、裁剪伪彩图 11、等高线图 12、三维等高线图 13、等高线填充图 14、三维矢量场图 15、伪彩图投影图 16、热图 17、分子模型图 1…

如何查询Opencv的版本

环境&#xff1a;Win10 方法&#xff1a; 参考文章上写的很详细&#xff0c;在这里重新编辑一下&#xff0c;保存下来&#xff1a; 1、找到OpenCV的安装主文件夹&#xff0c;在主文件夹中找到“build”文件夹。 2、进入build文件夹以后&#xff0c;在文件夹中找到名为“Ope…