Студопедия.Орг Главная | Случайная страница | Контакты | Мы поможем в написании вашей работы!  
 

Метод Solve



В методе Solve заключена вся логика, которая моделирует поведение пчел-фуражиров, решающих задачу. Этот метод в меру сложен и использует три вспомогательных метода: ProcessActiveBee, ProcessScoutBee и ProcessInactiveBee. Первые два метода используют еще один вспомогательный метод — DoWaggleDance. Исходный код метода Solve показан на рис. 9.

Рис. 9. Метод Solve

public void Solve(bool doProgressBar) {

bool pb = doProgressBar;

int numberOfSymbolsToPrint = 10;

int increment = this.maxNumberCycles / numberOfSymbolsToPrint;

if (pb) Console.WriteLine("\nEntering SBC Traveling Salesman Problem algorithm main processing loop\n");

if (pb) Console.WriteLine("Progress: |==========|");

if (pb) Console.Write(" ");

int cycle = 0;

while (cycle < this.maxNumberCycles) {

for (int i = 0; i < totalNumberBees; ++i) {

if (this.bees[i].status == 1)

ProcessActiveBee(i);

else if (this.bees[i].status == 2)

ProcessScoutBee(i);

else if (this.bees[i].status == 0)

ProcessInactiveBee(i);

}

++cycle;

if (pb && cycle % increment == 0)

Console.Write("^");

}

if (pb) Console.WriteLine("");

}

Большая часть работы выполняется вспомогательными методами ProcessActiveBee, ProcessScoutBee и ProcessInactiveBee. Булев входной параметр, передаваемый Solve, указывает, надо ли выводить рудиментарную текстовую полоску прогресса. Это удобно при реализации алгоритма SBC для наблюдения за скоростью работы реализации и помогает вскрывать узкие места. Такой подход предполагает, что метод Solve является частью консольного приложения.

Значение булева параметра передается в локальную булеву переменную pb просто потому, что работать с коротким именем переменной удобнее. Значение numberOfSymbolsToPrint задается равным 10, чтобы каждое приращение полоски состояния отражало 10% от общего прогресса, который определяется значением maxNumberCycles (переменная increment используется, чтобы выяснить, сколько циклов представляет 10% прогресса).

После инициализации переменной cycle, управляющей циклом, нулевым значением для обработки каждой пчелы в улье используется цикл while. (Вместо него можно было бы легко задействовать цикл for.) На каждой итерации этого цикла с помощью цикла for перебирается массив bees и каждый объект Bee обрабатывается соответствующим вспомогательным методом. После обработки всех пчел, если булев параметр doProgressBar равен true, в коде с помощью оператора % проверяется, не пора ли обновить полоску прогресса (используется символ «^»).





Дата публикования: 2015-09-18; Прочитано: 425 | Нарушение авторского права страницы | Мы поможем в написании вашей работы!



studopedia.org - Студопедия.Орг - 2014-2024 год. Студопедия не является автором материалов, которые размещены. Но предоставляет возможность бесплатного использования (0.007 с)...