数学建模笔记—— 非线性规划
非线性规划
非线性规划是一种求解目标函数或约束条件中有一个或几个非线性函数的最优化问题的方法。运筹学的一个重要分支。20世纪50年代初,库哈(H.W.Kuhn)和托克(A.W.Tucker)提出了非线性规划的基本定理,为非线性规划奠定了理论基础。这一方法在工业、交通运输、经济管理和军事等方面有广泛的应用,特别是在“最优设计”方面,它提供了数学基础和计算方法,因此有重要的实用价值。
非线性规划模型特点:
- 模型中至少一个变量是非线性,即包含 x 2 , e x , 1 x , sin x , log 2 x x^2,e^x,\frac1x,\sin x,\log_2x x2,ex,x1,sinx,log2x等形式
- 线性规划有通用求准确解的方法(单纯形法),它的最优解只存在于可行域的边界上;非线性规划的最优解(若存在)可能在其可行域的任一点达到,目前非线性规划还没有适合各种问题的一般解法,各种方法都有其特定的适用范围
1. 模型原理
1.1 非线性规划的标准型
m i n f ( x ) s.t. { A x ≤ b , A e q ⋅ x = b e q (线性) c ( x ) ≤ 0 , C e q ( x ) = 0 (非线性) l b ≤ x ≤ u b min\quad f(x)\\\text{s.t.}\begin{cases}Ax\leq b, Aeq\cdot x=beq&\text{(线性)}\\c\big(x\big)\leq0, Ceq\big(x\big)=0&\text{(非线性)}\\lb\leq x\leq ub\end{cases} minf(x)s.t.⎩ ⎨ ⎧Ax≤b,Aeq⋅x=beqc(x)≤0,Ceq(x)=0lb≤x≤ub(线性)(非线性)
1.2 非线性规划求解的Matlab函数
f m i n c o n fmincon fmincon函数: [ x f v a l ] = f m i n c o n ( f u n , x 0 , A , b , A e q , b e q , l b , u b , n o n l c o n , o p t i o n ) [x\:fval]=fmincon(fun,x0,A,b,Aeq,beq,lb,ub,nonlcon,option) [xfval]=fmincon(fun,x0,A,b,Aeq,beq,lb,ub,nonlcon,option)
- f u n : fun: fun:把目标函数定义为一个单独的函数文件(min)
- x 0 : x0: x0:决策变量的初始值
- A , b : A, b: A,b: 线性约束的不等式变量系数矩阵和常数项矩阵 ≤ 或 < \le或< ≤或<
- A e q , b e q : Aeq, beq: Aeq,beq: 线性约束的等式变量系数矩阵和常数项矩阵
- l b , u b : lb, ub: lb,ub:决策变量的最小取值和最大取值
- n o n l c o n : nonlcon: nonlcon:非线性约束,包括不等式和等式
- o p t i o n : option: option:求解非线性规划使用的方法
注意:
-
非线性规划中对于初始值 x 0 x0 x0的选取非常重要,因为非线性规划的算法求解出来的是一个局部优化解。如果要求全局最优解,有两个思路:
-
给定不同初始值,在里面找到一个最优解;
-
先用蒙特卡罗模拟,得到一个蒙特卡罗解,然后将这个解作为初始值来求最优解。
-
-
o p t i o n option option选项可以给定求解的算法,一共有五种,interior-point(内点法)、trust-region-reflective(信赖域反射法)、sqp(序列二次规划法)、sqp-legacy(约束非线性优化算法)、active-set (有效集法)。不同的算法有其各自的优缺点和适用情况,我们可以改变求解的算法来对比求解的结果。
-
$ fun $表示目标函数,我们要编写一个独立的”m文件“储存目标函数
-
n o n l c o n nonlcon nonlcon表示非线性部分的约束,也要编写一个独立的”m文件“存储非线性约束条件
-
决策变量的下表要改括号,比如 x 1 x_1 x1要改为 x ( 1 ) x(1) x(1),matlab才能识别
-
若不存在某种约束,可以用”[]“代替,若后面全为"[]“且option使用默认,后面的”[]"可以省略
2. 典型例题
选址问题:
临时料场: A ( 5 , 1 ) A( 5, 1) A(5,1), A ( 2 , 7 ) ; A( 2, 7) ; A(2,7);日储量各20吨
工地位置坐标及日需求量 Ⅰ Ⅱ Ⅲ Ⅳ Ⅴ Ⅵ 横坐标 1.25 8.75 0.5 5.75 3 7.25 纵坐标 1.25 0.75 4.75 5 6.5 7.25 日需求量 3 5 4 7 6 11 (1)试制定每天的供应计划,即从两料场分别向各工地运送多少吨水泥,使总的地千米数最小?
(2)为了进一步减少吨千米数,打算舍弃两个临时料场,改建两个新的,日储量各为20吨,问应建在何处,节省的吨千米数为多大?
-
确定决策变量
设第 i i i个工地的坐标 ( a i , b i ) (a_i,b_i) (ai,bi),水泥日用量 d i , i = 1 , 2 , … , 6 d_i,i=1,2,\dots,6 di,i=1,2,…,6,料场位置 ( x j , y j ) (x_j,y_j) (xj,yj),日储量 e j , j = 1 , 2 e_j,j=1,2 ej,j=1,2;从料场 j j j向工地 i i i的运送量为 x i j x_{ij} xij
-
确定约束条件
- 料场水泥运输总量不超过其日储量: ∑ i = 1 6 x i j ≤ e j , j = 1 , 2 \sum_{i=1}^{6}x_{ij}\leq e_{j} ,j=1 ,2 ∑i=16xij≤ej,j=1,2
- 两个料场向某工地运输量之和等于该工地水泥日用量: ∑ j = 1 2 x i j = d i , i = 1 , 2 , ⋯ , 6 \sum_{j=1}^{2}x_{ij}=d_{i} ,i=1 ,2 ,\cdots,6 ∑