6. Эндрюс Г.Р. Основы многопоточного, параллельного и распределенного программирования / Г.Р. Эндрюс. — М.: Издательский дом «Вильямс», 2003. — 512 с.
УДК 004.023 + 004.424
ИСПОЛЬЗОВАНИЕ ПРИНЦИПОВ ОБЪЕКТНО-ОРИЕНТИРОВАННОГО ПРОГРАММИРОВАНИЯ ПРИ РЕАЛИЗАЦИИ ОПТИМИЗАЦИОННЫХ
АЛГОРИТМОВ
Матренин Павел Викторович, аспирант, Кафедра автоматизированных систем управления, Новосибирский государственный технический университет, Россия, Новосибирск,
Введение
В настоящее время во многих областях необходимо решать задачи дискретной или непрерывной глобальной оптимизации. Такие задачи часто нелинейны, недифференцируемы, имеют множество локальных экстремумов, характеризуются высокой вычислительной сложностью [1]. Для них часто невозможно составить аналитическое выражение, потому что модель имеет сложную структуру и многочисленные взаимосвязи между элементами, что приводит также к высокой трудоемкости вычислений и сложной топологии области допустимых значений. Для подобных задач оптимизации наиболее эффективны стохастические методы, такие как методы эволюционной оптимизации, методы роевого интеллекта, алгоритмы имитации отжига. Первые две группы относятся к так называемым популяционным методам, поскольку используют системы, состоящие из агентов. Как правило, под агентом понимается некоторая точка в пространстве поиска решений задачи, а процесс оптимизации заключается в перемещении агентов в этом пространстве с помощью некоторых правил [2, 3], либо в создании на каждом шаге новых популяций агентов с учетом опыта, полученного предыдущими популяциями [4]. Таким образом популяционные методы могут автоматически исследовать область решений независимо от ее размерности и топологии. Наиболее важными преимуществами методов являются гибкость и возможность относительно быстро получать решения, близкие к оптимальным [5].
Несмотря на разнообразие стохастических методов оптимизации и большое количество модификаций каждого метода, все они имеют общие черты, что позволяет применять при их реализации методы объектно-ориентированного программирования [6]. Для повышения гибкости в разрабатываемых программных систем необходимо избегать зависимостей между алгоритмами, интерфейсами к ним и решаемыми задачами.
1. Объектное проектирование методов оптимизации
В рамках объектно-ориентированного программирования каждый алгоритм оптимизации можно рассматривать как класс. Полезно использовать единые интерфейсы таких классов, чтобы применение того или иного алгоритма выполнялось единообразно. В этом случае можно применить шаблон проектирования «Template method», который задает общую структуру поведения связанных классов [7]. При этом детали поведения отдельного алгоритмов задаются в реализации дочерних классов. Общими для дочерних классов будут методы управления алгоритмами, настройки, инициализации, перемещения агентов и возвращения результатов работы. Пример базового класса на языке программирования C++ приведен ниже.
class Optimizator {
public:
25
virtual void start() = 0; virtual void stop() = 0;
void setIterationNumber(int ni); //установка количества итераций void setAgentsNumber(int na); //установка количества агентов virtual void setParameters(double *arrParams) = 0;//установка параметров
void setCriterion(ICriterionCalc *pCreator);//этот метод будет описан
ниже
double getBest(double *bestSolution);//возврат найденного решения
//(в bestSolution записывается вектор искомых переменных, //метод возвращает значение критерия virtual ~Optimizator () {}
protected:
virtual void initialization() = 0; virtual void move() = 0;
int numberAgents; int numberIterations; double *bestSolution;
ICriterionCalc *creator;
//указатель на описанный ниже объект для вычисления критерия
};
2. Взаимодействие методов с решаемыми задачами
Для обеспечения единообразной работы алгоритмов оптимизации с различными задачами можно реализовать некоторый интерфейс, обозначенный здесь как ICriterionCalc, имеющий метод getCriterion, который соответствует некоторой оптимизируемой функции f(X) и принимает управляющие переменные X, а возвращает значение целевой функцииfX). Можно разбить вектор X на целочисленную и непрерывную части, в примерах ниже считается, что все элементы вектора X непрерывны. Например, на языке программирования С++ реализация такого интерфейса с помощью абстрактного класса может быть следующей:
class ICriterionCalc {
public:
virtual double getCriterion(double *arrayDouble, int *arrayInt) = 0; virtual ~ICriterionCalc() {}
};
В языке Java реализация интерфейса немного короче:
public interface ICriterionCalc {
double getCriterion(double [] arrayDouble, int [] arrayInt);
};
Затем в любом классе, представляющем модель задачи оптимизации, нужно реализовать метод getCriterion, а сам класс должен наследоваться от класса ICriterionCalc (в С++) или реализовать интерфейс ICriterionCalc (в Java), например для задачи Химмельблау:
//C++
class Himmelblay : public ICriterionCalc {
public:
virtual double getCriterion(double *arrDouble, int *arrInt);
};
double Himmelblay::getCriterion(double *arrDouble, int *arrInt) {
26
double x0 = arrDouble[0], x1 = arrDouble[1];
return pow((x0*x0 + x1 - 11.), 2) + pow((x0+ x1*x1 - 7.), 2);
}
//Java
public class Himmelblay implements ICriterionCalc {
double getCriterion(double [] arrayDouble, int [] arrayInt); double x0 = arrDouble[0], x1 = arrDouble[1];
return Math.pow((x0*x0 + x1 - 11.), 2) + Math.pow((x0+ x1*x1 - 7.), 2);
}
Сам класс, представляющий модель решаемой задачи оптимизации, может быть только оболочкой для сложного объекта управления. Но каким бы сложным не была внутренняя логика расчета критерия, для алгоритма оптимизации она целиком будет сокрыта интерфейсом ICriterionCalc. При необходимости в интерфейсе могут быть дополнительные методы, помимо вычисления критерия, их можно добавить в ICriterionCalc. Если в приведенном примере нужно будет заменить целевую функцию, это никак не повлияет на интерфейс ICriterionCalc и код алгоритмов оптимизации.
Выше в коде класса Optimizator есть метод setCriterion и указатель на объект класса ICriterionCalc. Объект, вычисляющий целевую функцию, передается по указателю в класс Optimizator через метод setCriterion, в этом методе данный объект связывается с указателем creator. В результате, благодаря полиморфизму, в классах, реализующих алгоритмы оптимизации, можно вызывать вычисление целевой функции через метод getCriterion интерфейса ICriterionCalc независимо от класса, в котором будет производится это вычисление, как показано на диаграмме классов на рисунке 1 (Particle Swarm Optimization и Ant Colony Optimization представляют примеры классов, реализующих конкретные алгоритмы оптимизации). Таким образом код алгоритмов оптимизации никак не связан с кодом класса, реализующего решаемую задачу оптимизации.
Рис.1 - Диаграмма классов, показывающая связь алгоритмов оптимизации и решаемых задач
Заключение и практические результаты
Созданная архитектура благодаря гибкости позволяет легко применять различные алгоритмы роевого интеллекта для решения практических задач. На данный момент есть применение для решения задач теории расписаний [7], для задачи оптимизации потерь в линиях электропередач (совместно с кафедрой систем электроснабжения предприятий Новосибирского государственного технического университета)
Разработаны методические указания и ПО для визуализации стохастических алгоритмов, причем не найдено аналогов, в которых для разных алгоритмов был бы реализован единый графический интерфейс визуализации [8].
Литература
27
1. Карпенко А.П. Популяционные алгоритмы глобальной оптимизации. Обзор новых и малоизвестных алгоритмов / А.П. Карпенко // Приложение к журналу «Информационные технологии». 2012. №7. С. 1-32.
2. J. Kennedy, R. Eberhart, “Particle Swarm Optimization”, in proc. of IEEE International Conference on
Neural Network, Piscataway, NJ, 1995, pp. 1942-1948.
3. Dorigo M., Birattari M., Stutzle T. Ant Colony Optimization. Artificial Ants as a Computational
Intelligence Technique // IRIDIA. Technical Report Series. Technical Report No. TR/IRIDIA/2006-023. Brussels, Belgium. 2006. 14 p.
4. Гладков Л.А. Генетические алгоритмы/ Л.А. Гладков, В.В. Курейчик, В.М. Курейчик; под ред.
В.М. Курейчика. - 2-е изд., испр. и доп. - М.: ФИЗМАТЛИТ, 2006. - 320 с.
5. Курейчик В.М., Использование роевого интеллекта в решении NP-трудных задач/ В.М, Курейчик, А.А. Кажаров // Известия ЮФУ. Технические науки. 2011. № 7 (120). С. 30-37.
6. Матренин П.В. Описание и реализация алгоритмов роевого интеллекта с использованием
системного подхода / П.В. Матренин // Программная инженерия. 2015. №3. С. 27-34.
7. Гранд М. Шаблоны проектирования в Java / М. Гранд; Пер. с англ. С. Беликовой. - М.: Новое
знание, 2004. - 559 с.: ил.
8. Матренин П.В. Разработка приложений для визуализации методов стохастической оптимизации /П.В. Матренин // Сборник научных трудов SWorld. Материалы международной научно-практической конференции «Современные проблемы и пути их решения в науке, транспорте, производстве и образовании'2012». - Выпуск 4. Том 12. Одесса: КУПРИЕНКО, 2012. ЦИТ:412-0099. С. 28-35.
УДК. 004.652
ТЕМПОРАЛЬНЫЕ ОБЪЕКТНО-РЕЛЯЦИОННЫЕ МОДЕЛИ В МНОГОМЕРНОМ
ПРЕДСТАВЛЕНИИ9
Елисеев Дмитрий Владимирович, к.т.н., ведущий программист, МГТУ им. Н.Э. Баумана, Россия,
Москва, [email protected]
Введение
Нетемпоральные модели данных и их реализация в системах управления базами данных (СУБД) хранят единственное состояние объектов предметной области. СУБД поддерживают операции изменения, которые переводят базу данных из одного состояния в другое, тем самым, заменяя старые значения новыми.
Но существует множество предметных областей, в которых необходимо хранить прошлые состояния базы данных и возможно будущие. К таким системам можно отнести: систему управления предприятием [1], систему управления персоналом [2], финансовые приложения, страховые приложения и ряд других, которые обладают следующими свойствами:
1. Информационная система обрабатывает темпоральные (изменяющиеся во времени) данные.
2. Информационная система накапливает историю изменения темпоральных данных.
В настоящее время объектно-реляционная модель является наиболее распространённой на практике в базах данных. В разработку методов хранения и обработки темпоральных данных на базе объектно-реляционной модели внесли вклад учёные, такие как Р. Снодграс [3], К. Дженсен [4], Дж. Бен-Зви [4], C. Гадия [4], Е. МакКензи [4], А. Стейнер [5]. Исследования в области темпоральных баз данных привели к многообразию соответствующих темпоральных моделей. В статье рассмотрены недостатки,
9 Статья рекомендована к опубликованию в журнале "Прикладная информатика"
28