Matlab学习系列26 整数规划.docx

上传人:b****5 文档编号:8004864 上传时间:2023-01-27 格式:DOCX 页数:19 大小:220.36KB
下载 相关 举报
Matlab学习系列26 整数规划.docx_第1页
第1页 / 共19页
Matlab学习系列26 整数规划.docx_第2页
第2页 / 共19页
Matlab学习系列26 整数规划.docx_第3页
第3页 / 共19页
Matlab学习系列26 整数规划.docx_第4页
第4页 / 共19页
Matlab学习系列26 整数规划.docx_第5页
第5页 / 共19页
点击查看更多>>
下载资源
资源描述

Matlab学习系列26 整数规划.docx

《Matlab学习系列26 整数规划.docx》由会员分享,可在线阅读,更多相关《Matlab学习系列26 整数规划.docx(19页珍藏版)》请在冰豆网上搜索。

Matlab学习系列26 整数规划.docx

Matlab学习系列26整数规划

26.整数规划

全部变量限制为整数的规划问题,称为纯整数规划;部分变量限制为整数的规划问题,称为混合整数规划;变量只取0或1的规划问题,称为0-1整数规划。

整数规划问题,建议使用Lingo软件求解。

常用的整数规划问题解法有:

(1)分枝定界法:

可求纯或混合整数线性规划;

(2)割平面法:

可求纯或混合整数线性规划;

(3)隐枚举法:

用于求解0-1整数规划,有过滤法和分枝法;

(4)匈牙利法:

解决指派问题(0-1规划特殊情形);

(5)蒙特卡罗法:

求解各种类型规划。

一、分枝定界法

分支定界法的基本思想是:

设有最大化的整数规划问题A,先解与之相应的线性规划问题B,若B的最优解不符合A的整数条件,那么B的最优目标函数必是A的最优目标函数z*的上界,记作z2,而A的任意可行解的目标函数值将是z*的一个下界z1,分支定界法就是将B的可行域分成子区域(称为分支)的方法,逐步减小z2和增大z1,最终求到z*。

例1分枝定界法原理示例:

用Lingo软件求解:

代码:

max5x1+8x2

st

x1+x2<=6

5x1+9x2<=45

end

gin2

运行结果:

Globaloptimalsolutionfound.

Objectivevalue:

40.00000

Objectivebound:

40.00000

Infeasibilities:

0.000000

Extendedsolversteps:

0

Totalsolveriterations:

0

 

VariableValueReducedCost

X10.000000-5.000000

X25.000000-8.000000

RowSlackorSurplusDualPrice

140.000001.000000

21.0000000.000000

30.0000000.000000

二、0-1整数规划

变量xi只能取值0,1,该约束条件可表示为:

0≤xi≤1,xi∈N或xi(1-xi)=0

1.隐枚举法

例2求解下列0-1规划问题:

求解思路:

(1)先试探性地求一个可行解,易看出(x1,x2,x3)=(1,0,0)满足约束条件,故是一个可行解,相应的目标函数值为z=3.

(2)由于是求极大值,故目标值z<3的解,不必检验是否满足约束条件即可删除,于是可增加一个约束条件(称为过滤条件):

(e)

(3)用全部枚举法,3个变量共23=8种可能的组合,用过滤条件(并计算目标函数值,不断改进过滤条件)筛选每个可能的组合,最终得到问题的最优解。

(x1,x2,x3)

目标值

约束条件

过滤条件

(a)

(b)

(c)

(d)

(e)

(0,0,0)

0

×

(1,0,0)

3

3x1-2x2+x3≥3

(0,1,0)

-2

×

(0,0,1)

5

3x1-2x2+x3≥5

(1,1,0)

1

×

(1,0,1)

8

3x1-2x2+x3≥8

(1,1,1)

6

×

(0,1,1)

3

×

从而得到最优解为(1,0,1),最优值为z*=8.

用Lingo软件求解:

代码:

max3x1-2x2+5x3

st

x1+2x2-x3<=2

x1+4x2+x3<=4

x1+x2<=3

4x2+x3<=6

end

int3

运行结果:

Globaloptimalsolutionfound.

Objectivevalue:

8.000000

Objectivebound:

8.000000

Infeasibilities:

0.000000

Extendedsolversteps:

0

Totalsolveriterations:

0

 

VariableValueReducedCost

X11.000000-3.000000

X20.0000002.000000

X31.000000-5.000000

RowSlackorSurplusDualPrice

18.0000001.000000

22.0000000.000000

32.0000000.000000

42.0000000.000000

55.0000000.000000

2.指派问题

某公司准备分派n个工人X1,…,Xn做n件工作Y1,…,Yn,但由于任务性质和各人专长不同,因此各人完成每件工作的效率也就不同,于是产生一个问题:

应指派哪个人去完成哪件工作,使得工作效率最高?

用效率矩阵表示:

其中,元素cij≥0(i,j=1,…,n)表示指派第i人去完成第j项任务时的效率(或时间、成本等)。

则指派问题的一般数学模型为:

对于上述问题,其实通俗来说,就是n×n矩阵中,选取n个元素,每行每列各1个元素,使得和最小。

根据指派问题的特点,可以使用匈牙利算法来进行求解。

匈牙利算法原理(匈牙利数学家狄·康尼格证明的两个定理):

定理1如果从指派问题效率矩阵[cij]的每一行元素中分别减去(或加上)一个常数ui(称为该行的位势),从每一列分别减去(或加上)一个常数vj(称为该列的位势),得到一个新的效率矩阵[bij],若其中bij=cij-ui-vj,则[bij]的最优解的结果等价于[cij]的最优解的结构。

因此,指派问题的最优解具有性质:

若从矩阵的一行(列)各元素中分别减去该行(列)的最小元素,得到规约矩阵,其最优解和原矩阵的最优解相同。

经过减去行列最小元素的转化之后的效率矩阵[bij]中,把位于不同行不同列的0元素,简称为独立0元素。

目的便是找出位于不同行不同列的n个独立的0元素,从而也就得到了原问题的最优解。

定理2若效率矩阵C的元素看可分成“0”和“非0”两部分,则覆盖所有“0”元素的最少直线数=独立的“0”元素的最多个数。

例3.设指派问题的效率矩阵为

Lingo代码:

model:

sets:

var/1..5/;

link(var,var):

c,x;

endsets

data:

c=382103

87297

64275

84235

9106910;

enddata

min=@sum(link:

c*x);

@for(var(i):

@sum(var(j):

x(i,j))=1);

@for(var(j):

@sum(var(i):

x(i,j))=1);

@for(link:

@bin(x));

end

运行结果(部分):

Globaloptimalsolutionfound.

Objectivevalue:

21.00000

Objectivebound:

21.00000

Infeasibilities:

0.000000

Extendedsolversteps:

0

Totalsolveriterations:

0

 

VariableValueReducedCost

X(1,1)0.0000003.000000

X(1,2)0.0000008.000000

X(1,3)0.0000002.000000

X(1,4)0.00000010.00000

X(1,5)1.0000003.000000

X(2,1)0.0000008.000000

X(2,2)0.0000007.000000

X(2,3)1.0000002.000000

X(2,4)0.0000009.000000

X(2,5)0.0000007.000000

X(3,1)0.0000006.000000

X(3,2)1.0000004.000000

X(3,3)0.0000002.000000

X(3,4)0.0000007.000000

X(3,5)0.0000005.000000

X(4,1)0.0000008.000000

X(4,2)0.0000004.000000

X(4,3)0.0000002.000000

X(4,4)1.0000003.000000

X(4,5)0.0000005.000000

X(5,1)1.0000009.000000

X(5,2)0.00000010.00000

X(5,3)0.0000006.000000

X(5,4)0.0000009.000000

X(5,5)0.00000010.00000

RowSlackorSurplusDualPrice

121.00000-1.000000

20.0000000.000000

三、蒙特卡罗法(随机取样法)

前面的方法,主要是针对线性整数规划而言,对于非线性整数规划没有通用的有效解法。

整数规划由于限制变量是整数,增加了求解难度,但整数解是有限个,所以可以采用枚举法。

当枚举个数很多时,显性枚举是不现实的,但利用蒙特卡罗随机取样法,在一定的计算量下是可以得到满意解的。

 

例4.求解如下非线性整数规划问题:

若用显枚举法,共需1005=1010个点,计算量非常大。

但用蒙特卡罗法随机计算106个点,便可找到满意解。

代码:

目标函数:

function[f,g]=fun1(x)

f=x

(1)^2+x

(2)^2+3*x(3)^2+4*x(4)^2+2*x(5)^2-8*x

(1)-2*x

(2)-3*x(3)-x(4)-2*x(5);

g

(1)=sum(x)-400;

g

(2)=x

(1)+2*x

(2)+2*x(3)+x(4)+6*x(5)-800;

g(3)=2*x

(1)+x

(2)+6*x(3)-200;

g(4)=x(3)+x(4)+5*x(5)-200;

主程序:

rand('state',sum(clock));

p0=0;

tic

fori=1:

10^6

x=99*rand(5,1);

x1=floor(x);

x2=ceil(x);

[f,g]=fun1(x1);

ifsum(g<=0)==4

ifp0<=f

x0=x1;

p0=f;

end

end

[f,g]=fun1(x2);

ifsum(g<=0)==4

ifp0<=f

x0=x2;

p0=f;

end

end

end

x0,p0

toc

运行结果:

x0=43941995

p0=49298

Elapsedtimeis45.494952seconds.

注意:

由于是随机取样,故每次的运行结果可能不一样。

利用lingo软件可以求得全局最优解:

代码:

model:

sets:

row/1..4/:

b;

col/1..5/:

c1,c2,x;

link(row,col):

a;

endsets

data:

c1=1,1,3,4,2;

c2=-8,-2,-3,-1,-2;

a=11111

12216

21600

00115;

b=400,800,200,200;

enddata

max=@sum(col:

c1*x^2+c2*x);

@for(row(i):

@sum(col(j):

a(i,j)*x(j))

@for(col:

@gin(x));

@for(col:

@bnd(0,x,99));

End

运行结果(部分):

Localoptimalsolutionfound.

Objectivevalue:

51568.00

Objectivebound:

51568.00

Infeasibilities:

0.000000

Extendedsolversteps:

0

Totalsolveriterations:

51

VariableValueReducedCost

X

(1)50.00000-92.00000

X

(2)99.00000-196.0000

X(3)0.0000003.000000

X(4)99.00000-791.0000

X(5)20.00000-78.00000

RowSlackorSurplusDualPrice

151568.001.000000

2132.00000.000000

3333.00000.000000

41.0000000.000000

51.0000000.000000

四、混合整数规划(配送选址问题)

图1三级配送的网络结构

物流配送中心选址问题,是在给定某一地区所有备选点的地址集合中选出一定数目的地址建立配送中心,从而建立一系列的配送区域,以实现选出点建立的配送中心与各需求点和工厂(供货点)形成的配送系统总物流费用最小。

总费用=运输费用+配送费用+仓储费用+固定成本

设有m个供应工厂,n个客户,l个备选配送中心;

pk表示第k个工厂的产量(k=1,…,m);

dj表示第j个客户的需求量(j=1,…,n);

gi表示第i个配送中心的单位管理成本(i=1,…,l);

fi表示建立第i个配送中心的固定成本;

zi指示是否选中第i个配送中心,1表示选中,0表示未选中;

zmax表示配送中心的最大限制数目;

cki表示第k个供应工厂到第i个配送中心的运输单价;

hij表示第i个配送中心到第j个客户的配送单价;

wki表示第k个供应工厂到第i个配送中心的运量;

xij表示第i个配送中心到第j个客户的运量。

则配送选址问题数学模型的一般形式如下:

例5设有4个备选物流配送中心地址,6个工厂为其供货,6个客户需要产品,最多设置3个物流配送中心。

工厂到物流配送中心的运输价格见表1,物流配送中心到客户的运输价格见表2,工厂的总生产能力见表3,物流配送中心的固定成本、单位管理成本,及容量见表4,客户的需求量见表5:

表1工厂到配送中心的运输价格

w1

w2

w3

w4

p1

6

5

4

2

p2

2

3

4

9

p3

6

8

7

5

p4

7

4

2

3

p5

4

2

5

1

p6

3

4

1

7

表2配送中心到客户的运输价格

c1

c2

c3

c4

c5

c6

w1

3

2

7

4

7

5

w2

6

1

4

2

5

3

w3

2

4

5

3

6

8

w4

5

6

3

7

4

6

表3工厂的总生产能力

工厂

p1

p2

p3

p4

p5

p6

总生产能力(p)

40,000

50,000

60,000

70,000

60,000

40,000

表4备选物流配送中心的固定成本,单位管理成本,容量

物流配送中心

w1

w2

w3

w4

固定成本(f)

500,000

300,000

400,000

400,000

单位管理成本(g)

3

2

5

4

仓库容量(a)

10,000

60,000

70,000

50,000

表5客户的需求量

顾客

c1

c2

c3

c4

c5

c6

需求(d)

10,000

20,000

10,000

20,000

30,000

10,000

 

利用Lingo软件求解以上混合整数规划。

代码:

model:

sets:

factory/p1..p6/:

p;

warhouse/w1..w4/:

a,f,g;

customer/c1..c6/:

d;

tr/tr1..tr4/:

z;

link1(factory,warhouse):

c,w;

link2(warhouse,customer):

h,x;

endsets

data:

p=40000,50000,60000,70000,60000,40000;

a=70000,60000,70000,50000;

f=500000,300000,400000,400000;

g=3,2,5,4;

d=10000,20000,10000,20000,30000,10000;

c=6542

2349

6875

7423

4251

3417;

H=327475

614253

245368

563746;

enddata

min=@sum(link1(k,i):

c(k,i)*w(k,i))+@sum(link2(i,j):

h(i,j)*x(i,j))

+@sum(link1(k,i):

g(i)*w(k,i))+@sum(warhouse(i):

f(i)*z(i));

@for(factory(k):

@sum(link1(k,i):

w(k,i))<=p(k));

@for(warhouse(i):

@sum(link2(i,j):

x(i,j))=@sum(link1(k,i):

w(k,i)));

@for(customer(j):

@sum(link2(i,j):

x(i,j))>=d(j));

@for(warhouse(i):

@sum(link1(k,i):

w(k,i))<=(a(i)*z(i)));

@sum(tr(i):

z(i))<=3;

@for(tr(i):

@bin(z));

End

运行结果(部分):

Globaloptimalsolutionfound.

Objectivevalue:

1480000.

Objectivebound:

1480000.

Infeasibilities:

0.000000

Extendedsolversteps:

4

Totalsolveriterations:

50

VariableValueReducedCost

Z(TR1)0.000000290000.0

Z(TR2)1.000000300000.0

Z(TR3)0.000000190000.0

Z(TR4)1.000000400000.0

C(P1,W1)6.0000000.000000

C(P1,W2)5.0000000.000000

C(P1,W3)4.0000000.000000

C(P1,W4)2.0000000.000000

C(P2,W1)2.0000000.000000

C(P2,W2)3.0000000.000000

C(P2,W3)4.0000000.000000

C(P2,W4)9.0000000.000000

C(P3,W1)6.0000000.000000

C(P3,W2)8.0000000.000000

C(P3,W3)7.0000000.000000

C(P3,W4)5.0000000.000000

C(P4,W1)7.0000000.000000

C(P4,W2)4.0000000.000000

C(P4,W3)2.0000000.000000

C(P4,W4)3.0000000.000000

C(P5,W1)4.0000000.000000

C(P5,W2)2.0000000.000000

C(P5,W3)5.0000000.000000

C(P5,W4)1.0000000.000000

C(P6,W1)3.0000000.000000

C(P6,W2)4.0000000.000000

C(P6,W3)1.0000000.000000

C(P6,W4)7.0000000.000000

W(P1,W1)0.0000004.000000

W(P1,W2)0.0000002.000000

W(P1,W3)0.0000003.000000

W(P1,W4)40000.000.000000

W(P2,W1)0.0000000.000000

W(P2,W2)0.0000000.000000

W(P2,W3)0.0000003.000000

W(P2,W4)0.0000007.000000

W(P3,W1)0.0000004.000000

W(P3,W2)0.0000005.000000

W(P3,W3)0.0000006.000000

W(P3,W4)0.0000003.000000

W(P4,W1)0.0000005.000000

W(P4,W2)0.0000001.000000

W(P4,W3)0.0000001.000000

W(P4,W4)0.0000001.000000

W(P5,W1)0.0000003.000000

W(P5,W2)60000.000.000000

W(P5,W3)0.0000005.000000

W(P5,W4)0.0000000.000000

W(P6,W1)0.0000001.000000

W(P6,W2)0.0000001.000000

W(P6,W3)0.0000000.000000

W(P6,W4)0.0000005.000000

H(W1,C1)3.0000000.000000

H(W1,C2)2.0000000.000000

H(W1,C3)7.0000000.000000

H(W1,C4)4.0000000.000000

H(W1,C5)7.0000000.000000

H(W1,C6)5.0000000.000000

H(W2,C1)6.0000000.000000

H(W2,C2)1.0000000.000000

H(W2,C3)4.0000000.000000

H(W2,C4)2.0000000.000000

H(W2,C5)5.0000000.000000

H(W2,C6)3.0000000.000000

H(W3,C1)2.0000000.000000

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 经管营销 > 金融投资

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1