1. Trang chủ
  2. » Giáo Dục - Đào Tạo

Ứng dụng một số thuật toán vào giải các bài toán xếp lịch công việc

68 1,9K 9

Đang tải... (xem toàn văn)

Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống

THÔNG TIN TÀI LIỆU

Thông tin cơ bản

Định dạng
Số trang 68
Dung lượng 542 KB

Các công cụ chuyển đổi và chỉnh sửa cho tài liệu này

Nội dung

Sau 3 năm trong quá trình dạy học tôi đã tìm hiểu, nghiên cứu, đúc rút thêm được một sốkiến thức phương pháp giải các bài toán xếp lịch công việc, nên tôi phát triển thêm đềtài năm 2010

Trang 1

Nội dung Trang PHẦN I MỞ ĐẦU

1 Lý do chọn đề tài

2 Mục đích của sáng kiến kinh nghiệm

3 Đối tượng và phạm vi nghiên cứu

4 Cơ sở khoa học của đề tài

PHẦN II NỘI DUNG

Chương 1 Ứng dụng một số thuật toán, định lí vào việc giải các bài

toán về xếp lịch

1 Xét bài toán xếp lịch

2 Ứng dụng một số thuật toán vào giải các bài toán xếp lịch

a Thuật toán Johnson

488111620253437415768

Trang 2

PHẦN I MỞ ĐẦU

1 Lý do chọn đề tài

Vào năm học 2010 – 2011 tôi đã viết về đề tài “Ứng dụng một số thuật toán vào

giải các bài toán xếp lịch công việc” và được xếp bậc 4/4 của Sở GD - ĐT Sau 3

năm trong quá trình dạy học tôi đã tìm hiểu, nghiên cứu, đúc rút thêm được một sốkiến thức phương pháp giải các bài toán xếp lịch công việc, nên tôi phát triển thêm đềtài năm 2010 – 2011 để được một đề tài hoàn thiện hơn (Sáng kiến năm 2010 – 2011tôi đã nêu được 4 phương pháp, năm nay tôi bổ sung thêm 4 phương pháp nữa)

Bài toán xếp lịch công việc nảy sinh từ nhiều vấn đề thực tế khác nhau: giao việc,gia công các chi tiết máy, đóng gói hàng hóa vào một hoặc nhiều thùng, xếp lịch thiđấu, lịch học tập, hành trình du lịch, chọn đối tượng và phương án thi công, bài toánvận tải xếp hàng, điều hành xe, chọn địa điểm xây dựng nhà máy, kế hoạch sản xuấtcác sản phẩm, xếp thời gian cho phép (chỉ có thể chọn ra phương án tương đối thíchhợp với điều kiện dữ liệu cụ thể nào đó), hơn nữa nhiều bài dưới dạng tổng quát cònđược xếp vào lớp bài toán còn hạn chế ở một số bài tập gặp trong kì thi học sinh giỏiTin học trước đây và nêu một số cách giải thích hợp Qua việc giới thiệu các bài tậptôi cố gắng minh họa một số phương pháp thường gặp nhất trong bài toán xếp lịch

Lí do chủ yếu để chọn các phương pháp là cân nhắc tới mức độ tiếp thu của họcsinh phổ thông trung học

2 Mục đích của sáng kiến kinh nghiệm.

- Ứng dụng các thuật toán để giải các bài toán về xếp lịch, sưu tầm một số bài toánliên quan đến xếp lịch

- Đưa vào bồi dưỡng học sinh đi thi học sinh giỏi tỉnh

- Đưa vào tài liệu của tổ chuyên môn

3 Đối tượng và phạm vi nghiên cứu:

3.1 Đối tượng nghiên cứu:

- Các bài toán về xếp lịch để giảng dạy cho học sinh đi thi học sinh giỏi tỉnh

3.2 Phạm vi nghiên cứu:

Trang 3

- Với các thuật toán, định lí, các bài toán, tôi áp dụng vào dạy học sinh ôn thi họcsinh giỏi tỉnh.

4 Cơ sở khoa học của đề tài:

4.1 Cơ sở lí luận:

Các bài toán về xếp lịch được ứng dụng rất nhiều trong thực tiễn, với sự phát triểncủa CNTT như hiện nay thì việc áp dụng CNTT vào các cơ quan tổ chức là một việclàm đúng đắn, mà công việc xếp lịch rất phổ biến

4.2 Cơ sở thực tiễn:

- Đây là bài toán có nhiều ứng dụng trong thực tiễn, từ những bài sắp xếp lịch côngviệc đơn giản đến các công việc phức tạp hơn như xếp thời khóa biểu của một trườnghọc,…

Trang 4

NỘI DUNG SÁNG KIẾN KINH NGHIỆM CHƯƠNG 1 ỨNG DỤNG MỘT SỐ THUẬT TOÁN, ĐỊNH LÍ VÀO VIỆC

GIẢI CÁC BÀI TOÁN VỀ XẾP LỊCH

1 Xét bài toán xếp lịch sau:

Giả sử trong một phiên làm việc từ thời điểm 0 đến thời điểm T=8640000, mộttrung tâm tính toán phải thực hiện N chương trình, chương trình i thực hiện từ thờiđiểm a[i] đến thời điểm b[i], 0 a i[ ] b i[ ] T

Cho trước một đoạn thời gian (P1, Q1) Hãy xét xem liệu tại mọi thời điểm củađoạn đó luôn có chương trình chạy hay không?

Cho trước một đoạn thời gian (R1, S1) Hãy xét xem liệu tại mọi thời điểm củađoạn đó luôn không có chương trình nào chạy hay không?

Hãy tìm đoạn thời gian (P, Q) dài nhất sao cho tại mọi điểm của nó luôn cóchương trình chạy

Hãy tìm đoạn thời gian (R, S) dài nhất sao cho tại mọi điểm của nó đều không cóchương trình nào chạy

Dữ liệu vào được cho bởi file văn bản LICHTRUC.INP có cấu trúc

- Dòng thứ nhất ghi số nguyên dương N 200

- Dòng thứ i+1 (1  i N) ghi hai số nguyên không âm A[i] và B[i]

- Dòng thứ N+2 ghi hai số nguyên không âm P1, Q1 (P Q1  1)

- Dòng thứ N+3 ghi hai số nguyên không âm R1, S1 (R1 S1)

Dữ liệu ra ghi vào file văn bản LICHTRUC.OUT có cấu trúc

- Dòng đầu tiên ghi 1 hoặc 0 tùy thuộc kết quả cụ thể (tìm được ghi số 1, khôngtìm được ghi số 0)

- Dòng thứ hai cũng ghi 1 hoặc 0 theo nghĩa trên

- Dòng thứ ba ghi hai số P, Q

- Dòng thứ tư ghi hai số R, S

Trang 5

8000000 8500000

500001 7999999

Nhận xét: Để giải bài toán này thì ta có thể dùng mảng một chiều A (mỗi phần tử

là một bản ghi gồm 2 trường: thời điểm đầu và thời điểm cuối của mỗi chương trình).Sắp mảng A theo thời điểm đầu của mỗi chương trình Sau đó duyệt mảng A để tạomảng B (cùng kiểu với A) lưu các đoạn gồm các thời điểm liên tiếp có chương trình,

và tạo mảng C để lưu các đoạn gồm các thời điểm liên tiếp không có chương trìnhnào Dựa vào mảng B và C dẫn ra kết luận thích hợp

Trang 8

close(f);

end.

2 øng dông mét sè thuËt to¸n vµo gi¶i c¸c bµi to¸n xÕp lÞch

a Dùng thuật toán Johnson

Ví dụ: Lập lịch gia công trên hai máy

Một sản phẩm gồm N chi tiết, mỗi chi tiết phải gia công lần lượt trên hai máy A và

B (A trước, B sau) Thời gian thực hiện chi tiết i trên máy A là Ai, trên máy B là Bi(i=1, 2, …, N) Hãy xếp lịch hoàn thành sản phẩm với thời gian ít nhất Hiện lịch vàthời gian hoàn thành

Dữ liệu vào từ file GIACONG.INP có cấu trúc:

- Dòng đầu tiên là số nguyên dương N

- N dòng tiếp theo: dòng i+1 là hai số Ai và Bi

Dữ liệu ra ghi vào file GIACONG.OUT có cấu trúc:

- Dòng đầu tiên là thời gian ít nhất thực hiện N công việc

- Dòng thứ hai lần lượt ghi số hiệu của N công việc thực hiện theo lịch tối ưu

Trang 9

Từ định lớ trờn cú thể đưa ra thuật toỏn để giải bài toỏn trờn, và chứng minh sự đỳngđắn của thuật toỏn sau:

* Thuật toỏn:

+ Bước 1: Chia cỏc chi tiết thành hai nhúm:

Nhúm 1: gồm cỏc chi tiết i mà A iB i.Nhúm 2: gồm cỏc chi tiết i mà A iB i

+ Bước 2: Xếp nhúm 1 theo chiều tăng của Ai, xếp nhúm 2 theo chiều giảm của Bi.+ Bước 3: Nối nhúm 2 vào sau nhúm 1

* Chứng minh:

Nếu cỏc chi tiết v[k] và v[k+1] cựng thuộc nhúm 1 thỡ B v k[ 1] A v k[ 1] A v k[ ] nờnMin{Av[k],Bv[k+1]}=Av[k], mặt khỏc A v k[ ] A v k[ 1] ,A v k[ ] B v k[ ] , nờn A v k[ ] Min B{ v k[ ] ,A v k[ 1] }

Vậy Min {Av[k],Bv[k+1]}Min {Bv[k], Av[k+1]}

Nếu chi tiết v[k] và v[k+1] cựng thuộc nhúm 2 thỡ B v k[ 1] B v k[ ]  A v k[ ] nờn Min {A[k],Bv[k]}=Bv[k+1] mặt khỏc B v k[ ] B v k[ 1] ,A v k[ 1] B v k[ 1] nờn Min {Bv[k], Av[k+1]} Bv[k+1] VậyMin {Av[k], Bv[k]} Min {Bv[k], Av[k+1]}

Nếu chi tiết v[k] thuộc nhúm 1 và chi tiết v[k+1] thuộc nhúm 2 thỡ:

Min {Av[k], Bv[k+1]} Min {Bv[k], Av[k+1]} do Av[k] Bv[k] và Bv[k+1] < Av[k+1]

cú thể thực hiện cụ thể như sau: Xõy dựng dần dóy kết quả từ hai đầu dồn vào giữa(dựng mảng một chiều KQ và hai biến: đầu và cuối)

1 Gỏn giỏ trị ban đầu: đầu:=0; cuối:=N+1;

2 Thực hiện vũng lặp: trong khi đầu < cuối

a Tỡm chi tiết i chưa làm, cú thời gian thực hiện nhỏ nhất

b Nếu i thuộc dóy A thỡ tăng giỏ trị biến đầu, gỏn KQ[đầu]:=i, nếu i thuộc dóy

B thỡ giảm giỏ trị biến cuối, gỏn KQ[cuối]:=i;

3 Đỏnh dấu đó làm chi tiết i

Cài đặt chơng trình:

const max=100;

fi='giacong.inp';

fo='giacong.out';

Trang 10

type m1=array[1 2,1 max] of integer;

Trang 11

- Về thuật giải heuristic

Nhiều bài toán xếp lịch có dữ liệu vào lớn không thể áp dụng thuật toán cho lờigiải tối ưu trong thời gian cho phép, trong những trường hợp đó chúng thường đượcgiải bằng phương pháp heuristic (một chiến thuật tìm kiếm hợp lí nào đó) để có lờigiải tương đối tối ưu thực hiện trong thời gian cho phép

Bài toán xếp lịch thường có 2 yêu cầu sau:

- Yêu cầu loại 1: gọi là yêu cầu bắt buộc (nội dung cụ thể tùy theo từng bài toán) làyêu cầu phải đạt được, nếu không đạt được thì coi như lời giải không được chấp nhận

Ví dụ: yêu cầu phải xếp hết tất cả công việc, hoặc phải xếp xong trước một thời hạncho trước nào đó, hoặc mỗi công việc phải tuân thủ yêu cầu về thời gian bắt đầu, thờigian kết thúc, thời gian hoàn thành của công việc ấy, hoặc công việc này phải đượcthực hiện trước công việc kia,…

- Yêu cầu loại 2: Là yêu cầu có thể nhân nhượng phần nào đó (nội dung cụ thể tùytheo từng bài toán)

Trang 12

Ví dụ: Cho phép tổng chi phí (hoặc tổng thời gian) thực hiện xong các công việc đạtgiá trị càng thấp càng tốt (hoặc xong càng sớm càng tốt) Chính nhờ sự nhân nhượngnày mà ta có thể đề xuất ra những cách sắp xếp một hoặc một nhóm công việc tiếptheo dễ dàng hơn, đó chính là các “heuristic”.

Thuật giải heuristic có những đặc điểm sau:

- Cho lời giải gần tối ưu, thời gian thực hiện chương trình là hợp lí và có thể tổchức dữ liệu để thực hiện chương trình

- Có thể thay đổi một vài heuristic trong quá trình giải để thích ứng với các bộ dữliệu khác nhau, kết hợp so sánh kết quả thực hiện các heuristic khác nhau và giữ lạikết quả tốt hơn

Ví dụ: Chia N việc cho M máy

Cho N công việc, công việc i hoàn thành trong thời gian ti Các công việc đượcthực hiện trên M máy (công suất như nhau, mỗi máy đều có thể thực hiện được côngviệc bất kì trong N công việc) mỗi công việc được làm liên tục trên một máy cho đếnkhi xong Hãy tổ chức máy thực hiện đủ N công việc sao cho thời gian hoàn thànhcàng nhỏ càng tốt

Dữ liệu vào từ file CHIA.INP có cấu trúc:

- Dòng đầu là hai số N và M

- Dòng tiếp theo là N số t1, t2, …, tN

Dữ liệu ra ghi vào file CHIA.OUT có cấu trúc:

- Dòng đầu là thời gian hoàn thành N công việc

- M dòng sau: dòng i+1 ghi số hiệu các công việc thực hiện trên máy i

Trang 13

2 1 4

5 6Phân tích bài toán:

Với bài toán trên ta có thể thực hiện một heuristic sau:

1 Sắp xếp công việc theo thứ tự thời gian hoàn thành giảm dần

2 Lấy M công việc đầu phân công cho M máy, mỗi máy một việc Gọi maxT làthời gian lớn nhất của M công việc này

Lặp cho đến khi hết việc {Hết vòng lặp 1}

Có 6 công việc thực hiện trên 3 máy công suất như nhau: Thời gian thực hiện cáccông việc cho trong bảng sau:

Máy 1: cv3=8 đơn vị thời gian

Máy 2: cv2=5 đơn vị thời gian

Máy 3: cv5=5 đơn vị thời gian

Trang 14

Như vậy máy làm công việc có thời gian làm lớn nhất là Máy 1 với cv3=8 đơn vị thờigian.

Lần phân công thứ hai: thì ta phải tìm máy nào có thời gian đã làm nhỏ nhất thì tanhận được kết quả là Máy 2 và Máy 3

Máy 2: thêm cv1+cv4  tổng cộng 8 đơn vị thời gian

Máy 3: thêm cv6  tổng cộng 6 đơn vị thời gian

Với cách phân công này ta thấy khi máy 1 làm xong cv3 thì máy 2 làm xongcv5+cv1+cv4, máy 3 làm xong cv5+cv6

 Thời gian hoàn thành là 8 đơn vị thời gian

Chương trình cài đặt trên Pascal

Trang 16

Ví dụ: Ta xét bài toán sau:

Cho N công việc, với mỗi công việc cho biết tiền công thu được khi thực hiệncông việc này, thời gian để hoàn thành, thời điểm cuối cùng phải kết thúc Hãy xếplịch thực hiện sao cho thu được nhiều tiền công nhất

Dữ liệu vào từ file văn bản XEPLICH.INP có cấu trúc:

- Dòng đầu là số nguyên dương N

- N dòng sau, dòng i+1 ghi 3 số tg, tdkt, gt tương ứng là thời gian cần thiết để hoànthành, thời điểm bắt buộc phải xong, giá trị tiền công của công việc i

Dữ liệu ra ghi vào file XEPLICH.OUT có cấu trúc:

- Dòng đầu tiên là tổng giá trị tiền công

Trang 17

- Các dòng tiếp theo mỗi dòng ghi 4 số: i, T1, T2, gt tương ứng là số hiệu, thời điểmbắt đầu, thời điểm kết thúc, giá trị của công việc được chọn.

Ngoài ra, một cận thứ hai là:

Thời điểm bắt đầu công việc k + thời gian làm công việc kThời điểm kết thúc công việc k.

Cài đặt chương trình sử dụng ngôn ngữ lập trình Pascal:

Trang 18

conlai:longint;{Tổng tiền các công việc còn lại}

tien,td,tong:integer;{Lần lượt là tổng tiền đã làm được, thời điểm cuối của phương án đang tạo, tổng tiền của phương án tốt đã có}

tien:=tien+a[k].tien;{Thêm tiền công của công việc k}

d[k]:=k; {đánh dấu đã chọn làm công việc k}

conlai:=conlai-a[k].tien;{Tổng giá trị các công việc còn lại}

Trang 20

Vậy ý tưởng cơ bản của quy hoạch động đó là: Tránh tính toán lại các bài toán connhiều lần, mà lưu giữ kết quả đã tìm kiếm được vào một bảng làm giá trị giả thiết choviệc tìm kết quả của trường hợp sau Chúng ta sẽ lấp đầy dần các giá trị của bảng nàybởi các kết quả của những trường hợp trước đã được giải Kết quả cuối cùng chính làkết quả của bài toán cần giải.Cụ thể như sau:

Phương pháp quy hoạch động cùng nguyên lý tối ưu được nhà toán học MỹR.Bellman đề xuất vào những năm 50 của thế kỷ 20 Phương pháp này đã được ápdụng để giải hàng loạt bài toán thực tế trong các quá trình kỹ thuật của công nghệ, tổchức sản xuất, kế hoạch hoá kinh tế… Tuy nhiên cần lưu ý rằng có một số bài toángiải bằng quy hoạch động tỏ ra không thích hợp

Trong thực tế, ta thường gặp một số bài toán tối ưu loại sau: Có một đại lượng ghình thành trong một quá trình gồm nhiều giai đoạn và ta chỉ quan tâm đến kết quảcuối cùng là giá trị của g phải lớn nhất hoặc nhỏ nhất, ta gọi chung là giá trị tối ưu của

g Giá trị của g phụ thuộc vào những đại lượng xuất hiện trong bài toán mà mỗi bộ giátrị của chúng được gọi là một trạng thái của hệ thống và cũng phụ thuộc vào cáchthức đạt được giá trị g trong từng giai đoạn mà mỗi cách thức được gọi là điều khiển.Đại lượng g thường được gọi là hàm mục tiêu và quá trình đạt được giá trị tối ưu của

g được gọi là quá trình điều khiển tối ưu

Trang 21

Bellman phát biểu nguyên lý tối ưu (cũng gọi là nguyên lý Bellman) mà ý tưởng

cơ bản là như sau: "Với mỗi quá trình điều khiển tối ưu, đối với trạng thái ban đầu A0,với mọi trạng thái A trong quá trình đó, phần quá trình kể từ trạng thái A xem nhưtrạng thái bắt đầu cũng là tối ưu"

Chú ý rằng nguyên lý này được thừa nhận mà không chứng minh

Phương pháp tìm điều khiển tối ưu theo nguyên lý Bellman thường được gọi là

quy hoạch động Thuật ngữ này nói lên thực chất của quá trình điều khiển là động:Có

thể trong số bước đầu tiên lựa chọn điều khiển tối ưu dường như không tốt nhưngchung cả quá trình lại là tốt nhất

Ta có thể giải thích ý này qua bài toán sau: Cho một dãy số nguyên A1,A2,….An.Hãy tìm cách xóa đi một số ít nhất số hạng để dãy còn lại là dãy đơn điệu hay nóicách khác hãy chọn một số nhiều nhất các số sao cho dãy B gồm các số hạng đó theotrình tự xuất hiện trong dãy A là đơn điệu

Quá trình chọn dãy B được điều khiển qua N giai đoạn để đạt được mục tiêu là

số lượng số hạng của dãy B là nhiều nhất, điều khiển ở giai đoạn i thể hiện việc chọnhay không chọn dãy Ai vào dãy B

Giả sử dãy đã cho là 1 8 10 2 4 6 7 Nếu ta chọn lần lượt 1, 8, 10 thì chỉ chọnđược 3 số hạng nhưng nếu bỏ qua 8 và 10 thì ta chọn được 5 số hạng 1, 2, 4, 6, 7 Khi giải một số bài toán bằng cách "chia để trị", chuyển việc giải bài toán kíchthước lớn về việc giải nhiều bài toán cùng kiểu có kích thước nhỏ hơn thì các thuậttoán này thường được thể hiện bằng các chương trình con đệ quy Khi đó, trên thực tế,nhiều kết quả trung gian phải được tính nhiều lần

Nói các khác phương pháp quy hoạch động đã thể hiện sức mạnh của nguyên

lý chia để trị đến cao độ

Trong một số trường hợp, khi giải một bài toán A, trước hết ta tìm họ bài toánA(p) phụ thuộc tham số p (có thể là một véc tơ) mà A(p0)=A với p0 là trạng thái banđầu của bài toán A Sau đó tìm cách giải họ bài toán A(p) với tham số p bằng cách áp

Trang 22

dụng nguyên lý tối ưu của Bellman Cuối cùng cho p=p0 sẽ nhận được kết quả củabài toán A ban đầu

Các thuật ngữ dùng trong quy hoạch động:

Bài toán giải theo phương pháp quy hoạch động gọi là bài toán quy hoạch động.

Công thức phối hợp nghiệm của các bài toán con để có nghiệm của bài toán lớn gọi là

công thức truy hồi của quy hoạch động Tập các bài toán có ngay lời giải để từ đó giải

quyết các bài toán lớn hơn gọi là cơ sở quy hoạch động Không gian lưu trữ lời giải

các bài toán con để tìm cách phối hợp chúng gọi là bảng phương án của quy hoạch

động

Ví dụ:

Cho thuê máy tính

Tại thời điểm 0, ông chủ cho thuê máy tính nhận được đơn đặt hàng thuê sử dụngmáy của N khách hàng Các khách hàng được đánh số từ 1 đến N Khách hàng i cần

sử dụng máy từ thời điểm di đến thời điểm ci (di và ci là các số nguyên và 0<di<ci 

1000000) và sẽ trả tiền sử dụng máy là pi (pi nguyên, 0<pi1000000) Hãy xác địnhxem ông chủ cần nhận phục vụ những khách hàng nào sao cho khoảng thời gian sửdụng máy tính của hai khách hàng được nhận phục vụ bất kì không giao nhau và tổngtiền thu được từ phục vụ là lớn nhất

Dữ liệu vào từ file văn bản MAYTINH.INP có cấu trúc

- Dòng đầu ghi số N (0<N1000)

- Dòng thứ i trong N dòng tiếp theo ghi ba số di, ci, pi cách nhau bởi dấu trống, i=1,

2, …, N

Dữ liệu ra ghi vào file MAYTINH.OUT có cấu trúc:

- Dòng đầu tiên ghi hai số nguyên dương theo thứ tự là số lượng khách hàng nhậnđược phục vụ và tổng tiền thu được

- Dòng tiếp theo ghi chỉ số của khách hàng được phục vụ

Test:

Trang 23

Khởi tạo NH[i]=0;

Sau đó sửa nhãn từ NH[1] đến NH[N] như sau:

Gán NH[i]=pi Để sửa nhãn NH[i], tìm công việc j có nhãn lớn nhất trong các côngviệc từ (i-1) đến 1 mà thời điểm hoàn thành của công việc j sớm hơn thời điểm bắtđầu của công việc i, sử dụng công thức:

Trang 24

for i:=1 to n do a[i].tt:=i;

for i:=1 to n do write(a[i].d,' ');

while a[i].d<x do inc(i);

while x<a[j].d do dec(j);

Trang 25

Máy kiểu A lấy sản phẩm từ băng chuyền vào, thực hiện nguyên công A và đặt sảnphẩm vào băng chuyền trung gian Máy kiểu B lấy sản phẩm từ băng chuyền trunggian thực hiện nguyên công B và đặt sản phẩm vào băng chuyền ra Mọi máy đều cóthể làm việc song song và độc lập với nhau, mỗi máy làm việc với thời gian xử lí chotrước Thời gian xử lí là số đơn vị thời gian cần thiết để thực hiện nguyên công bao

Trang 26

gồm cả thời gian lấy sản phẩm từ băng chuyền trước khi xử lí và thời gian đặt sảnphẩm vào băng chuyền sau khi xử lí.

Băng chuyền vào

Các máy kiểu A

Băng chuyền trung gian

Các kiểu máy B

Băng chuyền ra

Hình 1.1: Mô tả dây chuyền sản xuất

Câu a: Đưa ra thời điểm sớm nhất mà nguyên công A được hoàn thành đối với tất cả

N sản phẩm với điều kiện là các sản phẩm này đã sẵn sàng trên băng chuyền vào, tạithời điểm 0

Câu b: Đưa ra thời điểm sớm nhất mà cả 2 nguyên công A và B được hoàn thành đối

với tất cả N sản phẩm khi các sản phẩm này đã sẵn sàng trên băng chuyền vào tại thờiđiểm 0

Dữ liệu vào từ file văn bản BAI1.INP gồm các số nguyên dương ghi trên 5 dòng:

- Dòng thứ nhất ghi N là số sản phẩm (1 N 1000)

- Dòng thứ hai ghi M1 là số lượng các máy kiểu A (1 M1  30)

- Dòng thứ 3 ghi M1 số nguyên là các thời gian xử lí của từng máy kiểu A

- Dòng thứ tư và thứ năm tương ứng ghi M2 là số lượng các máy kiểu B (

2

1 M  30) và thời gian xử lí của từng máy kiểu B Thời gian xử lí là một sốnguyên nằm trong khoảng từ 1 đến 20

Kết quả ghi ra file văn bản BAI1.OUT trên 2 dòng:

- Dòng đầu tiên chứa một số nguyên dương là lời giải của câu a

- Dòng thứ hai chứa một số nguyên dương là lời giải của câu b

Ý tưởng:

Câu a: Trong thời gian tg, tổng sản phẩm hoàn thành của M máy loại x là hàm số:

f(x,M,tg)= (tg div x[i]), i=1 M (trong đó f(x,M,tg)N)

Trang 27

Để f(x,M,tg) đạt giá trị bằng N ta tăng dần từng đơn vị thời gian cho biến tg.

Câu b: Giọi tgb là thời gian cho M2 máy loại B coi như một hệ thống đơn lẻ hoànthành N sản phẩm thì N=f(B,M2,tgb) Thời gian N sản phẩm hoàn thành trên cả dâychuyền là tg thì tg>tgb vì cần thêm lượng thời gian t=tg-tgb cho các máy kiểu B chờmột số sản phẩm nào đó còn đang làm trên máy kiểu A, chưa kịp chuyền vào dâychuyền trung gian (tại thời điểm ban đầu cũng như có thể xẩy ra trong quá trình sảnxuất tại bất cứ thời điểm nào mà các máy kiểu A còn hoạt động)

Gọi i+1 là các thời điểm tính kết quả hoạt động của các máy kiểu B (0  i tgb 1), khi

đó chúng còn thực hiện thiếu một lượng sản phẩm là f(B,M2,tgb-i-1), vậy số sản phẩmcác máy kiểu B đã làm được sau thời điểm i+1 là N-f(B,M2,tgb-i-1), đây cũng chính làlượng sản phẩm mà các máy kiểu A phải làm trước cá máy kiểu B ít nhất là 1 đơn vịthời gian để có sản phẩm chuyển vào dây chuyền trung gian cho các máy kiểu B Vậy

x là lượng thời gian thỏa mãn điều kiện:

f(A, M, i+x)N-f(B,M2,tgb-i-1)

Ta tăng dần x từng đơn vị đến giá trị x0 để có dấu đẳng thức

Thời gian hoàn thành N sản phẩm trên toàn dây chuyền sẽ là tgb+x0

Chương trình minh họa

Trang 28

for i:=1 to m2 do read(f,t2[i]);

Bài 2 Sửa đường

Hệ thống giao thông trong một thành phố bao gồm N nút giao thông và M đoạnđường phố hai chiều, mỗi đoạn nối hai nút giao thông Các nút giao thông được đánh

số từ 1 đến N và các đoạn đường phố được đánh số từ 1 đến M Giữa hai nút giaothông có không quá một đoạn đường phố nối chúng Hẹ thống giao thông bảo đảm sự

đi lại giữa hai nút giao thông bất kì Ban quản lí hệ thống giao thông được giao nhiệm

vụ thực hiện dự án nâng cấp tất cả các đoạn đường phố Mọi sự đi lại theo đoạn

Trang 29

đường phố sẽ bị cấm trong suốt thời gian thực hiện thi công nâng cấp nó Thời giancần thiết để hoàn thành việc thi công nâng cấp bất cứ đoạn đường phố nào cũng làmột ngày và trong một ngày Ban quản lí có thể tổ chức thực hiện việc thi công nângcấp không quá K đoạn đường phố Để đảm bảo sự đi lại giữa hai nút giao thông bất kìtrong suốt thời gian thực hiện dự án, Ban quản lí cần tìm lịch thi công các đoạn đườngmột cách hợp lí.

Yêu cầu: Tìm lịch thi công nâng cấp tất cả các đoạn đường phố đảm bảo sự đi lại giữahai nút giao thông bất kì trong suốt quá trình thực hiện dự án, đồng thời sao cho dự ánđược hoàn thành sau ít ngày nhất

Dữ liệu vào từ file văn bản NANGCAP.INP

- Dòng đầu tiến chứa 3 số nguyên dương N, M, K (

2 N  500;1 M  20000;1 KN)

- Dòng thứ i trong số M dòng tiếp theo chứa cặp số hiệu của hai nút giao thôngtương ứng là hai đầu mút của đoạn đường thứ i Các số trên cùng một dòngđược ghi cách nhau bởi dấu cách

Kết quả ghi ra file NANGCAP.OUT:

- Dòng đầu tiên ghi số P là số ngày cần thực hiện theo lịch thi công tìm được (quiước ghi P=-1 nếu không tìm được lịch thỏa mãn yêu cầu đặt ra)

- Nếu tìm được lịch thì dòng thứ i trong M dòng tiếp theo ghi chỉ số ngày thựchiện thi công nâng cấp đoạn đường thứ i Các ngày trong lịch thực hiện dự ánđược đánh số từ 1 đến P thep đúng trình tự thời gian

Trang 30

Ý tưởng:

Bài toán này có thể xây dựng câu khung trên đồ thị vô hướng, liên thông, N đỉnh

1 Mã hóa mỗi đỉnh một số hiệu từ 1 đến N, coi mỗi đỉnh là một cây con 1 đỉnh

2 Các đỉnh trên cùng một cây con sẽ được mã cùng số hiệu (tạm gọi là mã củacây con) Chọn lần lượt N-1 cạnh kết nạp vào cây con này hoặc cây con kia nhưsau: khi mỗi cạnh (i,j) được chọn (mã đỉnh i khác mã đỉnh j) thì các đỉnh cùng

mã với đỉnh i và các đỉnh cùng mã với đỉnh j sẽ có mã chung (là mã của đỉnh ichẳng hạn) Bằng cách này ta đã hợp nhất cây con có đỉnh i với cây con có đỉnhj

3 Khi tất cả N đỉnh có cùng một mã thì các cây con đã hợp lại thành cây khungcủa đồ thị

Giải theo phương pháp làm mịn dần

Coi hệ thống giao thông là một đồ thị vô hướng N đỉnh M cạnh (đỉnh là nút giaothông, cạnh là các đoạn đường phố nối hai nút giao thông) Việc tìm lịch thi côngnâng cấp tất cả các đoạn đường phố đảm bảo sự đi lại giữa hai nút giao thông bất kìtrong suốt quá trình thực hiện dự án tương đương với việc trong từng ngày luôn duytrì một cây khung A trên đồ thị này mà các cạnh của nó chỉ là các đoạn đường phố đãđược sửa và các đoạn đường phố chưa tiến hành sửa trong ngày đang xét đó Ngoàicây khung A bảo đảm sự liên thông đi lại của nhân dân, chúng ta sẽ xây dựng dần câykhung B chứa cá cạnh không thuộc A là các đoạn đường được tiến hành sửa trongtừng ngày Trên đồ thị vẫn còn có những canh chưa thuộc A và B thì tạm thời lưu trữchúng trong ngăn xếp (stack) S Trong quá trình xây dựng cây khung A ta luôn lợidụng lấy phần đã hình thành của B cho sang A để thêm dần vào A các đoạn đườngvừa được sửa của B Khi xây dựng xong cây khung A với N-1 cạnh là N-1 đoạn

Trang 31

đường đã sửa chữa các đoạn đường còn lại, vì vậy có thể sửa nốt những đoạn đườngchưa sửa không thuộc A một cách tự do (không bị ràng buộc bởi điều kiện bảo đảm

sự đi lại giữa hai nút giao thông bất kì, mỗi ngày sửa K đoạn đường phố nếu còn đủ Kđoạn đường phố)

Để xây dựng cây khung A, dùng mảng A[1 MaxN], để xây dựng cây khung B,dùng mảng B[1 MaxN], trong đó A[i] là mã số của đỉnh i khi xây dựng cây A, cònB[i] là mã số của đỉnh i khi xây dựng cây B Cách xây dựng mỗi cây khung theophương pháp hợp nhất dần các đỉnh như đã nêu ở trên Nhưng trong bài toán nàychúng ta xây dựng đồng thời 2 cây không A và B, do đó cần phân chia mức độ ưu tiên

cho các cạnh: Ta chia tập cạnh làm 3 loại: Loại 1: A[i]<>A[j] thì cạnh(i,j) sẽ nạp vào

A, cho nó là cạnh có độ ưu tiên lớn nhất Loại 2: A[i]=A[j] và B[i]<>B[j] thì cạnh(i,j)

sẽ nạp vào B, cho nó là cạnh có độ ưu tiên thứ hai Loại 3: A[i]=A[j] và B[i]=B[j] thìcạnh(i,j) không nạp vào A và cũng không nạp vào B (nếu nạp vào sẽ tạo thành chutrình trên A hoặc trên B) nên nó đưcọ lưu trữ vào S chờ sẽ sửa sau (sửa ngay trongngày đó nếu số cạnh thêm vào B còn nhỏ hơn K) Các bước thực hiện thuật toán là:

1 Khởi trị:

Ngày:=0;

Số cạnh của cây khung A là sc:=0;

2 Vòng lặp(while): Trong khi cây khung A chưa đủ N-1 cạnh thì:

{

Khởi trị đầu vòng lặp: Tăng số ngày thêm 1

Gán B cho A để cây khung A chứa các cạnh cây khung B là các đoạn đường đãsửa (cạnh của B tăng dần theo từng ngày)

Xây dựng tiếp A và B: Duyệt tất cả các cạnh h chưa sửa Nếu h thuộc loại 1 thìnạp vào cây khung A, nếu thuộc loại 2 thì nạp vào cây khung B (nghĩa là chosửa đoạn đường h vào ngày đang xét), nếu h là cạnh cuối cùng cần sửa củangày đang xét thì thoát khỏi vòng duyệt này về đầu vòng lặp while xét ngày

Trang 32

tiếp theo Nếu cạnh h thuộc loại 3 và chưa đủ số đoạn đường cần sửa trongngày thi cho h vào stack S chờ sẽ sửa sau.

Nếu cây khung A chưa đủ N-1 cạnh mà không thể xây dựng tiếp cây khung Bnữa thì thoát, báo vô nghiệm

Sửa nốt các cạnh trong stack S cho đủ số đoạn đường tối đa cần sửa trong ngày

là K đoạn

}

3 Sau khi hoàn thành cây khung A gồm N-1 đoạn đường đã sửa thì: Sửa nốtnhững đoạn đường còn lại ngoài A trong ngày tiếp theo với mức sửa tối đa là Kđoạn trong một ngày

Nhận xét: Trong phương pháp trên số đoạn đường được sửa trong cây khung Atăng dần theo từng ngày (kết quả ngày càng “mịn dần” đi tới đích)

Chương trình minh họa

const maxc=20000;

maxd=500;

fi='nangcap.inp';

fo='nangcap.out';

type mg=array[1 maxc] of integer;

var w:array[1 2,1 maxd] of integer;

Trang 33

{ma hoa lai cac dinh cua cay khung loai tt khi nap them doan duong (i,j_ vao cay khung nay: tat ca dinh h co ma nh i

se co ma moi la ma cua dinh j}

time:=0;{khoi tri so ngay sua duong}

t:=0; {khoi tri so canh cua cay khung A}

danhdau(1,i,j); {nap (i,j) vao B}

kq[h]:=time;{sua doan duong (i,j)}

inc(sua); {so doan duong sua trong 1 ngay}

inc(t);{tang so canh cua cay khung A}

{Neu du so luong doan duong sua trong mot ngay thi thoat vong for}

if sua=k then break;

Trang 34

f Thuật toán tối ưu cho một số bài toán đặc biệt

Trong một số bài, bằng suy luận toán học có thể tìm ra các công thức thể hiện quan

hệ ràng buộc giữa các đại lượng cho trong bài toán, từ đó có thể sắp các công việctheo một khóa nào đó đặc trưng cho công việc Viết chương trình thể hiện sự sắp xếp

đó (tăng hoặc giảm) để tìm lịch tối ưu Xét bài toán sau:

Bài 3 Lập lịch có thưởng phạt

Có N công việc đánh số từ 1 đến N cần được bố trí thực hiện trên một máy Biết:

- Pi là thời gian cần thiết làm công việc i

- Di là thời điểm cuối cùng phải hoàn thành công việc i

- Hi là hệ số thưởng phạt của công việc i

Mỗi công việc cần được thực hiện liên tục từ lúc bắt đầu tới khi kết thúc, khôngcho phép ngắt quãng Thời gian chuyển từ công việc này sang công việc khác làkhông đáng kể Giả sử ti là thời điểm hoàn thành công việc i, khi đó giá trị thưởng

Ngày đăng: 24/05/2015, 20:30

HÌNH ẢNH LIÊN QUAN

Hình 1.1: Mô tả dây chuyền sản xuất - Ứng dụng một số thuật toán vào giải các bài toán xếp lịch công việc
Hình 1.1 Mô tả dây chuyền sản xuất (Trang 26)

TỪ KHÓA LIÊN QUAN

TRÍCH ĐOẠN

TÀI LIỆU CÙNG NGƯỜI DÙNG

TÀI LIỆU LIÊN QUAN

🧩 Sản phẩm bạn có thể quan tâm

w