matlab线性优化、二次型优化等
线性优化:linprog,intlinprog
[x,fval,exitflag,output,lambda] = linprog(f,A,b,Aeq,beq,lb,ub,options)
求解如下优化问题
输入含义如上所示,前三个输入必须有,后续输入可以没有。
options设计优化算法、最大迭代次数、容差等,一般可不设置。常用的设置为关闭显示(优化成功后在输入区会有提示消息)
options_Li = optimoptions('linprog','display','off');
如果需要添加options,前面没有的参数需要置为[], 如
feasibleCheck = linprog([0 1],A,B,[],[],[],[],[],options);
输出含义:
- x: 最优x
- fval: 最优f'x
- exitflag: 指示函数退出原因,1代表找到最优解,0代表迭代次数超出限制,-2未找到可行点(无可行x),-3优化问题是无界的(最优x为负无穷)
- output: 优化过程的一些信息,如迭代次数等
- lambda: 拉格朗日乘子相关信息
intlinprog可以指定某些自变量为整数,即多出来的输入参数intercon,第intercon个自变量被限制为整数
[x,fval,exitflag,output,lambda] = linprog(f,intcon,A,b,Aeq,beq,lb,ub,options)
二次型优化:quadprog
[x,fval,exitflag,output,lambda] = quadprog(H,f,A,b,Aeq,beq,lb,ub,x0,options)
求解如下优化问题
输入含义如上所示,前两个个输入必须有,后续输入可以没有。
options设计优化算法、最大迭代次数、容差等,一般可不设置。常用的设置为关闭显示(优化成功后在输入区会有提示消息)
options_Li = optimoptions('quadprog','display','off');
如果需要添加options,前面没有的参数需要置为[]
输出含义:
- x: 最优x
- fval: 最优函数值
- exitflag: 指示函数退出原因,1代表找到最优解,0代表迭代次数超出限制,-2未找到可行点(无可行x),-3优化问题是无界的(最优x为负无穷)
- output: 优化过程的一些信息,如迭代次数等
- lambda: 拉格朗日乘子相关信息
对于二次型优化,常见的优化目标为 min(x-x_0), x\in W
用二次型优化函数求解为
n = length(x0)
[x,fval,exitflag,output,lambda] = quadprog(eye(n),-2*x0,A,b,Aeq,beq,lb,ub,x0,options)
最小二乘优化:lsqlin
[x,resnorm,residual,exitflag,output,lambda] = lsqlin(C,d,A,b,Aeq,beq,lb,ub,x0,options)
求解如下优化问题
输入含义如上所示,前四个输入必须有,后续输入可以没有。
输出含义:
- x: 最优x
- resnorm: 返回最有函数值
- residual: 返回Cx-d
- exitflag: 指示函数退出原因,1代表找到最优解,0代表迭代次数超出限制,-2未找到可行点(无可行x),-3优化问题是无界的(最优x为负无穷)
- output: 优化过程的一些信息,如迭代次数等
- lambda: 拉格朗日乘子相关信息