matlab解简单数学规划(线性,非线性,整数规划)
目录
- 线性规划
- 非线性规划
- 整数规划
参考学习b站:
数学建模学习交流
线性规划
[x fval] = linprog(c, A, b, Aeq, beq, lb,ub, x0)
c是目标函数的系数向量,A是不等式约束Ax<=b
的系数矩阵,b是不等式约束Ax<=b
的常数项
Aeq是等式约束Aeq x=beq
的系数矩阵,beq是等式约束Aeq x=beq
的常数项
lb是X的下限,ub是X的上限,X是向量[x1,x2,...xn]'
, 即决策变量。
迭代的初始值为x0(一般不用给)
返回的x表示最小值处的x取值 ; fval表示最优解处时取得的最小值
例题:
maxZ=2x1+3x2−5x3s.t.{x1+x2+x3=72x1−5x2+x3≥10x1+3x2+x3≤12x1,x2,x3≥0\begin{aligned}\max Z=2x_{1}+3x_{2}-5x_{3}\\ s. t.\begin{cases}x_{1}+x_{2}+x_{3}=7\\ 2x_{1}-5x_{2}+x_{3}\geq 10\\ x_{1}+3x_{2}+x_{3}\leq 12\\ x_{1},x_{2},x_{3}\geq 0\end{cases}\end{aligned}maxZ=2x1+3x2−5x3s.t.⎩⎪⎪⎪⎨⎪⎪⎪⎧x1+x2+x3=72x1−5x2+x3≥10x1+3x2+x3≤12x1,x2,x3≥0
求解:
c = [-2 -3 5]';
A = [-2 5 -1;1 3 1];
b = [-10 12];
Aeq = ones(1,3);
beq = 7;
lb = zeros(3,1);
% ub不写,则意味着没有上界的约束
[x fval] = linprog(c, A, b, Aeq, beq, lb)
fval = -fval % 注意这个fval要取负号
结果:
x =6.42860.57140
fval =-14.5714
fval =14.5714
非线性规划
[x,fval] = fmincon(@fun,x0,A,b,Aeq,beq,lb,ub,@nonlfun,option)
x0表示给定的初始值(用行向量或者列向量表示),必须得写
A b表示线性不等式约束
Aeq beq 表示线性等式约束
lb ub 表示上下界约束
@fun表示目标函数
@nonlfun表示非线性约束的函数
option 表示求解非线性规划使用的方法
例题:
minf(x)=x12+x22+x32+8s.t.{x12−x2+x32≥0x1+x22+x32≤20−x1−x22+2=0x2+2x32=3x1,x2,x3≥0\begin{aligned}\min f\left( x\right) =x_{1}^{2}+x_{2}^{2}+x_{3}^{2}+8\\ s.t. \begin{cases}x_{1}^{2}-x_{2}+x_{3}^{2}\geq 0\\ x_{1}+x_{2}^{2}+x_{3}^{2}\leq 20\\ -x_{1}-x_{2}^{2}+2=0\\ x_{2}+2x_{3}^{2}=3\\ x_{1},x_{2},x_{3}\geq 0\end{cases}\end{aligned}minf(x)=x12+x22+x32+8s.t.⎩⎪⎪⎪⎪⎪⎪⎨⎪⎪⎪⎪⎪⎪⎧x12−x2+x32≥0x1+x22+x32≤20−x1−x22+2=0x2+2x32=3x1,x2,x3≥0
求解:
fun.m
function f = fun(x)% f = x(1)^2+x(2)^2 +x(3)^2+8 ; % x实际上是一个向量,我们可以使用矩阵的运算符号对其计算f = sum(x.*x) + 8;
end
nonlfun.m
function [c,ceq] = nonlfun(x)% 非线性不等式约束% 这里的x是一个向量!不能把x(1)写成x1c = [-x(1)^2+x(2)-x(3)^2; x(1)+x(2)^2+x(3)^2-20];% 非线性等式约束ceq = [-x(1)-x(2)^2+2;x(2)+2*x(3)^2-3];
end
f.m
% 可以将Matlab的计算结果显示为一般的长数字格式(默认会保留四位小数,或使用科学计数法)
format long g
x0 = [1 1 1]; %任意给定一个初始值
lb = [0 0 0]; % 决策变量的下界
[x,fval] = fmincon(@fun,x0,[],[],[],[],lb,[],@nonlfun)
结果:
x =0.552167405729277 1.20325915507969 0.947824046150443
fval =10.6510918606939
可以用蒙特卡罗寻找初始值x0
clc,clear;
n=1000000;
x1= unifrnd(0,2,n,1); % 生成在[0,2]之间均匀分布的随机数组成的n行1列的向量构成x1
x2 = sqrt(2-x1); % 根据非线性等式约束用x1计算出x2
x3 = sqrt((3-x2)/2); % 根据非线性等式约束用x2计算出x3
fmin=+inf;
for i=1:n%构造x向量, 不要写成:x =[x1, x2, x3]x = [x1(i), x2(i), x3(i)]; if (-x(1)^2+x(2)-x(3)^2<=0) & (x(1)+x(2)^2+x(3)^2-20<=0) result =sum(x.*x) + 8 ; if result < fmin fmin = result; x0 = x; endend
end
disp('蒙特卡罗选取的初始值为:'); disp(x0)
结果:
蒙特卡罗选取的初始值为:0.5522 1.2033 0.9478
整数规划
线性规划的函数:[x fval] = linprog(c, A, b, Aeq, beq, lb,ub, x0)
线性整数规划的函数:[x fval] = linprog(c, intcon, A, b, Aeq, beq, lb,ub)
例题:
minZ=−3x1−2x1−x3s.t.{x1+x2+x3≤74x1+x2+x3=12x1,x2≥0x3=0,1\begin{aligned}\min Z=-3x_{1}-2x_{1}-x_{3}\\ s.t. \begin{cases}x_{1}+x_{2}+x_{3}\leq 7\\ 4x_{1}+x_{2}+x_{3}=12\\ x_{1},x_{2}\geq 0\\ x_{3}= 0,1\end{cases}\end{aligned}minZ=−3x1−2x1−x3s.t.⎩⎪⎪⎪⎨⎪⎪⎪⎧x1+x2+x3≤74x1+x2+x3=12x1,x2≥0x3=0,1
求解:
c=[-3;-2;-1];
intcon=3; % x3限定为整数
A=ones(1,3); b=7;
Aeq=[4 2 1]; beq=12;
lb=zeros(3,1);
ub=[+inf;+inf;1]; %x(3)为0-1变量
[x,fval]=intlinprog(c,intcon,A,b,Aeq,beq,lb,ub)
结果:
x =05.50001.0000
fval =-12
matlab解简单数学规划(线性,非线性,整数规划)相关推荐
- 数学规划 (线性,非线性,整数)
unifrnd函数 博客园较详细解释 均匀分布随机数: 均匀分布是指整个样本空间中的每一个样本点对应的概率(密度)都是相等的.根据样本空间是否连续,又分为离散均匀分布和连续均匀分布.均匀分布可以算作是 ...
- 【老生谈算法】matlab实现非线性整数规划的遗传算法——遗传算法
非线性整数规划的遗传算法Matlab程序(附图) 1.文档下载: 本算法已经整理成文档如下,有需要的朋友可以点击进行下载 序号 文档(点击下载) 本项目文档 [老生谈算法]非线性整数规划的遗传算法Ma ...
- 非线性整数规划的遗传算法Matlab程序
非线性整数规划的遗传算法Matlab程序 通常,非线性整数规划是一个具有指数复杂度的NP问题,如果约束较为复杂,Matlab优化工具箱和一些优化软件比如lingo等,常常无法应用,即使能应用也不能给出 ...
- 【Matlab】如何对二维矩阵进行线性/非线性插值?
1.Introduction 最近又遇到了矩阵插值(重采样)的问题,在最开始写博客的时候就写了篇关于 Excel 重采样的文章,不过在逐渐熟悉 Matlab 的过程中,还是决定看看能不能编程自动实现, ...
- 如何用matlab解异或方程,Matlab-6:解非线性方程组newton迭代法
函数文件: function x=newton_Iterative_method(f,n,Initial) x0=Initial; tol=1e-11; x1=x0-Jacobian(f,n,x0)\ ...
- matlab遗传算法整数规划,非线性整数规划的遗传算法Matlab程序
非线性整数规划的遗传算法Matlab程序 非线性整数规划的遗传算法Matlab程序 (引自人工智能及数据挖掘论坛) 这是一个具有200个01决策变量的多目标非线性整数规划,编写优化的目标函数如下,其中 ...
- matlab牛顿法解非线性方程组,matlab实现牛顿迭代法求解非线性方程组.pdf
资源描述 matlab 实现牛顿迭代法求解非线性方程组实现牛顿迭代法求解非线性方程组 已知非线性方程组如下 3*x1-cos(x2*x3)-1/2=0 x1^2-81*(x2+0.1)^2+sin(x ...
- matlab 整数规划工具箱,Matlab中的YALMIP工具箱 混合整数规划
YALMIP工具箱 混合整数规划 定义变量: sqdvar()实型 intvar()整型 binvar()0-1型 设定目标函数 : f=目标函数 设定限定条件: F=set(限定条件) 多个限定条件 ...
- 数学建模之减肥计划 matlab编程,数学建模matlab算法大全第02章整数规划.pdf
数学建模matlab算法大全第02章整数规划 第二章 整数规划 §1 概论 1.1 定义 规划中的变量(部分或全部)限制为整数时,称为整数规划.若在线性规划模型中, 变量限制为整数,则称为整数线性规划 ...
- 最优控制问题matlab编程实例,第十二章用matlab解最优控制问题及应用实例.ppt
第十二章用matlab解最优控制问题及应用实例 第十二章 用MATLAB解最优控制问题及应用实例 第十二章 用MATLAB解最优控制问题及应用实例 12.1 MATLAB工具简介 12.2 用MATL ...
最新文章
- json文件读取并转换成为字典python
- Reactor中的Thread和Scheduler
- android sd卡不可写,Android检查SD卡是否可读写
- 谁说贾跃亭不还钱?人家已偿还超30亿美元的国内债务
- BZOJ 1068: [SCOI2007]压缩
- Android ANT多渠道打包
- 2017-2018-2 20165218 实验五《网络编程与安全》实验报告
- 2021年茶艺师(初级)试题及解析及茶艺师(初级)作业模拟考试
- 遗传算法(Genetic Algorithm)之deap学习笔记(一): 基础概念
- python-恺撒密码 I
- 怎么将计算机桌面全部变成英文翻译,Word2010怎样将英文翻译成中文
- C++ 博客专栏汇总 面试学习用 非突击问答式
- 员工激励的核心是人的满足感
- 分享97个框架模板PHP源码,总有一款适合你
- uniapp 公众号打开小程序,app打开小程序,小程序打开其他小程序
- UTONMOS:布局的“元宇宙”未来产生哪些影响?
- excel画风玫瑰图_使用Excel2013绘制线性玫瑰图的方法
- 多功能平均电流型 LED 恒流驱动器Hi7016
- vivo全球商城优惠券系统架构设计与实践
- oracle和arc,Oracle跟ArcSDE 分开部署方法(转)