首发于 matlab实践

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: 拉格朗日乘子相关信息

编辑于 2021-11-08 19:36

文章被以下专栏收录