Thích nghi thuật toán lan truyền

Một phần của tài liệu (LUẬN văn THẠC sĩ) phương pháp lan truyền độ tương tự trong phân cụm dữ liệu và ứng dụng (Trang 43)

Để tìm giá trị p tối ưu, ta đề xuất một chiến lược thích ứng như sau: = + (12)

Ở đây t là thời gian chạy của thuật toán AP,  > 1 là một hàm của số lượng cụm trong kết quả lần chạy thứ t, và  là độ dài bước tìm kiếm. và

là những giá trị âm.  là hệ số điều chỉnh thô,  là hệ số tinh chỉnh.

Khi giá trị của là lớn hơn nhiều so với giá trị mục tiêu K, nên sử dụng một giá trị  tương ứng lớn hơn, để p có thể giảm nhanh.

Ngược lại, khi gần mục tiêu K, cần xác định giá trị  nhỏ hơn. Đặt hệ số điều chỉnh thô  = ( - K)+0,5.

Trong trường hợp này, thuật toán có thể điều chỉnh động giá trị của , theo số lượng cụm hiện có

Chiến lược điều chỉnh thô làm cho thuật toán tìm được đúng số lượng các cụm, các bước tinh chỉnh nhằm thực hiện phân cụm tốt hơn.

Trong giai đoạn lặp của K,  được đặt = 0. Khi bước vào giai đoạn = K,  được gán = 1. Giá trị của  là quan trọng đối với việc quét khu vực địa phương để làm cực đại hàm năng lượng.

 được đặt là  = 0.01 , ở đây là giá trị ban đầu của p. Giai đoạn quét có thể được chấm dứt khi hàm năng lượng giảm hoặc sau một số cố định lần lặp tinh chỉnh.

Mặt khác, nhân tố giảm xóc λ là một tham số khác điều khiển hội tụ và tốc độ thuật toán. Mục đích của chúng tôi là, trong trường hợp không có dao động, thuật toán có thể có được một tốc độ hội tụ nhanh hơn.

Một cơ chế thích nghi của λ được áp dụng để cân bằng mâu thuẫn giữa dao động và hội tụ. Mặc dù duy trì một λ lớn hơn, gần bằng 1, có thể dễ dàng tránh dao động số, nhưng việc giảm tương ứng của tốc độ cập nhật “availability” và “responsibility” là không tránh khỏi. Với λ nhỏ hơn cần nhiều lần lặp hơn để có được một kết quả tương ứng. Vì vậy, thay đổi λ cùng với việc lặp của thuật toán là một lựa chọn tốt hơn. Theo quan niệm này, chúng tôi đã thiết kế một cơ chế thích ứng λ như sau:

= - - ) + (13)

Ở đây K là số lần lặp còn iteration là số max lần lặp. and là max, min. Hệ số a để chỉnh tốc độ giảm của . Khi giá trị a > 1,  giảm nhanh.

Thuật toán 2: Mã giả của thuật toán được đề xuất.

Tính ma trận độ tương tự và độ ưu tiên làm đầu vào của thuật toán AP.

For each thuộc tính số 𝐴𝑖 trong bộ dữ liệu 𝐴 do

Tính độ quan trọng của thuộc tính 𝐴𝑖 sử dụng phương pháp tại mục 3.1;

end for

For each thuộc tính số 𝐴𝑖 trong bộ dữ liệu 𝐴 do

Tính khoảng cách của mọi cặp giá trị trong 𝐴𝑗 dựa trên (5) - (8);

end for

Sinh ma trận độ tương tự (đầu vào) của tập dữ liệu hỗn hợp sử dụng (11); Đặt độ ưu tiên 𝑝𝑚 bằng trung vị của các độ tương tự;

Nhập số lượng cụm 𝐾;

While các điều kiện chấm dứt chưa thỏa do for each lần chạy thuật toán AP do

if 𝐾𝑡 ≠ 𝐾then

Chiến lược thích ứng giá trị 𝑝 là 𝑝𝑡+1= 𝛼𝑝𝑡, với 𝛼 = √(𝐾𝑡− 𝐾) + 0.5;

else if 𝐾𝑡 = 𝐾then

Chiến lược thích ứng giá trị 𝑝 là 𝑝𝑡+1= 𝑝𝑡+𝛽, Với 𝛽 = 0.01𝑝𝑚;

end if

Chiến lược thích ứng 𝜆 theo (13);

end for end while

CHƢƠNG 3

XÂY DỰNG ỨNG DỤNG PHÂN CỤM DỮ LIỆU ĐỊA LÝ 3.1 Bài toán thực tế và cách tiếp cận phân cụm dữ liệu

3.1.1 Bài toán khai thác các dữ liệu quan trắc khí tƣợng

Ở các địa phương nước ta đều có các trạm quan trắc khí tượng, thu thập dữ liệu định kỳ về môi trường khí hậu. Những dữ liệu này trước hết phục vụ cho dự báo thời tiết; theo dõi biến động của môi trường khí hậu; chất lượng không khí,v… Về lâu dài, đây là kho dữ liệu lớn cần nghiên cứu đưa vào khai thác, sử dụng để phát hiện những thông tin tiềm ẩn về môi trường thiên nhiên, điều kiện khí hậu có thể hữu ích cho các nhà quản lý, quy hoạch phát triển kinh tế, xã hội.

Các dữ liệu do các trạm quan trắc cung cấp phản ánh những thuộc tính khí tượng của tiểu vùng xung quanh như nhiệt độ, độ ẩm, lượng mưa, sức gió, mức khói bụi hay ô nhiễm không khí nói chung v.v… Một cách tiếp cận nghiên cứu khai thác kho dữ liệu này là phân cụm dữ liệu. Phân cụm dữ liệu cho phép phát hiện những đặc trưng, quy luật tiềm ẩn, không yêu cầu đặt ra trước các giả định.

Các bước giải quyết bài toán thực tế gồm:

- Xây dựng các tầng bản đồ chuyên đề chứa vị trí địa lý của các trạm quan trắc khí tượng trên nền bản đồ thực địa, bản đồ hành chính của địa bàn nghiên cứu.

- Thông qua bảng thuộc tính tầng bản đồ, gắn các thuộc tính phi không gian (các cột) là các dữ liệu chuyên đề nhiệt độ, độ ẩm, lượng mưa, sức gió, mức khói bụi, ô nhiễm không khí v.v…

- Thực hiện phân cụm các dữ liệu chuyên đề, riêng biệt hay gộp nhóm một vài thuộc tính có liên quan với nhau. Hiển thị kết quả phân cụm một cách trực quan trên bản đồ. Có thể phân cụm bằng vài phương pháp khác nhau để có sự so sánh, phát hiện những quy luật chung nhất, sau đó rút ra các kết luận thích hợp.

3.1.2 Lựa chọn giải pháp kỹ thuật công nghệ

Hệ thông tin địa lý (GIS) là công cụ thích hợp nhất để thu thập, lưu trữ, chỉnh sửa, truy cập, phân tích và cập nhật các thông tin địa lý cho một mục đích chuyên biệt. Với bài toán đặt ra ở đây, GIS sẽ là công cụ nền tảng để lưu trữ, truy cập, phân tích các dữ liệu chuyên đề bằng phương pháp phân cụm dữ liệu và hiển thị trực quan các kết quả nhận được lên bản đồ.

Các thuật toán phân cụm dữ liệu nhận đầu vào là tệp dữ liệu dạng văn bản thuần (text) và xuất ra kết quả cũng dưới dạng văn bản thuần, cho biết có bao nhiêu cụm và gán nhãn cụm cho từng điểm dữ liệu.

Cần có giải pháp tích hợp hai công cụ tách biệt này với nhau để tạo thuận lợi cho người dùng, không đòi hỏi hỏ phải xử lý thủ công việc trích xuất dữ liệu đầu vào cho thuật toán phân cụm cũng như gán nhãn cụm cho các trạm quan trắc khí tượng và hiển thị trực quan.

Thật may mắn là các phần mềm GIS đều cho phép mở rộng thêm chức năng bằng cách viết các trình cắm thêm plug-in. Các trình cắm thêm plug-in có thể truy cập bảng dữ liệu thuộc tính của tầng bản đồ để đọc hay viết dữ liệu vào các ô trong bảng.

Luận văn sẽ áp dụng giải pháp viết một trình cắm thêm plug-in vào GIS lựa chọn, triên khai chức năng phân cụm dữ liệu địa lý, chạy bên trong ứng dụng nền GIS.

Dưới đây sẽ trình bày về lựa chọn phần mềm GIS mã nguồn mở MapWindow và kỹ thuật viết trình cắm thêm vào MapWindow sử dụng môi trường phát triển Visual Studio quen thuộc với nhiều người.

3.2 Các phần mềm GIS

rất nhiều phần mềm GIS được xây dựng cả trên nền desktop và nền web. Một số phần mềm GIS gồm có:

 Phần mềm viết trên nền Desktop:

- GRASS GIS – Do U.S. Army Corps of Engineers phát triển. gvSIG – Viết bằng ngôn ngữ JAVA, có thể chạy trên HĐH Linux, Mac,Window

- ILWIS (Integrated Land and Water Information System) – Tích hợp hình ảnh, vector và dữ liệu chuyên đề.

- JUMP GIS / OpenJUMP ((Open) Java Unified Mapping Platform)

- MapWindow GIS – Ứng dụng desktop mã nguồn mở

- QGIS (previously known as Quantum GIS) – Chạy trên hệ điều hành Linux, Unix, Mac OS X và Windows.

- SAGA GIS (System for Automated Geoscientific Analysis)

- uDig – API.

 Ngoài ra có một số tool GIS mã nguồn mở khác:

- Capaware – A C++ 3D GIS Framework: Có cấu trúc đa plugin để phân tích một cách trực quan biểu đồ địa lý.

- FalconView – Hệ thống bản đồ do viện nghiên cứu kỹ thuật Georgia tạo ra.

- Kalypso – Uses Java and GML3.

- TerraView – Handles.

- Whitebox GAT – Cross-platform.  Phần mềm GIS viết trên nền web:

- GeoServer – Written in Java and relies on GeoTools. Allows users to share and edit geospatial data.

- MapGuide Open Source – Runs on Linux or Windows, supports Apache and IIS web servers, and has APIs (PHP, .NET, Java, and JavaScript) for application development.

- Mapnik – C++/Python library for rendering – used by OpenStreetMap.

- MapServer – Written in C. Developed by the University of Minnesota.

- Spatial database management systems[edit]

- Post GIS – Spatial extensions for the open source PostgreSQL database, allowing geospatial queries.

- SpatiaLite – Spatial extensions for the open source SQLite database, allowing geospatial queries

- TerraLib – Provides advanced functions for GIS analysis.

Để có một phần mềm có bản quyền đối với một cá nhân là rất khó khăn do chi phí bản quyền lớn. Đáp ứng nhu cầu sử dụng, nhiều phần mềm mã nguồn mở đã ra đời. Trong luận văn này, tôi sẽ sử dụng phần mềm mã nguồn mở MapWindow GIS, kết hợp với phần mềm Visual studio để xây dựng ứng dụng cho bài toán. Ngoài ra, ứng dụng sử dụng hệ quản trị cơ sở dữ liệu SQL server 2008 để lưu trữ và quản trị dữ liệu.

3.3 Tìm hiểu về phần mềm mã nguồn mở MapWindow

MapWindow GIS là một ứng dụng GIS mã nguồn mở tập hợp các thành phần lập trình lập bản đồ, do nhóm phát triển MapWindow OSS Team xây

dạng shapefile, thao tác với bảng dữ liệu thuộc tính, truy vấn lọc thông tin đối tượng…Ngoài ra, MapWindow còn có một số các chức năng khác như: xử lý hình học (đo khoảng cách, tính diện tích …), phân tích không gian (union, intersect, clipping, …), hỗ trợ tích hợp công cụ đo GPS…

Hình 3.1: Phần mềm mã nguồn mở mapwindow

Các đặc điểm của MapWindow:

 Hỗ trợ xử lý, phân tích và hiển thị dữ liệu GIS: shapefiles (.shp), ASCII grid files (.asc)

 Cho phép tạo các plug-ins mở rộng  Là công cụ vẽ bản đồ

 Là một hệ thống mô đun hóa (module)

 MapWinGIS ActiveX cung cấp các giao diện lập trình (API - Application Programming Interface) cho Shapefile và Grid data

 Ngôn ngữ: Visual C++, C#, Visual Basic, Visual Basic .NET and Delphi.

3.4 Thiết kế một plug-in trên phần mềm mã nguồn mở Mapwindown 3.4.1 Thêm một plug-ins từ Visual Studio vào MapWindow 3.4.1 Thêm một plug-ins từ Visual Studio vào MapWindow

 Bước 1: Tạo một project trên VS, chọn ngôn ngữ C#.NET, loại Class Library, framework .Net 3.5

 Bước 2: add reference cho project bằng cách:

o Bấm Chuột phải vào tên project, chọn properties

o Trên form properties, chọn tab reference, click button Add. Tại form Reference Manager, chọn Menu Browse, click button Browse đến thư mục C:\Program Files MapWindow, check chọn 2 thư mục: MapWinGIS.ocx và MapWininterfaces.dll Click OK để add

reference, sau đó set thuộc tính Copy Local trên mỗi file reference là False.

 Bước 3: Quay trở lại form Reference Manager, chọn Menu

Assemblies\Framework, check chọn System.Drawing, bấm OK để add vào Reference.

 Bước 4: Quay trở lại màn hình Code, thêm dòng

using MapWindow.Interfaces;Trên đầu trang của các mã dưới khác using ... bên cạnh dòng “Public Class Class1” thêm “: Iplugin” rồi nhấn

Implement Interface để VS tự gen ra các đoạn code.

 Bước 5: Tìm đến thuộc tính Author, Description, Name và Version tại màn hình code, bỏ dòng get{throw new NotImplementedException();}

thuộc tính SerialNumber thay bằng get{ return null;} sau đó build project.

 Bước 6: Copy file DLL vừa tạo vào thư mục C:\Program Files

\MapWindow. (Ấn chuột phải vào tên project lại Solution Explorer, chọn Open Folder in File Explorer để tìm đến thư mục chứa DLL).

 Bước 7: Kiểm tra việc add plug-ins trong MapWindow:

Mở MapWindow, vào menu Plug-ins sẽ thấy plug-ins vừa tạo và add vào. Bấm chọn plug-ins để sử dụng plug-in trong project MapWindow

Hình 3.2: Kiếm tra plug-ins vừa add trong MapWindow

3.4.2 Xây dựng ứng dụng với Active X map control trong Visual Studio

Active X map control với MapWinGIS.ocx được sử dụng để cung cấp chức năng GIS và lập bản đồ cho các ứng dụng Windows Forms. MapWinGIS.ocx là một nguồn mở miễn phí, lập trình dựa trên hệ thống thông tin địa lý điều khiển ActiveX và lập trình giao diện ứng dụng (API) có thể được

thêm vào Windows trong Visual Basic, C #, Delphi, hoặc các ngôn ngữ khác có hỗ trợ ActiveX, cung cấp ứng dụng đó với một bản đồ nền.

Cài đặt Active X map control bản 4.9.3.5 Link download tại đây: http://mapwingis.codeplex.com/releases/view/541892

Để đưa Active X map control vào một form trong Visual studio ta làm như sau:  Bước 1: Tạo một project trên VB, ngôn ngữ C#.NET, loại ứng dụng là

Windows Forms Application, framework .NET 3.5.

Sau khi tạo thành công mộtWindow form Application, thực hiện đặt tên, ID cho form bằng cách:

Ấn chuột phải vào form, chọn Properties.

Thiết lập các thuộc tính (Name) và Text cho form. Thuộc tính (Name) sẽ được coi như ID của form để gọi đến form. Thuộc tính Text để hiển thị tên của form.

 Bước 2: Đưa Active X vào Visual Studio bằng cách:

Tại thanh công cụ chọn TOOLChoose Toolbox ItemCOM components đánh dấu tích vào Map ControlOK

Sau khi add xong, kiểm tra trong mục Tool box của form sẽ thấy control Map Control:

 Bước 3: Đưa Map Control vào form bằng cách: kéo chức năng Map Control từ Toolbox thả vào form, trên form sẽ hiện ra khung có toạ độ như hình:

Hình 3.3: Kéo thả Map Control vào form

Đặt (Name) cho Map Control vừa kéo vào là AxMap1

 Bước 4: tạo Legend : Mục đích tạo thanh điều khiển các lớp layer (cho phép layer nào hiển thị, nằm trên)

Các bước thực hiện:

-Bước 4.1: Tại ToolChoose Toolbox Item, tại .Net Framework

ComponentBrower đến C:\Program Files\MapWindow  chọn

MapWinInterfaces.dll, tick chọn Legend

Sau khi tick chọn xong, control Legned đã được add vào Toolbox:

-Bước 4.2: Kéo Legend từ Toolbox thả vào phía bên trái form. Thiết lập thuộc tính (Name) là Legend

Hình 3.4: Kéo Legend vào form

Tạo liên kết giữa Legend và Mapcontrol:

Chuyển sang màn hình code của form, viết sự kiện load cho form như sau:

 Bước 5: Thêm chức năng Tạo layer và Xoá layer -Bước 5.1: Tạo Layer

Thêm 1 button vào form, đặt thuộc tính Text là Tạo layer.

Viết sự kiện Click cho button Tạo layer như sau:

private void TestMap_Load(System.Object sender, System.EventArgs e) {

Legend.Map = AxMap.GetOcx(); }

-Bước 5.2: Xoá Layer

Thêm 1 button vào form, đặt thuộc tính Text là Xoá layer, Name là BtDel Viết sự kiện Click cho button Xoá layer như sau:

 Bước 6: Chọn màu cho vùng hiển thị

Thêm 1 button vào form, đặt thuộc tính Text là Set Color, Name là Bttcolour Từ toolbox, kéo control ColorDialog vào cạnh button Set Color

Viết sự kiện click cho button Set Color như sau: private void BtAdd_Click(object sender, EventArgs e) {

int handle = 0;

MapWinGIS.Shapefile sf = new MapWinGIS.Shapefile(); OpenFileDialog open1 = new OpenFileDialog();

open1.Filter = sf.CdlgFilter;

if (open1.ShowDialog(this) == System.Windows.Forms.DialogResult.OK) { sf.Open(open1.FileName);

handle = Legend.Layers.Add(sf, true); Legend.Map.LayerName(handle) =

System.IO.Path.GetFileNameWithoutExtension(sf.Filename); }

}

private void BtDel_Click(object sender, EventArgs e) {

AxMap.RemoveAllLayers(); Legend.Layers.Clear(); }

 Bước 7: Tạo bảng hiển thị dữ liệu của layer add vào form -Bước 7.1: Tạo bảng:

Tạo một window form mới trong project bằng cách:

Bấm chuột phải vào tên project, chọn Add, chọnWindow form…; Đặt tên file là Table.cs

Tạo thêm Data grid vào form: Từ tool box, kéo control DatagridView vào form, đặt Name cho control này là DataGridView1, set thuộc tính dock của DataGridView1 là Fill.

private void BttColour_Click(object sender, EventArgs e) { int hnd = 0; System.UInt32 col = 0; hnd = Legend.SelectedLayer; if (ColorDialog1.ShowDialog == System.Windows.Forms.DialogResult.OK) { Col = System.Convert.ToUInt32(Information.RGB(ColorDialog1.Color.R, ColorDialog1.Color.G, ColorDialog1.Color.B)); AxMap.set_ShapeLayerFillColor(hnd, col); Legend.Refresh(); AxMap.Refresh(); } }

Hình 3.5: Kéo thêm DataGridView vào form Table

Chuyển sang màn hình code của form Table, thêm dòng khai báo Shape file vào sau dòng Public class Table:

Tạo 1 sub mới với tham số là myShapeFile As MapWinGIS.Shapefile bằng cách thêm đoạn code phía dưới vào public Class Table

Viết sự kiện load cho form Table như sau:

MapWinGIS.Shapefile pshape = default(MapWinGIS.Shapefile);

public New(ref MapWinGIS.Shapefile myShapeFile) {

pshape = myShapeFile; InitializeComponent(); }

Gọi form Table vào form chính TestMap như sau:

Một phần của tài liệu (LUẬN văn THẠC sĩ) phương pháp lan truyền độ tương tự trong phân cụm dữ liệu và ứng dụng (Trang 43)