0
Tải bản đầy đủ (.doc) (117 trang)

PHẦN IV LẬP TRÌNH VÀ HIỆN THỰC HỆ THỐNG Chương XI Thực thi thuật toán lập lịch tự động cho dự án

Một phần của tài liệu XÂY DỰNG CÁC MÔ PHỎNG CHO CÁC KỸ THUẬT KHÁC NGOÀI CRITICAL PATH - SO SÁNH TẬP DỮ LIỆU ĐẦU RA CỦA CÁC KỸ THUẬT TRÊN CÙNG TẬP DỮ LIỆU ĐẦU VÀO (Trang 90 -90 )

HIỆN THỰC HỆ THỐNG

Chương XI

Thực thi thuật toán lập lịch tự động cho dự án

Thuật toán được thực thi bằng việc dùng ngôn ngữ C#. Phần này mô tả việc thực thi thuật toán.

XI-1- Các lớp chính

Có bốn dạng khác nhau của các thực thể trong mô hình:

• Người quản lý chương trình (thuộc lớp ProgMgr).

• Người quản lý dự án (thuộc lớp ProjMgr).

• Người quản lý phòng ban ((thuộc lớp DeptMgr).

• Nhân công (thuộc lớp Worker).

Mỗi thực thể nằm trong một lớp riêng biệt. Bên cạnh đó, dự án được biểu diễn bởi hai lớp, lớp dự án và lớp nhiệm vụ. Ngoài ra có hai lớp sắp xếp để tìm ra nhiệm vụ có thời gian thả nổi nhỏ nhất, và nhân công có số nhiệm vụ đang thực hiện nhỏ nhất. Chi tiết về các lớp dự án và nhiệm vụ sẽ được trình bày ở dưới.

Hình 48: Sơ đồ các lớp trong mô phỏng kỹ thuật lập lịch tự động

XI-2- Biểu diễn các dự án

XI-2-1- Lớp dự án

Mỗi lần một dự án bắt đầu, một thể hiện mới của lớp dự án được tạo ra. Lớp dự án có ngày bắt đầu – là ngày đưa ra dự án (chú ý rằng ngày này không phải là ngày mà nhiệm vụ đầu tiên bắt đầu) và ngày kết thúc thực sự,được thiết lập khi nhiệm vụ cuối cùng của dự án kết thúc. Nó cũng chứa ngày kết thúc được ước lượng và thời gian thực hiện. Đây là thời gian cần để hoàn thành dự án sau bước phân tích mạng. Nó cũng có số id của dự án và dạng của dự án. Và cuối cùng là 2 danh sách nhiệm vụ, danh sách nhiệm vụ của dự án và một danh sách liên kết tạm thời của các nhiệm vụ sẵn sàng để cập nhật. Việc phân tích mạng của mỗi dự án được thực hiện trong lớp này.

Mỗi dự án có một danh sách các nhiệm vụ, biểu diễn các đối tượng nhiệm vụ trong một danh sách nhiệm vụ.

XI-2-2- Lớp nhiệm vụ

Lớp nhiệm vụ bản thân nó cũng chỉ là một đối tượng chứa tập dữ liệu về nhiệm vụ của dự án.

1. Các biến thời gian: Các ngày bắt đầu thực sự và trong ước lượng, các ngày kết thúc thực sự và trong ước lượng và thời gian thực hiện của nhiệm vụ trong thực tế và ước lượng.

2. Các mã nhận dạng: Số ID duy nhất của nhiệm vụ, số ID duy nhất của dự án và của phòng ban để tìm ra nhiệm vụ này.

3. Các thẻ phụ thuộc: Số nhiệm vụ và số ID của các nhiệm vụ tiền nhiệm trực tiếp của nhiệm vụ này.

4. Các biến tiến độ và mức ưu tiên. Các biến này chỉ ra tốc độ trung bình của tiến trình (trong khoảng 0-100%). Nó có là nhiệm vụ thuộc Critical Path hay không và trạng thái nhiệm vụ là – “chưa bắt đầu”, “chờ đợi”, “đã bắt đầu” hoặc “đã hoàn thành”.

XI-3- Thực thi thuật toán.

Thiết lập 4 danh sách sau:

• Danh sách các dự án đang kích hoạt (projectlist).

• Danh sách các dự án đã hoàn thành (completedProjects).

• Danh sách các nhiệm vụ sẵn sàng được cập nhật (readyToUpdate).

• Danh sách lưu trữ tất cả các phòng ban (deptlist).

Đây là các danh sách liên kết, vì thế kích cỡ của danh sách có thể được mở rộng hay giảm bớt tùy theo yêu cầu.

Hình 49: Sơ đồ thực thi thuật toán lập lịch

Ở thời điểm bắt đầu, tất cả các danh sách là rỗng trừ danh sách phòng ban chứa tất cả các đối tượng phòng ban trong mô phỏng

Bước 1: Người quản lý chương trình quyết định có bắt đầu một dự án hay không.

Lớp chính gọi phương thức check() trong ProgMgr. Phương thức này kiểm tra xem số dự án đạt đến một ngưỡng nào đó mới cho giải phóng dự án.Ở bước này trong phạm vi chương trình hiện tại, để đạt được một sự mềm dẻo nhất định, chương trình cho phép người dùng quyết định ngày dự án bắt đầu.

Bước 2: Giai đoạn quản lý dự án

Danh sách dự án được lặp lại và mỗi lần lặp thực hiện các việc sau. Đầu tiên, nó lấy danh sách readyToUpdate (danh sách này chứa tất cả các tiến độ nhiệm vụ được cập nhật từ ngày trước đó) và thay thế bản sao chép cũ từ danh sách nhiệm vụ với bản sao chép mới mà nhân công đã gửi cho. Việc này được làm một cách đơn giản bằng việc lấy số id nhiệm vụ của nhiệm vụ đầu tiên trong danh sách

readyToUpdate và đối sánh nó với các số ID nhiệm vụ trong danh sách nhiệm vụ. Nếu một đối sánh thành công, nó sẽ thực hiện việc thay thế. Sau đó xóa nhiệm vụ đó từ danh sách readyToUpdate và tiếp tục. Để kiểm tra sự hoàn thành của dự án, đối tượng ProjMgr kiểm tra xem tất cả các nhiệm vụ của dự án đã hoàn thành chưa. Nếu các nhiệm vụ này được thiết lập là hoàn thành, nó tuyên bố là dự án đã kết thúc, đẩy chúng vào danh sách dự án hoàn thành, sau đó xóa chúng khỏi vec tơ danh sách dự án.

Giai đoạn thứ hai của quản lý dự án là phân công các nhiệm vụ có thể bắt đầu vào ngày hôm đó. Nhưng trước tiên, phải quyết định nhiệm vụ nào có thể được bắt đầu. Điều này đươc làm trong phương thức updateStatus. Nó lấy nhiệm vụ và duyệt qua các nhiệm vụ tiền nhiệm trực tiếp của nó để xem chúng đã hoàn thành chưa. Nếu tất cả chúng đã hoàn thành thì nhiệm vụ đó được chuyển thành trạng thái đợi. Chú ý là trong mô phỏng Critical Chain, nhiệm vụ chỉ được đặt trạng thái là đợi khi ngày bắt đầu của nhiệm vụ là bằng hoặc muộn hơn ngày hiện tại, với

Critical Path, nó được đặt vào hàng đợi càng sớm càng tốt. Việc phân công được làm bởi phương thức ProjMgr. AllocateTasks(). Đầu tiên, ProjMgr sẽ xem danh sách nhiệm vụ của nó đối với bất kỳ các nhiệm vụ “đang đợi” nào. Sau đó lặp qua danh sách phòng ban để tìm phòng ban có ID giống biến deptid của nhiệm vụ. Khi tìm thấy, thêm một bản sao chép của nhiệm vụ tới danh sách nhiệm vụ của phòng ban đó. Quá trình này được lặp đi lặp lại với tất cả các dự án trong danh sách. Sau khi tất cả các nhiệm vụ”đang đợi”được thêm vào danh sách nhiệm vụ của mỗi phòng ban sẽ chuyển tới bước quản lý phòng ban.

Bước 3: Giai đoạn quản lý phòng ban

Công việc của người quản lý phòng ban là định vị các nhiệm vụ một cách thích hợp cho mỗi nhân công. Làm việc này bằng cách sắp xếp danh sách nhiệm vụ và thêm các nhiệm vụ vào danh sách nhiệm vụ của mỗi nhân công. Trong Critical

Chain, để sắp xếp danh sách, DeptMgr chia thành 2 danh sách – một cho các nhiệm vụ Critical Chain, còn lại cho các nhiệm vụ không Critical Chain. Hai véc tơ này được sắp xếp dựa theo giá trị sớm nhất của thời gian bắt đầu muộn nhất. Sau khi sắp xếp danh sách, the DeptMgr phân công nhiệm vụ một cách tuần tự theo danh sách. Đầu tiên Manager đếm xem bao nhiêu nhân công nhàn rỗi và làm các nhiệm vụ không phải nhiệm vụ Critical Chain. Trước tiên anh ta phân công cho tất cả các nhân công nhàn rỗi, sau đó nếu có nhiều hơn các nhiệm vụ Critical Chain được phân công trong khi còn có các nhân công đang làm việc trên các nhiệm vụ không phải Critical, anh ta sẽ phân công cho tới khi một trong hai số lượng này (số các nhân công nhàn rỗi hay số các nhiệm vụ Critical Chain) bằng 0. Việc này đảm bảo rằng các hành động Critical Chain luôn được ưu tiên hơn các hành động không Critical Chain. Trong Critical Path, danh sách nhiệm vụ được sắp xếp dựa theo các ưu tiên – trắng, đỏ, vàng, xanh lá cây. Các nhiệm vụ được sắp xếp bằng việc sử dụng quy tắc tối thiểu hóa “thời gian thả nổi”. Thuật toán phân công có hơi khác. Việc phân công nhờ vào quy tắc tối thiểu nhiệm vụ - phân công tới nhân công có số nhiệm vụ nhỏ nhất cho tới khi tất cả chúng được phân công. Nó khác Critical Chain ở chỗ tất cả các nhiệm vụ được xóa nếu không được phân công vào ngày hôm đó. Để thực thi ta dùng một lớp để sắp xếp danh sách nhân công theo số nhiệm vụ của mỗi nhân công. Sau đó đối tượng DeptMgr thêm nhiệm vụ trên đỉnh danh sách nhiệm vụ của nó tới danh sách nhiệm vụ của nhân công và xóa nhiệm vụ đầu tiên từ danh sách. Công việc này được lặp lại tới khi anh ta không có thêm công việc nào để phân công.

Bước 4: Giai đoạn của nhân công

Danh sách nhân công của phòng ban đó được lặp. Mỗi nhân công sắp xếp danh sách nhiệm vụ của họ, thực hiện nhiệm vụ và báo cáo tới người quản lý. Một lần nữa, việc sắp xếp là khác nhau giữa hai mô phỏng. Trong Critical Chain, nếu chỉ có một nhiệm vụ trong danh sách nhiệm vụ thì nó được xem là được sắp xếp ngay lập tức. Nếu có hai nhiệm vụ trong danh sách nhiệm vụ của nó, nó xem xét nhiệm vụ đầu tiên có phải là nhiệm vụ Critical Chain không, nếu đúng như vậy, thì nó sẽ dừng lại, ngược lại, nó sẽ chuyển vị trí của hai nhiệm vụ cho nhau. Trong Critical Path, nhân công sắp xếp các nhiệm vụ giống như quá trình sắp xếp của người quản lý phòng ban. Đầu tiên sắp xếp các nhiệm vụ theo các mức trắng, đỏ, vàng, xanh sau đó sắp xếp theo giá trị thời gian thả nổi của nhiệm vụ. Nhân công sau đó sẽ chọn ra công việc có mức ưu tiên cao nhất để làm ngày hôm đó và mô phỏng việc nhiệm vụ được làm bằng phương thức doWork() nhằm thiết lập tiến độ cho nhiệm vụ để gửi đến người quản lý dự án. Nếu danh sách nhiệm vụ của anh ta là rỗng, anh ta sẽ ngồi không ngày hôm đó. Cũng như vậy, nếu nhiệm vụ đó được bắt đầu lần đầu tiên, nó thiết lập ngày hôm nay là ngày bắt đầu của nhiệm vụ. Nếu nhiệm vụ được kết thúc vào ngày hôm đó (quá 100%) thì trạng thái của nhiệm vụ được thiết lập là hoàn thành. Đối với mỗi đối tượng nhân công để cập nhật nhiệm vụ một cách riêng lẻ sẽ tìm kiếm trong danh sách dự án và mỗi lần dự án đó được tìm thấy, thì tìm trong danh sách nhiệm vụ của dự án để tìm ra đúng nhiệm vụ và cập.

Nếu danh sách dự án là lớn, thì khối lượng tính toán là tương đối lớn. Để giải quyết vấn đề này, ta làm như sau. Sau khi một nhân công hoàn thành một nhiệm vụ, bản sao chép của nhiệm vụ đó được thêm vào để cập nhật danh sách của lớp chính. Mỗi lần hoàn thành giai đoạn của nhân công, danh sách readyToUpdate sẽ có tất cả các nhiệm vụ được cập nhật. Lớp chính sau đó sắp xếp danh sách

readyToUpdate bởi số ID của dự án, để tất cả các nhiệm vụ trong cùng một dự án được đặt cùng nhau. Bắt đầu từ đầu danh sách nhiệm vụ lấy giá trị ID của dự án trong nhiệm vụ đầu tiên và tìm trong danh sách dự án,nếu tìm thấy thì thêm nhiệm vụ đó vào danh sách readyToUpdate của dự án đó. Sau bước này vào ngày hôm sau người quản lý dự án sẽ lấy danh sách readyToUpdate và cập nhật các nhiệm vụ (như đã trình bày trong giai đoạn quản lý dự án).

Bước 5: Bước 3 và 4 được lặp lại

Các giai đoạn quản lý phòng ban và nhân công được lặp lại tới khi tất cả các phòng ban và nhân công xác định được công việc phải làm trong ngày.

Bước 6: Tăng bộ đếm ngày

Bộ đếm ngày được tăng lên 1, sau đó việc mô phỏng tiếp tục lặp lại từ bước 1. Điều này được làm nhờ một vòng lặp for.

Chương XII Giới thiệu phần mềm

XII-1- Chọn công cụ lập trình

Việc chọn công cụ lập trình cho hệ thống đòi hỏi phải dựa trên các tài liệu và kết quả phân tích hệ thống (ở giai đoạn 2), dựa trên những đặc trưng của cơ sở dữ liệu mà hệ thống sẽ hiện thực, cụ thể là cấu trúc của cơ sở dữ liệu này.

Có các kiểu cấu trúc sau đây cho một hệ cơ sở dữ liệu: + Quan hệ (như Oracle, MS SQLServer, Access,..) + Mạng (như IDMS)

+ Phân cấp (như IMS, Focus,..)

* Công cụ cài đặt được chọn: Hệ quản trị cơ sở dữ liệu Microsoft SQL Server2000, và ngôn ngữ lập trình là C# . Net.

* Giới thiệu tóm tắt về Microsoft SQL Server 2000 và VB. NET

+ Microsoft SQL Server 2000: SQL Server 2000 là một hệ thống quản lý cơ sở dữ liệu (Relational Database Management System (RDBMS)) sử dụng

Transact-SQL để trao đổi dữ liệu giữa Client computer và SQL Server computer.

Một RDBMS bao gồm databases, database engine và các ứng dụng dùng để quản lý dữ liệu và các bộ phận khác nhau trong RDBMS.

SQL Server 2000 được tối ưu để có thể chạy trên môi trường cơ sở dữ liệu rất lớn (Very Large Database Environment) lên đến Tera-Byte và có thể phục vụ cùng lúc cho hàng ngàn user. SQL Server 2000 có thể kết hợp "ăn ý" với các

server khác như Microsoft Internet Information Server (IIS), E-Commerce Server, Proxy Server....

SQL Server 2000 được cấu tạo bởi nhiều thành phần như Relational Database Engine, Analysis Service và English Query.... Các thành phần này khi phối hợp với nhau tạo thành một giải pháp hoàn chỉnh giúp cho việc lưu trữ và phân tích dữ liệu một cách dễ dàng.

+ C#. NET: C# . NET là một phương pháp để phát triển phần mềm mới hoàn toàn. Nó cho phép lập trình viên phát triển về phần cứng, kỹ thuật truyền thông, tối ưu hóa, và giao tiếp với Internet, là những vấn đề nóng bỏng của nền công nghiệp phần mềm. Đây là một ngôn ngữ hướng đối tượng khá mạnh, giúp phát triển các chương trình chạy trên máy đơn lẻ hay trên mô hình mạng trở nên dễ dàng hơn bao giờ hết.

XII-2- Giới thiệu phần mềm

1. Giới thiệu tổng quan:

Chương trình “Tự động hóa lập kế hoạch dự án” (gọi tắt là AutoPlanning) nhằm hỗ trợ người quản lý dự án lập kế hoạch. Chương trình có giao diện thân thiện bằng ngôn ngữ Tiếng Việt hỗ trợ font Unicode, cho phép người dùng nhập dữ liệu trực tiếp trên giao diện màn hình. Sau khi nhập liệu, các thông tin sẽ được lưu trữ trên đĩa dưới dạng tập tin *. Mdf (hệ quản trị cơ sở dữ liệu quan hệ Microsoft SQLServer2000). Các thông tin này có thể được truy cập, dò tìm, trích lọc, hiệu chỉnh, tính toán một cách dễ dàng, nhanh chóng và chính xác; và cuối cùng có thể dùng thuật toán xử lý để đưa ra kế hoạch.

2. Yêu cầu sử dụng chương trình AutoPlanning:

- Yêu cầu đối với người dùng: Có kiến thức về quản lý dự án, kiến thức cơ bản về sử dụng máy tính .

- Về phần cứng: Máy chủ cần có cấu hình tốt đáp ứng được tốc độ xử lý của việc thực thi thuật toán trên một môi trường đa dự án rộng lớn .

- Về phần mềm: Cài đặt Microsoft SQLServer 2000, hệ điều hành 98 trở lên và cài đặt bộ . Net Framework.

XII-3- Mô tả một phiên làm việc

Phần này được xem như phần mô tả hoạt động của chương trình, qua đó sẽ hướng dẫn người dùng các thao tác sử dụng chương trình, và diễn giải các khả năng xử lý của chương trình.

1. Khởi động chương trình AutoPlanning

Nhấp đúp file chạy của chương trình “AutoPlanning. Exe” 2. Cấu trúc Menu giao diện của hệ thống:

Hệ thống Menu giao diện 3 cấp của chương trình được thực hiện đúng như sơ đồ dự kiến (trang...). Menu chính bao gồm 4 menu con: Dự án, Công cụ, Báo cáo, Cập nhật.

1/ Menu Dự án: Bao gồm các thao tác tạo mới, mở, sao lưu, đóng dự án. 2/ Menu Công cụ: Thực hiện các chức năng “Cập nhật lịch biểu”, “Tự động lập lịch”, “Tính Critical Path”.

3/ Menu Báo cáo: thực hiện chức năng báo cáo khi có yêu cầu của người quản lý dự án, bao gồm các báo cáo: tiến độ dự án, lịch làm việc.

4/ Cập nhật: thực hiện chức năng cập nhật các tài nguyên và loại lịch biểu.

Sau đây là quy trình làm việc của phần nhân hệ thống.

Chọn vào menu “Dự án”, có thể chọn mục “Tạo mới” hay “Mở”

. Nếu

chọn mục tạo mới, hệ thống sẽ tự động

tạo ra một dự án mới với tên ngầm định

là “Dự án n” (trong đó n là số hiệu dự án

Một phần của tài liệu XÂY DỰNG CÁC MÔ PHỎNG CHO CÁC KỸ THUẬT KHÁC NGOÀI CRITICAL PATH - SO SÁNH TẬP DỮ LIỆU ĐẦU RA CỦA CÁC KỸ THUẬT TRÊN CÙNG TẬP DỮ LIỆU ĐẦU VÀO (Trang 90 -90 )

×