一、二维背包问题
一维背包问题讨论的背包问题只有一种限制,即旅行者所能承受的背包的重量(亦即重量不能超过a (kg ).但是实际上背包除受重量的限制外,还有体积的限制,这就是不但要求旅行者的背包的重量M 不能超过a (kg ),还要求旅行者背包的体积V 不能超过b (m3),我们把这样的问题称为“二维背包问题”。
它的状态变量有两个因素:一个是重量,一个是体积。
二维背包问题是指:对于每件物品,具有两种不同的费用;选择这件物品必须同时付出这两种代价;对于每种代价都有一个可付出的最大值(背包容量)。
问怎样选择物品可以得到最大的价值。
设这两种代价分别为代价1和代价2,第i 件物品所需的两种代价分别为i a 和i b 。
两种代价可付出的最大值(两种背包容量)分别为a 和b 。
物品的价值为i c 。
模型:
11
1
max .
,1,2,3...n
i i
i n
i i i
n
i i i
i c x st a x a b x b
x z i n
===≤≤∈=∑∑∑
例题
码头有一艘载重量为30t ,最大容为12×10m 3的船,由于运输需要,这艘船可用于装载四种货物到珠江口,它们的单位体积,重量及价值量见下表:
现求如何装载这四种货物使价值量最大。
1
1
1
max
.,1,2,3...n
i i i
n
i i i
n
i i i
i c x st a x a b x b
x z i n
===≤≤∈=∑∑∑
可用动态规划来解决
1.设x i (i=1,2,3,4)分别表示装载这四种货物的重量,
2.阶段k :将可装入的货物按1,2,3,…n 排序,每个阶段装一种货物,(共可分为四个阶段)
3.状态变量: 1k S +和1k R +,表示在第k 阶段开始时,允许装入的前k 种货物的重量与体积。
状态转移方程:
11k k k k k k k k
S S a x R R b x ++=-=-
()(){}111,max ,j k k j k k j j f S R f S R c x -++=+,表示在不超过重量和体积的前提下,装
入前j 中货品的价值。
(j=1,2,3,4)
二维指派问题
问题描述
设有K 批货物需要从A 地运输到N 地, 途经B 地换装,A 地可用车辆有I 辆,B 地可用车辆为J 辆。
每辆车一次只能运输一批货物, 同一车辆运输不同批次的货物费用不同。
如果I, J, K 中有两个或者两个以上不相等, 如何优化车辆与货物的搭配, 使运输费用最小。
此问题是一个二维不平衡指派问题,假设I ≤J 。
以yi 和uj 分别代表A 地车辆i 和B 地车辆j 运输的货物批数, yi 和uj 的表达式为:
以i A 表示A 地的第i 辆车, j B 表示B 地的第j 辆车, k 表示第k 项任务( 即第k 批货物) , 定义三维0- 1变量ijk X , 如果i A 与j B 组合运输第k 批货物, 则ijk X =1 否则, ijk X =0。
i A 与j B 运输第k 批货物的费用为c ijk 以费用C 最小为目标, 模型如下:
111
11
11
11
1
1
Min ,1,2,,,(2),1,2,,,(3)1,1,2,
,,(4)
,(5)
I
J
K
ijk ijk
i j k
J
K
ijk
i j k
I K
ijk j i k
I J
ijk i j
I
J
i j
i
j
C C X X y i I X u j J X k K y u K ============
=======
=∑∑∑∑∑∑∑∑∑∑∑ 式( 2) 表示车辆Ai 运输货物批数为yi,
式( 3) 表示车辆Bj 运输货物批数为uj,
式( 4) 表示每批货物必须且只能由A 地某一车辆和B 地某一车辆共同运输, 式( 5) 表示A 地车辆和B 地车辆运输货物的总批数为K 。
车间作业调度问题(JSP ) 问题描述:
JSP 问题描述:
n 个加工顺序和时间不同的工件在m 台机器上加工,每个工件包含m 道工序,且每道工序使用某台机器的时间已知,调度的任务是确定各机器上所有工件的加工次序,约束条件被满足的同时以使总加工时间最优。
对应的己知条件如下所述: 1) 加工的机器集M=(123,,,...,m
m m m m ),其中
i
m 表示第i 个加工的机器, 2)加工的工件集O=(
123,,,...,n
o o o o ),其中,
i
o 表示第i 个加工的工件
3)各工件的工序集合J=(
123,,,...,n
J J J J ),其中,
i 123(j ,j ,j ...j ...j )
i i i ik im J =
第i 个工件的第k 道工序用j ik
表示,(i=1,2,..n; j=1,2,…m)
4)工件各工序的加工时间123n (,,......)k T T T T T T =,
123(,,......)
i i i i ik im T t t t t t =,
其中
ik
t 表示第i 个工件的第k 道工序需要的加工时间
作业车间调度需要考虑如下约束:
Cons1:每道工序在指定的机器上加工,且必须在其前一道工序加工完成后才能开始加工;
Cons2:某一时刻1台机器只能加工1个作业; Cons3:每个作业只能在1台机器上加工1次;
Cons4:各作业的工序顺序和加工时间已知,不随加工排序的改变而改变。
根据上述条件,构造构建了工序排列矩阵J 、加工时间矩阵T 和各机器对应加工工序的调度矩阵
J M
因此,所有调度方案均应满足如下的约束条件的数学表达式:
1)(1)1,,1,,,++≤==ij ij i j S t S i n j m
其中,
ij
S 为工件i 的第j 道工序的起始加工时间。
ij
t 表示工件i 的第j 道工序加工所需时间
(1)
+i j S 为工件i 的第j+1 道工序的起始加工时间
表明必须进行完上一步加工后才能进行下一步加工
2)
max max i 11ikh i ikh i ik ;,1,,;1,,;,1,
,;1,
,min()min (),,s.t
(1)(1)0,,0,1,
max max ααα≤≤≤≤+≤==+≤==⎧⎫⎧⎫⎪⎪
==+∀∈∈⎨⎨⎬⎬
⎪⎪⎩⎭⎩⎭
+≤+-+≤+-≥=ijk ij ghk ijk ij ghk ij ij j i n j m ik ik ih ik ik jk jk ik jk S t S i g n h m S t S i g n h m
C C c t J J M M c t c M c t c M x c x h ijk 1i 0,1,i j k x 0,,工件在机器k 上加工早于机器h 否则
工件早于工件在机器上加工否则
⎧=⎨
⎩⎧=⎨
⎩
ijk
S 表示工件i 的第j 道工序在机器k 上的起始加工时刻
ij
t 表示工件i 的第j 道工序加工所需时间
ghk
S 表示工件g 的第h 道工序在机器k 上的起始加工时刻
表明机器只有在上一道工序加工完成后才能进行下一道工序加工。
对于一个具体的车间作来调度问题,结合已知约束条件和各工序的加工时间,可以计算出各机器完成所有工件所需要的时间。
将最短加工时间作为车间作业高度优化目标,那么车间作业调度问题优化目标函数可以定义为:
()()()min max =J E F M T
举例:
下面给出作业车间调度问题的一个实例,其中每个工序上标注有一对数值(m,p ),其中,m 表示当前工序必须在第m 台机器上进行加工,p 表示第m 台机器加工当前工序所需要的加工时间。
(注:机器和作业的编号从0开始) job0=[(0,3),(1,2),(2,2)] job1=[(0,2),(2,1),(1,4)] job2=[(1,4),(2,3)]
在这个例子中,作业job0有3道工序:它的第1道工序上标注有(0,3),其表示第1道工序必须在第0台机器上进行加工,且需要3个单位的加工时间;它的第2道工序上标注有(1,2),其表示第2道工序必须在第1台机器上进行加工,且需要2个单位的加工时间;余下的同理。
总的来说,这个实例中共有8道工序。
该问题的一个可行解是L=8道工序开始时间的一个排列,且满足问题的约束。
下图给出了一个可行解的示例:。