1整数规划的MATLAB求解方法(一)用MATLAB求解一般混合整数规划问题由于MATLAB优化工具箱中并未提供求解纯整数规划和混合整数规划的函数,因而需要自行根据需要和设定相关的算法来实现。现在有许多用户发布的工具箱可以解决该类问题。这里我们给出开罗大学的Sherif和Tawfik在MATLABCentral上发布的一个用于求解一般混合整数规划的程序,在此命名为intprog,在原程序的基础上做了简单的修改,将其选择分枝变量的算法由自然序改造成分枝变量选择原则中的一种,即:选择与整数值相差最大的非整数变量首先进行分枝。intprog函数的调用格式如下:[x,fval,exitflag]=intprog(c,A,b,Aeq,beq,lb,ub,M,TolXInteger)该函数解决的整数规划问题为:minf=CTXs.t.Ax0(i=1,2,…,n)ix取整数(jeM)j在上述标准问题中,假设x为n维设计变量,且问题具有不等式约束m个,1等式约束m个,那么:c、x均为n维列向量,b为m维列向量,b为m维列21eq2向量,A为mxn维矩阵,A为mxn维矩阵。1eq2在该函数中,输入参数有c,A,b,Aeq,beq,lb,ub,M和TolXInteger。其中c为目标函数所对应设计变量的系数,A为不等式约束条件方程组构成的系数矩阵,b为不等式约束条件方程组右边的值构成的向量。Aeq为等式约束方程组构成的系数矩阵,beq为等式约束条件方程组右边的值构成的向量。lb和ub为设计变量对应的上界和下界。M为具有整数约束条件限制的设计变量的序号,例如问题中设计变量为x,x,x,要求x,x和x为整数,则M=[2;3;6];若要求全126236为整数,则M=1:6,或者M=[1;2;3;4;5;6]。TolXInteger为判定整数的误差限,即若某数x和最邻近整数相差小于该误差限,则认为x即为该整数。例1求解整数规划问题:maxs.t.%均要求为整数变量%判断是否整数的误差在该函数中,输出参数有X,fval和exitflag。其中x为整数规划问题的最优解向量,fval为整数规划问题的目标函数在最优解向量x处的函数值,exitflag为函数计算终止时的状态指示变量。f=x+x124x一2x>1124x+2x<11122x>12x,x>0,且取整数值12算法:c=[-1;-1];A=[-42;42;0-2];b=[-1;11;-1];lb=[0;0];M=[1;2];Tol=1e-8;[x,fval]=linprog(c,A,b,[],[],lb,[])%求解原问题松弛线性规划[x1,fval1]=intprog(c,A,b,[],[],lb,[],M,Tol)%求最优解整数解结果:x=%松弛线性规划问题的最优解1.50002.5000fval=-4.0000x1=%整数规划的最优解21fval2=-3.0000二)用MATLAB求解0-1规划问题在MATLAB优化工具箱中,提供了专门用于求解0-1规划问题的函数bintprog,其算法基础即为分枝界定法,在MATLAB中调用bintprog函数求解0-1规划时,需要遵循MATLAB中对0-1规划标准性的要求。0-1规划问题的MATLAB标准型minf=CTXs.t.Ax