分支限界法批处理调度问题Word下载.docx
- 文档编号:18295979
- 上传时间:2022-12-15
- 格式:DOCX
- 页数:17
- 大小:121.44KB
分支限界法批处理调度问题Word下载.docx
《分支限界法批处理调度问题Word下载.docx》由会员分享,可在线阅读,更多相关《分支限界法批处理调度问题Word下载.docx(17页珍藏版)》请在冰豆网上搜索。
E.sf2是相应于该叶结点的完成时间和。
当E.sf2<
bestc时更新当前最优值bestc和相应的当前最优解bestx。
2)当E.s<
n时,算法依次产生当前扩展结点E的所有儿子结点。
对于当前扩展结点的每一个儿子结点node,计算出其相应的完成时间和的下界bb。
当bb<
bestc时,将该儿子结点插入到活结点优先队列中。
而当bbbestc时,可将结点node舍去。
算法具体实现如下:
1.#include
<
iostream>
2.
3.template<
class
Type>
4.class
Graph;
5.
6.template<
T>
7.class
MinHeap
8.{
9.
template<
10.
friend
11.
public:
12.
MinHeap(int
maxheapsize
=
10);
13.
~MinHeap(){delete
[]heap;
}
14.
15.
int
Size()
const{return
currentsize;
16.
T
Max(){if(currentsize)
return
heap[1];
17.
18.
MinHeap<
&
Insert(const
T&
x);
19.
DeleteMin(T
20.
21.
void
Initialize(T
x[],
size,
ArraySize);
22.
Deactivate();
23.
output(T
a[],int
n);
24.
private:
25.
currentsize,
maxsize;
26.
*heap;
27.};
28.
29.template
30.void
:
n)
31.{
32.
for(int
i
1;
n;
i++)
33.
cout
a[i]
"
;
34.
endl;
35.}
36.
37.template
38.MinHeap<
maxheapsize)
39.{
40.
maxsize
maxheapsize;
41.
heap
new
T[maxsize
+
1];
42.
currentsize
0;
43.}
44.
45.template<
46.MinHeap<
x)
47.{
48.
if(currentsize
==
maxsize)
49.
{
50.
*this;
51.
52.
++currentsize;
53.
while(i
!
1
x
heap[i/2])
54.
55.
heap[i]
heap[i/2];
56.
/=
2;
57.
58.
59.
x;
60.
61.}
62.
63.template<
64.MinHeap<
DeleteMin(T&
65.{
66.
0)
67.
68.
cout<
Empty
heap!
69.
70.
71.
72.
73.
74.
y
heap[currentsize--];
75.
1,
ci
76.
while(ci
currentsize)
77.
78.
if(ci
heap[ci]
>
heap[ci
1])
79.
80.
ci++;
81.
82.
83.
if(y
heap[ci])
84.
85.
break;
86.
87.
heap[ci];
88.
ci;
89.
*=
90.
91.
92.
y;
93.
94.}
95.
96.template<
97.void
ArraySize)
98.{
99.
delete
100.
101.
size;
102.
ArraySize;
103.
104.
/
i--)
105.
106.
heap[i];
107.
c
2
*
i;
108.
while(c
109.
110.
if(c
heap[c]
heap[c
111.
c++;
112.
heap[c])
113.
114.
2]
heap[c];
115.
116.
117.
118.
119.}
120.
121.template<
122.void
Deactivate()
123.{
124.
125.}
2、6d9.cpp
[cpp]
viewplain
copy
1.//批作业调度问题
优先队列分支限界法求解
2.#include
stdafx.h"
3.#include
MinHeap2.h"
4.#include
5.using
namespace
std;
6.
Flowshop;
8.class
MinHeapNode
9.{
operator
int()
const
bb;
Init(int);
NewNode(MinHeapNode,int,int,int,int);
s,
//已安排作业数
f1,
//机器1上最后完成时间
f2,
//机器2上最后完成时间
sf2,
//当前机器2上完成时间和
bb,
//当前完成时间和下界
*x;
//当前作业调度
25.};
27.class
Flowshop
28.{
29.
main(void);
30.
31.
BBFlow(void);
Bound(MinHeapNode
E,int
f1,int
f2,bool
**y);
Sort(void);
35.
n,
//作业数
**
M,
//各作业所需的处理时间数组
37.
**b,
//各作业所需的处理时间排序数组
38.
**a,
//数组M和b的对应关系数组
39.
*bestx,
//最优解
bestc;
//最小完成时间和
bool
**y;
//工作数组
42.};
43.
44.template
45.inline
Swap(Type
a,
Type
b);
46.
47.int
main()
48.{
n=3,bf;
M1[3][2]={{2,1},{3,1},{2,3}};
**M
int*[n];
**b
**a
**y
bool*[n];
*bestx
int[n];
i=0;
i<
=n;
M[i]
int[2];
61.
b[i]
63.
y[i]
bool[2];
64.
65.
各作业所需要的时间处理数组M(i,j)值如下:
j=0;
j<
j++)
M[i][j]=M1[i][j];
("
M[i][j]<
)"
flow;
flow.n
flow.M
M;
flow.b
b;
flow.a
a;
flow.y
flow.bestx
bestx;
flow.bestc
1000;
//给初值
flow.BBFlow();
94.
最优值是:
flow.bestc<
96.
最优调度是:
97.
98.
(flow.bestx[i]+1)<
delete[]
M[i];
b[i];
a[i];
y[i];
112.}
114.//最小堆节点初始化
115.void
MinHeapNode:
Init(int
116.{
119.
x[i]
121.
122.
s
123.
f1
f2
125.
sf2
126.
bb
127.}
128.
129.//最小堆新节点
130.void
NewNode(MinHeapNode
Ef1,int
Ef2,int
Ebb,int
131.{
132.
133.
134.
135.
E.x[i];
136.
137.
Ef1;
138.
Ef2;
139.
E.sf2
f2;
140.
Ebb;
141.
E.s
142.}
143.
144.//对各作业在机器1和2上所需时间排序
145.void
Flowshop:
Sort(void)
146.{
147.
*c
148.
149.
150.
151.
152.
b[i][j]
M[i][j];
153.
c[i]
154.
155.
156.
n-1;
157.
158.
k=n-1;
k>
k--)
159.
160.
if(b[k][j]<
b[k-1][j])
161.
162.
Swap(b[k][j],b[k-1][j]);
163.
Swap(c[k],c[k-1]);
164.
165.
166.
167.
168.
169.
170.
a[c[i]][j]
171.
172.
173.
174.
[]c;
175.}
176.
177.//计算完成时间和下界
178.int
**y)
179.{
180.
k=0;
k<
k++)
181.
182.
183.
184.
y[k][j]
false;
185.
186.
187.
188.
=E.s;
189.
190.
191.
192.
y[a[E.x[k]][j]][j]
true;
193.
194.
195.
196.
E.f1
M[E.x[E.s]][0];
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 分支 限界 批处理 调度 问题
![提示](https://static.bdocx.com/images/bang_tan.gif)