Algorithm之PrA:PrA之IP整数规划(包括0-1整数规划)算法经典案例剖析+Matlab编程实现
Algorithm之PrA:PrA之IP整数规划算法经典案例剖析+Matlab编程实现
分枝定界法
对有约束条件的最优化问题(其可行解为有限数)的所有可行解空间恰当地进行系统搜索,这就是分枝与定界内容。通常,把全部可行解空间反复地分割为越来越小的子集,称为分枝;并且对每个子集内的解集计算一个目标下界(对于最小值问题),这称为定界。在每次分枝后,凡是界限超出已知可行解集目标值的那些子集不再进一步分枝,这样,许多子集可不予考虑,这称剪枝。这就是分枝定界法的主要思路。
分枝定界法可用于解纯整数或混合的整数规划问题。在本世纪六十年代初由 LandDoig 和Dakin 等人提出的。由于这方法灵活且便于用计算机求解,所以现在它已是解整数规划的重要方法。目前已成功地应用于求解生产进度问题、旅行推销员问题、工厂选址问题、背包问题及分配问题等。
基本思想:设有最大化的整数规划问题 A ,与它相应的线性规划为问题B ,从解问题B 开始,若其最优解不符合 A的整数条件,那么B的最优目标函数必是 A的最优目标函数z*的上界,记作z上 ;而 A的任意可行解的目标函数值将是z*的一个下界z下。分枝定界法就是将B的可行域分成子区域的方法。逐步减小z 上和增大z下 ,最终求到z*。
整数规划例题
用分枝定界法求解整数规划(最大化)问题的步骤为:首先,将要求解的整数规划问题称为问题 A ,将与它相应的线性规划问题称为问题B 。
1、求解下述整数规划
(1)、先利用LP思路求出最优解
(2)、利用IP思路分析解,先对x1进行分枝、定界
(3)、先对B1进行分枝、定界
(4)、还要对B2进行分枝、定界
0-1整数规划实例
1、投资场所的选定——相互排斥的计划
解:解题时先引入0 −1变量xi,并进行问题转换
2、引入0 −1变量y,来解决相互排斥的约束条件
3、扩展:利用0-1变量来解决m 个互相排斥的约束条件
如果有m 个互相排斥的约束条件
4、关于固定费用的问题(Fixed Cost Problem)
某工厂为了生产某种产品,有几种不同的生产方式可供选择,如选定的生产方式投资高(选购自动化程度高的设备),由于产量大,因而分配到每件产品的变动成本就降低;反之,如选定的生产方式投资低,将来分配到每件产品的变动成本可能增加。所以必须全面考虑。今设有三种方式可供选择,令
5、举例说明一种解0 −1型整数规划的隐枚举法
6、蒙特卡洛法求解非线性整数规划
(1)、首先编写M 文件mente.m 定义目标函数f 和约束向量函数g,程序如下
function [f,g]=mengte(x);
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];
(2)、编写M文件mainint.m如下求问题的解
rand('state',sum(clock));
p0=0;
tic
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
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
toc
7、Matlab求解指派问题等0 −1整数规划问题
解:编写 Matlab 程序如下:
c=[3 8 2 10 3;8 7 2 9 7;6 4 2 7 5
8 4 2 3 5;9 10 6 9 10];
c=c(:);
a=zeros(10,25);
for i=1:5
a(i,(i-1)*5+1:5*i)=1;
a(5+i,i:5:25)=1;
end
b=ones(10,1);
[x,y]=bintprog(c,[],[],a,b);
x=reshape(x,[5,5]),y