非线性规划

在matlab非线性规划数学模型可以写成一下形式:

\[minf(x)\\
s.t.\begin{cases}
Ax \le B \\
Aeq·x = Beq\\
C(x) \le 0\\
Ceq(x) = 0
\end{cases}
\]

f(x)为目标函数,A,B,Aeq,Beq为线性约束对应的矩阵和向量,C(x),Ceq(x)为非线性约束。

Matlab求解命令为:

X = fmincon(fun, x0, A, B, Aeq, Beq, LB, UB, NONLCON, OPTIONS)

  fun为目标函数,x0为初值,A,B,Aeq,Beq为线性约束对应的矩阵和向量,LB,UB分别为x的下限和上限,NONLCON为非线性约束(需要写自定义函数),OPTIONS为优化参数。

【例】求下列非线性规划问题

\[minf(x) = x^2_1+x^2_2+8\\
s.t.\begin{cases}
x_1^2-x_2 \ge 0\\
-x_1-x_2^2+2=0\\
x_1,x_2 \ge 0
\end{cases}
\]

编写函数文件:fun1.m,fun2.m

function f = fun1(x)
f = x(1)^2 + x(2)^2 + 8;
end
function [g,h] = fun2(x)
g = -x(1)^2 + x(2);
%g代表不等式约束,即代表约束条件-x(1)^2 + x(2) <= 0。matlab默认g<=0,所以题目中的条件被改成了相反数。
%如果有多个不等式约束,写成g(1) = 关于x的函数; g(2) = 关于x的函数;······
h = -x(1) - x(2)^2 + 2;
%h代表等式约束,即代表约束条件 -x(1) - x(2)^2 + 2 = 0。
%如果有多个等式约束,写成h(1) = 关于x的函数; h(2) = 关于x的函数;······
end

注:在写fun2时,可以把线性和非线性约束的等式和不等式约束都按照这种格式写到这个函数里面,这样的话fun2就包含了所有约束条件,在后面运行fmincon()时不需要再写A,B,Aeq,Beq,

直接用[]略过。

options = optimset;
[x, y] = fmincon('fun1', rand(2,1), [], [], [], [], zeros(2,1), [], 'fun2', options)
%‘fun1’代表目标函数,rand(2,1)随机给了x初值,zeros(2,1)代表下限为0,即x1,x2>=0, 'fun2'即刚才写的约束条件。

x为最优解,y为最优值。

转化为无约束极值问题

利用问题中的约束函数做出适当的罚函数,将非线性规划问题转化为无约束非线性规划问题。

\[minf(x)\\
s.t.\begin{cases}
g_i(x) \le 0 & i=1,2,...,r\\
h_i(x) \ge 0 & i=1,2,...,s\\
k_i(x) = 0 & i=1,2,...,t
\end{cases}
\]

取一个充分大的M,构造函数

\[P(x,M)=f(x)+M\sum_{i=1}^{r}max(g_i(x),0)-M\sum_{i=1}^{s}min(h_i(x),0)+M\sum_{i=1}^{t}|k_i(x)|\\
其中g代表\le 的不等式约束,h代表\ge 的不等式约束,k代表等式约束。\\
则非线性规划问题转化为无约束最小化P(x,M)。
\]

【例】将上面的例题转化为无约束极值问题:

编写test.m

funtion g = test(x)
M = 50000;
f = x(1)^2 + x(2)^2 +8;
g = f - M*min(x(1),0) - M*min(x(2),0) - M*min(x(1)^2-x(2),0) + M*abs(-x(1)-x(2)^2+2);

命令窗口

[x,y] = fminunc('test', rand(2,1))

参考书籍:Matlab在数学建模中的应用(第二版)卓金武

Matlab非线性规划的更多相关文章

  1. Matlab 非线性规划问题模型代码

    非线性规划问题的基本内容 非线性规划解决的是自变量在一定的非线性约束或线性约束组合条件下,使得非线性目标函数求得最大值或者最小值的问题. 当目标函数为最小值时,上述问题可以写成如下形式: \[ \mi ...

  2. MATLAB:非线性规划fmincon

    1.非线性规划的形式: 其中x是一个列向量,st中前两项为线性约束条件,后两项为非线性约束条件. 在MATLAB中fmincon是用于求解非线性多远函数的最小值的函数,这里介绍fmincon的其中一种 ...

  3. MATLAB规划问题——线性规划和非线性规划

    1.线性规划 求线性规划问题的最优解有两种方法,一种方法是使用linprog命令,另一种是使用optimtool工具箱,下面分别介绍这两种方法. ①linprog命令 一般情况下,Linprog命令的 ...

  4. matlab中fmincon函数求解非线性规划问题

    Matlab求解非线性规划,fmincon函数的用法总结 1.简介 在matlab中,fmincon函数可以求解带约束的非线性多变量函数(Constrained nonlinear multivari ...

  5. [matlab] 16.多约束非线性规划 ga工具箱解决 [带不等式约束]

    下面举例说明如何运用GA工具箱求解多约束非线性规划问题: function f =fitness(x) f=exp(x(1))*(4*x(1)^2+2*x(2)^2+4*x(1)*x(2)+2*x(2 ...

  6. 用蒙特卡罗方法解非线性规划MATLAB

    共需要三个M文件,主程序为randlp.m randlp.m: function [sol,r1,r2]=randlp(a,b,n) %随机模拟解非线性规划 debug=1; a=0; %试验点下界 ...

  7. 非线性规划的Matlab 解法

    编写M 文件fun1.m 定义目标函数 function f=fun1(x); % 定义目标函数 f=sum(x.^)+; % .^2是矩阵中的每个元素都求平方.^2是求矩阵的平方或两个相同的矩阵相乘 ...

  8. 非线性规划问题的matlab求解

    函数:[x, fval] = fmincon(FUN, X0, A, B, Aeq, Beq, LB, UB, NONLCON) 返回的x:是一个向量——在取得目标函数最小时各个xi的取值: 返回的f ...

  9. MATLAB学习(七)求解优化问题:线性规划 非线性规划 拟合与插值 多目标规划

    Minf(x)=-5x1  -4x2  -6x3                x1   -x2    +x3  <=20              3x1  +2x2 +4x3 <=42 ...

随机推荐

  1. createTextNode

    createTextNode()方法将创建一个包含给定文本的新文本文档节点.这个方法的返回值是一个指向新建文本节点的引用指针: reference = document.createTextNode( ...

  2. Docker 遇到的一些错误

    1.version Base not defined in file libdevmapper.so.1.02 在 Centos 6.5 上安装docker-io之后,使用/etc/init.d/do ...

  3. Coroutines in Android - One Shot and Multiple Values

    Coroutines in Android - One Shot and Multiple Values 在Android中, 我们用到的数据有可能是一次性的, 也有可能是需要多个值的. 本文介绍An ...

  4. nginx、redis在Centos7中,加入开机自启动

    nginx加入开机启动 cat <<EOF >> /etc/systemd/system/nginx.service> [Unit]> Description=ng ...

  5. Netty实现丢弃服务协议(Netty4.X学习一)

    何为丢弃服务(Discard Protocol),丢弃服务就是一个协议,是最简单的协议,它的作用是接受到什么就丢弃什么,它对调试网路状态有一定的用处.基于TCP的丢弃服务,服务器实现了丢弃丢弃协议,服 ...

  6. 了解 MongoDB 看这一篇就够了【华为云分享】

    目录 一.简介 二.基本模型 BSON 数据类型 分布式ID 三.操作语法 四.索引 索引特性 索引分类 索引评估.调优 五.集群 分片机制 副本集 六.事务与一致性 一致性 小结 一.简介 Mong ...

  7. 给一线讲产品·8期|VPC、子网、安全组,是什么关系?

    欢迎添加华为云小助手微信(微信号:HWCloud002 或 HWCloud003),输入关键字"加群",加入华为云线上技术讨论群:输入关键字"最新活动",获取华 ...

  8. 15.Django基础十一之认证系统

    一 auth模块 我们在开发一个网站的时候,无可避免的需要设计实现网站的用户系统.此时我们需要实现包括用户注册.用户登录.用户认证.注销.修改密码等功能,这还真是个麻烦的事情呢. Django作为一个 ...

  9. 基于SCN增量恢复DG同步

    问题描述:做scn恢复备库的测试,吭哧了几天,今天终于可以记录一下,遇到了很多坑,作为初学者可以更好地理解DG,主要先关闭备库,在主库做归档丢失备库无法同步,备库产生GAP,然后增量备份恢复备库,版本 ...

  10. JGit----将 Git 嵌入你的应用

    如果你想在一个 Java 程序中使用 Git ,有一个功能齐全的 Git 库,那就是 JGit . JGit 是一个用 Java 写成的功能相对健全的 Git 的实现,它在 Java 社区中被广泛使用 ...