作为应用数学的分支,最优化方法与理论具有非常重要的地位,在科学研究与技术应用方面都有很大的左右,常见的优化问题有:线性规划,非线性规划(基于约束的,非约束的),整数规划,动态规划(难点与重点),多目标规划.Matlab中有一些实用的函数可以帮助我们解决这些问题,提高解题速度。
1.线性规划,特点是目标函数是线性的,约束条件也是线性的等式或不等式(大于等于的形式).线性规划函数是linprog();
完成形式是[x
fval]=linprog(f,A,b,Aeq,beq,lb,ub,x0);其中x返回目标解,fval是目标解处的函数值,f是目标函数未知量前的系数,A是约束条件中不等式条件的系数矩阵,b是对应的列向量;Aeq和beq则是等式条件相关,lb和ub表示变量的界限,x0表示初始值。可以根据具体问题,使用相关的参数。
2.非线性规划:
2.1非约束的:求解单变量的有fminbnd(),fminsearch(),fminunc();其中最后两个还可以求解多变量的规划问题。
一.[x fval]=fminbnd(fun,x1,x2);用于解决单变量的条件约束问题,给定两个边界即可。
二.[x
fval]=fminserach(fun,x0);
三.[x
fval]=fminunc(fun,x0);
2.2 约束的,解决条件约束的非线性规划问题的思路是,将约束问题转化为非约束的问题进行求解。
函数说明:fmincon(fun,x0,A,b,Aeq,beq,lb,ub,nonlcon);其中的nonlcon指向一个m文件,可以用文件名引用,里面包括条件约束中的非线性约束条件,其中c=...表示非线性不等式,ceq=...表示非线性等式。如c=x(1)^2+x(2)^2-80;ceq=x(1)+x(2)^2-20;以上参数可以根据具体问题选取;
二次规划问题:通常将目标函数是二次的而约束条件是一次的最优化问题称为二次规划,可以用quadprog()进行求解。
3.整数规划:所谓整数规划是限制线性非线性中变量的取值只能为整数的一类最优化问题。
4.多目标规划:是在单目标的基础上,限定多个目标进行优化,思想是将多目标问题转化为单目标问题,最简单的想法是将多个目标进行线性加权转化成单目标求解,还有使用最大最小法,和理想点方法求解。
最大最小法,fminimax((fun,x0,A,b,Aeq,beq,lb,ub,nonlcon);
5.动态规划:动态规划是一类重要的求解优化问题的方法,通常用于涉及多阶段决策问题求解中,思想是将多阶段转化成一系列相互关联的单阶段问题进行求解。
特点:最优子结构,备忘录方式
动态规划基础知识:
阶 段:通常将动态规划转化成k个阶段,通过逐个求解每个阶段的优化问题进而求解整个问题,当前阶段与后面阶段是相互独立的,但它们之间的利益是相互关联的;
状态变量:将问题分成k个阶段后,每个阶段都会涉及一些状态变量,表示该阶段当前的目标值;
决策变量:作用于状态变量得到下一个状态变量,进入下一个阶段,问题得到进一步解决;
状态转移方程:确定过程从一个状态转移到一个状态的演变过程;
目标函数:用于衡量从阶段k当最后一个阶段所能获得的最大或最小目标值;如何选择?
动态规划的关键是列出目标函数的递推公式和找出边界条件,然后递推求解。递推公式的表示有前向递推和后向递推,根据具体问题选择。