机器学习-学习笔记 线性模型(二)

来源:互联网 发布:离子注入仿真软件 编辑:程序博客网 时间:2024/06/06 11:41

先来了解一下线性规划。
在MATLAB中,线性规划用linprog函数进行实现。

linprog(f,A,b) 线性规划求最优解

[x,fval,exitflag,output,lambda] = linprog(f,A,b)
[x,fval,exitflag,output,lambda] = linprog(f,A,b,Aeq,beq)
[x,fval,exitflag,output,lambda] = linprog(f,A,b,Aeq,beq,lb,ub)
[x,fval,exitflag,output,lambda] = linprog(f,A,b,Aeq,beq,lb,ub,x0)
[x,fval,exitflag,output,lambda] = linprog(f,A,b,Aeq,beq,lb,ub,x0,options)
其中f,A,b,是不可缺省的输入变量,x是不可缺省的输出变量。f为函数表达式的系数,A是不等式左边的表达式的系数,B是A对应不等式右边的常数项(注意这里的等式是小于等于)。Aeq和beq是等式约束条件的参数(跟上述的A和B相似,只不过是等式)。它是问题的解.vlb,vub均是向量,分别表示x的下界和上界,x0为x的起始点,options为optimset函数中定义的参数的值,fval是目标函数在解x处的值,代表返回的最优解的情况。lambda为在解x处的lagrange乘子.lambda.lower对应于vlb,lambda.upper对应于ulb,lambda.ineqlin是对应于线性不等式约束的,lambda.eqlin是对应于线性等式约束的.

exitflag是规划返回的状态:
1、一阶最优性条件满足容许范围
2、X的变化小于容许范围
3、目标函数的变化小于容许范围
4、重要搜索方向小于规定的容许范围并且约束违背小于options.TolCon
5、重要方向导数小于规定的容许范围并且约束违背小于options.TolCon
0、到达最大迭代次数或到达函数评价
-1、算法由输出函数终止
-2、无可行点

output是执行的相关信息(迭代次数, 算法(相关算法介绍))
这里写图片描述

举个例子
比如求下面这个问题的最优解
这里写图片描述

f = [-40; -50];A = [1 2; 3 2; 0 2];b = [30; 60; 24];x = linprog(f,A,b,[],[],[0; 0], []);disp(x);disp(x(1) * 40 + 50 * x(2));
  • 输入:
    这里写图片描述
  • 输出:
    这里写图片描述

接着做个小实验,看看能不能写出来一元二次的
max z = x + x2 (5x <= 20; x2 <= 4; x >= 0)

f = [-1, -1];A = [5; 1];b = [20; 2];x = linprog(f,A,b,[],[],[0], []);

发现会报下面这个错误。提示说,A的数量必须与f的相同。
这里写图片描述
那我们将代码改成下面这样

f = [-1, -1];A = [5 0; 0 1];b = [20; 4];Aeq = [1 -1];beq = [0];x = linprog(f,A,b,Aeq,beq ,[0; 0], []);

写到这里就会发现,无法表示x1和x2的关系是次方的关系,所以呢, linprog只能求多元一次的,那么怎么求多元二次呢?

quadprog(H,f) 二次规划求最优解

[x,fval,exitflag,output,lambda] = quadprog(H,f)
[x,fval,exitflag,output,lambda] = quadprog(H,f,A,b)
[x,fval,exitflag,output,lambda] = quadprog(H,f,A,b,Aeq,beq)
[x,fval,exitflag,output,lambda] = quadprog(H,f,A,b,Aeq,beq,lb,ub)
[x,fval,exitflag,output,lambda] = quadprog(H,f,A,b,Aeq,beq,lb,ub,x0)
[x,fval,exitflag,output,lambda] = quadprog(H,f,A,b,Aeq,beq,lb,ub,x0,options)
参数跟lineprog介绍一样。

具体用法看这里二次规划问题和MATLAB函数quadprog的使用
等我理解了再将自己的理解补上。

原创粉丝点击