《数学建模算法与应用》司守奎著 阅读笔记。
一、线性规划
线性规划:在一组线性约束条件的限制下,求一线性目标函数的最大或最小值
一般标准型:
Matlab标准型:
Matlab求解线性规划的命令为:
[x,fval] = linprog(f,A,b,Aeq,beq,lb,ub)
可转化为线性规划的问题:
取,
,
:
二、整数规划
整数规划分为两大类:1)变量全限制为整数,纯整数规划;2)变量部分限制为整数,混合整数规划。
注:整数规划的最优解不能按照实数最优解简单取整而获得。
2.1 0-1型整数规划
0-1型整数规划是将某些变量
限制为二进制变量的规划问题。在实际问题中,引入0-1变量可以把需要分类讨论的数学规划问题统一为一个规划问题。下面举例:
1)相互排斥的约束条件规划问题:
如果有
个互相排斥(需要分类讨论)的约束条件
由于
个约束条件互相排斥,故只有一个会起作用,引入
个0-1变量来避免分类讨论:
引入一个充分大的常数
,可将
个互相排斥(需要分类讨论)的约束条件,统一为
个约束条件:
由(7)式知,当
时,由于M充分大,则不等式恒成立,约束条件失效;由(8)式可知,仅有一个
可以取
.
2)固定费用问题和指派问题
见书P13,P14 ,不太好统一形式,不过多赘述了。。
2.2 蒙特卡洛法(随机取样法)
蒙特卡洛法是基于大量事件的统计结果来实现一些确定性问题的计算方法。
下面举一个实际编程案例:
例:
与
轴在第一象限围成的一个曲边三角形。用随机实验法求得该三角形的面积。
解:随机实验的思想为,在
的矩阵区域内,按均匀分布取样若干大量的随机点,统计落入计算区域的随机点个数,求得频数,曲边三角形的面积则为矩阵面积乘频数。
clc,clear
x = unifrnd(0,12,[1,10000000])
y = unifrnd(0,9,[1,10000000])
pinshu = sum(y=3);
area_appr = 12 * 9 * pinshu/10^7
非线性整数规划问题:
非线性规划问题尚未具备一种通用成熟且准确的求解方法,但由于加入了整数限制,则非线性规划问题的解的个数也变为了有限个,有了蒙特卡洛法后,我们则可以用枚举法求出满意解。
具体编程案例见书P15。
2.3 整数线性规划的计算机求解
Matlab下混合整数线性规划的标准型为:
其中
为整数变量的索引。
Matlab求解整数线性规划的命令:
[x,fval] = intlinprog(f,intcon,A,b,Aeq,beq,lb,ub)
三、非线性规划
非线性规划:目标函数或约束条件包含非线性函数的规划问题。
非线性规划的数学模型一般形式:
其中:
为模型的决策变量;
为目标函数;
为等式约束;
为不等式约束;且
中包含非线性函数。
注:若线性规划问题的最优解存在,则此最优解只能在可行域的边界上达到;而非线性规划的最优解可能在可行域的任意一点达到。
Matlab下非线性规划的标准形式:
其中
为目标函数;
为非线性向量函数。
Matlab求解此标准型非线性规划问题的命令为:
[x,fval] = fmincon(fun,x0,A,b,Aeq,beq,lb,ub,nonlcon,options)
其中,fun为用M文件定义的目标函数
; nonlcon是用M文件定义的非线性向量函数
; options 定义了优化参数,可用Matlab默认设置;其余变量若无则用"[]"代替
3.1 无约束极值问题
无约束极值问题:即没有约束条件,仅求解目标函数极值的优化问题。
其数学模型可简单的表示为:
在Matlab中有两个专用函数求解该极小值问题,fminunc 和 fminsearch。
Matlab中 fminunc的基本命令:
[x,fval] = fminunc(fun,x0,options)
其中:fun是用M文件定义的函数。当fun只有一个返回值时,是函数值