数学简述
- 线性规划其实在高中就已经接触过,其原理并不复杂,即通过线性约束条件,解决最优问题,但进入大学后,那肯定会对其定义概念进行升级一番,要不然不就显得很弟弟,于是加入矩阵后,其标准的问题型为:
其实上述的约束条件,个人认为就是对三类约束的分类: - 维数约束(每一个相等条件都是一种降维)
- 线性约束
- 域约束
上述为标准型的线性规划问题,其实线性规划也能够抽象解决离散问题,比如我在建模书上看到用其解决带有离散性质的绝对值问题,但建模书中,又讲用线性规划去解决指派问题(图论中讨论的问题),我觉的这很没道理,虽然在模型的构建上能够说的过去(x范围为(0,1))但其都没有所谓的域的概念,何谈线性呢?指派问题还是应该归结到图论中的极大匹配问题,才是正解。
Matlab试跑
简单的测试代码:
f=[-2;-3;5];
a=[-2,5,-1;1,3,1];
b=[-10,12];
aeq=[1,1,1]
beg=7;
[x,-y]=linprog(f,a,b,aeq,beg,zeros(3,1));
可以看出其语法格式还是挺简单的,但要在使用过程中依据matlab标准线性规划型进行灵活的变换。
- 或许是鄙人见识浅薄了,刚才又发现matlab能对整数进行规划,问题和代码如下:
f_12=[7 5 9 6 3];
ic_12=[1,2,3,4,5];
A_12=[56,20,54,42,15;1,4,1,0,0;-1,-2,0,-1,-2];
b_12=[100;4;-2];
lb_12=zeros(5,1);
ub_12=ones(5,1);
[x_12,fval_12,flag_12]=intlinprog(f_12,ic_12,A_12,b_12,[],[],lb_12,ub_12)
此题我们不难发现,如果要进行整数的规划的话,只需要在linprog前,加一个int,就可以,如果要实现0,1二值规划,只需要在整数规划的基础上,加一个最大不超过2的线性限制就可以了。
可视化
除了上述问题外,怎么实现可视化,也是一个重要的问题,图论的话,matlab有专门的可视化工具,但线性规划去做可视化的话,好像没有专门的模块,但我们通过matlab的画图模块,自己做约束条件,能够很容易的实现上述目的,或者利用python 的matlibplot库去实现均可。