Thực thểDự án (Project)
Số thứ tự Tên trƣờng Mô tả
1 ID Mã công việc kiểu int
2 Name Tên công việc kiểu string
3 Description Mô tả dự án kiểu string
4 StartDate Ngày dự kiến bắt đầu dự án
kiểu DateTime
5 EndDate Ngày dự kiến kết thúc dự
án kiểu DateTime
6 Status Tình trạng dự án: Start,
Planning, Schdule, Finish.
7 Tasks Collection of Task
Thực thể Công việc (Task)
Số thứ tự Tên trƣờng Mô tả
2 Name Tên công việc kiểu string
3 PreTask Danh sách mã các công
việc trực tiếp phía trước. Dùng dấu phẩy “,” để phân cách giữa các mã công việc. Ví dụ có hai công việc có mã 16 và 18 là công việc trực tiếp phía trước công việc này thì biểu thị dữ liệu trường PreTask là giá trị:
16,18,
4 Description Mô tả công việc
5 ProjectID Mã dự án
6 TaskIndex Mã định danh các công việc
trong cùng dự án. Mã định danh này có giá trị từ 0 đến n-1, n là tổng số công việc trong cùng dự án.
7 X Tọa độ x của công việc.
Dùng để hiển thị công việc trên màn hình đồ họa công việc
8 Y Tọa độ y của công việc.
9 Shape Định nghĩ công việc này
hiển thị trên màn hình đồ họa là hình tròn hay hình vuông
10 W Chiều dài dùng để hiển thị
công việc trên màn hình đồ họa
11 H Chiều rộng
12 Hours Số giờ cần làm để hoàn
thành công việc.
13 Project Lưu trữ đối tượng project
Thực thể ResourceType (Loại tài nguyên)
Số thứ tự Tên trƣờng Mô tả
1 ID Mã loạitài nguyên
2 Name Tên loạitài nguyên
3 Description Mô tả mã loại công việc
4 Task Lưu trữ đối tượng task
5 ResourceType Lưu trữ đối tượng loại
resource
Thực thể Resource (Tài nguyên)
Số thứ tự Tên trƣờng Mô tả
1 ID Mã tài nguyên
2 Name Tên tài nguyên
3 Description Mô tả mã loại công việc
4 Type Mã loại tài nguyên
Thực thể TaskEstimate (Ước lượng tài nguyên thực hiện công việc)
Số thứ tự Tên trƣờng Mô tả
1 ID Mã số ước lượng tài nguyên
2 TaskID Mã công việc
3 ResourceTypeID Mã loại công việc
4 AmountResource Số lượng tài nguyên ứng với loại công việc để hoàn thành công việc nảy.
4.2. Tìm hiểu về nền tảng AForge.NET và ứng dụng vào chƣơng trình demo
AForge.Net framework này là mã nguồn mở viết trên nền tảng .net framework, được phát triển bởi Andrew Kirillov bằng ngôn ngữ lập trình C# trên nền tảng .NET
Framework, được khuyến nghị dùng cho các nhà phát triển và các nhà nghiên cứu trong các vấn đề thị giác máy tính và trí tuệ nhân tạo như: Xử lý ảnh, mạng neural nhân tạo, giải thuật di truyền, logic mờ, học máy, robotics.
Website của framework đặt tại địa chỉ: http://www.aforgenet.com/aforge/framework/
đây là nơi cập nhật các thông tin mới nhất về nền tảng này.
Mã nguồn framework được đặt trên google code tại địa chỉ:
https://code.google.com/p/aforge/source/checkout
AForge.Net framework được chia thành các gói thư viện:
- AForge.Imaging – Gói thư viện xử lý hình ảnh;
- AForge.Vision – Gói thư viện thị giác máy tính;
- AForge.Video – Gói xử lý video;
- AForge.Neuro –Gói tính toán mạng nhân tạo;
- AForge.Genetic –Gói thư viện lập trình tiến hóa;
- AForge.Fuzzy –Gói thư viện tính toán mờ;
- AForge.Robotics – Gói thư viện robotics kits;
- AForge.MachineLearning –Gói thư viện học máy.
Trong các gói thư viện trên, gói thư viện lập trình tiến hóa AForge.Genetic được học viên nghiên cứu kỹ lưỡng và áp dụng viết chương trình demo trong luận văn này. AForge.Genetic chứa các lớp với đích nhắm tới giải quyết nhiều nhiệm vụ khác nhau trong các lĩnh vực khác nhau từ Giải thuật di truyền (GA), lập trình tiến hóa (GP) đến lập trình biểu thức tiến hóa (GEP). Gói thư viện đã đưa ra các biểu diễn về các vấn đề cơ bản nhất của di truyền như:
- Các interface
o IChromosome Interface, interface này định nghĩa các giao tiếp cơ bản như
Clone: Tạo ra một nhiễm sắc thể mới có các gen giống hệt nhiễm sắc thể cho trước.
CreateNew: Tạo ra một nhiễm sắc thể hoàn toàn mới.
Crossover: Định nghĩa toán tử lai tạo giữa hai nhiễm sắc thể.
Evaluate: Định lượng nhiễm sắc thể với hàm fitness được truyền vào khi khởi tạo các đối tượng thực thi interface này.
Generate: Tạo ngẫu nhiên nhiễm sắc thể mới.
Mutate: Đột biến nhiếm sắc thể để ra một nhiễm sắc thể mới.
o IFitnessFunction Interface: Mọi lớp thể hiện hàm fitness đều phải triển khai giao tiếp này.Interface này dùng để tính toán giá trị fitness của nhiễm sắc thể. Mọi giá trị fitness đều phải là nguyên dương, những nhiễm sắc thể có giá trị fitness lớn hơn thì là tốt hơn những cá thể còn lại. Trong chương trình demo luận văn, học viên có tạo hàm fitness theo nguyên lý thiết kế của framework này, tham khảo chi tiết mã nguồn của
lớp fitness này tại Phụ lục 1(Trang 92): Mã nguồn lớp TasksFitnessFunction
o ISelectionMethod Interface: Interface này sẽ phải được implemented bởi các lớp dùng cho thuật toán chọn lọc cá thể ở bước chọn cá thể sang quần thể mới.
- Mã hóa nhiễm sắc thể:
o ChromosomeBaselà lớp cơ sở triển khai interface IChromosome. Các lớp
mã hóa nhiễm sắc thể khác sẽ được kế thừa từ lớp này.
o Mã hóa nhị phânBinaryChromosome hỗ trợ độ dài mảng từ 2 tới 64. Đây là kiểu mã hóa nhiễm sắc thể đơn giản nhất, được biểu diễn bởi tập hợp các bit có giá trị là 0 và 1.
o Mã hóa mảng dữ liệu kiểu số nguyên dương ShortArrayChromosome,
mỗi một gene trong nhiễm sắc thể của mã hóa này là một số nguyên dương, mảng dữ liệu này sẽ có độ dài từ 2 tới 65536.
o Mã hóa hoán vị tổ hợpPermutationChromosomeđược kế thừa từ mã hóa
ShortArrayChromosomevà được định nghĩa thêm hai tính chất mới. Một
là mọi gene trong nhiễm sắc thể là duy nhất, trong mã hóa này không có hai gene có cùng một giá trị. Hai là giá trị lớn nhất của gene bằng độ dài của nhiễm sắc thể trừ 1. Kiểu mã hóa này phù hợp với biểu diễn thứ tự thực hiện công việc. Để làm việc này ta thêm một tính chất nữa thể hiện quan hệ công việc trước, công việc sau của các công việc. Mỗi một nhiễm sắc thể có các giá trị gene phải phù hợp với thứ tự công việc trong biểu đồ phân rã công việc. Từ đây các quá trình đột biến, lai tạo, tạo mới các cá thể phải thỏa mãn thứ tự thực hiện các công việc này. Trong chương trình demo luận văn học viên có tạo thêm nhiễm sắc thể
TasksChromosome và viết lại các hàm Mutate, Crossover, Clone,
CreateNew, Generate, xem trong Phụ lục 2(trang 93) để xem mã nguồn
phần này
o Mã hóa mảng dữ liệu kiểu thập phânDoubleArrayChromosome). Với kiểu mã hóa này mỗi một gene trong nhiễm sắc thể là một số thập phân, mảng dữ liệu biểu diễn kiểu mã hóa này sẽ có độ dài từ 2 đến 65536.
o Mã hóa cây (class GPTreeChromosome), mã hóa biểu thức(class GEPChromosome).
- Các phương pháp chọn lọc: chọn lọc các phần tử tốt nhất (class EliteSelection), chọn lọc bánh xe(class RouletteWheelSelection), chọn lọc đánh giá(class RankSelection). Các lớp này được cài đặt interface ISelectionMethod.Nguyên lý
thực hiện của các lớp chọn lọc này đã được mô tả ở phần 3: giải thuật di truyền và các ứng dụng.
- Các hàm đánh giá thông dụng như: hàm tối ưu một chiều và hai chiều (class
OptimizationFunction1D,OptimizationFunction2D,SymbolicRegressionFitness, TimeSeriesPredictionFitness)…Các lớp này được cài đặt interface IFitnessFunction.
- Lớp quan trọng nhất trong thư viện AForge.Genetic là lớp Population, lớp này có nhiệm vụ: Khởi tạo quần thể với các cá thể ban đầu ngẫu nhiên, tạo cá thể mới với sự trợ giúp của các toán tử lai tạo, đột biến, tính toán giá trị hàm thích nghi của các cá thể mới, tiến hành chọn lọc cá thể sang thế hệ tiếp theo. Để làm việc này khi tạo đối tượng từ lớp Populationta cần phải chỉ định loại cá thể
(khởi tạo nhiễm sắc thể), chỉ định hàm thích nghi, phương pháp chọn lọc, các tham số giải thuật như: tỷ lệ đột biến (mặc định là 0.1), tỷ lệ lai tạo (mặc định 0.75), tỷ lệ sinh cá thể mới (mặc định là 0), và kích thước quần thể.Sau các bước khởi tạo trên đối tượng Populationsẽ được dùng để tìm ra một nghiệm
thích hợp.
Dưới đây là đoạn code trong trương trình demo luận văn, đoạn code này có nhiệm vụ khởi tạo đối tượng Population,chỉ định các tỷ lệ đột biến, lai tạo chéo, tỷ lệ cá thể mới được sinh ra khi chọn các cá thể sang quần thể mới,khởi tạo nhiễm sắc thể, khởi tạo các phương pháp chọn lọc và tiến hành đột biến, lai tạo, chọn lọc cá thể sang quần thể mới (Xem chi tiết tại Phụ lục 3trang 98).
Khi viết chương trình demo cho luận văn này, học viên có sử dụng phương thức mã hóa hoán vị tổ hợp PermutationChromosome. Bằng cách viết thêm một lớp
TasksChromosomekế thừa lớp PermutationChromosome. Mã hóa này phù hợp với
việc xắp xếp các nhiệm vụ theo số thư tự của chúng. Trong lớp
PermutationChromosome viết chồng các hàm đột biến, lai tạo, hàm copy, hàm create
new. Hàm đánh giá cũng được viết thêm bằng cách tạo lớp TasksFitnessFunction cài đặt interface: IFitnessFunction.Với lớp Populationhọc viên bổ sung thêm hai hàm là LocalSearch, hàm này có chức năng chọn phần tử bất kỳ và tiến hành đột biến phần tử
đột biến cho phép mà không tìm được phần tử mới tốt hơn. Hàm thứ hai là hàm
ReplaceChromosomeByRandomChrom, hàm này có chức năng thay thế một cá thể cho
trước vào một cá thể trong quần thể, cá thể bị thay thế được chọn một cách hoàn toàn ngẫu nhiên. Ứng dụng hàm này trong chương trình demo là giữ lại cá thể tốt nhất của thế hệ trước bằng cách thay thế cá thể này và loại bỏ một cá thể ngẫu nhiên trong quần thể.Xem Phụ lục 4trang 99để biết chi tiết.
4.3. Viết Add-in cho Microsoft Project
Nhằm tận dụng sức mạnh phần mềm Microsoft Project, kết hợp các tính năng nổi bật về giao diện của phần mềm Microsoft Project (viết tắt là MS).Sau khi tìm hiểu nghiên cứu về phần mềm Microsoft Office, trong đó có Microsoft Project cho phép lập trình viên viết thêm Add-in, các add-in này có thể thao tác dữ liệu phần mềm. Trong luận văn này ta đi cụ thể vào vấn đề viết Add-in trên Microsoft project. Để viết Add-in này cần phải có các phần mềm sau:
- Microsoft project
- Visual studio 2010
- Microsoft SQL server tối thiểu từ 2008 express trở lên
Trong luận văn này học viên xây dựng Add-ins trên Microsoft project có các chức năng sau:
- Export dữ liệu task:Sau khi nhập liệu các công việc và chỉ định rõ thứ tự ưu tiên, công việc nào trước, công việc nào làm sau, số giờ cần dùng để hoàn thành công việc trên phần mềm Microsoft project. Người dùng có thể export những dữ liệu này sang database của chương trình demo luận văn.
- Import dữ liệu task: Sau khi chỉ địnhdanh sách các công việc, thứ tự ưu tiên công việc trước và sau trên chương trình demo luận văn, số giờ hoàn thành công việc. Các thông tin được lưu lại database. Người dùng có thể import dữ liệu này vào Microsoft project.
- Xem biểu đồ ganttchart từ chương trình: Sau khi dùng thuật toán giải thuật di truyền trên phần mềm demo luận văn, ta có kết quả gán tài nguyên thực hiện công việc và đặt lịch các tài nguyên thực hiện các công việc này. Dữ liệu này được export ra định dạng xml. Từ phần mềm Microsoft project thông qua Add- in này người dùng sẽ xem được biểu đồ granttchart bằng cách import dữ liệu xml vào chương trình.
Dưới đây là màn hình các chức năng Add-ins được nhúng vào Microsoft Project
4.3.1. Tạo button trong menu Add-ins