SlideShare une entreprise Scribd logo
1  sur  19
Colony Bee mô phỏng (SBC) các thuật toán mô hình hành vi của ong mật và có thể được sử
dụng để tìm giải pháp cho vấn đề khó khăn hoặc không thể tổ hợp. Trong bài viết này tôi sẽ giải
thích chính xác những gì SBC thuật toán được, mô tả các loại vấn đề có thể được giải quyết bằng
cách sử dụng SBC thuật toán, và trình bày một ví dụ cuối đến đầu cuối hoàn thành có sử dụng
một thuật toán SBC để giải quyết vấn đề bán hàng du lịch.
Một cách tốt cho bạn để có được một cảm giác về các thuật toán SBC và xem nơi tôi đang đứng
đầu trong bài viết này là để kiểm tra các chương trình đang chạy demo thấy trong hình 1.
Chương trình demo sử dụng một thuật toán SBC để phân tích một tập hợp của 20 thành phố (có
tên từ A đến T) và tìm đường đi ngắn nhất mà thăm mỗi thành phố đúng một lần. Các dữ liệu
nhân tạo được xây dựng thành phố để các con đường tốt nhất bắt đầu tại thành phố A và tiếp tục
thông qua T thành phố, theo thứ tự, và con đường tốt nhất có chiều dài 19,0 đơn vị.
Đằng sau những cảnh các thuật toán SBC instantiates một tổ ong của 100 mô phỏng, mỗi trong số đó
có một giải pháp tiềm năng ngẫu nhiên. Ban đầu, tốt nhất trong những giải pháp ngẫu nhiên có chiều
dài 95,0 con đường của đơn vị. Các thuật toán SBC đi vào một vòng lặp xử lý, chỉ báo bằng thanh tiến
trình dựa trên văn bản, mà mô phỏng những hành vi của ong mật thông thường kiếm ăn cho thực
phẩm. Khi kết thúc vòng lặp xử lý SBC, giải pháp tốt nhất được tìm thấy có 16 vị trí chính xác trong
thành phố 20, và có chiều dài con đường của giải pháp 26,5-gần, nhưng không hoàn toàn, tối ưu.
SBC thuật toán thường được gọi là meta-heuristics bởi vì họ cung cấp một khuôn khổ chung và thiết
lập các hướng dẫn để tạo ra một giải pháp vấn đề hơn là giải pháp cung cấp một toa thuốc có nhiều
chi tiết. Bài viết này trình bày một ví dụ về cách sử dụng một SBC để giải quyết một vấn đề cụ thể. Một
khi bạn hiểu như thế nào một SBC có thể được sử dụng để giải quyết một vấn đề, bạn có thể thích ứng
với các thuật toán SBC trình bày ở đây để giải quyết vấn đề của riêng bạn. Khi bài viết này sẽ chứng
minh, các thuật toán SBC là thích hợp nhất để giải quyết vấn đề phức tạp tổ hợp không có tính quyết
định các giải pháp thực tế.
Bài viết này giả sử bạn có kỹ năng lập trình trung cấp. Ví dụ trong bài viết này là mã hóa bằng cách sử
dụng C #, nhưng tất cả các mã đã được viết để nó có thể dễ dàng tái cấu trúc các ngôn ngữ lập trình
khác. Tôi nghĩ rằng bạn sẽ tìm thấy bài viết này khá thú vị và khả năng sử dụng các thuật toán SBC một
bổ sung hữu ích cho các kỹ năng cá nhân của bạn.
Thông tin về các Bees
ong mật thông thường như Apis mellifera giả định vai trò khác nhau trong thuộc địa của mình
theo thời gian. Một tổ ong thông thường có thể có 5.000 đến 20.000 con ong cá nhân. ong trưởng
thành (20 đến 40 ngày tuổi) thường trở thành ong. Tìm kiếm thức ăn ong thường chiếm một
trong ba vai trò: ong đang hoạt động, ong trinh sát và ong không hoạt động.
Active ong kiếm ăn đi du lịch đến một nguồn thực phẩm, kiểm tra nguồn thực phẩm hàng xóm,
thu thập lương thực và trở về tổ.
Hướng đạo ong điều tra khu vực xung quanh các tổ ong, thường là một khu vực lên tới 50 dặm
vuông, tìm kiếm nguồn thức ăn hấp dẫn mới. Khoảng 10 phần trăm tìm kiếm thức ăn trong một
tổ ong được sử dụng như là trinh sát.
Tại bất kỳ thời gian nhất định một số các con ong kiếm ăn không hoạt động. Các hoạt động kiếm
ăn đợi gần lối vào tổ. Khi ong trinh sát hoạt động và trở về tổ ong, tùy thuộc vào chất lượng của
nguồn thực phẩm mà họ đã chỉ cần truy cập, họ có thể thực hiện một điệu nhảy lúc lắc để chờ đợi
những con ong không hoạt động. Có bằng chứng rõ ràng rằng điều này nhảy lúc lắc truyền đạt
thông tin cho những con ong không hoạt động về vị trí và chất lượng của nguồn thực phẩm.
Không hoạt động kiếm ăn nhận được thông tin nguồn gốc thực phẩm từ các điệu nhảy lúc lắc và
có thể trở thành hoạt động kiếm ăn.
Nói chung, một con ong kiếm ăn hoạt động tiếp tục thu thập thực phẩm từ một nguồn thực phẩm
đặc biệt cho đến khi mà nguồn thức ăn cạn kiệt, lúc đó con ong trở thành một forager không hoạt
động.
Vấn đề Người bán hàng đi du lịch
Các du lịch người bán hàng (TSP) là một trong những vấn đề nghiên cứu rộng rãi nhất trong
nghiên cứu khoa học máy tính. Có nhiều biến thể của TSP nhưng, chính thức, vấn đề là để tìm
đường đi ngắn nhất mà thăm mỗi thành phố trong một tập hợp của các thành phố đúng một lần.
Nếu bạn nhìn vào hình 1 bạn có thể xem các chương trình demo SBC sử dụng một bộ 20 thành
phố được tự ý dán nhãn A đến T. Một đường dẫn hợp lệ bao gồm một lệnh đặt của các nhãn
thành phố 20, nơi mỗi thành phố xảy ra đúng một lần. Vì vậy có tổng cộng 20! =
2.432.902.008.176.640.000 có thể có đường dẫn.
Đằng sau những cảnh có giá trị khoảng cách kết hợp với mỗi cặp của thành phố. Để đơn giản,
nếu thành phố c1 <thành phố c2 khoảng cách giữa c1 và c2 chỉ là 1,0 lần khoảng cách thứ tự
giữa các nhãn thành phố. Nếu c1> c2 khoảng cách là 1,5 lần khoảng cách thứ tự giữa c1 và c2.
Vì vậy, khoảng cách từ A đến B là 1,0 đơn vị tùy ý, khoảng cách từ B đến A là 1,5 đơn vị,
khoảng cách từ A đến C là 2,0 đơn vị, vv. Vì vậy, con đường tốt nhất mà thăm mỗi thành phố
đúng một lần là A -> B-> C -> ... - T> và tốt nhất (ngắn nhất) chiều dài đường dẫn là (20-1) * 1,0
= 19,0.
Trong hầu hết các kịch bản TSP, khoảng cách giữa các thành phố sẽ không giả tạo tính toán.
Thay vào đó, các khoảng cách có thể sẽ được lưu trữ trong một số loại cấu trúc dữ liệu tra cứu.
Một số biến thể của TSP giả định rằng mỗi thành phố được kết nối với mọi thành phố khác và
một số vấn đề giả sử các thành phố không đầy đủ kết nối. Ngoài ra, một số biến thể TSP cho
rằng khoảng cách từ bất kỳ thành phố để thành phố c1 c2 là giống như khoảng cách từ thành phố
c2 để c1, và một số biến thể vấn đề không làm cho giả định này hai chiều.
Ngoại trừ trong những tình huống tầm thường, một cách tiếp cận sức mạnh vũ phu để tìm đường
đi ngắn nhất là không khả thi. Ví dụ, với 20 thành phố, thậm chí nếu bạn có thể đánh giá
1.000.000 con đường / giây, kiểm tra tất cả 20! các đường dẫn có thể sẽ đòi hỏi nhiều hơn 77.000
năm. Kiểu này đặc biệt khó khăn vấn đề tối ưu hóa tổ hợp là loại vấn đề mà các thuật toán SBC
rất thích hợp để xử lý.
Các vấn đề TSP giả được thực hiện trong một lớp có tên là CitiesData, thể hiện trong hình 2. Mã
nguồn hoàn chỉnh cho các chương trình demo SBC có sẵn tại
code.msdn.microsoft.com/mag201104BeeColony.
Hình 2 The Class CitiesData danh
1. lớp CitiesData {
2. công char [], thành phố;
3.
4. công CitiesData (numberCities int) {
5. this.cities = new char [numberCities];
6. this.cities [0] = 'A';
7. for (int i = 1; i <this.cities.Length; + + i)
8. this.cities [i] = (char) (this.cities [i - 1] + 1);
9. }
10.
11. Từ xa gấp đôi công cộng (char firstCity, char secondCity) {
12. if (firstCity <secondCity)
13. trả lại 1,0 * ((int) secondCity - (int) firstCity);
14. khác
15. trả lại 1,5 * ((int) firstCity - (int) secondCity);
16. }
17.
18. tăng gấp đôi công ShortestPathLength () {
19. trả lại 1,0 * (this.cities.Length - 1);
20. }
21.
22. công dài NumberOfPossiblePaths () {
23. dài n = this.cities.Length;
24. dài câu trả lời = 1;
25. for (int i = 1; i <= n; + + i)
26. {kiểm tra câu trả lời *= i;}
27. trở lại câu trả lời;
28. }
29.
30. công ghi đè lên dây ToString () {
31. string s = "";
32. s + = "Thành phố";
33. for (int i = 0; i <this.cities.Length; + + i)
34. s + = this.cities [i] + "";
35. trở về;
36. }
37. }
Định nghĩa của một số lớp hoặc cấu trúc dữ liệu đại diện cho vấn đề cụ thể của bạn sẽ khác với
điều được hiển thị ở đây. Tuy nhiên, như một quy luật chung của ngón tay cái, vấn đề mà rất phù
hợp cho các giải pháp sử dụng một thuật toán SBC thường có thể được thể hiện như là một mảng
không số, không phải số một ma trận hoặc một mảng không phải số lởm chởm của mảng.
Các nhà xây dựng CitiesData chấp nhận một giá trị cho số lượng các thành phố và phân công các
thành phố đầu tiên một nhãn của A, thành phố thứ hai của một nhãn của B và như vậy.
Khoảng cách là phương pháp xác định một cách một chiều như tôi trước đây được mô tả và giả
định rằng thành phố nào có thể đạt được bởi bất kỳ thành phố khác.
Phương pháp ShortestPathLength trả về độ dài đường đi tối ưu cho việc xác định khoảng cách.
Trong hầu hết trường hợp SBC bạn sẽ không có các thông tin cần thiết để thực hiện một phương
thức trả về giải pháp tối ưu.
Phương pháp tính chỉ NumberOfPossiblePaths n! trong đó n là số thành phố. Trong một số kịch
bản TSP số đường đi có thể là n-1! (Nếu thành phố bắt đầu không quan trọng) và trong một số
kịch bản số đường đi có thể là n / 2! (Nếu theo hướng của con đường không quan trọng).
Phương thức ToString sử dụng nối chuỗi thay vì lớp StringBuilder hiệu quả hơn để lắp ráp một
chuỗi với các dữ liệu mô tả. nối String được sử dụng để tái cấu trúc đơn giản hóa các ngôn ngữ
lập trình khác.
Trong bài viết này, để giữ cho các mã tương đối ngắn và sạch sẽ, tôi đi đường tắt bạn sẽ không
sử dụng trong mã sản xuất, chẳng hạn như loại bỏ hầu hết các kiểm tra lỗi. Ví dụ, phương pháp
NumberOfPossiblePaths không đối phó với tràn số nếu kết quả là lớn hơn long.MaxValue.

Cấu trúc chương trình SBC
Các thuật toán SBC thể hiện trong hình 1 được thực hiện như là một C # giao diện điều khiển ứng dụng.
Các cấu trúc tổng thể của chương trình là liệt kê trong hình 3. Chú ý rằng cấu trúc chương trình SBC là
tương đối đơn giản và chỉ sử dụng tên miền không gian hệ thống cơ bản. Có ba lớp: lớp Chương trình,
mà nhà ở một phương pháp duy nhất chính; các lớp Hive, mà nhà ở tất cả các thuật toán logic SBC và
lớp CitiesData trình bày trong phần trước của bài viết này. Lớp Hive là tên chung về Hive hơn là đặt một
cái tên cụ thể như TravelingSalesmanHive, mặc dù SBC triển khai thực hiện thuật toán phụ thuộc rất
nhiều vào các vấn đề cụ thể chúng được thiết kế để giải quyết.
Hình 3: Cấu trúc chương trình tổng thể
1. sử dụng hệ thống;
2. không gian tên {SimulatedBeeColony
3. Chương trình lớp {
4. static void Main (string [] args) {
5. Console.WriteLine (" nBegin mô phỏng thuật toán Bee Colony demo  n");
6. . . .
7. Console.WriteLine ("Cuối mô phỏng Bee Colony demo");
8. }
9. }
10.
11. lớp Hive {
12. public class {Bee
13. . . .
14. }
15.
16. / / Hive trường dữ liệu ở đây
17.
18. công ghi đè lên dây ToString () {. . . }
19.
20. công Hive (totalNumberBees int, int numberInactive,
21. numberActive int, int numberScout, maxNumberVisits int,
22. int maxNumberCycles, CitiesData citiesData) {
23. . . .
24. }
25.
26. công char [] GenerateRandomMemoryMatrix () {. . . }
27.
28. công char [] GenerateNeighborMemoryMatrix (char [] memoryMatrix) {. . . }
29.
30. tăng gấp đôi công MeasureOfQuality (] [char memoryMatrix) {. . . }
31.
32. Giải quyết công void () {. . . }
33.
34. private void ProcessActiveBee (int i) {. . . }
35.
36. private void ProcessScoutBee (int i) {. . . }
37.
38. private void ProcessInactiveBee (int i) {. . . }
39.
40. private void DoWaggleDance (int i) {. . . }
41. }
42.
43. lớp CitiesData {
44. . . .
45. }
46.
47. } / / Ns
Phương pháp chính khá đơn giản. Sau khi hiển thị một thông báo bắt đầu các đối tượng CitiesData
được khởi tạo:
1. Console.WriteLine (
2. "Nạp dữ liệu cho các thành phố du lịch SBC phân tích vấn đề bán hàng");
3. CitiesData citiesData = mới CitiesData (20);
4. Console.WriteLine (citiesData.ToString ());
5. Console.WriteLine ("Số lượng các thành phố =" + citiesData.cities.Length);
6. Console.WriteLine ("Số lượng các đường dẫn có thể =" +
7. citiesData.NumberOfPossiblePaths (). ToString ("#,###"));
8. Console.WriteLine ("giải pháp tốt nhất có thể (con đường ngắn nhất) chiều dài =" +
9. citiesData.ShortestPathLength () ToString ("F4")).
Trong nhiều kịch bản vấn đề SBC dữ liệu của bạn sẽ nằm trong lưu trữ bên ngoài như một tập tin văn
bản hoặc một cơ sở dữ liệu SQL, và bạn sẽ tải dữ liệu thông qua một số vấn đề xây dựng tải hoặc
phương thức tải dọc theo dòng myProblemData.Load (datafile).
Tiếp theo, các nhà xây dựng Hive được chuẩn bị và được gọi là:
1. int totalNumberBees = 100;
2. numberInactive int = 20;
3. numberActive int = 50;
4. numberScout int = 30;
5. int maxNumberVisits = 100;
6. int maxNumberCycles = 3460;
7.
8. Hive tổ = mới TravelingSalesmanHive (totalNumberBees,
9. numberInactive, numberActive, numberScout, maxNumberVisits,
10. maxNumberCycles, citiesData);
Như bạn sẽ thấy chi tiết hơn trong phần sau của bài viết này, một thuật toán SBC sử dụng ba loại ong:
hoạt động, không hoạt động và trinh sát. Mặc dù số lượng của từng loại ong có thể được cứng mã hóa,
trong hầu hết các kịch bản nó tốt hơn để vượt qua những tính trong khi các thông số cho các nhà xây
dựng Hive để thuật toán có thể dễ dàng điều chỉnh để thực hiện.
Giá trị của biến totalNumberBees có thể xuất phát từ ba biến số khác, nhưng biến thêm cải thiện khả
năng đọc mã ở đây. Tổng số ong sẽ phụ thuộc vào vấn đề cụ thể của bạn. Ngày càng có nhiều ong tốt
hơn, nhưng chậm thực hiện chương trình. Về tỷ lệ, có một số nghiên cứu cho thấy tỷ lệ tốt nhất của
hoạt động, ong không hoạt động và trinh sát thường khoảng 75 phần trăm, trăm phần trăm 10 và 15,
tương ứng.
Giá trị 100 được sử dụng cho biến maxNumberVisits sẽ được giải thích ngay, nhưng nó liên quan đến số
lượng các giải pháp hàng xóm có liên quan đến một giải pháp nhất định.
Biến maxNumberCycles được sử dụng để kiểm soát số lần sẽ lặp đi lặp lại thường xuyên Giải quyết,
điều này là cần thiết vì trong các kịch bản thuật toán SBC bạn thường không biết khi nào bạn đã đạt
đến một giải pháp tối ưu, nếu bạn biết các giải pháp tối ưu cho bạn thực sự không có một vấn đề để
giải quyết. Trong trường hợp này, giá trị của maxNumberCycles được giới hạn chỉ 3460 để các thuật
toán SBC đã không tạo ra một kết quả hoàn hảo. Vấn đề ở đây là mặc dù SBC thuật toán có thể tạo ra
một kết quả tối ưu, bạn thường không có cách nào biết được điều này và vì vậy bạn phải sẵn sàng
chấp nhận một "tốt" kết quả.
Khi xây dựng thực thi nó tạo ra một bộ sưu tập của các con ong, mỗi trong số đó có một giải pháp ngẫu
nhiên. Các đối tượng Hive theo dõi con đường tốt nhất (ngắn nhất) tổng thể được tìm thấy bởi bất kỳ
của những con ong trong tổ ong và chiều dài đường dẫn liên kết của giải pháp tốt nhất.
Sau khi kêu gọi các nhà xây dựng Hive, phương pháp chính kết thúc lên bằng cách sử dụng phương thức
ToString để hiển thị, ban đầu được tạo ngẫu nhiên Hive giá trị, gọi phương thức Giải quyết với một
tham số chỉ ra rằng một thanh tiến trình dựa trên văn bản được in, và sau đó hiển thị tốt nhất đường
dẫn và chiều dài đường dẫn liên quan được tìm thấy:
1. ...
2. Console.WriteLine (" nInitial ngẫu nhiên tổ ong");
3. Console.WriteLine (tổ ong);
4.
5. bool doProgressBar = true;
6. hive.Solve (doProgressBar);
7.
8. Console.WriteLine (" nFinal tổ");
9. Console.WriteLine (tổ ong);
10. Console.WriteLine ("Cuối mô phỏng Bee Colony demo");
11. }
The Class Bee
Như được thể hiện trong hình 3, lớp Hive chứa một định nghĩa Bee lớp lồng nhau. Các chi tiết của định
nghĩa Bee được liệt kê trong hình 4.
Hình 4 Bee Class danh
1. public class {Bee
2. int công trạng;
3. công char [] memoryMatrix;
4. công đôi measureOfQuality;
5. int công numberOfVisits;
6.
7. công Bee (int tình trạng,] [char memoryMatrix,
8. đôi measureOfQuality, numberOfVisits int) {
9. this.status = trạng thái;
10. this.memoryMatrix = new char [memoryMatrix.Length];
11. Array.Copy (memoryMatrix, this.memoryMatrix, memoryMatrix.Length);
12. this.measureOfQuality = measureOfQuality;
13. this.numberOfVisits = numberOfVisits;
14. }
15.
16. công ghi đè lên dây ToString () {
17. string s = "";
18. s + = "Trạng thái =" + this.status + " n";
19. s + = "Memory =" + " n";
20. for (int i = 0; i <this.memoryMatrix.Length-1; + + i)
21. s + = this.memoryMatrix [i] + "->";
22. s + = this.memoryMatrix [this.memoryMatrix.Length-1] + " n";
23. s + = "Chất lượng =" + this.measureOfQuality.ToString ("F4");
24. s + = "Số lần truy cập =" + this.numberOfVisits;
25. trở về;
26. }
27. }
Lớp Bee có ba trường dữ liệu chung cho tất cả triển khai SBC và một trường dữ liệu vấn đề cụ thể. Các
lĩnh vực cụ thể vấn đề được đặt tên memoryMatrix. Mỗi SBC thực hiện phải có một số cách để đại
diện cho một giải pháp. Trong trường hợp của TSP trong bài viết này, giải pháp có thể được đại diện bởi
một mảng kiểu char. Hãy để tôi nhấn mạnh rằng các đối tượng đại diện cho một giải pháp là rất cao
phụ thuộc vào vấn đề và mọi vấn đề phải được phân tích một cách riêng biệt để tạo ra một đại diện
giải pháp có ý nghĩa.
Các lĩnh vực tình trạng có tên là giữ một giá trị int cho biết loại đối tượng của Bee: 0 cho không hoạt
động, 1 cho hoạt động và 2 cho các trinh sát. Nếu bạn mã hóa bằng một ngôn ngữ có hỗ trợ kiểu liệt
kê, bạn có thể muốn cấu trúc lại lĩnh vực điều tra tư cách là một.
Các trường measureOfQuality giữ một giá trị gấp đôi đại diện cho lòng tốt của đối tượng của Bee
memoryMatrix. Trong trường hợp của các TSP, một biện pháp tự nhiên của chất lượng giải pháp là
chiều dài con đường biểu diễn bởi các đối tượng memoryMatrix. Chú ý rằng trong tình huống này, độ
dài đường đi ngắn hơn là tốt hơn so với độ dài đường dẫn dài hơn và giá trị rất nhỏ hơn của lĩnh vực
measureOfQuality đại diện các giải pháp tốt hơn so với giá trị lớn hơn. Mỗi SBC thực hiện phải có một
số cách tính toán một thước đo chất lượng giải quyết. Trong nhiều trường hợp biện pháp này là tốt
nhất đại diện bởi một giá trị kiểu double.
Các trường dữ liệu phổ biến thứ ba trong lớp Bee được đặt tên numberOfVisits. Trường này chứa một
giá trị int tượng trưng cho số lần các đối tượng Bee đã đến thăm một nguồn thực phẩm đặc biệt / vấn
đề giải pháp, mà không tìm một giải pháp hàng xóm tốt hơn. Trường này được sử dụng để mô phỏng
một con ong truy cập vào một nguồn thức ăn cho đến khi có nguồn thực phẩm được sử dụng hết. Đối
với một con ong đang hoạt động, khi giá trị của lĩnh vực numberOfVisits vượt quá giá trị ngưỡng, con
ong sẽ mô phỏng hầu như cạn kiệt nguồn cung cấp thực phẩm và chuyển sang trạng thái không hoạt
động (và một con ong không hoạt động sẽ chuyển sang trạng thái hoạt động).
Các nhà xây dựng Bee chấp nhận giá trị của bốn trường dữ liệu, tình trạng, memoryMatrix
measureOfQuality,, và numberOfVisits. Lưu ý rằng các nhà xây dựng Bee phải chấp nhận một giá trị cho
measureOfQuality vì một Bee không thể trực tiếp tính từ lĩnh vực này memoryMatrix của nó, xác định
các thước đo chất lượng phụ thuộc vào thông tin lưu trữ trong đối tượng CitiesData vấn đề cụ thể.
Các định nghĩa lớp Bee có một phương thức ToString, mà lộ ra những giá trị của bốn trường dữ liệu.
Phương pháp Bee.ToString không phải là hoàn toàn cần thiết nhưng có thể được khá hữu ích trong quá
trình SBC phát triển để giúp phát hiện lỗi bằng cách sử dụng câu lệnh WriteLine.
Các dữ liệu Fields Hive
Mã Hive lớp được trình bày trong Hình 5. Có 14 tổ ong dữ liệu các lĩnh vực và sự hiểu biết mục đích của
từng là chìa khóa để hiểu biết làm thế nào để thực hiện một thuật toán SBC cụ thể.
Hình 5: 14 Hive Trường Dữ liệu
1. ngẫu nhiên tĩnh ngẫu nhiên = null;
2.
3. công CitiesData citiesData;
4.
5. int công totalNumberBees;
6. int công numberInactive;
7. int công numberActive;
8. int công numberScout;
9.
10. int công maxNumberCycles;
11. int công maxNumberVisits;
12.
13. tăng gấp đôi công probPersuasion = 0,90;
14. tăng gấp đôi công probMistake = 0,01;
15.
16. công Bee [] ong;
17. công char [] bestMemoryMatrix;
18. công đôi bestMeasureOfQuality;
19. công int [] indexesOfInactiveBees;
Để đơn giản và gỡ rối dễ dàng hơn với báo cáo WriteLine, tất cả 14 trường dữ liệu được định nghĩa với
phạm vi công cộng. Bạn có thể muốn hạn chế phạm vi các lĩnh vực tư nhân và tạo ra tài sản đối với
những lĩnh vực bạn cần truy cập bên ngoài định nghĩa lớp.
Trường đầu tiên có tên ngẫu nhiên và là loại ngẫu nhiên. SBC thuật toán xác suất và các đối tượng ngẫu
nhiên được sử dụng để tạo ra các số giả ngẫu nhiên cho nhiều mục đích. Các đối tượng ngẫu nhiên sẽ
được khởi tạo trong xây dựng tổ.
Các trường dữ liệu thứ hai là một đối tượng của CitiesData loại. Việc thực hiện SBC cần biết chi tiết của
vấn đề được giải quyết. Trong hầu hết trường hợp, chẳng hạn như một này, các dữ liệu vấn đề được
đại diện là một đối tượng. Nhớ lại rằng CitiesData có một danh sách các nhãn thành phố và phương
thức trả về khoảng cách giữa hai thành phố.
Các dữ liệu thông qua thứ sáu lĩnh vực thứ ba là các biến int mà giữ tổng số ong, số ong không hoạt
động, số lượng các loài ong hoạt động và số lượng ong trinh sát. Như đã đề cập trước đó, bởi vì con ong
từng đại diện cho một giải pháp tiềm năng, những con ong khác trong tổ, thì tốt hơn. Tuy nhiên, con số
lớn hơn ong thực hiện chương trình phân hủy.
Các trường dữ liệu thứ bảy, maxNumberCycles, là một giá trị ngưỡng được sử dụng để hạn chế bao lâu
phương pháp Giải chạy. Một chu kỳ đại diện cho chế biến của mỗi con ong trong tổ.
Các trường dữ liệu thứ tám, maxNumberVisits, là một giá trị ngưỡng được sử dụng để ngăn chặn một
con ong ở lại quá lâu ở một giải pháp cụ thể. Trong mỗi lần lặp của vòng lặp xử lý chính trong phương
pháp Giải quyết, nếu một con ong không tìm thấy một nguồn thức ăn hàng xóm với chất lượng tốt
hơn, của ong numberOfVisits truy cập được tăng lên. Nếu numberOfVisits truy cập vào một đối tượng
Bee vượt quá giá trị ngưỡng maxNumberVisits, các hiệu ứng chuyển ong đến một trạng thái không
hoạt động.
Các trường dữ liệu thứ chín, probPersuasion, là một giá trị ngưỡng xác suất được sử dụng để xác định
liệu một con ong không hoạt động những người quan sát những điệu nhảy lúc lắc của một con ong đã
trở về tổ ong với một giải pháp tốt hơn sẽ được thuyết phục để cập nhật bộ nhớ của nó với các giải
pháp tốt hơn.
Giá trị của probPersuasion là cứng mã hóa đến 0.90, có nghĩa là một con ong không hoạt động sẽ được
thuyết phục để chấp nhận một giải pháp tốt hơn khoảng 90 phần trăm thời gian. Giá trị 0,90 cho
probPersuasion dựa trên kết quả nghiên cứu, nhưng bạn có thể muốn thử nghiệm với các giá trị khác.
Giá trị lớn hơn sẽ tạo ra một thuật toán SBC mà hội tụ đến một giải pháp nhanh chóng hơn, ít nguy cơ
nhiều khả năng hội tụ đến một giải pháp không tối ưu.
Các trường dữ liệu thứ mười, probMistake, là một giá trị ngưỡng xác suất được sử dụng để xác định
liệu một con ong đang hoạt động sẽ làm cho một sai lầm, đó là, không chính xác từ chối một giải pháp
hàng xóm đó là tốt hơn so với giải pháp hiện hành của ong, hoặc không chính xác chấp nhận một giải
pháp hàng xóm đó là tồi tệ hơn ong giải pháp hiện hành. Giá trị của probMistake là hardcoded đến
0,01, có nghĩa là một con ong đang hoạt động sẽ làm cho một sai lầm trong việc đánh giá một giải pháp
hàng xóm khoảng 1 phần trăm thời gian.
Các trường dữ liệu thứ 11, ong, là một mảng của các đối tượng Bee. Hãy nhớ rằng các con ong đều có
một trạng thái (hoạt động, không hoạt động, trinh sát), một giải pháp (memoryMatrix), một thước đo
chất lượng của giải pháp (measureOfQuality), và một truy cập của số lần cụ thể ảo thực phẩm nguồn
đã được viếng thăm mà không tìm thấy một nguồn thực phẩm tốt hơn người hàng xóm
(numberOfVisits). Bởi vì một Bee được định nghĩa là một lớp, mỗi mục trong mảng ong là một tham
chiếu đến một đối tượng Bee.
Các trường dữ liệu 12, bestMemoryMatrix, là một mảng của char và đại diện các giải pháp tốt nhất
trong mảng con ong. Hãy nhớ rằng bởi vì mô phỏng các thuật toán đàn ong được triển khai thực hiện
cụ thể của một meta-heuristic, các đại diện của một giải pháp vấn đề sẽ khác nhau từ vấn đề cho vấn
đề. Một phương pháp thiết kế thay thế cho hardcoding một định nghĩa kiểu giải pháp là thông số
trường dữ liệu này như là một loại chung. Khi tôi sử dụng một thuật toán SBC tôi thường cố gắng giải
quyết một vấn đề cụ thể, vì vậy tôi muốn mỗi recode thực hiện SBC mới từ đầu.
Các trường dữ liệu 13, bestMeasureOfQuality, là thước đo chất lượng tương ứng với các giải pháp
bestMemoryMatrix.
Các trường dữ liệu cuối cùng tổ, indexesOfInactiveBees, là một mảng int. mảng này chứa các chỉ số của
các con ong trong tổ ong hiện đang không hoạt động. Hãy nhớ rằng các hoạt động ong có thể chuyển
đổi sang một trạng thái không hoạt động và ong không hoạt động có thể chuyển tiếp đến một nhà
nước hoạt động. An thực hiện thuật toán SBC thường xuyên phải xác định những con ong đang không
hoạt động khi một con ong đang hoạt động thực hiện một điệu nhảy ảo lúc lắc, và lưu trữ các chỉ số
của con ong không hoạt động cải thiện hiệu năng so với các giải pháp thay thế của lặp lại thông qua
toàn bộ mảng ong và kiểm tra tình trạng dữ liệu của từng lĩnh vực ong.
Một đại diện hình ảnh của một đối tượng Hive có thể được trình bày trong hình 6. Các tổ ong cho thấy
có 10 con ong: 5 hoạt động, trinh sát hai và không hoạt động ba. Những con ong đang không hoạt động
được ở các chỉ số 2, 7 và 4 trong mảng ong. Các đối tượng CitiesData có năm thành phố. Giải pháp tốt
nhất hiện nay là:
A-> B-> E-> C-D
Giải pháp này có chiều dài đường dẫn, trong các đơn vị khoảng cách, của:
1,0 + (3 * 1,0) + (2 * 1,5) + 1,0 = 8,0
Lưu ý rằng trường citiesData là một tham chiếu đến một CitiesData đối tượng định nghĩa bên ngoài của
đối tượng tổ.

Hình 6: Đại diện Hive
Các Constructor Hive
Các mã số cho các nhà xây dựng tổ được trình bày trong hình 7. Việc xây dựng tổ bảy chấp nhận tham số
đầu vào. Sáu trong số các tham số được vô hướng và một là một đối tượng (citiesData). Các tham số
totalNumberBees là không cần thiết, theo nghĩa là nó có thể được xác định từ numberScout
numberInactive, numberActive và, nhưng tôi cảm thấy sự cải thiện trong khả năng đọc được giá trị mã
thêm.
Hình 7 Hive Constructor
1. công Hive (totalNumberBees int, int numberInactive,
2. numberActive int, int numberScout, maxNumberVisits int,
3. int maxNumberCycles, CitiesData citiesData) {
4.
5. ngẫu nhiên = new Random (0);
6.
7. this.totalNumberBees = totalNumberBees;
8. this.numberInactive = numberInactive;
9. this.numberActive = numberActive;
10. this.numberScout = numberScout;
11. this.maxNumberVisits = maxNumberVisits;
12. this.maxNumberCycles = maxNumberCycles;
13.
14. this.citiesData = citiesData;
15.
16. this.bees = mới Bee [totalNumberBees];
17. this.bestMemoryMatrix = GenerateRandomMemoryMatrix ();
18. this.bestMeasureOfQuality =
19. MeasureOfQuality (this.bestMemoryMatrix);
20.
21. this.indexesOfInactiveBees = int mới [numberInactive];
22.
23. for (int i = 0; i <totalNumberBees; + + i) {
24. int currStatus;
25. if (i <numberInactive) {
26. currStatus = 0; / / không hoạt động
27. indexesOfInactiveBees [i] = i;
28. }
29. khác nếu (i <numberInactive + numberScout)
30. currStatus = 2; / / trinh sát
31. khác
32. currStatus = 1; / / hoạt động
33.
34. [Char] randomMemoryMatrix = GenerateRandomMemoryMatrix ();
35. đôi MQ = MeasureOfQuality (randomMemoryMatrix);
36. int numberOfVisits = 0;
37.
38. ong [i] = new Bee (currStatus,
39. randomMemoryMatrix, MQ, numberOfVisits);
40.
41. if ([i]. ong measureOfQuality <bestMeasureOfQuality) {
42. Array.Copy (ong [i] memoryMatrix, this.bestMemoryMatrix,.
43. ong [i] memoryMatrix.Length).
44. this.bestMeasureOfQuality = ong [i] measureOfQuality.
45. }
46. }
47. }
Phạm vi lớp đối tượng được khởi tạo ngẫu nhiên với một giá trị giống của 0. Cung cấp một giá trị giống
cho phép bạn sao chép kết quả. Tiếp theo, sáu đầu vào giá trị tham số cho các trường dữ liệu vô hướng
được sao chép dữ liệu các lĩnh vực tổ ong. Các đối tượng tổ ong có tổng cộng 14 trường dữ liệu;
ngưỡng giá trị probPersuasion và probMistake là hardcoded.
Các nhà xây dựng Hive có tham số đầu vào và gán citiesData lĩnh vực citiesData cho tham số tham khảo.
Một thay thế cho phương pháp này bằng cách tham chiếu là để tạo một bản sao mới của dữ liệu vấn
đề, như sau:
1. int n = citiesData.cities.Length;
2. this.citiesData = mới CitiesData (n);
Phương pháp này sử dụng bộ nhớ nhiều hơn, nhưng tránh các tác dụng phụ tiềm năng lỗi. Phương
pháp thay thế có thể được sử dụng nếu bạn đang tái cấu trúc các mã trình bày ở đây để một ngôn ngữ
lập trình mà không hỗ trợ con trỏ hoặc tham chiếu.
Tại thời điểm này trong các nhà xây dựng Hive tất cả các mục trong mảng con ong sẽ được null. Tiếp
theo, tạo sự khởi tạo các giải pháp toàn cầu tốt nhất (có nghĩa là, các giải pháp tốt nhất trong số tất cả
các con ong trong tổ ong) và chất lượng giải pháp tương ứng:
1. this.bestMemoryMatrix = GenerateRandomMemoryMatrix ();
2. this.bestMeasureOfQuality =
3. MeasureOfQuality (this.bestMemoryMatrix);
Phương pháp trợ giúp GenerateRandomMemoryMatrix tạo ra một giải pháp ngẫu nhiên. Phương pháp
trợ giúp MeasureOfQuality chấp nhận giải pháp ngẫu nhiên và tính chất của nó. Tôi sẽ thảo luận về các
mã của các phương pháp trợ giúp hai sau đó trong bài viết.
Sau khi khởi tạo các giải pháp toàn cầu tốt nhất và chất lượng tương ứng của nó, các nhà xây dựng tổ
ong giao các indexesOfInactiveBees mảng bằng cách sử dụng các giá trị trong lĩnh vực numberInactive.
Vào lúc này, tất cả các giá trị trong mảng này chỉ số sẽ là 0.
Các phần tiếp theo của mã xây dựng duyệt qua mỗi đối tượng Bee trong mảng ong và instantiates nó
bằng cách sử dụng các hàm tạo Bee. Các logic trong vòng lặp này giả định rằng các tế bào
numberInactive đầu tiên trong mảng ong là ong không hoạt động, các tế bào numberScout tiếp theo là
những con ong trinh sát và các ô còn lại là những con ong đang hoạt động.
Ví dụ, nếu có năm con ong đang hoạt động, hai con ong không hoạt động và ba con ong trinh sát, xây
dựng các con ong khởi tạo một mảng có kích thước 10, và instantiates tế bào 0 và 1 như con ong không
hoạt động, các tế bào 2-4 như con ong trinh sát và các tế bào 5-9 như con ong đang hoạt động. Ngoài
ra, các mảng indexesOfInactiveBees sẽ có kích thước 2 và bước đầu nắm giữ các giá trị 0 và 1.
Sau khi tình trạng của các con ong hiện nay là xác định dựa trên các biến chỉ số vòng lặp, một giải pháp
ngẫu nhiên được tạo ra và tương ứng với chất lượng của nó được tính toán, số lần truy cập truy cập
được một cách rõ ràng thiết lập về 0, và các nhà xây dựng Bee được gọi là:
1. [Char] randomMemoryMatrix = GenerateRandomMemoryMatrix ();
2. đôi MQ = MeasureOfQuality (randomMemoryMatrix);
3. int numberOfVisits = 0;
4. ong [i] = new Bee (currStatus, randomMemoryMatrix,
5. MQ, numberOfVisits);
Sau khi ong mỗi giải pháp là khởi tạo, chất lượng của ong nhân tạo ngẫu nhiên được kiểm tra để xem
nếu nó là tốt hơn so với các giải pháp toàn cầu tốt nhất. Nếu vậy, các con ong hiện hành của giải pháp
và chất lượng tương ứng được sao chép vào các lĩnh vực bestMemoryMatrix và bestMeasureOfQuality.
Lưu ý trong việc kiểm tra cho một giải pháp toàn cầu chất lượng tốt nhất, một giá trị nhỏ hơn là tốt
hơn so với một giá trị lớn hơn bởi vì chất lượng giá trị là độ dài đường dẫn và TSP mong muốn giảm
thiểu chiều dài con đường.
Thay vì sao chép một cách rõ ràng bộ nhớ của ong vào mảng bestMemoryMatrix, một phương pháp
thay thế là để gán theo tham chiếu. Phương pháp này cải thiện hiệu suất tại các chi phí của một gia
tăng phức tạp.
Ba khái quát phương pháp SBC
Mỗi thuật toán thực hiện SBC phải có ba phương pháp vấn đề cụ thể: một phương pháp để tạo ra một
giải pháp ngẫu nhiên, một phương pháp để tạo ra một giải pháp tương đối so với hàng xóm là một giải
pháp đưa ra, và một phương pháp tính toán chất lượng của một giải pháp nhất định. Trong ví dụ này
TSP từng phương pháp được thực hiện theo một cách tùy chỉnh và hoàn toàn phụ thuộc vào vấn đề.
Một giải pháp thay thế thiết kế là xác định các giao diện và thực hiện các giao diện này. Lập trình thông
qua giao diện có một số lợi thế và bất lợi so với các phương pháp tiếp cận phi giao diện sử dụng, nhưng
chủ yếu là một vấn đề của sở thích cá nhân theo ý kiến của tôi. Phương pháp để tạo ra một giải pháp
ngẫu nhiên, GenerateRandomMemoryMatrix, được thể hiện ở đây:
1. công char [] GenerateRandomMemoryMatrix () {
2. char [] Kết quả = new char [this.citiesData.cities.Length];
3. Array.Copy (this.citiesData.cities, kết quả,
4. this.citiesData.cities.Length);
5. for (int i = 0; i <result.Length; i + +) {
6. int r = random.Next (i, result.Length);
7. char temp = kết quả [r];
8. Kết quả [r] = kết quả [i];
9. Kết quả [i] = temp;
10. }
11. trả lại kết quả;
12. }
Bởi vì một giải pháp cho vấn đề TSP là một mảng của char char mà mỗi đại diện cho một nhãn hiệu
thành phố, các phương pháp GenerateRandomMemoryMatrix trả về một mảng char. Kết quả kích
thước mảng địa phương được phân bổ dựa trên đối tượng CitiesData của tổ, và thành phố các ID được
lưu trữ trong tài liệu tham khảo của tổ để các đối tượng CitiesData được sao chép vào mảng kết quả.
Thứ tự của các giá trị trong mảng kết quả là sau đó ngẫu nhiên bằng cách sử dụng ngẫu nhiên phạm vi
lớp đối tượng và các thuật toán shuffle Fisher-Yates (đôi khi gọi là shuffle Knuth).
Lúc đầu, nó có vẻ rằng phương pháp GenerateRandomMemoryMatrix khái niệm thuộc về một đối
tượng Bee. Tuy nhiên, bởi vì tạo ra một giải pháp ngẫu nhiên phụ thuộc một phần vào vấn đề cụ thể
CitiesData dữ liệu trong trường hợp này, đặt các phương pháp giải pháp ngẫu nhiên trong định nghĩa tổ
tổng thể là một thiết kế tốt hơn.
Phương pháp để tạo ra một giải pháp hàng xóm, GenerateNeighborMemoryMatrix, được trình bày
trong hình 8.
Hình 8: Tạo ra một giải pháp hàng xóm
1. công char [] GenerateNeighborMemoryMatrix (] [char memoryMatrix) {
2. char [] Kết quả = new char [memoryMatrix.Length];
3. Array.Copy (memoryMatrix, kết quả, memoryMatrix.Length);
4.
5. int ranIndex = random.Next (0, result.Length);
6. int adjIndex;
7. if (ranIndex == result.Length - 1)
8. adjIndex = 0;
9. khác
10. adjIndex = ranIndex + 1;
11.
12. char tmp = kết quả [ranIndex];
13. Kết quả [ranIndex] = kết quả [adjIndex];
14. Kết quả [adjIndex] = tmp; trả lại kết quả;
15. }
Một khái niệm quan trọng trong thuật toán SBC là ý tưởng rằng mỗi nguồn thực phẩm ảo đại diện cho
một giải pháp có một số loại hàng xóm. Nếu không có khái niệm người hàng xóm, toàn bộ ý tưởng của
một thuật toán dựa trên hành vi của ong sụp đổ. Trong trường hợp của các TSP, nơi một giải pháp có
thể được biểu diễn như là một mảng của các ID thành phố đại diện cho một con đường từ thành phố
đến thành phố, một giải pháp hàng xóm tự nhiên liên quan đến một giải pháp hiện nay là một hoán vị
của giải pháp hiện tại, nơi hai thành phố lân cận đã được trao đổi .
Ví dụ, nếu một TSP hiện giải pháp là A, B, C, D, E, sau đó là một giải pháp hợp lý hàng xóm là A, C, B, D,
E. Nó không phải như vậy rõ ràng nếu một hoán vị hai thành phố nơi nào tùy ý được trao đổi (như trái
ngược với hai thành phố lân cận) đại diện cho một giải pháp hợp lý hàng xóm. Đối với ví dụ trước đây, là
A, D, C, B, E là một giải pháp hợp lý hàng xóm? Quyết định về định nghĩa của một giải pháp hàng xóm
cho một thuật toán SBC là vấn đề phụ thuộc và thường liên quan đến tiêu chí chủ quan.
Khái niệm hàng xóm, giải pháp cũng phục vụ để minh họa một phần lý do tại sao không phải số vấn đề
về tổ hợp đặc biệt thích hợp cho giải pháp của các thuật toán SBC. Nếu vấn đề là vốn số, ý tưởng của
một người hàng xóm thường rất khó để xác định thỏa đáng. Nếu vấn đề vốn đã tổ hợp, ý tưởng của
một người hàng xóm thường có thể độc đáo được xác định bởi một số hình thức hoán vị toán học hoặc
kết hợp.
Phương pháp GenerateNeighborMemoryMatrix chấp nhận hiện tại của ong memoryMatrix đại diện
của một giải pháp như là một tham số đầu vào và bản sao nó thành một mảng kết quả. Phương pháp
chọn ngẫu nhiên một chỉ số duy nhất vào mảng kết quả hiện tại bằng cách sử dụng các lớp-phạm vi
đối tượng ngẫu nhiên. Nếu các điểm chỉ số ngẫu nhiên vào ô cuối cùng thì các ID thành phố đầu tiên và
cuối cùng được trao đổi, nếu không, nếu các điểm chỉ số ngẫu nhiên cho bất kỳ tế bào không qua, các
ID được trỏ đến bởi các chỉ số ngẫu nhiên và chỉ số tiếp theo được trao đổi.
Khái niệm hàng xóm giải pháp có liên quan đến giá trị maxNumberVisits. Có một số nghiên cứu cho thấy
một giá trị tốt cho maxNumberVisits là khoảng năm lần số lượng các giải pháp hàng xóm có thể cho bất
kỳ giải pháp nào. Ví dụ, đối với ba thành phố (A, B, C), nếu một giải pháp hàng xóm được định nghĩa là
trao đổi bất kỳ cặp của các thành phố lân cận, sau đó có ba người hàng xóm có thể (trao đổi A và B, trao
đổi, B và C, trao đổi A và C) . Vì vậy, trong 20 thành phố, một maxNumberVisits giá trị hợp lý là khoảng
20 * 5 = 100.
Phương pháp đánh giá chất lượng của một giải pháp của ong, MeasureOfQuality, là:
1. tăng gấp đôi công MeasureOfQuality (] [char memoryMatrix) {
2. hai câu trả lời = 0,0;
3. for (int i = 0; i <memoryMatrix.Length - 1; + + i) {
4. char c1 = memoryMatrix [i];
5. char c2 = memoryMatrix [i + 1];
6. double d = this.citiesData.Distance (c1, c2);
7. câu trả lời + = d;
8. }
9. trở lại câu trả lời;
10. }
Để giải quyết vấn đề bằng cách sử dụng một thuật toán SBC, một đặc tính cần thiết của vấn đề là có
bất kỳ giải pháp phải có khả năng được đánh giá để mang lại một thước đo chất lượng của giải pháp.
Về khái niệm, ở thế giới thực vấn đề tối ưu hóa tổ hợp gần như luôn luôn có một số biện pháp cố hữu
và các giác quan thông thường về chất lượng. Tuy nhiên, trong thực tế, tính toán các thước đo chất
lượng của một giải pháp có thể khó khăn và tốn thời gian.
Trong ví dụ này, phương pháp MeasureOfQuality chỉ đơn giản là duyệt qua tất cả các cặp của các ID
thành phố liên tiếp trong giải pháp thể hiện bằng tham số memoryMatrix, xác định khoảng cách giữa
mỗi cặp sử dụng phương pháp từ xa của đối tượng CitiesData, và tích lũy khoảng cách số. Nhớ lại rằng
các dữ liệu thành phố đã được nhân tạo xây dựng sao cho khoảng cách giữa bất kỳ hai thành phố có thể
được nhanh chóng và dễ dàng tính toán đơn giản chỉ bằng khoảng cách thứ tự giữa hai ID thành phố.
Nhưng trong một vấn đề thực sự, khoảng cách giữa hai thành phố có khả năng sẽ phải được xem xét
trong một số loại cấu trúc dữ liệu. Trong triển khai thực hiện SBC, phương pháp MeasureOfQuality
thường là thói quen mà thống trị thời gian chạy của chương trình. Do đó, nó thường có giá trị để đảm
bảo rằng phương pháp này là tối ưu hóa cho hiệu suất cũng như tính khả thi, do tài nguyên bộ nhớ của
hệ thống máy chủ.
Các Phương pháp Giải quyết
Phương pháp Giải quyết nhà ở tất cả các logic mô phỏng hành vi của ong kiếm ăn để giải quyết một
vấn đề. Phương pháp Giải quyết tương đối phức tạp và sử dụng ba phương pháp trợ giúp,
ProcessActiveBee, ProcessScoutBee và ProcessInactiveBee. Các phương pháp ProcessActiveBee và
ProcessScoutBee lần lượt sử dụng một phương pháp giúp đỡ DoWaggleDance. Phương pháp Giải quyết
được trình bày trong hình 9.
Hình 9 Các Giải quyết Phương pháp
1. Giải quyết công void (bool doProgressBar) {
2. bool pb = doProgressBar;
3. numberOfSymbolsToPrint int = 10;
4. int tăng = this.maxNumberCycles / numberOfSymbolsToPrint;
5. if (pb) Console.WriteLine (" nEntering SBC du lịch chính của thuật toán người bán hàng chế biến
vòng lặp  n");
6. if (pb) Console.WriteLine ("Tiến độ: |==========|");
7. if (pb) Console.Write ("");
8. int chu kỳ = 0;
9.
10. trong khi (chu kỳ <this.maxNumberCycles) {
11. for (int i = 0; i <totalNumberBees; + + i) {
12. if (this.bees [i] tình trạng == 1.)
13. ProcessActiveBee (i);
14. khác nếu (this.bees [i] tình trạng == 2.)
15. ProcessScoutBee (i);
16. khác nếu (this.bees [i] tình trạng == 0.)
17. ProcessInactiveBee (i);
18. }
19. + + Chu kỳ;
20.
21. if (pb & & tăng% chu kỳ == 0)
22. Console.Write ("^");
23. }
24.
25. if (pb) (""); Console.WriteLine
26. }
Hầu hết các công việc thực tế là nuôi ra để trợ giúp các phương pháp ProcessActiveBee,
ProcessScoutBee và ProcessInactiveBee. Một tham số đầu vào Boolean được thông qua phải giải quyết
để cho biết để in một thanh tiến trình dựa trên văn bản thô sơ. Điều này rất hữu ích khi phát triển một
thuật toán SBC để theo dõi tốc độ thực hiện và giúp phát hiện ra nghẽn cổ chai. Cách tiếp cận này làm
cho các giả định rằng phương pháp Giải quyết là một phần của một ứng dụng giao diện điều khiển.
Giá trị của tham số giá trị Boolean được chuyển vào một biến Boolean địa phương tên là pb chỉ để có
một tên biến ngắn để làm việc. numberOfSymbolsToPrint này được thiết lập đến 10 để mỗi tăng trong
thanh trạng thái sẽ đại diện cho 10 phần trăm của tổng số tiến bộ, được xác định bằng giá trị
maxNumberCycles (biến tăng được sử dụng để xác định chu kỳ tiến bộ rất nhiều đại diện 10 phần
trăm).
Sau khi biến điều khiển vòng lặp, chu kỳ, được khởi tạo là 0, một vòng lặp trong khi được sử dụng để
xử lý mỗi con ong trong tổ. Một vòng lặp for có thể chỉ là một cách dễ dàng được sử dụng. Trên mỗi
chu kỳ, các mảng ong được lặp lại bằng cách sử dụng vòng lặp for và mỗi đối tượng Bee được chế biến
theo phương pháp trợ giúp thích hợp. Sau khi mỗi con ong đã được xử lý, nếu các tham số
doProgressBar Boolean là đúng, mã này sử dụng các nhà điều hành môđun,%, để kiểm tra nếu nó là
thời gian để in một cập nhật cho các thanh tiến trình bằng cách sử dụng một nhân vật ^.
Phương pháp ProcessActiveBee
Phương pháp ProcessActiveBee là trái tim của một thuật toán SBC và là phương pháp phức tạp nhất về
kích thước mã và phân nhánh. Phương pháp ProcessActiveBee được trình bày trong Hình 10.
Hình 10 Phương pháp ProcessActiveBee
1. private void ProcessActiveBee (int i) {
2. char [] hàng xóm = GenerateNeighborMemoryMatrix (ong [i] memoryMatrix.);
3. đôi neighborQuality = MeasureOfQuality (hàng xóm);
4. đôi prob = random.NextDouble ();
5. bool memoryWasUpdated = false;
6. bool numberOfVisitsOverLimit = false;
7.
8. if (neighborQuality <ong [i] measureOfQuality.) {/ / tốt hơn
9. if (prob <probMistake) {/ / sai lầm
10. + + Ong [i] numberOfVisits.
11. nếu (con ong [i] numberOfVisits>. maxNumberVisits)
12. numberOfVisitsOverLimit = true;
13. }
14. else {/ / Không có sai lầm
15. Array.Copy (hàng xóm, ong [i] memoryMatrix, neighbor.Length.);
16. ong [i] measureOfQuality = neighborQuality.
17. ong [i] numberOfVisits = 0.
18. memoryWasUpdated = true;
19. }
20. }
21. else {/ / Không tìm thấy người hàng xóm tốt hơn
22. if (prob <probMistake) {/ / Sai lầm
23. Array.Copy (hàng xóm, ong [i] memoryMatrix, neighbor.Length.);
24. ong [i] measureOfQuality = neighborQuality.
25. ong [i] numberOfVisits = 0.
26. memoryWasUpdated = true;
27. }
28. else {/ / Không có sai lầm
29. + + Ong [i] numberOfVisits.
30. nếu (con ong [i] numberOfVisits>. maxNumberVisits)
31. numberOfVisitsOverLimit = true;
32. }
33. }
34.
35. if (numberOfVisitsOverLimit == true) {
36. ong [i] trạng thái = 0.
37. ong [i] numberOfVisits = 0.
38. int x = random.Next (numberInactive);
39. ong [indexesOfInactiveBees [x]] trạng thái = 1.
40. indexesOfInactiveBees [x] = i;
41. }
42. khác nếu (memoryWasUpdated == true) {
43. if ([i]. ong measureOfQuality <this.bestMeasureOfQuality) {
44. Array.Copy (ong [i] memoryMatrix, this.bestMemoryMatrix,.
45. ong [i] memoryMatrix.Length).
46. this.bestMeasureOfQuality = ong [i]. measureOfQuality
47. }
48. DoWaggleDance (i);
49. }
50. else {
51. trở lại;
52. }
53. }
Phương pháp ProcessActiveBee chấp nhận một tham số đầu vào đơn, tôi, đó là chỉ số của các con ong
ong trong mảng. Các hoạt động đầu tiên của ong có được một giải pháp tương đối so với người hàng
xóm giải pháp hiện tại của nó được lưu trữ trong memoryMatrix, và sau đó xác định chất lượng của
hàng xóm rằng:
1. char [] hàng xóm =
2. GenerateNeighborMemoryMatrix (ong [i] memoryMatrix.);
3. đôi neighborQuality = MeasureOfQuality (hàng xóm);
Tiếp theo, thuật toán thiết lập ba biến địa phương sẽ được sử dụng sau này:
1. đôi prob = random.NextDouble ();)
2. bool memoryWasUpdated = false;
3. bool numberOfVisitsOverLimit = false;
Biến prob có một giá trị giữa 0.0 và 1.0 và sẽ được so sánh với giá trị trường probMistake để xác định
xem con ong làm cho một sai lầm trong việc đánh giá các giải pháp hàng xóm-có nghĩa là, từ chối một
giải pháp hàng xóm tốt hơn hoặc chấp nhận một giải pháp hàng xóm tồi tệ hơn.
Giá trị Boolean memoryWasUpdated sẽ được sử dụng để xác định xem các con ong đang hoạt động cần
thực hiện một điệu nhảy lúc lắc để những con ong không hoạt động (nếu đúng) hay không (nếu sai).
Các numberOfVisitsOverLimit Boolean sẽ được so sánh với trường maxNumberVisits để xác định xem
các con ong đã cạn kiệt nguồn thức ăn đặc biệt mà không tìm một giải pháp hàng xóm tốt hơn, và nếu
như vậy nên chuyển đổi từ trạng thái hoạt động đến tình trạng không hoạt động.
Nếu ong hiện nay tìm thấy một giải pháp hàng xóm tốt hơn, thuật toán xác định xem con ong làm cho
một sai lầm và từ chối hàng xóm tốt hơn hoặc nếu ong chấp nhận người hàng xóm tốt hơn. Tương tự
như vậy, nếu ong hiện nay không tìm thấy một giải pháp hàng xóm tốt hơn, thuật toán xác định xem
con ong làm cho một sai lầm và chấp nhận giải pháp hàng xóm tồi tệ hơn hoặc không làm lỗi và từ chối
những người hàng xóm.
Chú ý rằng có hai loại khác nhau của những sai lầm có thể, nhưng cả hai loại sai lầm có cùng một xác
suất, probMistake = 0,01. Có một số nghiên cứu cho thấy sử dụng hai xác suất khác nhau cho hai loại
khác nhau của những sai lầm không cải thiện tính hiệu quả của thuật toán SBC, nhưng bạn có thể
muốn thử nghiệm với hai giá trị ngưỡng khác nhau.
Sau khi những con ong đang hoạt động hiện tại chấp nhận hoặc từ chối giải pháp hàng xóm, kiểm tra
thuật toán nếu số lần truy cập truy cập đã vượt quá ngưỡng maxNumberVisits. Nếu vậy, tình trạng
hiện tại của con ong được chuyển đổi để hoạt động, một con ong lựa chọn ngẫu nhiên không hoạt
động được chuyển thành trạng thái hoạt động và các mảng indexesOfInactiveBees được cập nhật. Tiếp
theo, thuật toán để kiểm tra xem nếu bộ nhớ của ong đã được cập nhật. Nếu vậy, giải pháp mới được
kiểm tra để xem nếu nó là một mới giải pháp tốt nhất toàn cầu, và sau đó một phương pháp bổ trợ tư
nhân, DoWaggleDance, được gọi là để mô phỏng các con ong quay trở lại các thông tin tổ ong và truyền
đạt về các nguồn thức ăn mới cho những con ong không hoạt động.
Phương pháp DoWaggleDance
Phương pháp trợ giúp DoWaggleDance mô phỏng một con ong trinh sát hoạt động hoặc trở về tổ và
sau đó thực hiện một điệu nhảy lúc lắc để ong không hoạt động để truyền đạt thông tin về vị trí và
chất lượng của một nguồn thực phẩm. Đây là phương pháp DoWaggleDance:
1. private void DoWaggleDance (int i) {
2. cho (ii int = 0; ii <numberInactive; + + ii) {
3. int b = indexesOfInactiveBees [ii];
4. nếu (con ong [i] measureOfQuality <ong [b].. measureOfQuality) {
5. hai p = random.NextDouble ();
6. if (this.probPersuasion> p) {
7. Array.Copy (ong [i] memoryMatrix,. Ong [b]. MemoryMatrix,
8. ong [i] memoryMatrix.Length).
9. ong [b] measureOfQuality = ong [i] measureOfQuality..;
10. }
11. }
12. }
13. }
Các i tham số đầu vào là các chỉ số của ong hiện nay thực hiện những điệu nhảy ảo lúc lắc. Các thước
đo chất lượng của giải pháp hiện tại của ong được so sánh với các thước đo chất lượng của mỗi con
ong không hoạt động. Nếu ong hiện tại của giải pháp là tốt hơn và những con ong hiện tại không hoạt
động là thuyết phục (với xác suất probPersuasion = 0,90), con ong hiện tại của bộ nhớ được sao chép
vào bộ nhớ của ong không hoạt động.
Lưu ý rằng có nhiều cơ hội để kiểm tra lỗi chèn vào trong mã trình bày trong bài viết này. Ví dụ, bên
trong vòng lặp for trong DoWaggleDance, bạn có thể muốn kiểm tra tình trạng hiện tại của ong không
hoạt động với:
1. nếu (. ong [b] tình trạng = 0!) ném ngoại lệ mới (...);
Hoặc bạn có thể muốn xác minh số con ong không hoạt động của các chuyến thăm truy cập với:
1. nếu (. ong [b] numberOfVisits = 0!) ném ngoại lệ mới (...);
ProcessScoutBee và ProcessInactiveBee
Phương pháp trợ giúp ProcessScoutBee được sử dụng bởi các phương pháp mô phỏng Giải quyết các
hành động của một con ong trinh sát ngẫu nhiên tìm kiếm nguồn thức ăn hấp dẫn. Phương pháp
ProcessScoutBee được trình bày trong Hình 11.
Hình 11: Phương pháp ProcessScoutBee
1. private void ProcessScoutBee (int i) {
2. char [] randomFoodSource = GenerateRandomMemoryMatrix ();
3. đôi randomFoodSourceQuality =
4. MeasureOfQuality (randomFoodSource);
5. if (randomFoodSourceQuality <ong [i]. measureOfQuality {
6. Array.Copy (randomFoodSource, ong [i]. MemoryMatrix,
7. randomFoodSource.Length);
8. ong [i] measureOfQuality = randomFoodSourceQuality.
9. if ([i]. ong measureOfQuality <bestMeasureOfQuality) {
10. Array.Copy (ong [i] memoryMatrix, this.bestMemoryMatrix,.
11. ong [i] memoryMatrix.Length).
12. this.bestMeasureOfQuality = ong [i] measureOfQuality.
13. }
14. DoWaggleDance (i);
15. }
16. }
Các tham số đầu vào i đại diện cho các chỉ số của một con ong trinh sát trong mảng ong. Một con ong
trinh sát tạo ra một giải pháp ngẫu nhiên, kiểm tra nếu các giải pháp ngẫu nhiên là tốt hơn so với các
giải pháp hiện tại trong bộ nhớ, và, nếu có, bản sao các giải pháp ngẫu nhiên vào bộ nhớ. Hãy nhớ rằng
các giá trị chất lượng nhỏ hơn là tốt hơn. Nếu ong trinh sát đã tìm thấy một giải pháp tốt hơn, các thuật
toán để kiểm tra xem liệu các giải pháp mới là một giải pháp toàn cầu tốt nhất.
Lưu ý rằng không giống như những con ong đang hoạt động, trong những con ong trinh sát SBC thực
hiện không bao giờ phạm sai lầm đánh giá chất lượng của một nguồn thực phẩm. Không có nghiên cứu
hiện hành về hiệu quả của những sai lầm của ong trinh sát.
Phương pháp ProcessInactiveBee là:
1. `Private void ProcessInactiveBee (int i) {
2. trở lại;
3. }
4. private void ProcessInactiveBee (int i) {
5. trở lại;
6. }
Trong thực hiện không hoạt động được SBC ong chính xác điều đó, không hoạt động, vì vậy phương
pháp ProcessInactiveBee chỉ đơn thuần là giữ chỗ trong trường hợp bạn muốn thực hiện một số vấn đề
phụ thuộc vào logic cho một con ong không hoạt động. Một trong những sửa đổi có thể sẽ được biến
đổi ngẫu nhiên bộ nhớ một con ong không hoạt động với một số xác suất rất nhỏ.
Tổng kết
Quá trình tổng thể thực hiện một thuật toán SBC bắt đầu với nhận dạng vấn đề. Phức tạp, không số,
vấn đề tối ưu hóa tổ hợp không có tính quyết định các giải pháp thực tế thường được ứng viên tốt cho
một giải pháp SBC. Các vấn đề mục tiêu phải có một cách để đại diện cho một giải pháp (thường là một
mảng hoặc ma trận) và mỗi giải pháp phải có một số loại của một giải pháp hàng xóm và đo lường chất
lượng một giải pháp.
Ví dụ, hãy xem xét các vấn đề của một đồ thị phân chia thành hai phần sao cho số lượng kết nối trong
mỗi phần là tối đa và số lượng kết nối giữa hai phần được giảm thiểu. Vấn đề phân vùng đồ thị là tổ hợp
và không có thuật toán nhanh chóng mà tìm giải pháp tối ưu nhất (mặc dù có những thuật toán tất
định có lợi trong việc tìm ra các giải pháp gần tối ưu). Có rất nhiều vấn đề khác NP-đầy đủ và cứng NP
có thể được giải quyết bằng cách sử dụng một SBC.
SBC thuật toán dựa trên hành vi của các hệ thống tự nhiên. Có những thuật toán khác, bao gồm các
thuật toán di truyền (GA) dựa trên chọn lọc tự nhiên và sự tiến hóa, tối ưu hóa đàn kiến (aco) dựa trên
hành vi của loài kiến, và mô phỏng luyện kim (SA) dựa trên các tính chất vật lý của kim loại làm mát.
Các thuật toán dựa trên các hệ thống tự nhiên thường dễ thực hiện tương đối so với phương pháp tiếp
cận tất định. Tuy nhiên, các thuật toán dựa trên các hệ thống tự nhiên thường đòi hỏi các đặc điểm kỹ
thuật của các giá trị cho một số tham số có xu hướng nhạy cảm đối với hiệu quả của giải pháp hội tụ
tốc độ và độ chính xác giải pháp. Trong trường hợp của một SBC, các thông số nhạy cảm mà phải được
điều chỉnh cho mỗi vấn đề bao gồm số lượng của từng loại ong, số lượng tối đa số lần truy cập trước
khi một nguồn thức ăn cạn kiệt, không hoạt động ngưỡng xác suất ong thuyết phục và xác suất sai lầm
hoạt động của ong.
Mặc dù SBC thuật toán không áp dụng cho mọi vấn đề, trong một số kịch bản họ có thể là những công
cụ cực kỳ mạnh mẽ.
________________________________________Dr. James McCaffrey làm việc cho Volt Thông tin Khoa
học Inc, nơi ông quản lý đào tạo kỹ thuật cho các kỹ sư phần mềm làm việc tại các khuôn viên
Microsoft tại Redmond, Washington,. Ông đã từng làm việc trên một số sản phẩm của Microsoft, bao
gồm cả Internet Explorer và MSN Search. Tiến sĩ McCaffrey là tác giả của "NET kiểm tra. Tự động hóa
Công thức nấu ăn" (Apress, 2006) và có thể đạt được tại jammc@microsoft.com.
Nhờ các chuyên gia kỹ thuật sau đây để xem lại bài viết này: Dan Liebling và Anne Loomis Thompson, cả
hai nghiên cứu của Microsoft

Contenu connexe

Similaire à Colony bee mô phỏng

Similaire à Colony bee mô phỏng (20)

Bai thi Nghiem ky thuat dien tu
Bai thi Nghiem ky thuat dien tuBai thi Nghiem ky thuat dien tu
Bai thi Nghiem ky thuat dien tu
 
Huong dan 8 o so
Huong dan 8 o soHuong dan 8 o so
Huong dan 8 o so
 
Báo cáo bài tập lớn
Báo cáo bài tập lớnBáo cáo bài tập lớn
Báo cáo bài tập lớn
 
Vb6 16 (6)
Vb6 16 (6)Vb6 16 (6)
Vb6 16 (6)
 
Cac van de co so kh may tinh
Cac van de co so kh may tinhCac van de co so kh may tinh
Cac van de co so kh may tinh
 
Ngon ngu c theo chuan ansi
Ngon ngu c theo chuan ansiNgon ngu c theo chuan ansi
Ngon ngu c theo chuan ansi
 
Phạm văn ất
Phạm văn ấtPhạm văn ất
Phạm văn ất
 
Dien tu so
Dien tu soDien tu so
Dien tu so
 
Kỹ thuật số
Kỹ thuật sốKỹ thuật số
Kỹ thuật số
 
C++ can ban(dung thu vien iostream)
C++ can ban(dung thu vien iostream)C++ can ban(dung thu vien iostream)
C++ can ban(dung thu vien iostream)
 
Quan ly bo nho trong C#
Quan ly bo nho trong C#Quan ly bo nho trong C#
Quan ly bo nho trong C#
 
Ctdlgt
CtdlgtCtdlgt
Ctdlgt
 
Luận Văn Phương Pháp Khoảng Cách Trong Phân Tích Thống Kê mẫu ĐIểm Không gian
Luận Văn Phương Pháp Khoảng Cách Trong Phân Tích Thống Kê mẫu ĐIểm Không gianLuận Văn Phương Pháp Khoảng Cách Trong Phân Tích Thống Kê mẫu ĐIểm Không gian
Luận Văn Phương Pháp Khoảng Cách Trong Phân Tích Thống Kê mẫu ĐIểm Không gian
 
Ctdlgt
CtdlgtCtdlgt
Ctdlgt
 
Ngân hàng câu hỏi kiến trúc máy tính
Ngân hàng câu hỏi kiến trúc máy tínhNgân hàng câu hỏi kiến trúc máy tính
Ngân hàng câu hỏi kiến trúc máy tính
 
Bài tập CTDL và GT 13
Bài tập CTDL và GT 13Bài tập CTDL và GT 13
Bài tập CTDL và GT 13
 
Kc book
Kc bookKc book
Kc book
 
C++ can ban
C++ can banC++ can ban
C++ can ban
 
Ltc 6
Ltc 6Ltc 6
Ltc 6
 
Giao trinh ctmt
Giao trinh ctmtGiao trinh ctmt
Giao trinh ctmt
 

Dernier

Bai 1 cong bo mot cong trinh nghien cuu khoa hoc
Bai 1 cong bo mot cong trinh nghien cuu khoa hocBai 1 cong bo mot cong trinh nghien cuu khoa hoc
Bai 1 cong bo mot cong trinh nghien cuu khoa hocVnPhan58
 
CHƯƠNG VII LUẬT DÂN SỰ (2) Pháp luật đại cương.pptx
CHƯƠNG VII LUẬT DÂN SỰ (2) Pháp luật đại cương.pptxCHƯƠNG VII LUẬT DÂN SỰ (2) Pháp luật đại cương.pptx
CHƯƠNG VII LUẬT DÂN SỰ (2) Pháp luật đại cương.pptx22146042
 
Slide Webinar Hướng dẫn sử dụng ChatGPT cho người mới bắt đầ...
Slide Webinar Hướng dẫn sử dụng ChatGPT cho người mới bắt đầ...Slide Webinar Hướng dẫn sử dụng ChatGPT cho người mới bắt đầ...
Slide Webinar Hướng dẫn sử dụng ChatGPT cho người mới bắt đầ...Học viện Kstudy
 
50 ĐỀ ĐỀ XUẤT THI VÀO 10 THPT SỞ GIÁO DỤC THANH HÓA MÔN TIẾNG ANH 9 CÓ TỰ LUẬ...
50 ĐỀ ĐỀ XUẤT THI VÀO 10 THPT SỞ GIÁO DỤC THANH HÓA MÔN TIẾNG ANH 9 CÓ TỰ LUẬ...50 ĐỀ ĐỀ XUẤT THI VÀO 10 THPT SỞ GIÁO DỤC THANH HÓA MÔN TIẾNG ANH 9 CÓ TỰ LUẬ...
50 ĐỀ ĐỀ XUẤT THI VÀO 10 THPT SỞ GIÁO DỤC THANH HÓA MÔN TIẾNG ANH 9 CÓ TỰ LUẬ...Nguyen Thanh Tu Collection
 
ĐỀ THAM KHẢO THEO HƯỚNG MINH HỌA 2025 KIỂM TRA GIỮA HỌC KÌ + CUỐI HỌC KÌ 2 NĂ...
ĐỀ THAM KHẢO THEO HƯỚNG MINH HỌA 2025 KIỂM TRA GIỮA HỌC KÌ + CUỐI HỌC KÌ 2 NĂ...ĐỀ THAM KHẢO THEO HƯỚNG MINH HỌA 2025 KIỂM TRA GIỮA HỌC KÌ + CUỐI HỌC KÌ 2 NĂ...
ĐỀ THAM KHẢO THEO HƯỚNG MINH HỌA 2025 KIỂM TRA GIỮA HỌC KÌ + CUỐI HỌC KÌ 2 NĂ...Nguyen Thanh Tu Collection
 
[GIẢI PHẪU BỆNH] Tổn thương cơ bản của tb bào mô
[GIẢI PHẪU BỆNH] Tổn thương cơ bản của tb bào mô[GIẢI PHẪU BỆNH] Tổn thương cơ bản của tb bào mô
[GIẢI PHẪU BỆNH] Tổn thương cơ bản của tb bào môBryan Williams
 
ĐẢNG LÃNH ĐẠO HAI CUỘC KHÁNG CHIẾN GIÀNH ĐỘC LẬP HOÀN TOÀN, THỐNG NHẤT ĐẤT NƯ...
ĐẢNG LÃNH ĐẠO HAI CUỘC KHÁNG CHIẾN GIÀNH ĐỘC LẬP HOÀN TOÀN, THỐNG NHẤT ĐẤT NƯ...ĐẢNG LÃNH ĐẠO HAI CUỘC KHÁNG CHIẾN GIÀNH ĐỘC LẬP HOÀN TOÀN, THỐNG NHẤT ĐẤT NƯ...
ĐẢNG LÃNH ĐẠO HAI CUỘC KHÁNG CHIẾN GIÀNH ĐỘC LẬP HOÀN TOÀN, THỐNG NHẤT ĐẤT NƯ...PhcTrn274398
 
Sáng kiến “Sử dụng ứng dụng Quizizz nhằm nâng cao chất lượng ôn thi tốt nghiệ...
Sáng kiến “Sử dụng ứng dụng Quizizz nhằm nâng cao chất lượng ôn thi tốt nghiệ...Sáng kiến “Sử dụng ứng dụng Quizizz nhằm nâng cao chất lượng ôn thi tốt nghiệ...
Sáng kiến “Sử dụng ứng dụng Quizizz nhằm nâng cao chất lượng ôn thi tốt nghiệ...Nguyen Thanh Tu Collection
 
30 ĐỀ PHÁT TRIỂN THEO CẤU TRÚC ĐỀ MINH HỌA BGD NGÀY 22-3-2024 KỲ THI TỐT NGHI...
30 ĐỀ PHÁT TRIỂN THEO CẤU TRÚC ĐỀ MINH HỌA BGD NGÀY 22-3-2024 KỲ THI TỐT NGHI...30 ĐỀ PHÁT TRIỂN THEO CẤU TRÚC ĐỀ MINH HỌA BGD NGÀY 22-3-2024 KỲ THI TỐT NGHI...
30 ĐỀ PHÁT TRIỂN THEO CẤU TRÚC ĐỀ MINH HỌA BGD NGÀY 22-3-2024 KỲ THI TỐT NGHI...Nguyen Thanh Tu Collection
 
200 câu hỏi trắc nghiệm ôn tập PLDC.pdf
200 câu hỏi trắc nghiệm ôn tập  PLDC.pdf200 câu hỏi trắc nghiệm ôn tập  PLDC.pdf
200 câu hỏi trắc nghiệm ôn tập PLDC.pdfdong92356
 
TỔNG HỢP 30 ĐỀ THI CHỌN HSG CÁC TRƯỜNG THPT CHUYÊN VÙNG DUYÊN HẢI & ĐỒNG BẰNG...
TỔNG HỢP 30 ĐỀ THI CHỌN HSG CÁC TRƯỜNG THPT CHUYÊN VÙNG DUYÊN HẢI & ĐỒNG BẰNG...TỔNG HỢP 30 ĐỀ THI CHỌN HSG CÁC TRƯỜNG THPT CHUYÊN VÙNG DUYÊN HẢI & ĐỒNG BẰNG...
TỔNG HỢP 30 ĐỀ THI CHỌN HSG CÁC TRƯỜNG THPT CHUYÊN VÙNG DUYÊN HẢI & ĐỒNG BẰNG...Nguyen Thanh Tu Collection
 
Bài giảng về vật liệu ceramic ( sứ vệ sinh, gạch ốp lát )
Bài giảng về vật liệu ceramic ( sứ vệ sinh, gạch ốp lát )Bài giảng về vật liệu ceramic ( sứ vệ sinh, gạch ốp lát )
Bài giảng về vật liệu ceramic ( sứ vệ sinh, gạch ốp lát )lamdapoet123
 
Ma trận - định thức và các ứng dụng trong kinh tế
Ma trận - định thức và các ứng dụng trong kinh tếMa trận - định thức và các ứng dụng trong kinh tế
Ma trận - định thức và các ứng dụng trong kinh tếngTonH1
 
SÁNG KIẾN “THIẾT KẾ VÀ SỬ DỤNG INFOGRAPHIC TRONG DẠY HỌC ĐỊA LÍ 11 (BỘ SÁCH K...
SÁNG KIẾN “THIẾT KẾ VÀ SỬ DỤNG INFOGRAPHIC TRONG DẠY HỌC ĐỊA LÍ 11 (BỘ SÁCH K...SÁNG KIẾN “THIẾT KẾ VÀ SỬ DỤNG INFOGRAPHIC TRONG DẠY HỌC ĐỊA LÍ 11 (BỘ SÁCH K...
SÁNG KIẾN “THIẾT KẾ VÀ SỬ DỤNG INFOGRAPHIC TRONG DẠY HỌC ĐỊA LÍ 11 (BỘ SÁCH K...Nguyen Thanh Tu Collection
 
Trích dẫn trắc nghiệm tư tưởng HCM5.docx
Trích dẫn trắc nghiệm tư tưởng HCM5.docxTrích dẫn trắc nghiệm tư tưởng HCM5.docx
Trích dẫn trắc nghiệm tư tưởng HCM5.docxnhungdt08102004
 
BỘ ĐỀ KIỂM TRA CUỐI KÌ 2 VẬT LÝ 11 - KẾT NỐI TRI THỨC - THEO CẤU TRÚC ĐỀ MIN...
BỘ ĐỀ KIỂM TRA CUỐI KÌ 2 VẬT LÝ 11 - KẾT NỐI TRI THỨC - THEO CẤU TRÚC ĐỀ MIN...BỘ ĐỀ KIỂM TRA CUỐI KÌ 2 VẬT LÝ 11 - KẾT NỐI TRI THỨC - THEO CẤU TRÚC ĐỀ MIN...
BỘ ĐỀ KIỂM TRA CUỐI KÌ 2 VẬT LÝ 11 - KẾT NỐI TRI THỨC - THEO CẤU TRÚC ĐỀ MIN...Nguyen Thanh Tu Collection
 
Kiểm tra chạy trạm lí thuyết giữa kì giải phẫu sinh lí
Kiểm tra chạy trạm lí thuyết giữa kì giải phẫu sinh líKiểm tra chạy trạm lí thuyết giữa kì giải phẫu sinh lí
Kiểm tra chạy trạm lí thuyết giữa kì giải phẫu sinh líDr K-OGN
 
BỘ ĐỀ PHÁT TRIỂN THEO CẤU TRÚC ĐỀ MINH HỌA BGD NGÀY 22-3-2024 KỲ THI TỐT NGHI...
BỘ ĐỀ PHÁT TRIỂN THEO CẤU TRÚC ĐỀ MINH HỌA BGD NGÀY 22-3-2024 KỲ THI TỐT NGHI...BỘ ĐỀ PHÁT TRIỂN THEO CẤU TRÚC ĐỀ MINH HỌA BGD NGÀY 22-3-2024 KỲ THI TỐT NGHI...
BỘ ĐỀ PHÁT TRIỂN THEO CẤU TRÚC ĐỀ MINH HỌA BGD NGÀY 22-3-2024 KỲ THI TỐT NGHI...Nguyen Thanh Tu Collection
 
Sáng kiến Dạy học theo định hướng STEM một số chủ đề phần “vật sống”, Khoa họ...
Sáng kiến Dạy học theo định hướng STEM một số chủ đề phần “vật sống”, Khoa họ...Sáng kiến Dạy học theo định hướng STEM một số chủ đề phần “vật sống”, Khoa họ...
Sáng kiến Dạy học theo định hướng STEM một số chủ đề phần “vật sống”, Khoa họ...Nguyen Thanh Tu Collection
 
Hệ phương trình tuyến tính và các ứng dụng trong kinh tế
Hệ phương trình tuyến tính và các ứng dụng trong kinh tếHệ phương trình tuyến tính và các ứng dụng trong kinh tế
Hệ phương trình tuyến tính và các ứng dụng trong kinh tếngTonH1
 

Dernier (20)

Bai 1 cong bo mot cong trinh nghien cuu khoa hoc
Bai 1 cong bo mot cong trinh nghien cuu khoa hocBai 1 cong bo mot cong trinh nghien cuu khoa hoc
Bai 1 cong bo mot cong trinh nghien cuu khoa hoc
 
CHƯƠNG VII LUẬT DÂN SỰ (2) Pháp luật đại cương.pptx
CHƯƠNG VII LUẬT DÂN SỰ (2) Pháp luật đại cương.pptxCHƯƠNG VII LUẬT DÂN SỰ (2) Pháp luật đại cương.pptx
CHƯƠNG VII LUẬT DÂN SỰ (2) Pháp luật đại cương.pptx
 
Slide Webinar Hướng dẫn sử dụng ChatGPT cho người mới bắt đầ...
Slide Webinar Hướng dẫn sử dụng ChatGPT cho người mới bắt đầ...Slide Webinar Hướng dẫn sử dụng ChatGPT cho người mới bắt đầ...
Slide Webinar Hướng dẫn sử dụng ChatGPT cho người mới bắt đầ...
 
50 ĐỀ ĐỀ XUẤT THI VÀO 10 THPT SỞ GIÁO DỤC THANH HÓA MÔN TIẾNG ANH 9 CÓ TỰ LUẬ...
50 ĐỀ ĐỀ XUẤT THI VÀO 10 THPT SỞ GIÁO DỤC THANH HÓA MÔN TIẾNG ANH 9 CÓ TỰ LUẬ...50 ĐỀ ĐỀ XUẤT THI VÀO 10 THPT SỞ GIÁO DỤC THANH HÓA MÔN TIẾNG ANH 9 CÓ TỰ LUẬ...
50 ĐỀ ĐỀ XUẤT THI VÀO 10 THPT SỞ GIÁO DỤC THANH HÓA MÔN TIẾNG ANH 9 CÓ TỰ LUẬ...
 
ĐỀ THAM KHẢO THEO HƯỚNG MINH HỌA 2025 KIỂM TRA GIỮA HỌC KÌ + CUỐI HỌC KÌ 2 NĂ...
ĐỀ THAM KHẢO THEO HƯỚNG MINH HỌA 2025 KIỂM TRA GIỮA HỌC KÌ + CUỐI HỌC KÌ 2 NĂ...ĐỀ THAM KHẢO THEO HƯỚNG MINH HỌA 2025 KIỂM TRA GIỮA HỌC KÌ + CUỐI HỌC KÌ 2 NĂ...
ĐỀ THAM KHẢO THEO HƯỚNG MINH HỌA 2025 KIỂM TRA GIỮA HỌC KÌ + CUỐI HỌC KÌ 2 NĂ...
 
[GIẢI PHẪU BỆNH] Tổn thương cơ bản của tb bào mô
[GIẢI PHẪU BỆNH] Tổn thương cơ bản của tb bào mô[GIẢI PHẪU BỆNH] Tổn thương cơ bản của tb bào mô
[GIẢI PHẪU BỆNH] Tổn thương cơ bản của tb bào mô
 
ĐẢNG LÃNH ĐẠO HAI CUỘC KHÁNG CHIẾN GIÀNH ĐỘC LẬP HOÀN TOÀN, THỐNG NHẤT ĐẤT NƯ...
ĐẢNG LÃNH ĐẠO HAI CUỘC KHÁNG CHIẾN GIÀNH ĐỘC LẬP HOÀN TOÀN, THỐNG NHẤT ĐẤT NƯ...ĐẢNG LÃNH ĐẠO HAI CUỘC KHÁNG CHIẾN GIÀNH ĐỘC LẬP HOÀN TOÀN, THỐNG NHẤT ĐẤT NƯ...
ĐẢNG LÃNH ĐẠO HAI CUỘC KHÁNG CHIẾN GIÀNH ĐỘC LẬP HOÀN TOÀN, THỐNG NHẤT ĐẤT NƯ...
 
Sáng kiến “Sử dụng ứng dụng Quizizz nhằm nâng cao chất lượng ôn thi tốt nghiệ...
Sáng kiến “Sử dụng ứng dụng Quizizz nhằm nâng cao chất lượng ôn thi tốt nghiệ...Sáng kiến “Sử dụng ứng dụng Quizizz nhằm nâng cao chất lượng ôn thi tốt nghiệ...
Sáng kiến “Sử dụng ứng dụng Quizizz nhằm nâng cao chất lượng ôn thi tốt nghiệ...
 
30 ĐỀ PHÁT TRIỂN THEO CẤU TRÚC ĐỀ MINH HỌA BGD NGÀY 22-3-2024 KỲ THI TỐT NGHI...
30 ĐỀ PHÁT TRIỂN THEO CẤU TRÚC ĐỀ MINH HỌA BGD NGÀY 22-3-2024 KỲ THI TỐT NGHI...30 ĐỀ PHÁT TRIỂN THEO CẤU TRÚC ĐỀ MINH HỌA BGD NGÀY 22-3-2024 KỲ THI TỐT NGHI...
30 ĐỀ PHÁT TRIỂN THEO CẤU TRÚC ĐỀ MINH HỌA BGD NGÀY 22-3-2024 KỲ THI TỐT NGHI...
 
200 câu hỏi trắc nghiệm ôn tập PLDC.pdf
200 câu hỏi trắc nghiệm ôn tập  PLDC.pdf200 câu hỏi trắc nghiệm ôn tập  PLDC.pdf
200 câu hỏi trắc nghiệm ôn tập PLDC.pdf
 
TỔNG HỢP 30 ĐỀ THI CHỌN HSG CÁC TRƯỜNG THPT CHUYÊN VÙNG DUYÊN HẢI & ĐỒNG BẰNG...
TỔNG HỢP 30 ĐỀ THI CHỌN HSG CÁC TRƯỜNG THPT CHUYÊN VÙNG DUYÊN HẢI & ĐỒNG BẰNG...TỔNG HỢP 30 ĐỀ THI CHỌN HSG CÁC TRƯỜNG THPT CHUYÊN VÙNG DUYÊN HẢI & ĐỒNG BẰNG...
TỔNG HỢP 30 ĐỀ THI CHỌN HSG CÁC TRƯỜNG THPT CHUYÊN VÙNG DUYÊN HẢI & ĐỒNG BẰNG...
 
Bài giảng về vật liệu ceramic ( sứ vệ sinh, gạch ốp lát )
Bài giảng về vật liệu ceramic ( sứ vệ sinh, gạch ốp lát )Bài giảng về vật liệu ceramic ( sứ vệ sinh, gạch ốp lát )
Bài giảng về vật liệu ceramic ( sứ vệ sinh, gạch ốp lát )
 
Ma trận - định thức và các ứng dụng trong kinh tế
Ma trận - định thức và các ứng dụng trong kinh tếMa trận - định thức và các ứng dụng trong kinh tế
Ma trận - định thức và các ứng dụng trong kinh tế
 
SÁNG KIẾN “THIẾT KẾ VÀ SỬ DỤNG INFOGRAPHIC TRONG DẠY HỌC ĐỊA LÍ 11 (BỘ SÁCH K...
SÁNG KIẾN “THIẾT KẾ VÀ SỬ DỤNG INFOGRAPHIC TRONG DẠY HỌC ĐỊA LÍ 11 (BỘ SÁCH K...SÁNG KIẾN “THIẾT KẾ VÀ SỬ DỤNG INFOGRAPHIC TRONG DẠY HỌC ĐỊA LÍ 11 (BỘ SÁCH K...
SÁNG KIẾN “THIẾT KẾ VÀ SỬ DỤNG INFOGRAPHIC TRONG DẠY HỌC ĐỊA LÍ 11 (BỘ SÁCH K...
 
Trích dẫn trắc nghiệm tư tưởng HCM5.docx
Trích dẫn trắc nghiệm tư tưởng HCM5.docxTrích dẫn trắc nghiệm tư tưởng HCM5.docx
Trích dẫn trắc nghiệm tư tưởng HCM5.docx
 
BỘ ĐỀ KIỂM TRA CUỐI KÌ 2 VẬT LÝ 11 - KẾT NỐI TRI THỨC - THEO CẤU TRÚC ĐỀ MIN...
BỘ ĐỀ KIỂM TRA CUỐI KÌ 2 VẬT LÝ 11 - KẾT NỐI TRI THỨC - THEO CẤU TRÚC ĐỀ MIN...BỘ ĐỀ KIỂM TRA CUỐI KÌ 2 VẬT LÝ 11 - KẾT NỐI TRI THỨC - THEO CẤU TRÚC ĐỀ MIN...
BỘ ĐỀ KIỂM TRA CUỐI KÌ 2 VẬT LÝ 11 - KẾT NỐI TRI THỨC - THEO CẤU TRÚC ĐỀ MIN...
 
Kiểm tra chạy trạm lí thuyết giữa kì giải phẫu sinh lí
Kiểm tra chạy trạm lí thuyết giữa kì giải phẫu sinh líKiểm tra chạy trạm lí thuyết giữa kì giải phẫu sinh lí
Kiểm tra chạy trạm lí thuyết giữa kì giải phẫu sinh lí
 
BỘ ĐỀ PHÁT TRIỂN THEO CẤU TRÚC ĐỀ MINH HỌA BGD NGÀY 22-3-2024 KỲ THI TỐT NGHI...
BỘ ĐỀ PHÁT TRIỂN THEO CẤU TRÚC ĐỀ MINH HỌA BGD NGÀY 22-3-2024 KỲ THI TỐT NGHI...BỘ ĐỀ PHÁT TRIỂN THEO CẤU TRÚC ĐỀ MINH HỌA BGD NGÀY 22-3-2024 KỲ THI TỐT NGHI...
BỘ ĐỀ PHÁT TRIỂN THEO CẤU TRÚC ĐỀ MINH HỌA BGD NGÀY 22-3-2024 KỲ THI TỐT NGHI...
 
Sáng kiến Dạy học theo định hướng STEM một số chủ đề phần “vật sống”, Khoa họ...
Sáng kiến Dạy học theo định hướng STEM một số chủ đề phần “vật sống”, Khoa họ...Sáng kiến Dạy học theo định hướng STEM một số chủ đề phần “vật sống”, Khoa họ...
Sáng kiến Dạy học theo định hướng STEM một số chủ đề phần “vật sống”, Khoa họ...
 
Hệ phương trình tuyến tính và các ứng dụng trong kinh tế
Hệ phương trình tuyến tính và các ứng dụng trong kinh tếHệ phương trình tuyến tính và các ứng dụng trong kinh tế
Hệ phương trình tuyến tính và các ứng dụng trong kinh tế
 

Colony bee mô phỏng

  • 1. Colony Bee mô phỏng (SBC) các thuật toán mô hình hành vi của ong mật và có thể được sử dụng để tìm giải pháp cho vấn đề khó khăn hoặc không thể tổ hợp. Trong bài viết này tôi sẽ giải thích chính xác những gì SBC thuật toán được, mô tả các loại vấn đề có thể được giải quyết bằng cách sử dụng SBC thuật toán, và trình bày một ví dụ cuối đến đầu cuối hoàn thành có sử dụng một thuật toán SBC để giải quyết vấn đề bán hàng du lịch. Một cách tốt cho bạn để có được một cảm giác về các thuật toán SBC và xem nơi tôi đang đứng đầu trong bài viết này là để kiểm tra các chương trình đang chạy demo thấy trong hình 1. Chương trình demo sử dụng một thuật toán SBC để phân tích một tập hợp của 20 thành phố (có tên từ A đến T) và tìm đường đi ngắn nhất mà thăm mỗi thành phố đúng một lần. Các dữ liệu nhân tạo được xây dựng thành phố để các con đường tốt nhất bắt đầu tại thành phố A và tiếp tục thông qua T thành phố, theo thứ tự, và con đường tốt nhất có chiều dài 19,0 đơn vị. Đằng sau những cảnh các thuật toán SBC instantiates một tổ ong của 100 mô phỏng, mỗi trong số đó có một giải pháp tiềm năng ngẫu nhiên. Ban đầu, tốt nhất trong những giải pháp ngẫu nhiên có chiều dài 95,0 con đường của đơn vị. Các thuật toán SBC đi vào một vòng lặp xử lý, chỉ báo bằng thanh tiến trình dựa trên văn bản, mà mô phỏng những hành vi của ong mật thông thường kiếm ăn cho thực phẩm. Khi kết thúc vòng lặp xử lý SBC, giải pháp tốt nhất được tìm thấy có 16 vị trí chính xác trong thành phố 20, và có chiều dài con đường của giải pháp 26,5-gần, nhưng không hoàn toàn, tối ưu. SBC thuật toán thường được gọi là meta-heuristics bởi vì họ cung cấp một khuôn khổ chung và thiết lập các hướng dẫn để tạo ra một giải pháp vấn đề hơn là giải pháp cung cấp một toa thuốc có nhiều chi tiết. Bài viết này trình bày một ví dụ về cách sử dụng một SBC để giải quyết một vấn đề cụ thể. Một khi bạn hiểu như thế nào một SBC có thể được sử dụng để giải quyết một vấn đề, bạn có thể thích ứng với các thuật toán SBC trình bày ở đây để giải quyết vấn đề của riêng bạn. Khi bài viết này sẽ chứng minh, các thuật toán SBC là thích hợp nhất để giải quyết vấn đề phức tạp tổ hợp không có tính quyết định các giải pháp thực tế. Bài viết này giả sử bạn có kỹ năng lập trình trung cấp. Ví dụ trong bài viết này là mã hóa bằng cách sử dụng C #, nhưng tất cả các mã đã được viết để nó có thể dễ dàng tái cấu trúc các ngôn ngữ lập trình khác. Tôi nghĩ rằng bạn sẽ tìm thấy bài viết này khá thú vị và khả năng sử dụng các thuật toán SBC một bổ sung hữu ích cho các kỹ năng cá nhân của bạn. Thông tin về các Bees ong mật thông thường như Apis mellifera giả định vai trò khác nhau trong thuộc địa của mình theo thời gian. Một tổ ong thông thường có thể có 5.000 đến 20.000 con ong cá nhân. ong trưởng thành (20 đến 40 ngày tuổi) thường trở thành ong. Tìm kiếm thức ăn ong thường chiếm một trong ba vai trò: ong đang hoạt động, ong trinh sát và ong không hoạt động. Active ong kiếm ăn đi du lịch đến một nguồn thực phẩm, kiểm tra nguồn thực phẩm hàng xóm, thu thập lương thực và trở về tổ. Hướng đạo ong điều tra khu vực xung quanh các tổ ong, thường là một khu vực lên tới 50 dặm vuông, tìm kiếm nguồn thức ăn hấp dẫn mới. Khoảng 10 phần trăm tìm kiếm thức ăn trong một tổ ong được sử dụng như là trinh sát. Tại bất kỳ thời gian nhất định một số các con ong kiếm ăn không hoạt động. Các hoạt động kiếm ăn đợi gần lối vào tổ. Khi ong trinh sát hoạt động và trở về tổ ong, tùy thuộc vào chất lượng của nguồn thực phẩm mà họ đã chỉ cần truy cập, họ có thể thực hiện một điệu nhảy lúc lắc để chờ đợi những con ong không hoạt động. Có bằng chứng rõ ràng rằng điều này nhảy lúc lắc truyền đạt thông tin cho những con ong không hoạt động về vị trí và chất lượng của nguồn thực phẩm. Không hoạt động kiếm ăn nhận được thông tin nguồn gốc thực phẩm từ các điệu nhảy lúc lắc và có thể trở thành hoạt động kiếm ăn.
  • 2. Nói chung, một con ong kiếm ăn hoạt động tiếp tục thu thập thực phẩm từ một nguồn thực phẩm đặc biệt cho đến khi mà nguồn thức ăn cạn kiệt, lúc đó con ong trở thành một forager không hoạt động. Vấn đề Người bán hàng đi du lịch Các du lịch người bán hàng (TSP) là một trong những vấn đề nghiên cứu rộng rãi nhất trong nghiên cứu khoa học máy tính. Có nhiều biến thể của TSP nhưng, chính thức, vấn đề là để tìm đường đi ngắn nhất mà thăm mỗi thành phố trong một tập hợp của các thành phố đúng một lần. Nếu bạn nhìn vào hình 1 bạn có thể xem các chương trình demo SBC sử dụng một bộ 20 thành phố được tự ý dán nhãn A đến T. Một đường dẫn hợp lệ bao gồm một lệnh đặt của các nhãn thành phố 20, nơi mỗi thành phố xảy ra đúng một lần. Vì vậy có tổng cộng 20! = 2.432.902.008.176.640.000 có thể có đường dẫn. Đằng sau những cảnh có giá trị khoảng cách kết hợp với mỗi cặp của thành phố. Để đơn giản, nếu thành phố c1 <thành phố c2 khoảng cách giữa c1 và c2 chỉ là 1,0 lần khoảng cách thứ tự giữa các nhãn thành phố. Nếu c1> c2 khoảng cách là 1,5 lần khoảng cách thứ tự giữa c1 và c2. Vì vậy, khoảng cách từ A đến B là 1,0 đơn vị tùy ý, khoảng cách từ B đến A là 1,5 đơn vị, khoảng cách từ A đến C là 2,0 đơn vị, vv. Vì vậy, con đường tốt nhất mà thăm mỗi thành phố đúng một lần là A -> B-> C -> ... - T> và tốt nhất (ngắn nhất) chiều dài đường dẫn là (20-1) * 1,0 = 19,0. Trong hầu hết các kịch bản TSP, khoảng cách giữa các thành phố sẽ không giả tạo tính toán. Thay vào đó, các khoảng cách có thể sẽ được lưu trữ trong một số loại cấu trúc dữ liệu tra cứu. Một số biến thể của TSP giả định rằng mỗi thành phố được kết nối với mọi thành phố khác và một số vấn đề giả sử các thành phố không đầy đủ kết nối. Ngoài ra, một số biến thể TSP cho rằng khoảng cách từ bất kỳ thành phố để thành phố c1 c2 là giống như khoảng cách từ thành phố c2 để c1, và một số biến thể vấn đề không làm cho giả định này hai chiều. Ngoại trừ trong những tình huống tầm thường, một cách tiếp cận sức mạnh vũ phu để tìm đường đi ngắn nhất là không khả thi. Ví dụ, với 20 thành phố, thậm chí nếu bạn có thể đánh giá 1.000.000 con đường / giây, kiểm tra tất cả 20! các đường dẫn có thể sẽ đòi hỏi nhiều hơn 77.000 năm. Kiểu này đặc biệt khó khăn vấn đề tối ưu hóa tổ hợp là loại vấn đề mà các thuật toán SBC rất thích hợp để xử lý. Các vấn đề TSP giả được thực hiện trong một lớp có tên là CitiesData, thể hiện trong hình 2. Mã nguồn hoàn chỉnh cho các chương trình demo SBC có sẵn tại code.msdn.microsoft.com/mag201104BeeColony. Hình 2 The Class CitiesData danh 1. lớp CitiesData { 2. công char [], thành phố; 3. 4. công CitiesData (numberCities int) { 5. this.cities = new char [numberCities]; 6. this.cities [0] = 'A'; 7. for (int i = 1; i <this.cities.Length; + + i) 8. this.cities [i] = (char) (this.cities [i - 1] + 1);
  • 3. 9. } 10. 11. Từ xa gấp đôi công cộng (char firstCity, char secondCity) { 12. if (firstCity <secondCity) 13. trả lại 1,0 * ((int) secondCity - (int) firstCity); 14. khác 15. trả lại 1,5 * ((int) firstCity - (int) secondCity); 16. } 17. 18. tăng gấp đôi công ShortestPathLength () { 19. trả lại 1,0 * (this.cities.Length - 1); 20. } 21. 22. công dài NumberOfPossiblePaths () { 23. dài n = this.cities.Length; 24. dài câu trả lời = 1; 25. for (int i = 1; i <= n; + + i) 26. {kiểm tra câu trả lời *= i;} 27. trở lại câu trả lời; 28. } 29. 30. công ghi đè lên dây ToString () { 31. string s = ""; 32. s + = "Thành phố"; 33. for (int i = 0; i <this.cities.Length; + + i) 34. s + = this.cities [i] + ""; 35. trở về; 36. } 37. } Định nghĩa của một số lớp hoặc cấu trúc dữ liệu đại diện cho vấn đề cụ thể của bạn sẽ khác với điều được hiển thị ở đây. Tuy nhiên, như một quy luật chung của ngón tay cái, vấn đề mà rất phù hợp cho các giải pháp sử dụng một thuật toán SBC thường có thể được thể hiện như là một mảng không số, không phải số một ma trận hoặc một mảng không phải số lởm chởm của mảng. Các nhà xây dựng CitiesData chấp nhận một giá trị cho số lượng các thành phố và phân công các thành phố đầu tiên một nhãn của A, thành phố thứ hai của một nhãn của B và như vậy. Khoảng cách là phương pháp xác định một cách một chiều như tôi trước đây được mô tả và giả định rằng thành phố nào có thể đạt được bởi bất kỳ thành phố khác. Phương pháp ShortestPathLength trả về độ dài đường đi tối ưu cho việc xác định khoảng cách. Trong hầu hết trường hợp SBC bạn sẽ không có các thông tin cần thiết để thực hiện một phương thức trả về giải pháp tối ưu. Phương pháp tính chỉ NumberOfPossiblePaths n! trong đó n là số thành phố. Trong một số kịch
  • 4. bản TSP số đường đi có thể là n-1! (Nếu thành phố bắt đầu không quan trọng) và trong một số kịch bản số đường đi có thể là n / 2! (Nếu theo hướng của con đường không quan trọng). Phương thức ToString sử dụng nối chuỗi thay vì lớp StringBuilder hiệu quả hơn để lắp ráp một chuỗi với các dữ liệu mô tả. nối String được sử dụng để tái cấu trúc đơn giản hóa các ngôn ngữ lập trình khác. Trong bài viết này, để giữ cho các mã tương đối ngắn và sạch sẽ, tôi đi đường tắt bạn sẽ không sử dụng trong mã sản xuất, chẳng hạn như loại bỏ hầu hết các kiểm tra lỗi. Ví dụ, phương pháp NumberOfPossiblePaths không đối phó với tràn số nếu kết quả là lớn hơn long.MaxValue. Cấu trúc chương trình SBC Các thuật toán SBC thể hiện trong hình 1 được thực hiện như là một C # giao diện điều khiển ứng dụng. Các cấu trúc tổng thể của chương trình là liệt kê trong hình 3. Chú ý rằng cấu trúc chương trình SBC là tương đối đơn giản và chỉ sử dụng tên miền không gian hệ thống cơ bản. Có ba lớp: lớp Chương trình, mà nhà ở một phương pháp duy nhất chính; các lớp Hive, mà nhà ở tất cả các thuật toán logic SBC và lớp CitiesData trình bày trong phần trước của bài viết này. Lớp Hive là tên chung về Hive hơn là đặt một cái tên cụ thể như TravelingSalesmanHive, mặc dù SBC triển khai thực hiện thuật toán phụ thuộc rất nhiều vào các vấn đề cụ thể chúng được thiết kế để giải quyết. Hình 3: Cấu trúc chương trình tổng thể 1. sử dụng hệ thống; 2. không gian tên {SimulatedBeeColony 3. Chương trình lớp { 4. static void Main (string [] args) { 5. Console.WriteLine (" nBegin mô phỏng thuật toán Bee Colony demo n"); 6. . . . 7. Console.WriteLine ("Cuối mô phỏng Bee Colony demo"); 8. } 9. } 10. 11. lớp Hive { 12. public class {Bee 13. . . . 14. } 15. 16. / / Hive trường dữ liệu ở đây 17. 18. công ghi đè lên dây ToString () {. . . } 19. 20. công Hive (totalNumberBees int, int numberInactive, 21. numberActive int, int numberScout, maxNumberVisits int, 22. int maxNumberCycles, CitiesData citiesData) { 23. . . . 24. } 25. 26. công char [] GenerateRandomMemoryMatrix () {. . . } 27. 28. công char [] GenerateNeighborMemoryMatrix (char [] memoryMatrix) {. . . } 29.
  • 5. 30. tăng gấp đôi công MeasureOfQuality (] [char memoryMatrix) {. . . } 31. 32. Giải quyết công void () {. . . } 33. 34. private void ProcessActiveBee (int i) {. . . } 35. 36. private void ProcessScoutBee (int i) {. . . } 37. 38. private void ProcessInactiveBee (int i) {. . . } 39. 40. private void DoWaggleDance (int i) {. . . } 41. } 42. 43. lớp CitiesData { 44. . . . 45. } 46. 47. } / / Ns Phương pháp chính khá đơn giản. Sau khi hiển thị một thông báo bắt đầu các đối tượng CitiesData được khởi tạo: 1. Console.WriteLine ( 2. "Nạp dữ liệu cho các thành phố du lịch SBC phân tích vấn đề bán hàng"); 3. CitiesData citiesData = mới CitiesData (20); 4. Console.WriteLine (citiesData.ToString ()); 5. Console.WriteLine ("Số lượng các thành phố =" + citiesData.cities.Length); 6. Console.WriteLine ("Số lượng các đường dẫn có thể =" + 7. citiesData.NumberOfPossiblePaths (). ToString ("#,###")); 8. Console.WriteLine ("giải pháp tốt nhất có thể (con đường ngắn nhất) chiều dài =" + 9. citiesData.ShortestPathLength () ToString ("F4")). Trong nhiều kịch bản vấn đề SBC dữ liệu của bạn sẽ nằm trong lưu trữ bên ngoài như một tập tin văn bản hoặc một cơ sở dữ liệu SQL, và bạn sẽ tải dữ liệu thông qua một số vấn đề xây dựng tải hoặc phương thức tải dọc theo dòng myProblemData.Load (datafile). Tiếp theo, các nhà xây dựng Hive được chuẩn bị và được gọi là: 1. int totalNumberBees = 100; 2. numberInactive int = 20; 3. numberActive int = 50; 4. numberScout int = 30; 5. int maxNumberVisits = 100; 6. int maxNumberCycles = 3460; 7. 8. Hive tổ = mới TravelingSalesmanHive (totalNumberBees, 9. numberInactive, numberActive, numberScout, maxNumberVisits, 10. maxNumberCycles, citiesData); Như bạn sẽ thấy chi tiết hơn trong phần sau của bài viết này, một thuật toán SBC sử dụng ba loại ong: hoạt động, không hoạt động và trinh sát. Mặc dù số lượng của từng loại ong có thể được cứng mã hóa, trong hầu hết các kịch bản nó tốt hơn để vượt qua những tính trong khi các thông số cho các nhà xây dựng Hive để thuật toán có thể dễ dàng điều chỉnh để thực hiện. Giá trị của biến totalNumberBees có thể xuất phát từ ba biến số khác, nhưng biến thêm cải thiện khả
  • 6. năng đọc mã ở đây. Tổng số ong sẽ phụ thuộc vào vấn đề cụ thể của bạn. Ngày càng có nhiều ong tốt hơn, nhưng chậm thực hiện chương trình. Về tỷ lệ, có một số nghiên cứu cho thấy tỷ lệ tốt nhất của hoạt động, ong không hoạt động và trinh sát thường khoảng 75 phần trăm, trăm phần trăm 10 và 15, tương ứng. Giá trị 100 được sử dụng cho biến maxNumberVisits sẽ được giải thích ngay, nhưng nó liên quan đến số lượng các giải pháp hàng xóm có liên quan đến một giải pháp nhất định. Biến maxNumberCycles được sử dụng để kiểm soát số lần sẽ lặp đi lặp lại thường xuyên Giải quyết, điều này là cần thiết vì trong các kịch bản thuật toán SBC bạn thường không biết khi nào bạn đã đạt đến một giải pháp tối ưu, nếu bạn biết các giải pháp tối ưu cho bạn thực sự không có một vấn đề để giải quyết. Trong trường hợp này, giá trị của maxNumberCycles được giới hạn chỉ 3460 để các thuật toán SBC đã không tạo ra một kết quả hoàn hảo. Vấn đề ở đây là mặc dù SBC thuật toán có thể tạo ra một kết quả tối ưu, bạn thường không có cách nào biết được điều này và vì vậy bạn phải sẵn sàng chấp nhận một "tốt" kết quả. Khi xây dựng thực thi nó tạo ra một bộ sưu tập của các con ong, mỗi trong số đó có một giải pháp ngẫu nhiên. Các đối tượng Hive theo dõi con đường tốt nhất (ngắn nhất) tổng thể được tìm thấy bởi bất kỳ của những con ong trong tổ ong và chiều dài đường dẫn liên kết của giải pháp tốt nhất. Sau khi kêu gọi các nhà xây dựng Hive, phương pháp chính kết thúc lên bằng cách sử dụng phương thức ToString để hiển thị, ban đầu được tạo ngẫu nhiên Hive giá trị, gọi phương thức Giải quyết với một tham số chỉ ra rằng một thanh tiến trình dựa trên văn bản được in, và sau đó hiển thị tốt nhất đường dẫn và chiều dài đường dẫn liên quan được tìm thấy: 1. ... 2. Console.WriteLine (" nInitial ngẫu nhiên tổ ong"); 3. Console.WriteLine (tổ ong); 4. 5. bool doProgressBar = true; 6. hive.Solve (doProgressBar); 7. 8. Console.WriteLine (" nFinal tổ"); 9. Console.WriteLine (tổ ong); 10. Console.WriteLine ("Cuối mô phỏng Bee Colony demo"); 11. } The Class Bee Như được thể hiện trong hình 3, lớp Hive chứa một định nghĩa Bee lớp lồng nhau. Các chi tiết của định nghĩa Bee được liệt kê trong hình 4. Hình 4 Bee Class danh 1. public class {Bee 2. int công trạng; 3. công char [] memoryMatrix; 4. công đôi measureOfQuality; 5. int công numberOfVisits; 6. 7. công Bee (int tình trạng,] [char memoryMatrix, 8. đôi measureOfQuality, numberOfVisits int) { 9. this.status = trạng thái; 10. this.memoryMatrix = new char [memoryMatrix.Length]; 11. Array.Copy (memoryMatrix, this.memoryMatrix, memoryMatrix.Length); 12. this.measureOfQuality = measureOfQuality; 13. this.numberOfVisits = numberOfVisits;
  • 7. 14. } 15. 16. công ghi đè lên dây ToString () { 17. string s = ""; 18. s + = "Trạng thái =" + this.status + " n"; 19. s + = "Memory =" + " n"; 20. for (int i = 0; i <this.memoryMatrix.Length-1; + + i) 21. s + = this.memoryMatrix [i] + "->"; 22. s + = this.memoryMatrix [this.memoryMatrix.Length-1] + " n"; 23. s + = "Chất lượng =" + this.measureOfQuality.ToString ("F4"); 24. s + = "Số lần truy cập =" + this.numberOfVisits; 25. trở về; 26. } 27. } Lớp Bee có ba trường dữ liệu chung cho tất cả triển khai SBC và một trường dữ liệu vấn đề cụ thể. Các lĩnh vực cụ thể vấn đề được đặt tên memoryMatrix. Mỗi SBC thực hiện phải có một số cách để đại diện cho một giải pháp. Trong trường hợp của TSP trong bài viết này, giải pháp có thể được đại diện bởi một mảng kiểu char. Hãy để tôi nhấn mạnh rằng các đối tượng đại diện cho một giải pháp là rất cao phụ thuộc vào vấn đề và mọi vấn đề phải được phân tích một cách riêng biệt để tạo ra một đại diện giải pháp có ý nghĩa. Các lĩnh vực tình trạng có tên là giữ một giá trị int cho biết loại đối tượng của Bee: 0 cho không hoạt động, 1 cho hoạt động và 2 cho các trinh sát. Nếu bạn mã hóa bằng một ngôn ngữ có hỗ trợ kiểu liệt kê, bạn có thể muốn cấu trúc lại lĩnh vực điều tra tư cách là một. Các trường measureOfQuality giữ một giá trị gấp đôi đại diện cho lòng tốt của đối tượng của Bee memoryMatrix. Trong trường hợp của các TSP, một biện pháp tự nhiên của chất lượng giải pháp là chiều dài con đường biểu diễn bởi các đối tượng memoryMatrix. Chú ý rằng trong tình huống này, độ dài đường đi ngắn hơn là tốt hơn so với độ dài đường dẫn dài hơn và giá trị rất nhỏ hơn của lĩnh vực measureOfQuality đại diện các giải pháp tốt hơn so với giá trị lớn hơn. Mỗi SBC thực hiện phải có một số cách tính toán một thước đo chất lượng giải quyết. Trong nhiều trường hợp biện pháp này là tốt nhất đại diện bởi một giá trị kiểu double. Các trường dữ liệu phổ biến thứ ba trong lớp Bee được đặt tên numberOfVisits. Trường này chứa một giá trị int tượng trưng cho số lần các đối tượng Bee đã đến thăm một nguồn thực phẩm đặc biệt / vấn đề giải pháp, mà không tìm một giải pháp hàng xóm tốt hơn. Trường này được sử dụng để mô phỏng một con ong truy cập vào một nguồn thức ăn cho đến khi có nguồn thực phẩm được sử dụng hết. Đối với một con ong đang hoạt động, khi giá trị của lĩnh vực numberOfVisits vượt quá giá trị ngưỡng, con ong sẽ mô phỏng hầu như cạn kiệt nguồn cung cấp thực phẩm và chuyển sang trạng thái không hoạt động (và một con ong không hoạt động sẽ chuyển sang trạng thái hoạt động). Các nhà xây dựng Bee chấp nhận giá trị của bốn trường dữ liệu, tình trạng, memoryMatrix measureOfQuality,, và numberOfVisits. Lưu ý rằng các nhà xây dựng Bee phải chấp nhận một giá trị cho measureOfQuality vì một Bee không thể trực tiếp tính từ lĩnh vực này memoryMatrix của nó, xác định các thước đo chất lượng phụ thuộc vào thông tin lưu trữ trong đối tượng CitiesData vấn đề cụ thể. Các định nghĩa lớp Bee có một phương thức ToString, mà lộ ra những giá trị của bốn trường dữ liệu. Phương pháp Bee.ToString không phải là hoàn toàn cần thiết nhưng có thể được khá hữu ích trong quá trình SBC phát triển để giúp phát hiện lỗi bằng cách sử dụng câu lệnh WriteLine. Các dữ liệu Fields Hive Mã Hive lớp được trình bày trong Hình 5. Có 14 tổ ong dữ liệu các lĩnh vực và sự hiểu biết mục đích của từng là chìa khóa để hiểu biết làm thế nào để thực hiện một thuật toán SBC cụ thể. Hình 5: 14 Hive Trường Dữ liệu
  • 8. 1. ngẫu nhiên tĩnh ngẫu nhiên = null; 2. 3. công CitiesData citiesData; 4. 5. int công totalNumberBees; 6. int công numberInactive; 7. int công numberActive; 8. int công numberScout; 9. 10. int công maxNumberCycles; 11. int công maxNumberVisits; 12. 13. tăng gấp đôi công probPersuasion = 0,90; 14. tăng gấp đôi công probMistake = 0,01; 15. 16. công Bee [] ong; 17. công char [] bestMemoryMatrix; 18. công đôi bestMeasureOfQuality; 19. công int [] indexesOfInactiveBees; Để đơn giản và gỡ rối dễ dàng hơn với báo cáo WriteLine, tất cả 14 trường dữ liệu được định nghĩa với phạm vi công cộng. Bạn có thể muốn hạn chế phạm vi các lĩnh vực tư nhân và tạo ra tài sản đối với những lĩnh vực bạn cần truy cập bên ngoài định nghĩa lớp. Trường đầu tiên có tên ngẫu nhiên và là loại ngẫu nhiên. SBC thuật toán xác suất và các đối tượng ngẫu nhiên được sử dụng để tạo ra các số giả ngẫu nhiên cho nhiều mục đích. Các đối tượng ngẫu nhiên sẽ được khởi tạo trong xây dựng tổ. Các trường dữ liệu thứ hai là một đối tượng của CitiesData loại. Việc thực hiện SBC cần biết chi tiết của vấn đề được giải quyết. Trong hầu hết trường hợp, chẳng hạn như một này, các dữ liệu vấn đề được đại diện là một đối tượng. Nhớ lại rằng CitiesData có một danh sách các nhãn thành phố và phương thức trả về khoảng cách giữa hai thành phố. Các dữ liệu thông qua thứ sáu lĩnh vực thứ ba là các biến int mà giữ tổng số ong, số ong không hoạt động, số lượng các loài ong hoạt động và số lượng ong trinh sát. Như đã đề cập trước đó, bởi vì con ong từng đại diện cho một giải pháp tiềm năng, những con ong khác trong tổ, thì tốt hơn. Tuy nhiên, con số lớn hơn ong thực hiện chương trình phân hủy. Các trường dữ liệu thứ bảy, maxNumberCycles, là một giá trị ngưỡng được sử dụng để hạn chế bao lâu phương pháp Giải chạy. Một chu kỳ đại diện cho chế biến của mỗi con ong trong tổ. Các trường dữ liệu thứ tám, maxNumberVisits, là một giá trị ngưỡng được sử dụng để ngăn chặn một con ong ở lại quá lâu ở một giải pháp cụ thể. Trong mỗi lần lặp của vòng lặp xử lý chính trong phương pháp Giải quyết, nếu một con ong không tìm thấy một nguồn thức ăn hàng xóm với chất lượng tốt hơn, của ong numberOfVisits truy cập được tăng lên. Nếu numberOfVisits truy cập vào một đối tượng Bee vượt quá giá trị ngưỡng maxNumberVisits, các hiệu ứng chuyển ong đến một trạng thái không hoạt động. Các trường dữ liệu thứ chín, probPersuasion, là một giá trị ngưỡng xác suất được sử dụng để xác định liệu một con ong không hoạt động những người quan sát những điệu nhảy lúc lắc của một con ong đã trở về tổ ong với một giải pháp tốt hơn sẽ được thuyết phục để cập nhật bộ nhớ của nó với các giải pháp tốt hơn. Giá trị của probPersuasion là cứng mã hóa đến 0.90, có nghĩa là một con ong không hoạt động sẽ được thuyết phục để chấp nhận một giải pháp tốt hơn khoảng 90 phần trăm thời gian. Giá trị 0,90 cho probPersuasion dựa trên kết quả nghiên cứu, nhưng bạn có thể muốn thử nghiệm với các giá trị khác.
  • 9. Giá trị lớn hơn sẽ tạo ra một thuật toán SBC mà hội tụ đến một giải pháp nhanh chóng hơn, ít nguy cơ nhiều khả năng hội tụ đến một giải pháp không tối ưu. Các trường dữ liệu thứ mười, probMistake, là một giá trị ngưỡng xác suất được sử dụng để xác định liệu một con ong đang hoạt động sẽ làm cho một sai lầm, đó là, không chính xác từ chối một giải pháp hàng xóm đó là tốt hơn so với giải pháp hiện hành của ong, hoặc không chính xác chấp nhận một giải pháp hàng xóm đó là tồi tệ hơn ong giải pháp hiện hành. Giá trị của probMistake là hardcoded đến 0,01, có nghĩa là một con ong đang hoạt động sẽ làm cho một sai lầm trong việc đánh giá một giải pháp hàng xóm khoảng 1 phần trăm thời gian. Các trường dữ liệu thứ 11, ong, là một mảng của các đối tượng Bee. Hãy nhớ rằng các con ong đều có một trạng thái (hoạt động, không hoạt động, trinh sát), một giải pháp (memoryMatrix), một thước đo chất lượng của giải pháp (measureOfQuality), và một truy cập của số lần cụ thể ảo thực phẩm nguồn đã được viếng thăm mà không tìm thấy một nguồn thực phẩm tốt hơn người hàng xóm (numberOfVisits). Bởi vì một Bee được định nghĩa là một lớp, mỗi mục trong mảng ong là một tham chiếu đến một đối tượng Bee. Các trường dữ liệu 12, bestMemoryMatrix, là một mảng của char và đại diện các giải pháp tốt nhất trong mảng con ong. Hãy nhớ rằng bởi vì mô phỏng các thuật toán đàn ong được triển khai thực hiện cụ thể của một meta-heuristic, các đại diện của một giải pháp vấn đề sẽ khác nhau từ vấn đề cho vấn đề. Một phương pháp thiết kế thay thế cho hardcoding một định nghĩa kiểu giải pháp là thông số trường dữ liệu này như là một loại chung. Khi tôi sử dụng một thuật toán SBC tôi thường cố gắng giải quyết một vấn đề cụ thể, vì vậy tôi muốn mỗi recode thực hiện SBC mới từ đầu. Các trường dữ liệu 13, bestMeasureOfQuality, là thước đo chất lượng tương ứng với các giải pháp bestMemoryMatrix. Các trường dữ liệu cuối cùng tổ, indexesOfInactiveBees, là một mảng int. mảng này chứa các chỉ số của các con ong trong tổ ong hiện đang không hoạt động. Hãy nhớ rằng các hoạt động ong có thể chuyển đổi sang một trạng thái không hoạt động và ong không hoạt động có thể chuyển tiếp đến một nhà nước hoạt động. An thực hiện thuật toán SBC thường xuyên phải xác định những con ong đang không hoạt động khi một con ong đang hoạt động thực hiện một điệu nhảy ảo lúc lắc, và lưu trữ các chỉ số của con ong không hoạt động cải thiện hiệu năng so với các giải pháp thay thế của lặp lại thông qua toàn bộ mảng ong và kiểm tra tình trạng dữ liệu của từng lĩnh vực ong. Một đại diện hình ảnh của một đối tượng Hive có thể được trình bày trong hình 6. Các tổ ong cho thấy có 10 con ong: 5 hoạt động, trinh sát hai và không hoạt động ba. Những con ong đang không hoạt động được ở các chỉ số 2, 7 và 4 trong mảng ong. Các đối tượng CitiesData có năm thành phố. Giải pháp tốt nhất hiện nay là: A-> B-> E-> C-D Giải pháp này có chiều dài đường dẫn, trong các đơn vị khoảng cách, của: 1,0 + (3 * 1,0) + (2 * 1,5) + 1,0 = 8,0 Lưu ý rằng trường citiesData là một tham chiếu đến một CitiesData đối tượng định nghĩa bên ngoài của đối tượng tổ. Hình 6: Đại diện Hive Các Constructor Hive Các mã số cho các nhà xây dựng tổ được trình bày trong hình 7. Việc xây dựng tổ bảy chấp nhận tham số đầu vào. Sáu trong số các tham số được vô hướng và một là một đối tượng (citiesData). Các tham số totalNumberBees là không cần thiết, theo nghĩa là nó có thể được xác định từ numberScout numberInactive, numberActive và, nhưng tôi cảm thấy sự cải thiện trong khả năng đọc được giá trị mã thêm. Hình 7 Hive Constructor 1. công Hive (totalNumberBees int, int numberInactive,
  • 10. 2. numberActive int, int numberScout, maxNumberVisits int, 3. int maxNumberCycles, CitiesData citiesData) { 4. 5. ngẫu nhiên = new Random (0); 6. 7. this.totalNumberBees = totalNumberBees; 8. this.numberInactive = numberInactive; 9. this.numberActive = numberActive; 10. this.numberScout = numberScout; 11. this.maxNumberVisits = maxNumberVisits; 12. this.maxNumberCycles = maxNumberCycles; 13. 14. this.citiesData = citiesData; 15. 16. this.bees = mới Bee [totalNumberBees]; 17. this.bestMemoryMatrix = GenerateRandomMemoryMatrix (); 18. this.bestMeasureOfQuality = 19. MeasureOfQuality (this.bestMemoryMatrix); 20. 21. this.indexesOfInactiveBees = int mới [numberInactive]; 22. 23. for (int i = 0; i <totalNumberBees; + + i) { 24. int currStatus; 25. if (i <numberInactive) { 26. currStatus = 0; / / không hoạt động 27. indexesOfInactiveBees [i] = i; 28. } 29. khác nếu (i <numberInactive + numberScout) 30. currStatus = 2; / / trinh sát 31. khác 32. currStatus = 1; / / hoạt động 33. 34. [Char] randomMemoryMatrix = GenerateRandomMemoryMatrix (); 35. đôi MQ = MeasureOfQuality (randomMemoryMatrix); 36. int numberOfVisits = 0; 37. 38. ong [i] = new Bee (currStatus, 39. randomMemoryMatrix, MQ, numberOfVisits); 40. 41. if ([i]. ong measureOfQuality <bestMeasureOfQuality) { 42. Array.Copy (ong [i] memoryMatrix, this.bestMemoryMatrix,. 43. ong [i] memoryMatrix.Length). 44. this.bestMeasureOfQuality = ong [i] measureOfQuality. 45. } 46. } 47. } Phạm vi lớp đối tượng được khởi tạo ngẫu nhiên với một giá trị giống của 0. Cung cấp một giá trị giống cho phép bạn sao chép kết quả. Tiếp theo, sáu đầu vào giá trị tham số cho các trường dữ liệu vô hướng
  • 11. được sao chép dữ liệu các lĩnh vực tổ ong. Các đối tượng tổ ong có tổng cộng 14 trường dữ liệu; ngưỡng giá trị probPersuasion và probMistake là hardcoded. Các nhà xây dựng Hive có tham số đầu vào và gán citiesData lĩnh vực citiesData cho tham số tham khảo. Một thay thế cho phương pháp này bằng cách tham chiếu là để tạo một bản sao mới của dữ liệu vấn đề, như sau: 1. int n = citiesData.cities.Length; 2. this.citiesData = mới CitiesData (n); Phương pháp này sử dụng bộ nhớ nhiều hơn, nhưng tránh các tác dụng phụ tiềm năng lỗi. Phương pháp thay thế có thể được sử dụng nếu bạn đang tái cấu trúc các mã trình bày ở đây để một ngôn ngữ lập trình mà không hỗ trợ con trỏ hoặc tham chiếu. Tại thời điểm này trong các nhà xây dựng Hive tất cả các mục trong mảng con ong sẽ được null. Tiếp theo, tạo sự khởi tạo các giải pháp toàn cầu tốt nhất (có nghĩa là, các giải pháp tốt nhất trong số tất cả các con ong trong tổ ong) và chất lượng giải pháp tương ứng: 1. this.bestMemoryMatrix = GenerateRandomMemoryMatrix (); 2. this.bestMeasureOfQuality = 3. MeasureOfQuality (this.bestMemoryMatrix); Phương pháp trợ giúp GenerateRandomMemoryMatrix tạo ra một giải pháp ngẫu nhiên. Phương pháp trợ giúp MeasureOfQuality chấp nhận giải pháp ngẫu nhiên và tính chất của nó. Tôi sẽ thảo luận về các mã của các phương pháp trợ giúp hai sau đó trong bài viết. Sau khi khởi tạo các giải pháp toàn cầu tốt nhất và chất lượng tương ứng của nó, các nhà xây dựng tổ ong giao các indexesOfInactiveBees mảng bằng cách sử dụng các giá trị trong lĩnh vực numberInactive. Vào lúc này, tất cả các giá trị trong mảng này chỉ số sẽ là 0. Các phần tiếp theo của mã xây dựng duyệt qua mỗi đối tượng Bee trong mảng ong và instantiates nó bằng cách sử dụng các hàm tạo Bee. Các logic trong vòng lặp này giả định rằng các tế bào numberInactive đầu tiên trong mảng ong là ong không hoạt động, các tế bào numberScout tiếp theo là những con ong trinh sát và các ô còn lại là những con ong đang hoạt động. Ví dụ, nếu có năm con ong đang hoạt động, hai con ong không hoạt động và ba con ong trinh sát, xây dựng các con ong khởi tạo một mảng có kích thước 10, và instantiates tế bào 0 và 1 như con ong không hoạt động, các tế bào 2-4 như con ong trinh sát và các tế bào 5-9 như con ong đang hoạt động. Ngoài ra, các mảng indexesOfInactiveBees sẽ có kích thước 2 và bước đầu nắm giữ các giá trị 0 và 1. Sau khi tình trạng của các con ong hiện nay là xác định dựa trên các biến chỉ số vòng lặp, một giải pháp ngẫu nhiên được tạo ra và tương ứng với chất lượng của nó được tính toán, số lần truy cập truy cập được một cách rõ ràng thiết lập về 0, và các nhà xây dựng Bee được gọi là: 1. [Char] randomMemoryMatrix = GenerateRandomMemoryMatrix (); 2. đôi MQ = MeasureOfQuality (randomMemoryMatrix); 3. int numberOfVisits = 0; 4. ong [i] = new Bee (currStatus, randomMemoryMatrix, 5. MQ, numberOfVisits); Sau khi ong mỗi giải pháp là khởi tạo, chất lượng của ong nhân tạo ngẫu nhiên được kiểm tra để xem nếu nó là tốt hơn so với các giải pháp toàn cầu tốt nhất. Nếu vậy, các con ong hiện hành của giải pháp và chất lượng tương ứng được sao chép vào các lĩnh vực bestMemoryMatrix và bestMeasureOfQuality. Lưu ý trong việc kiểm tra cho một giải pháp toàn cầu chất lượng tốt nhất, một giá trị nhỏ hơn là tốt hơn so với một giá trị lớn hơn bởi vì chất lượng giá trị là độ dài đường dẫn và TSP mong muốn giảm thiểu chiều dài con đường. Thay vì sao chép một cách rõ ràng bộ nhớ của ong vào mảng bestMemoryMatrix, một phương pháp thay thế là để gán theo tham chiếu. Phương pháp này cải thiện hiệu suất tại các chi phí của một gia tăng phức tạp.
  • 12. Ba khái quát phương pháp SBC Mỗi thuật toán thực hiện SBC phải có ba phương pháp vấn đề cụ thể: một phương pháp để tạo ra một giải pháp ngẫu nhiên, một phương pháp để tạo ra một giải pháp tương đối so với hàng xóm là một giải pháp đưa ra, và một phương pháp tính toán chất lượng của một giải pháp nhất định. Trong ví dụ này TSP từng phương pháp được thực hiện theo một cách tùy chỉnh và hoàn toàn phụ thuộc vào vấn đề. Một giải pháp thay thế thiết kế là xác định các giao diện và thực hiện các giao diện này. Lập trình thông qua giao diện có một số lợi thế và bất lợi so với các phương pháp tiếp cận phi giao diện sử dụng, nhưng chủ yếu là một vấn đề của sở thích cá nhân theo ý kiến của tôi. Phương pháp để tạo ra một giải pháp ngẫu nhiên, GenerateRandomMemoryMatrix, được thể hiện ở đây: 1. công char [] GenerateRandomMemoryMatrix () { 2. char [] Kết quả = new char [this.citiesData.cities.Length]; 3. Array.Copy (this.citiesData.cities, kết quả, 4. this.citiesData.cities.Length); 5. for (int i = 0; i <result.Length; i + +) { 6. int r = random.Next (i, result.Length); 7. char temp = kết quả [r]; 8. Kết quả [r] = kết quả [i]; 9. Kết quả [i] = temp; 10. } 11. trả lại kết quả; 12. } Bởi vì một giải pháp cho vấn đề TSP là một mảng của char char mà mỗi đại diện cho một nhãn hiệu thành phố, các phương pháp GenerateRandomMemoryMatrix trả về một mảng char. Kết quả kích thước mảng địa phương được phân bổ dựa trên đối tượng CitiesData của tổ, và thành phố các ID được lưu trữ trong tài liệu tham khảo của tổ để các đối tượng CitiesData được sao chép vào mảng kết quả. Thứ tự của các giá trị trong mảng kết quả là sau đó ngẫu nhiên bằng cách sử dụng ngẫu nhiên phạm vi lớp đối tượng và các thuật toán shuffle Fisher-Yates (đôi khi gọi là shuffle Knuth). Lúc đầu, nó có vẻ rằng phương pháp GenerateRandomMemoryMatrix khái niệm thuộc về một đối tượng Bee. Tuy nhiên, bởi vì tạo ra một giải pháp ngẫu nhiên phụ thuộc một phần vào vấn đề cụ thể CitiesData dữ liệu trong trường hợp này, đặt các phương pháp giải pháp ngẫu nhiên trong định nghĩa tổ tổng thể là một thiết kế tốt hơn. Phương pháp để tạo ra một giải pháp hàng xóm, GenerateNeighborMemoryMatrix, được trình bày trong hình 8. Hình 8: Tạo ra một giải pháp hàng xóm 1. công char [] GenerateNeighborMemoryMatrix (] [char memoryMatrix) { 2. char [] Kết quả = new char [memoryMatrix.Length]; 3. Array.Copy (memoryMatrix, kết quả, memoryMatrix.Length); 4. 5. int ranIndex = random.Next (0, result.Length); 6. int adjIndex; 7. if (ranIndex == result.Length - 1) 8. adjIndex = 0; 9. khác 10. adjIndex = ranIndex + 1; 11. 12. char tmp = kết quả [ranIndex]; 13. Kết quả [ranIndex] = kết quả [adjIndex]; 14. Kết quả [adjIndex] = tmp; trả lại kết quả;
  • 13. 15. } Một khái niệm quan trọng trong thuật toán SBC là ý tưởng rằng mỗi nguồn thực phẩm ảo đại diện cho một giải pháp có một số loại hàng xóm. Nếu không có khái niệm người hàng xóm, toàn bộ ý tưởng của một thuật toán dựa trên hành vi của ong sụp đổ. Trong trường hợp của các TSP, nơi một giải pháp có thể được biểu diễn như là một mảng của các ID thành phố đại diện cho một con đường từ thành phố đến thành phố, một giải pháp hàng xóm tự nhiên liên quan đến một giải pháp hiện nay là một hoán vị của giải pháp hiện tại, nơi hai thành phố lân cận đã được trao đổi . Ví dụ, nếu một TSP hiện giải pháp là A, B, C, D, E, sau đó là một giải pháp hợp lý hàng xóm là A, C, B, D, E. Nó không phải như vậy rõ ràng nếu một hoán vị hai thành phố nơi nào tùy ý được trao đổi (như trái ngược với hai thành phố lân cận) đại diện cho một giải pháp hợp lý hàng xóm. Đối với ví dụ trước đây, là A, D, C, B, E là một giải pháp hợp lý hàng xóm? Quyết định về định nghĩa của một giải pháp hàng xóm cho một thuật toán SBC là vấn đề phụ thuộc và thường liên quan đến tiêu chí chủ quan. Khái niệm hàng xóm, giải pháp cũng phục vụ để minh họa một phần lý do tại sao không phải số vấn đề về tổ hợp đặc biệt thích hợp cho giải pháp của các thuật toán SBC. Nếu vấn đề là vốn số, ý tưởng của một người hàng xóm thường rất khó để xác định thỏa đáng. Nếu vấn đề vốn đã tổ hợp, ý tưởng của một người hàng xóm thường có thể độc đáo được xác định bởi một số hình thức hoán vị toán học hoặc kết hợp. Phương pháp GenerateNeighborMemoryMatrix chấp nhận hiện tại của ong memoryMatrix đại diện của một giải pháp như là một tham số đầu vào và bản sao nó thành một mảng kết quả. Phương pháp chọn ngẫu nhiên một chỉ số duy nhất vào mảng kết quả hiện tại bằng cách sử dụng các lớp-phạm vi đối tượng ngẫu nhiên. Nếu các điểm chỉ số ngẫu nhiên vào ô cuối cùng thì các ID thành phố đầu tiên và cuối cùng được trao đổi, nếu không, nếu các điểm chỉ số ngẫu nhiên cho bất kỳ tế bào không qua, các ID được trỏ đến bởi các chỉ số ngẫu nhiên và chỉ số tiếp theo được trao đổi. Khái niệm hàng xóm giải pháp có liên quan đến giá trị maxNumberVisits. Có một số nghiên cứu cho thấy một giá trị tốt cho maxNumberVisits là khoảng năm lần số lượng các giải pháp hàng xóm có thể cho bất kỳ giải pháp nào. Ví dụ, đối với ba thành phố (A, B, C), nếu một giải pháp hàng xóm được định nghĩa là trao đổi bất kỳ cặp của các thành phố lân cận, sau đó có ba người hàng xóm có thể (trao đổi A và B, trao đổi, B và C, trao đổi A và C) . Vì vậy, trong 20 thành phố, một maxNumberVisits giá trị hợp lý là khoảng 20 * 5 = 100. Phương pháp đánh giá chất lượng của một giải pháp của ong, MeasureOfQuality, là: 1. tăng gấp đôi công MeasureOfQuality (] [char memoryMatrix) { 2. hai câu trả lời = 0,0; 3. for (int i = 0; i <memoryMatrix.Length - 1; + + i) { 4. char c1 = memoryMatrix [i]; 5. char c2 = memoryMatrix [i + 1]; 6. double d = this.citiesData.Distance (c1, c2); 7. câu trả lời + = d; 8. } 9. trở lại câu trả lời; 10. } Để giải quyết vấn đề bằng cách sử dụng một thuật toán SBC, một đặc tính cần thiết của vấn đề là có bất kỳ giải pháp phải có khả năng được đánh giá để mang lại một thước đo chất lượng của giải pháp. Về khái niệm, ở thế giới thực vấn đề tối ưu hóa tổ hợp gần như luôn luôn có một số biện pháp cố hữu và các giác quan thông thường về chất lượng. Tuy nhiên, trong thực tế, tính toán các thước đo chất lượng của một giải pháp có thể khó khăn và tốn thời gian. Trong ví dụ này, phương pháp MeasureOfQuality chỉ đơn giản là duyệt qua tất cả các cặp của các ID thành phố liên tiếp trong giải pháp thể hiện bằng tham số memoryMatrix, xác định khoảng cách giữa mỗi cặp sử dụng phương pháp từ xa của đối tượng CitiesData, và tích lũy khoảng cách số. Nhớ lại rằng
  • 14. các dữ liệu thành phố đã được nhân tạo xây dựng sao cho khoảng cách giữa bất kỳ hai thành phố có thể được nhanh chóng và dễ dàng tính toán đơn giản chỉ bằng khoảng cách thứ tự giữa hai ID thành phố. Nhưng trong một vấn đề thực sự, khoảng cách giữa hai thành phố có khả năng sẽ phải được xem xét trong một số loại cấu trúc dữ liệu. Trong triển khai thực hiện SBC, phương pháp MeasureOfQuality thường là thói quen mà thống trị thời gian chạy của chương trình. Do đó, nó thường có giá trị để đảm bảo rằng phương pháp này là tối ưu hóa cho hiệu suất cũng như tính khả thi, do tài nguyên bộ nhớ của hệ thống máy chủ. Các Phương pháp Giải quyết Phương pháp Giải quyết nhà ở tất cả các logic mô phỏng hành vi của ong kiếm ăn để giải quyết một vấn đề. Phương pháp Giải quyết tương đối phức tạp và sử dụng ba phương pháp trợ giúp, ProcessActiveBee, ProcessScoutBee và ProcessInactiveBee. Các phương pháp ProcessActiveBee và ProcessScoutBee lần lượt sử dụng một phương pháp giúp đỡ DoWaggleDance. Phương pháp Giải quyết được trình bày trong hình 9. Hình 9 Các Giải quyết Phương pháp 1. Giải quyết công void (bool doProgressBar) { 2. bool pb = doProgressBar; 3. numberOfSymbolsToPrint int = 10; 4. int tăng = this.maxNumberCycles / numberOfSymbolsToPrint; 5. if (pb) Console.WriteLine (" nEntering SBC du lịch chính của thuật toán người bán hàng chế biến vòng lặp n"); 6. if (pb) Console.WriteLine ("Tiến độ: |==========|"); 7. if (pb) Console.Write (""); 8. int chu kỳ = 0; 9. 10. trong khi (chu kỳ <this.maxNumberCycles) { 11. for (int i = 0; i <totalNumberBees; + + i) { 12. if (this.bees [i] tình trạng == 1.) 13. ProcessActiveBee (i); 14. khác nếu (this.bees [i] tình trạng == 2.) 15. ProcessScoutBee (i); 16. khác nếu (this.bees [i] tình trạng == 0.) 17. ProcessInactiveBee (i); 18. } 19. + + Chu kỳ; 20. 21. if (pb & & tăng% chu kỳ == 0) 22. Console.Write ("^"); 23. } 24. 25. if (pb) (""); Console.WriteLine 26. } Hầu hết các công việc thực tế là nuôi ra để trợ giúp các phương pháp ProcessActiveBee, ProcessScoutBee và ProcessInactiveBee. Một tham số đầu vào Boolean được thông qua phải giải quyết để cho biết để in một thanh tiến trình dựa trên văn bản thô sơ. Điều này rất hữu ích khi phát triển một thuật toán SBC để theo dõi tốc độ thực hiện và giúp phát hiện ra nghẽn cổ chai. Cách tiếp cận này làm cho các giả định rằng phương pháp Giải quyết là một phần của một ứng dụng giao diện điều khiển. Giá trị của tham số giá trị Boolean được chuyển vào một biến Boolean địa phương tên là pb chỉ để có một tên biến ngắn để làm việc. numberOfSymbolsToPrint này được thiết lập đến 10 để mỗi tăng trong
  • 15. thanh trạng thái sẽ đại diện cho 10 phần trăm của tổng số tiến bộ, được xác định bằng giá trị maxNumberCycles (biến tăng được sử dụng để xác định chu kỳ tiến bộ rất nhiều đại diện 10 phần trăm). Sau khi biến điều khiển vòng lặp, chu kỳ, được khởi tạo là 0, một vòng lặp trong khi được sử dụng để xử lý mỗi con ong trong tổ. Một vòng lặp for có thể chỉ là một cách dễ dàng được sử dụng. Trên mỗi chu kỳ, các mảng ong được lặp lại bằng cách sử dụng vòng lặp for và mỗi đối tượng Bee được chế biến theo phương pháp trợ giúp thích hợp. Sau khi mỗi con ong đã được xử lý, nếu các tham số doProgressBar Boolean là đúng, mã này sử dụng các nhà điều hành môđun,%, để kiểm tra nếu nó là thời gian để in một cập nhật cho các thanh tiến trình bằng cách sử dụng một nhân vật ^. Phương pháp ProcessActiveBee Phương pháp ProcessActiveBee là trái tim của một thuật toán SBC và là phương pháp phức tạp nhất về kích thước mã và phân nhánh. Phương pháp ProcessActiveBee được trình bày trong Hình 10. Hình 10 Phương pháp ProcessActiveBee 1. private void ProcessActiveBee (int i) { 2. char [] hàng xóm = GenerateNeighborMemoryMatrix (ong [i] memoryMatrix.); 3. đôi neighborQuality = MeasureOfQuality (hàng xóm); 4. đôi prob = random.NextDouble (); 5. bool memoryWasUpdated = false; 6. bool numberOfVisitsOverLimit = false; 7. 8. if (neighborQuality <ong [i] measureOfQuality.) {/ / tốt hơn 9. if (prob <probMistake) {/ / sai lầm 10. + + Ong [i] numberOfVisits. 11. nếu (con ong [i] numberOfVisits>. maxNumberVisits) 12. numberOfVisitsOverLimit = true; 13. } 14. else {/ / Không có sai lầm 15. Array.Copy (hàng xóm, ong [i] memoryMatrix, neighbor.Length.); 16. ong [i] measureOfQuality = neighborQuality. 17. ong [i] numberOfVisits = 0. 18. memoryWasUpdated = true; 19. } 20. } 21. else {/ / Không tìm thấy người hàng xóm tốt hơn 22. if (prob <probMistake) {/ / Sai lầm 23. Array.Copy (hàng xóm, ong [i] memoryMatrix, neighbor.Length.); 24. ong [i] measureOfQuality = neighborQuality. 25. ong [i] numberOfVisits = 0. 26. memoryWasUpdated = true; 27. } 28. else {/ / Không có sai lầm 29. + + Ong [i] numberOfVisits. 30. nếu (con ong [i] numberOfVisits>. maxNumberVisits) 31. numberOfVisitsOverLimit = true; 32. } 33. } 34. 35. if (numberOfVisitsOverLimit == true) {
  • 16. 36. ong [i] trạng thái = 0. 37. ong [i] numberOfVisits = 0. 38. int x = random.Next (numberInactive); 39. ong [indexesOfInactiveBees [x]] trạng thái = 1. 40. indexesOfInactiveBees [x] = i; 41. } 42. khác nếu (memoryWasUpdated == true) { 43. if ([i]. ong measureOfQuality <this.bestMeasureOfQuality) { 44. Array.Copy (ong [i] memoryMatrix, this.bestMemoryMatrix,. 45. ong [i] memoryMatrix.Length). 46. this.bestMeasureOfQuality = ong [i]. measureOfQuality 47. } 48. DoWaggleDance (i); 49. } 50. else { 51. trở lại; 52. } 53. } Phương pháp ProcessActiveBee chấp nhận một tham số đầu vào đơn, tôi, đó là chỉ số của các con ong ong trong mảng. Các hoạt động đầu tiên của ong có được một giải pháp tương đối so với người hàng xóm giải pháp hiện tại của nó được lưu trữ trong memoryMatrix, và sau đó xác định chất lượng của hàng xóm rằng: 1. char [] hàng xóm = 2. GenerateNeighborMemoryMatrix (ong [i] memoryMatrix.); 3. đôi neighborQuality = MeasureOfQuality (hàng xóm); Tiếp theo, thuật toán thiết lập ba biến địa phương sẽ được sử dụng sau này: 1. đôi prob = random.NextDouble ();) 2. bool memoryWasUpdated = false; 3. bool numberOfVisitsOverLimit = false; Biến prob có một giá trị giữa 0.0 và 1.0 và sẽ được so sánh với giá trị trường probMistake để xác định xem con ong làm cho một sai lầm trong việc đánh giá các giải pháp hàng xóm-có nghĩa là, từ chối một giải pháp hàng xóm tốt hơn hoặc chấp nhận một giải pháp hàng xóm tồi tệ hơn. Giá trị Boolean memoryWasUpdated sẽ được sử dụng để xác định xem các con ong đang hoạt động cần thực hiện một điệu nhảy lúc lắc để những con ong không hoạt động (nếu đúng) hay không (nếu sai). Các numberOfVisitsOverLimit Boolean sẽ được so sánh với trường maxNumberVisits để xác định xem các con ong đã cạn kiệt nguồn thức ăn đặc biệt mà không tìm một giải pháp hàng xóm tốt hơn, và nếu như vậy nên chuyển đổi từ trạng thái hoạt động đến tình trạng không hoạt động. Nếu ong hiện nay tìm thấy một giải pháp hàng xóm tốt hơn, thuật toán xác định xem con ong làm cho một sai lầm và từ chối hàng xóm tốt hơn hoặc nếu ong chấp nhận người hàng xóm tốt hơn. Tương tự như vậy, nếu ong hiện nay không tìm thấy một giải pháp hàng xóm tốt hơn, thuật toán xác định xem con ong làm cho một sai lầm và chấp nhận giải pháp hàng xóm tồi tệ hơn hoặc không làm lỗi và từ chối những người hàng xóm. Chú ý rằng có hai loại khác nhau của những sai lầm có thể, nhưng cả hai loại sai lầm có cùng một xác suất, probMistake = 0,01. Có một số nghiên cứu cho thấy sử dụng hai xác suất khác nhau cho hai loại khác nhau của những sai lầm không cải thiện tính hiệu quả của thuật toán SBC, nhưng bạn có thể muốn thử nghiệm với hai giá trị ngưỡng khác nhau. Sau khi những con ong đang hoạt động hiện tại chấp nhận hoặc từ chối giải pháp hàng xóm, kiểm tra thuật toán nếu số lần truy cập truy cập đã vượt quá ngưỡng maxNumberVisits. Nếu vậy, tình trạng
  • 17. hiện tại của con ong được chuyển đổi để hoạt động, một con ong lựa chọn ngẫu nhiên không hoạt động được chuyển thành trạng thái hoạt động và các mảng indexesOfInactiveBees được cập nhật. Tiếp theo, thuật toán để kiểm tra xem nếu bộ nhớ của ong đã được cập nhật. Nếu vậy, giải pháp mới được kiểm tra để xem nếu nó là một mới giải pháp tốt nhất toàn cầu, và sau đó một phương pháp bổ trợ tư nhân, DoWaggleDance, được gọi là để mô phỏng các con ong quay trở lại các thông tin tổ ong và truyền đạt về các nguồn thức ăn mới cho những con ong không hoạt động. Phương pháp DoWaggleDance Phương pháp trợ giúp DoWaggleDance mô phỏng một con ong trinh sát hoạt động hoặc trở về tổ và sau đó thực hiện một điệu nhảy lúc lắc để ong không hoạt động để truyền đạt thông tin về vị trí và chất lượng của một nguồn thực phẩm. Đây là phương pháp DoWaggleDance: 1. private void DoWaggleDance (int i) { 2. cho (ii int = 0; ii <numberInactive; + + ii) { 3. int b = indexesOfInactiveBees [ii]; 4. nếu (con ong [i] measureOfQuality <ong [b].. measureOfQuality) { 5. hai p = random.NextDouble (); 6. if (this.probPersuasion> p) { 7. Array.Copy (ong [i] memoryMatrix,. Ong [b]. MemoryMatrix, 8. ong [i] memoryMatrix.Length). 9. ong [b] measureOfQuality = ong [i] measureOfQuality..; 10. } 11. } 12. } 13. } Các i tham số đầu vào là các chỉ số của ong hiện nay thực hiện những điệu nhảy ảo lúc lắc. Các thước đo chất lượng của giải pháp hiện tại của ong được so sánh với các thước đo chất lượng của mỗi con ong không hoạt động. Nếu ong hiện tại của giải pháp là tốt hơn và những con ong hiện tại không hoạt động là thuyết phục (với xác suất probPersuasion = 0,90), con ong hiện tại của bộ nhớ được sao chép vào bộ nhớ của ong không hoạt động. Lưu ý rằng có nhiều cơ hội để kiểm tra lỗi chèn vào trong mã trình bày trong bài viết này. Ví dụ, bên trong vòng lặp for trong DoWaggleDance, bạn có thể muốn kiểm tra tình trạng hiện tại của ong không hoạt động với: 1. nếu (. ong [b] tình trạng = 0!) ném ngoại lệ mới (...); Hoặc bạn có thể muốn xác minh số con ong không hoạt động của các chuyến thăm truy cập với: 1. nếu (. ong [b] numberOfVisits = 0!) ném ngoại lệ mới (...); ProcessScoutBee và ProcessInactiveBee Phương pháp trợ giúp ProcessScoutBee được sử dụng bởi các phương pháp mô phỏng Giải quyết các hành động của một con ong trinh sát ngẫu nhiên tìm kiếm nguồn thức ăn hấp dẫn. Phương pháp ProcessScoutBee được trình bày trong Hình 11. Hình 11: Phương pháp ProcessScoutBee 1. private void ProcessScoutBee (int i) { 2. char [] randomFoodSource = GenerateRandomMemoryMatrix (); 3. đôi randomFoodSourceQuality = 4. MeasureOfQuality (randomFoodSource); 5. if (randomFoodSourceQuality <ong [i]. measureOfQuality { 6. Array.Copy (randomFoodSource, ong [i]. MemoryMatrix, 7. randomFoodSource.Length); 8. ong [i] measureOfQuality = randomFoodSourceQuality. 9. if ([i]. ong measureOfQuality <bestMeasureOfQuality) {
  • 18. 10. Array.Copy (ong [i] memoryMatrix, this.bestMemoryMatrix,. 11. ong [i] memoryMatrix.Length). 12. this.bestMeasureOfQuality = ong [i] measureOfQuality. 13. } 14. DoWaggleDance (i); 15. } 16. } Các tham số đầu vào i đại diện cho các chỉ số của một con ong trinh sát trong mảng ong. Một con ong trinh sát tạo ra một giải pháp ngẫu nhiên, kiểm tra nếu các giải pháp ngẫu nhiên là tốt hơn so với các giải pháp hiện tại trong bộ nhớ, và, nếu có, bản sao các giải pháp ngẫu nhiên vào bộ nhớ. Hãy nhớ rằng các giá trị chất lượng nhỏ hơn là tốt hơn. Nếu ong trinh sát đã tìm thấy một giải pháp tốt hơn, các thuật toán để kiểm tra xem liệu các giải pháp mới là một giải pháp toàn cầu tốt nhất. Lưu ý rằng không giống như những con ong đang hoạt động, trong những con ong trinh sát SBC thực hiện không bao giờ phạm sai lầm đánh giá chất lượng của một nguồn thực phẩm. Không có nghiên cứu hiện hành về hiệu quả của những sai lầm của ong trinh sát. Phương pháp ProcessInactiveBee là: 1. `Private void ProcessInactiveBee (int i) { 2. trở lại; 3. } 4. private void ProcessInactiveBee (int i) { 5. trở lại; 6. } Trong thực hiện không hoạt động được SBC ong chính xác điều đó, không hoạt động, vì vậy phương pháp ProcessInactiveBee chỉ đơn thuần là giữ chỗ trong trường hợp bạn muốn thực hiện một số vấn đề phụ thuộc vào logic cho một con ong không hoạt động. Một trong những sửa đổi có thể sẽ được biến đổi ngẫu nhiên bộ nhớ một con ong không hoạt động với một số xác suất rất nhỏ. Tổng kết Quá trình tổng thể thực hiện một thuật toán SBC bắt đầu với nhận dạng vấn đề. Phức tạp, không số, vấn đề tối ưu hóa tổ hợp không có tính quyết định các giải pháp thực tế thường được ứng viên tốt cho một giải pháp SBC. Các vấn đề mục tiêu phải có một cách để đại diện cho một giải pháp (thường là một mảng hoặc ma trận) và mỗi giải pháp phải có một số loại của một giải pháp hàng xóm và đo lường chất lượng một giải pháp. Ví dụ, hãy xem xét các vấn đề của một đồ thị phân chia thành hai phần sao cho số lượng kết nối trong mỗi phần là tối đa và số lượng kết nối giữa hai phần được giảm thiểu. Vấn đề phân vùng đồ thị là tổ hợp và không có thuật toán nhanh chóng mà tìm giải pháp tối ưu nhất (mặc dù có những thuật toán tất định có lợi trong việc tìm ra các giải pháp gần tối ưu). Có rất nhiều vấn đề khác NP-đầy đủ và cứng NP có thể được giải quyết bằng cách sử dụng một SBC. SBC thuật toán dựa trên hành vi của các hệ thống tự nhiên. Có những thuật toán khác, bao gồm các thuật toán di truyền (GA) dựa trên chọn lọc tự nhiên và sự tiến hóa, tối ưu hóa đàn kiến (aco) dựa trên hành vi của loài kiến, và mô phỏng luyện kim (SA) dựa trên các tính chất vật lý của kim loại làm mát. Các thuật toán dựa trên các hệ thống tự nhiên thường dễ thực hiện tương đối so với phương pháp tiếp cận tất định. Tuy nhiên, các thuật toán dựa trên các hệ thống tự nhiên thường đòi hỏi các đặc điểm kỹ thuật của các giá trị cho một số tham số có xu hướng nhạy cảm đối với hiệu quả của giải pháp hội tụ tốc độ và độ chính xác giải pháp. Trong trường hợp của một SBC, các thông số nhạy cảm mà phải được điều chỉnh cho mỗi vấn đề bao gồm số lượng của từng loại ong, số lượng tối đa số lần truy cập trước khi một nguồn thức ăn cạn kiệt, không hoạt động ngưỡng xác suất ong thuyết phục và xác suất sai lầm hoạt động của ong. Mặc dù SBC thuật toán không áp dụng cho mọi vấn đề, trong một số kịch bản họ có thể là những công
  • 19. cụ cực kỳ mạnh mẽ. ________________________________________Dr. James McCaffrey làm việc cho Volt Thông tin Khoa học Inc, nơi ông quản lý đào tạo kỹ thuật cho các kỹ sư phần mềm làm việc tại các khuôn viên Microsoft tại Redmond, Washington,. Ông đã từng làm việc trên một số sản phẩm của Microsoft, bao gồm cả Internet Explorer và MSN Search. Tiến sĩ McCaffrey là tác giả của "NET kiểm tra. Tự động hóa Công thức nấu ăn" (Apress, 2006) và có thể đạt được tại jammc@microsoft.com. Nhờ các chuyên gia kỹ thuật sau đây để xem lại bài viết này: Dan Liebling và Anne Loomis Thompson, cả hai nghiên cứu của Microsoft