当前位置:   article > 正文

非线性规划(1)

非线性规划

目录

一、非线性规划的定义

二、非线性规划的模型

三、非线性规划函数

四、线性不等式约束

五、线性不等式和等式约束

六、带有非线性约束的求最值

七、非线性约束

         总结:


一、非线性规划的定义

前面我们学了线性规划,整数规划,我们可以把整数规划理解为是特殊的线性规划。
在实际生活中,我们更多的认为数据是非线性的,对于线性规划这毕竟会是一些少量,为此我们引入了非线性规划。

如果目标函数或约束条件中包含非线性函数,就称这种规划问题为非线性规划问题。一般说来,解非线性规划要比解线性规划问题困难得多。而且,也不象线性规划有单纯形法这一通用方法,非线性规划目前还没有适于各种问题的一般算法,各个方法都有自己特定的适用范围。

二、非线性规划的模型

Matlab 中非线性规划的数学模型写成以下形式:

Matlab中的命令是:

[x,y]=fmincon(fun,x0,A,b,Aeq,beq,lb,ub,nonlcon,options)

三、非线性规划函数

fmincon函数用于寻找约束非线性多变量函数的最小值。这个函数怎么用?
这是语法格式:

  1. %1.从 x0 开始,尝试在满足线性不等式 A*x ≤ b 的情况下寻找 fun 中所述的函数的最小值点 x。x0 可以是标量、向量或矩阵。
  2. x = fmincon(fun,x0,A,b)
  3. %2.在满足线性等式 Aeq*x = beq 以及不等式 A*x ≤ b 的情况下最小化 fun。如果不存在不等式,则设置 A = [] 和 b = []。
  4. x = fmincon(fun,x0,A,b,Aeq,beq)
  5. %3. 对x 中的设计变量定义一组下界和上界,使解始终在 lb ≤ x ≤ ub 范围内。如果不存在等式,请设置 Aeq = [] 和 beq = []。如果 x(i) 无下界,请设置 lb(i) = -Inf,如果 x(i) 无上界,请设置 ub(i) = Inf。
  6. x = fmincon(fun,x0,A,b,Aeq,beq,lb,ub)
  7. %4.使用 options 所指定的优化选项执行最小化。使用 optimoptions 可设置这些选项。如果没有非线性不等式或等式约束,请设置 nonlcon = []。
  8. x = fmincon(fun,x0,A,b,Aeq,beq,lb,ub,nonlcon,options)

参数什么意思?

  1. b 和 beq 是向量,A 和 Aeq 是矩阵,c(x) 和 ceq(x) 是返回向量的函数,f(x) 是返回标量的函数。f(x)、c(x) 和 ceq(x) 可以是非线性函数。
  2. x、lb 和 ub 可以作为向量或矩阵传递

四、线性不等式约束

 目标函数:

fun =   100*(x(2)-x(1)^2)^2+(1-x(1))^2

此时,需要定义函数是 x

fun =   @(x)100*(x(2)-x(1)^2)^2+(1-x(1))^2

约束条件:从点 [-1,2] 为起点求最小值,约束方程 x(1)+2x(2)≤1
matlab代码:

  1. clc
  2. clear all
  3. fun = @(x)100*(x(2)-x(1)^2)^2 + (1-x(1))^2;%匿名函数
  4. x0 = [-1,2];%起点可以更改,似乎没影响
  5. A = [1,2];
  6. b = 1;
  7. [x,y] = fmincon(fun,x0,A,b)%套用函数

运行:

五、线性不等式和等式约束

求如下:

 matlab代码:

  1. clc
  2. clear all
  3. fun = @(x)100*(x(2)-x(1)^2)^2 + (1-x(1))^2;%匿名函数
  4. x0 = [1,1];%初始点设置自行不同
  5. A = [1,-2];%不等式变量的系数
  6. b = 1;%不等式右边的值
  7. Aeq = [2,1];%等式变量的系数
  8. beq = 1;%等式右边的值
  9. [x,y] = fmincon(fun,x0,A,b,Aeq,beq)%求解x的值和此时函数值y

结果:

六、带有非线性约束的求最值

 目标函数:

min f (x) = x1^2 + x2^2 + x3^2 + 8

约束条件:

  1. x1^2 − x2 + x3 ^20
  2. x1 + x2^2 + x3 ^320
  3. − x1 − x2^2 + 2 = 0
  4. x2 + 2x3^2 = 3x1
  5. x1,x2 , x30

matlab解法:

1.主函数

  1. %% 主函数
  2. options=optimset('largescale','off');
  3. [x,y] = fmincon(@fun,rand(3,1),[],[],[],[],zeros(3,1),[], @nonlcon, options)

2.目标函数(以 end 结束)

目标函数为最小化函数,fun是一个函数,fun接受向量或数组 x,并返回实数标量 f,即在 x 处计算的目标函数值。

  1. %% 目标函数
  2. function f=fun(x)
  3. f=sum(x.^2)+8;
  4. end

3.添加约束条件(以 end 结束)

非线性约束条件,nonlcon是一个函数,接受向量或数组 x,并返回两个数组 c(x) 和 ceq(x)。

  1. %% 非线性约束条件
  2. function [c,ceq]=nonlcon(x)
  3. c=[-x(1)^2+x(2)-x(3)^2
  4. x(1)+x(2)^2+x(3)^3-20]; %非线性不等式约束
  5. ceq=[-x(1)-x(2)^2+2
  6. x(2)+2*x(3)^2-3]; %非线性等式约束
  7. end

 总代码:(需先分别定义目标函数和约束条件,最后用主函数求解)

  1. clc
  2. clear all
  3. %% 主函数
  4. options=optimset('largescale','off');
  5. [x,y] = fmincon(@fun,rand(3,1),[],[],[],[],zeros(3,1),[], @nonlcon, options)
  6. %% 目标函数
  7. function f=fun(x)
  8. f=sum(x.^2)+8;
  9. end
  10. %% 非线性约束条件
  11. function [c,ceq]=nonlcon(x)
  12. c=[-x(1)^2+x(2)-x(3)^2
  13. x(1)+x(2)^2+x(3)^3-20]; %非线性不等式约束
  14. ceq=[-x(1)-x(2)^2+2
  15. x(2)+2*x(3)^2-3]; %非线性等式约束
  16. end

运行:

七、非线性约束

在边界约束下求 目标函数在圆内最小的点。目标函数:

fun =   (x)100*(x(2)-x(1)^2)^2+(1-x(1))^2

进一步可以匿名函数得到:

fun = @(x)100*(x(2)-x(1)^2)^2 + (1-x(1))^2;

约束条件:

  1. 0 ≤ x (1) ≤ 0.5 0
  2. 0.2x(2)0.8

这一步可以得到:

  1. lb = [0,0.2];
  2. ub = [0.5,0.8];

同时在以 [1/3,1/3] 为圆心、半径为 1/3 的圆内寻找,可以编写一个函数代码如下:

  1. function [c,ceq] = circle(x)
  2. c = (x(1)-1/3)^2 + (x(2)-1/3)^2 - (1/3)^2;
  3. ceq = [];

没有线性约束因此将这些参数设置为 [](空值)

  1. A = [];
  2. b = [];
  3. Aeq = [];
  4. beq = [];

因此全部代码为:
函数代码:

  1. function [c,ceq] = circle(x)
  2. c = (x(1)-1/3)^2 + (x(2)-1/3)^2 - (1/3)^2;
  3. ceq = [];
  4. end

主代码:

  1. clc
  2. clear all
  3. fun = @(x)100*(x(2)-x(1)^2)^2 + (1-x(1))^2;
  4. lb = [0,0.2];
  5. ub = [0.5,0.8];
  6. A = [];
  7. b = [];
  8. Aeq = [];
  9. beq = [];
  10. x0 = [1/4,1/4];
  11. nonlcon = @circle;
  12. [x,y] = fmincon(fun,x0,A,b,Aeq,beq,lb,ub,nonlcon)

运行:

 总结:

已经学习第三天了,深深感觉到了自己能力的提升,不只体现在编程方面,其他方面也一样,码字速度是深深有感觉!!

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/从前慢现在也慢/article/detail/477165
推荐阅读
相关标签
  

闽ICP备14008679号