数学建模之线性规划问题(含整数规划和0-1规划)

线性规划问题

线性规划是数学规划中的一类最简单规划问题,常见的线性规划是一个有约束的,变量范围为有理数的线性规划。

如:

为了便于表达,将上面的式子写成矩阵形式:

于是约束就表达为了一个不等式。

求解MATLAB线性规划时,最常用的函数是linprog函数

由于MATLAB中求解的是目标函数是最小值的问题,但如果我们的目标函数是求最大值,可以通过对目标函数中每一项中乘以-1,将求最大值问题转化为求最小值问题

A,b分别为不等式约束中的系数矩阵。Aeq和beq分别为等式约束中的系数矩阵,lb,和ub分别为每个变量的上下区间;最后f为目标函数中各变量的系数矩阵。

Matlab实例

f=[-7,-12];
A=[9 4;4 5;3 10];
b=[300;200;300];
lb=zeros(2,1);% 生成一个2行1列的全0矩阵,很显示,上面例子中的x,y的最小值为0
[x,fval]=linprog(f,A,b,[],[],lb,[])

我们来解释下linprog函数中每参数的意义,linprog中的一个原型如下:

[x,fval,exitflag] = linprog(f,A,b,Aeq,beq,lb,ub)

这7个参数的意义和上面f、A、b的意义是一样的。f为目标函数的系数矩阵,A为线性规划不等式约束的变量系数矩阵,b为不等式约束的资源数(如上面的[300;200;300]),这是一个N行1列的矩阵,N为变量的个数。Aeqbeq是相应等式约束的变量系数矩阵和资源数(很明显,上面的例子中并没有等式约束)。lbub分别为保变量的上下区间。在上面的例子中,x和y和最小值都为0但都无最大值约束。而linprog的返回值x为求得的各变量的值,这是一个向量,fval为最优化的值,一般是一个标量,exitflag意为函数的退出标志。

上面所示的代码[x,fval]=linprog(f,A,b,[],[],lb,[])中,[]代表不存在或空,因为在上面的例子中不存在等式约束,所以Aeqbeq的位置为[]。而ub也为空,是因为变量没有最大值约束。

运行上面的程序,行到结果为:

x =20.0000

      24.0000

fval = -428.0000

解释为:

当x=20,y=24时,可以求得最优化的值,最大值为428(因为这里的求目标最大值,但MATLAB只能求目标函数最小值,所以对目标函数进行了乘-1处理,所以也要对最后的结果乘以-1才是目标函数所求).

上面解决了简单的线性规划问题的求解,线性规范有两种比较特殊的情况,即整数规划和0-1整数规划。

MATLAB提供了一个比较新的、专用于求解整数规划和0-1整数规划的函数——intlinprog。

intlinprog的一个原型为:

[x,fval,exitflag]= intlinprog(f,intcon,A,b,Aeq,beq,lb,ub)

该函数的使用和linprog函数的使用十分相似,其仅仅在linprog函数的基础上多了一个参数——intcon。我们来通过下面的例子来学习该参数的意义。

在这里例子中,变量的取值范围不再是有理数集,而是整数集。

求解此规划问题的MATLAB程序如下:

f_13=[-1,-1];
ic_13=[1,2];
A_13=[-4,2;4,2;0,-2];
b_13=[-1;11;-1];
lb_13=zeros(2,1);
[x_13,fval_13,flag_13]=intlinprog(f_13,ic_13,A_13,b_13,[],[],lb_13,[])

在函数intlinprog中,intcon的意义为整数约束变量的位置。如上例中,因为x1和x2都要是整数,intcon参数位置ic_13的值为[1,2]。这个位置是按照目标函数和约束条件中变量位置来排列的。如果上式中仅有x2为整数约束,那么ic_13的值应该为2。

我们解决了在MATLAB上求解一般的整数规划问题,但要是遇到0-1整数规划问题呢?到这里,我们只要转换一下思维,就可以利用MATLAB求解0-1整数规划了,这里先卖个关子,请大家看下面的例子是怎么用MATLAB求解0-1整数规划的。

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)

与上面整数规划不同的地方只有一个,就是多了ub_12=ones(5,1),也就是说求解0-1整数规划只要在求解整数规划的基础上加上一个对变量最大值约束为1就可以。

参考链接:

[1]:https://blog.csdn.net/u010155023/article/details/48058391

猜你喜欢

转载自blog.csdn.net/weixin_41806692/article/details/82422015