Chương 2 Giải thuật di truyền và các ứng dụng
3.2. Thuật toán
3.2.5. Thuật toán gán tài nguyên thực hiện công việc theo thứ tự
Đầu vào:
- Danh sách các tasksT
- Danh sách các mã task theo thứ tự thỏa mãn bảng phân rã công việcTc. Hay còn gọi là đồ thị công việc thể hiện thứ tự thực hiện công việc.
- Cấu hình thời gian làm việc của dự án
- Thời gian bắt đầu dự án
Đầu ra:
- Tổng thời gian hoàn thành task
- Đồ thì grantchart
Các bƣớc thuật toán:
- Kiểm tra danh sách Txem có thỏa mãn Tckhông. Nếu không thỏa mãn thuật toán dừng lại.
- Nếu thỏa mãn tiến hành bước tiếp theo. Khởi tạo danh sách:
+DoingTask: Danh sách các task đang làm, các công việc đã được chỉ định tài nguyên thực.
+NeedToDo: Danh sách các task cần phải làm, danh sách các công việc cần phải làm, chưa chỉ định tài nguyên thực hiện.
+ Completed: Danh sách các task đã hoàn thành.
+ WorkingResources: Danh sách các resource đang làm việc
+ StartProjectDate: thời gian bắt đầu dự án Foreach t in T
Lấy danh sách Predtcủa task t If Predt ≠ ∅ then
Kiểm tra cácphầntửPredt xem đã được hoàn thành chưa (có nằm trong
Completedkhông).
If (toàn bộ phần tử Predt đã hoàn thành) then thêm t vào danh sách NeedToDo
Else
If (NeedToDo⊆DoingTask)
Set StartDate= Min(thời gian kết thúc các công việc trong
Dịch chuyển thời gian tới StartDatesẽ được tập hợp các công
tdoing việc có thời gian tdoingEndDate<= StartDate. Các công việc này được chuyển trạng thái về kết thúc (IsCompleted) và được thêm vào danh sách Completedđồng thời giải phóng nguồn resources đang làm những công việc này. Loại bỏ các resources trên ra khỏi danh sách WorkingResources
End IF
Foreach task tNeedToDo∈NeedToDovà tNeedToDo∉DoingTask
Tính toán thời gian bắt đầu và kết thúc task tNeedToDo
Tính nguồn lực thực hiện công việc này. Nếu đủ nguồn lực thực hiện, thêm tNeedToDovào danh sách DoingTask. Thêm các tài nguyên thực hiện task này vào danh sách
WorkingResources.
Nếu không đủ nguồn lực thực hiện tNeedToDo
Set StartDate= Min(thời gian kết thúc các công việc trong
DoingTask).
Lấy danh sách các công việc trong DoingTaskđã hoàn thành và chuyển trạng thái thành IsCompleted,thêm những công việc này sang danh sách Completed, giải phóng các nguồn lực các công việc này chiếm giữ, gỡ bỏ các nguồn lực này trong danh sách WorkingResources.
End Foreach
Lùi phần tử tvề phần tử trước nó trong tập Tđể trong vòng lặp foreach tiếp theo thực hiện lại các thao tác tính toán ở trên áp dụng cho phần tử t.
End if Else
Thêm t vào NeedToDo
End if End Foreach
Loại bỏ những công việc đã hoàn thành trong danh sách NeedToDo
If Count(DoingTask)<Count(T) Then
Foreach task tNeedToDo∈NeedToDovà tNeedToDo∉DoingTask
Tính nguồn lực thực hiện công việc này. Nếu đủ nguồn lực thực hiện, thêm tNeedToDovào danh sách DoingTask. Thêm các tài nguyên thực hiện task này vào danh sách WorkingResources.
Nếu không đủ nguồn lực thực hiện tNeedToDo
Set StartDate= Min(thời gian kết thúc các công việc trong
DoingTask).
Lấy danh sách các công việc trong DoingTaskđã hoàn thành và chuyển trạng thái thành IsCompleted, thêm những công việc này sang danh sách Completed, giải phóng các nguồn lực các công việc này chiếm giữ, gỡ bỏ các nguồn lực này trong danh sách
WorkingResources. End Foreach
End If
Foreach tDoingTask chưa hoàn thành trongDoingTask
Hoàn thành các tDoingTaskvà thêm tDoingTaskvào danh sách Completed
End For
Set EndDate= Max(EndDatecủa các task trong DoingTask) Thời gian hoàn thành dự án được tính bằng
Total =EndDate– StartProjectDate
Danh sách tài phân bổ tài nguyên cho dự án chính là danh sách Completed