数学建模算法 (II) - 整数编程
最编程
2024-04-20 11:52:39
...
(二)整数规划
定义:规划中的变量(部分或全部)限制为整数时,成为整数规划。变量全限制为整数时,称为纯(完全)整数规划;变量部分限制为整数的,称混合整数规划。
例:原线性规划为:
其最优实数解为:。若限制整数得:
。
1、分支定界法
例1:求解整数规划
解:由线性规划得最优解为:
1、因为,
当前均为非整数,不满足整数要求,任选一个进行分支。设选
进行分支,把可行集分成两个子集:
当时,最优解为:
当时,最优解为
2、选取时,对
再进行分支
当时,最优解为:
当时,最优解为:
可以判定原问题的最优解为:
例2:用分支定界法求解整数规划问题
2、0-1整数规划
即变量只取0或1
例3:
注:对于最大优化问题,可以按照从小到大的顺序排列;对于最小化问题,可以按照从大到小的顺序排列。
3、蒙特卡洛法
解:如果用枚举法,需计算(100)^5个点,用蒙特卡罗法随机计算10^6个点,便可以找到满意解。
function [f,g] = mengte(x)
%目标函数f与约束条件函数g
f = x(1)^2+x(2)^2+3*x(3)^2+4*x(4)^2+2*x(5)+8*x(1)-2*x(2)-3*x(3)-x(4)-2*x(5);
g = [sum(x)-400
x(1)+2*x(2)+2*x(3)+x(4)+6*x(5)-800
2*x(1)+x(2)+6*x(3)-200
x(3)+x(4)+5*x(5)-200];
p0 = 0;
for i = 1:10^6
x = 99*rand(5,1);
x1 = floor(x);
x2 = ceil(x);
[f,g] = mengte(x1);
if sum(g<=0)==4 %是否4个条件都满足
if p0<=f
x0 = x1;
p0=f;
end
end
[f,g] = mengte(x2);
if sum(g<=0)==4
if p0 <= f
x0 = x2;
p0 = f;
end
end
end
x0,p0
4、指派问题
对于指派问题,可以利用Matlab的函数bintprog进行求解,2014b版本之后删除了bintprog函数,因此可以linprog函数,参考线性规划。
下一篇: 数学建模 - 整数编程(注释)