数学规划模型是优化模型的一种,包括线性规划模型(目标函数和约束条件都是线性函数的优化问题);
非线性规划模型(目标函数或者约束条件是非线性的函数); 整数规划(决策变量是整数值得规划问题);
多目标规划(具有多个目标函数的规划问题) ;目标规划(具有不同优先级的目标和偏差的规划问题)
动态规划(求解多阶段决策问题的最优化方法) 。数学规划模型相对比较好理解,关键是要能熟练地求出模型的解。
以下是解线性规划模型的方法:
1.线性规划问题
线性规划问题的标准形式为:
min f ' *x sub.to:A*x
其中f、x、b、beq、lb、ub为向量,A、Aeq为矩阵。
MATLAB中,线性规划问题(Linear Programming)的求解使用的是函数linprog。
函数 linprog
格式 x = linprog(f,A,b) %求min f ' *x sub.to A*x<=b
线性规划的最优解。
x = linprog(f,A,b,Aeq,beq) %等式约束 ,若没有不等式约束 ,则A=[ ],b=[ ]。
x = linprog(f,A,b,Aeq,beq,lb,ub) %指定x的范围 ,若没有等式约束 ,则Aeq=[ ],beq=[
]
x = linprog(f,A,b,Aeq,beq,lb,ub,x0) %设置初值x0
x = linprog(f,A,b,Aeq,beq,lb,ub,x0,options)
%
options为指定的优化参数
[x,fval] = linprog(…) % 返回目标函数最优值,即fval= f ' *x。
[x,lambda,exitflag] = linprog(…) % lambda为解x的Lagrange乘子。
[x, lambda,fval,exitflag] = linprog(…) % exitflag为终止迭代的错误条件。
[x,fval, lambda,exitflag,output] = linprog(…) %
output为关于优化的一些信息
说明
若exitflag>0表示函数收敛于解x,exitflag=0表示超过函数估值或迭代的最大数字,exitflag<0表示函数不收敛于解x;若lambda=lower
表示下界lb,lambda=upper表示上界ub,lambda=ineqlin表示不等式约束,lambda=eqlin表示等式约束,lambda中的非0元素表示对应的约束是有效约束;output=iterations表示迭代次数,output=algorithm表示使用的运算规则,output=cgiterations表示PCG迭代次数。
2.非线性规划问题
利用函数fminbnd求有约束的一元函数的最小值
格式 x = fminbnd(fun,x1,x2) x = fminbnd(fun,x1,x2,options) % options为指定优化参数选项
[x,fval] = fminbnd(…) % fval为目标函数的最小值
[x,fval,exitflag] = fminbnd(…) %xitflag为终止迭代的条件
[x,fval,exitflag,output] = fminbnd(…) % output为优化信息
命令 利用函数fminsearch求无约束多元函数最小值
函数 fminsearch
格式 x = fminsearch(fun,x0)
%x0为初始点,fun为目标函数的表达式字符串或MATLAB自定义函数的函数柄。
x = fminsearch(fun,x0,options) % options查optimset
[x,fval] = fminsearch(…) %最优点的函数值
[x,fval,exitflag