Научная статья на тему 'Объектно-ориентированные технологии в автоматизации решения задачи размещения'

Объектно-ориентированные технологии в автоматизации решения задачи размещения Текст научной статьи по специальности «Математика»

CC BY
125
31
i Надоели баннеры? Вы всегда можете отключить рекламу.

Аннотация научной статьи по математике, автор научной работы — Резникова Светлана Юльевна, Шевченко Людмила Петровна

Приводятся результаты исследования задачи размещения источников промышленных выбросов в пределах заданных границ с использованием объектно-ориентированного подхода. Описывается алгоритм программной реализации решения такой задачи.

i Надоели баннеры? Вы всегда можете отключить рекламу.

Похожие темы научных работ по математике , автор научной работы — Резникова Светлана Юльевна, Шевченко Людмила Петровна

iНе можете найти то, что вам нужно? Попробуйте сервис подбора литературы.
i Надоели баннеры? Вы всегда можете отключить рекламу.

The Object Oriented technologies at automatization of placing task solution

This article describes the algorithm of task of pollution of sources placing, with help of Object Oriented Programming. Some variants of task solution are elaborated. Choosing of the variants depends on regions of pollution and region of placing. It allows to product the planing of construction of industrial objects, which have different sizes and geometry of pollution region.

Текст научной работы на тему «Объектно-ориентированные технологии в автоматизации решения задачи размещения»

УДК 681.5.017+721.011.22+574

ОБЪЕКТНО-ОРИЕНТИРОВАННЫЕ ТЕХНОЛОГИИ В АВТОМАТИЗАЦИИ РЕШЕНИЯ ЗАДАЧИ РАЗМЕЩЕНИЯ

РЕЗНИКОВА С.Ю., ШЕВЧЕНКО Л.П._____________

Приводятся результаты исследования задачи размещения источников промышленных выбросов в пределах заданных границ с использованием объектно-ориентированного подхода. Описывается алгоритм программной реализации решения такой задачи.

1. Введение

В настоящей статье описан алгоритм размещения источников загрязнения, который базируется на объектно-ориентированной методологии программирования. Объектно-ориентированный способ размещения плоских фигур является таким средством решения поставленной задачи, при реализации которого все геометрические фигуры представляются через единый интерфейс. Этот интерфейс инкапсулирует переменные и методы, которые необходимы для описания состояния и поведения геометрических фигур. Он включает в себя:

— определение координат вершин;

— проверку, лежит ли заданная точка внутри фигуры;

— определение наименьшего прямоугольника, в котором помещается фигура;

— трансляцию фигуры на заданный вектор.

В настоящее время наиболее предпочтительным языком программирования для реализации объектноориентированного способа размещения является J ava. В пользу такого выбора говорят следующие особенности этого языка [1,2]:

— отсутствие указателей и операций над ними, что повышает устойчивость программ и уменьшает число возможных ошибок;

— встроенный контроль переопределения типов объектов;

— автоматический сбор мусора, что предотвращает потери блоков памяти и прочие ошибки, связанные с ее выделением и освобождением;

— широта спектра встроенных графических средств, особенно для версии Java 1.1 и выше;

— встроенная поддержка потоков;

— многоплатформенность, т.е. возможность работы с одной и той же программой в различных операционных средах.

2. Постановка задачи

Пусть в заданном регионе планируется работа нескольких объектов, выбрасывающих в атмосферу вредные аэрозоли. Возникает задача определить возможное местоположение нового промышленного предприятия вблизи экологически значимых зон и уже действующих предприятий. При определении обла-

сти допустимого расположения предприятия необходимо учитывать ограничение на суммарное годовое загрязнение, заключающееся в том, чтобы уровень загрязнения от вредных промышленных выбросов не превышал санитарных норм, а общая экологическая нагрузка на весь регион была минимальной или в допустимых пределах [3].

Для размещения источников загрязнения необходимо отыскать такое положение каждого из них, чтобы создаваемая этим источником зона загрязнения (33) удовлетворяла следующим критериям:

1) 33 не выходит за пределы заданных границ района размещения (РР);

2) 33 одного источника не пересекает 33 другого источника и может иметь с ним только общие граничные точки;

3) 33 располагается как можно ближе к центру тяжести РР.

Каждая 33 аппроксимируется восьмиугольником и каждая из вершин этого восьмиугольника соответствует одному из восьми направлений частей света: Север, Северо-восток, Восток, Юго-восток, Юг, Юго-запад, 3апад и Северо-запад.

3. Описание алгоритма

На рис. 1 представлена структурная схема алгоритма размещения 33 в пределах заданного РР.

3десь переменная Key служит для объяснения логики записи в массив текущего положения 33. Этот массив обозначает возможное положение 33 согласно приведенным выше критериям 1, 2. После завершения работы алгоритма он анализируется и выбирается то положение, которое отвечает критерию 3.

Расстояние от источника выброса до той точки, в которой концентрация загрязняющих веществ не превышает требуемой величины, рассчитывается вдоль каждого из восьми обозначенных выше направлений согласно нормативным документам [4]. Вычисленные таким образом расстояния DX[i], DY[i], i=0, ..7 вдоль осей X и Y используются затем для создания объекта класса Polygon:

Polygon current Polygon = new Polygon(DX, DY, 8).

После этого объект currentPolygon описывает размещаемую 33. Следующий фрагмент демонстрирует размещение 33 в центр тяжести РР и вычисление ее площади:

// Размещение sourcePolygon в начальной точке объект sourcePoint //описывает точку ЦТ РР

source Point = new Point(XCenter,YCenter);

// Трансляция 33 в ЦТ

sourcePolygon.translate(sourcePoint.x,sourcePoint.y);

// Массивы testX и testY содержат координаты вершин //33

testX = source Polygon. xpoints; testY = source Polygon.ypoints;

РИ, 1999, № 4

115

Рис. 1. Структурная схема алгоритма размещения

// Вычисление площади source Polygon sourceSquare //представляет описывающий 33 прямоугольник

Rectangle sourceSquare = sourcePolygon.getBounds();

// Целочисленное значение площади

int k = 0;

for (inti = sourceSquare .x; i<sourceSquare.x+sourceSquare.width; i++) {

for (int j = sourceSquare.y;

j<sourceSquare.y+sourceSquare.height;j++)

if(sourcePolygon.contains(i,j)) k++;

}

После размещения N зон загрязнения возникает область, которая является запрещенной для размещения N+1 -го объекта, описывающего очередной источник загрязнения. Предположим, что такой областью является G, показанная на рис.2, а тем объектом, который необходимо разместить, является область A.

А\ и к

V

S /"о W

Рис. 2. Область G является недопустимой для размещения объекта A

Начало системы координат совмещено с начальной точкой размещения.

Последователь -ная трансляция вдоль осей X и Y и проверка на каждом шаге ус -ловия выхода 33 за границы G позволяет найти годограф функции плотного размещения (ГФПР) L, показанный на рис.3. Функция L будет обрезана в случае, показанном на рис. 4. Здесь

Ах^ Л к ‘■чч "■*1

1 \ 1 1 1 1 1 1 1 1 1 х

1 1 1 \ / G W 1 ✓ S

\ \ /L / /

Рис. 3. Годограф функции плотного размещения L объекта А

Рис 4. Годограф обрезается границей Z допустимого РР

116

РИ, 1999, № 4

размер РР ограничивает ГФПР. Ниже приведен фрагмент кода, который демонстрирует реализацию процедуры двойного сканирования РР по оси Y.

// Метод осуществляет поиск функции плотного размещения путем двойного сканирования.

// Входными параметрами являются:

//yUp — верхний предел сканирования по оси Y

// yShift — шаг по оси Y

// По завершении метода формируется массив точек, которые образуют ГФПР

// и в вектор состояния зоны записывается положение текущей 33

public static void SearchOfBoundary(int yUp, int xUp, int yShift, int xShift) {

// переменная, которая содержит информацию о положении текущей 33

boolean OutOfPolygons;

// см. рис.1

boolean Key = true;

// Векторы для записи результатов сканирования по оси Y

Vector godographY = new Vector();

// Сканирование района размещения по оси Y for (int j=0; j<yUp; j++) { for (int i=0; i<xUp; i++) {

// Вызов метода OutOfPolygons() для проверки текущего положения 33

OutOfPolygons = OutOfPolygons();

if (OutOfPolygons && Key) {

Key = false; if ((i!=0) && (j!=0))

// Фиксация найденной точки годографа godographY.addElement(new Point(i*xShift,j*yShift));

} else

if (!OutOfPolygons && !Key) {

Key = true;

// Проверка положения 33 относительно района размещения

if (zone Polygon. contains (XCenter+(i-1)*xShift,YCenter+j*yShift))

// и запись очередной найденной точки годографа в вектор Y

godographY.addElement(newPoint((i-

1)*xShift,j*yShift));

}

// Изменение положения полюса 33 вдоль оси X на один шаг

sourcePoint.x += xShift;

// и трансляция 33

sourcePolygon.translate(xShift,0);

}

// Возврат полюса в исходное положение (ЦТ района размещения)

sourcePoint.x -= xUp*xShift;

// и обратная трансляция 33

iНе можете найти то, что вам нужно? Попробуйте сервис подбора литературы.

source Polygon. translate (-

xUp*xShift,0);

Key = true;

// Изменение положения полюса 33 вдоль оси Y на один шаг

sourcePoint.y += yShift;

// и трансляция 33

sourcePolygon.translate(0,yShift);

}

// Возврат полюса в исходное положение (ЦТ района размещения)

sourcePoint.y -= yUp*yShift;

// и обратная трансляция 33

sourcePolygon.translate(0,-

yUp*yShift).

Несколько иная ситуация складывается в случае, когда РР размещения значительно превосходит как размер области G, так и размер объекта А. При этом возникает целая область, показанная на рис. 5,

Рис. 5. Область допустимого расположения центра объекта А

каждая из точек которой допустима для местоположения центра объекта А. С учетом критерия 3 размещение очередной 33 будет осуществляться на внутренней границе допустимой области размещения, а именно в той точке, которая наиболее близко расположена к центру тяжести.

Таким образом, первым этапом решения поставленной задачи является нахождение всех точек, принадлежащих допустимой области размещения источника

РИ, 1999, № 4

117

загрязнения с учетом границ G и Z путем последовательной проверки выполнения критериев 1 и 2.

Алгоритм размещения выполняет те или иные действия в зависимости от результатов проверок двух типов: 1) лежит ли 33 в пределах РР и 2) пересекает ли 33 одну из ранее размещенных зон загрязнения. Поскольку каждая из ранее установленных зон загрязнения фиксируется, способ реализовать эти проверки заключается в получении массива координат, которые описывают вершины текущей зоны загрязнения и проверки того, попадают (или не попадают) эти вершины в область нахождения ранее установленных зон и/или границ РР.

В то же время возможным является такой вариант, при котором форма размещаемой 33 существенно отличается от ранее рассмотренных 33, или когда РР содержит такие участки границы, размер которых меньше характерного размера устанавливаемой зоны. Пример перекрытия двух зон загрязнения показан на рис.

6. Сложная ситуация складывается и в случае, показанном на рис. 7.

Очевидно, что в приведенных ситуациях проверку необходимо проводитьдля всех (а не только вершинных) граничных точек размещаемой зоны. Для реализации такого решения строятся линейные функции границы 33 и выполняются соответствующие проверки на каждом шаге сканирования РР. Реализация соответствующего кода показана ниже.

Рис. 6. Пример взаимного перекрытия двух 33. Область Т является недопустимой

T'

Рис. 7. Пример выхода части 33 A за пределы границы РР G. Область T' является недопустимой

// Метод SourceCoordinates() проверяет условие непересечения границ 33 с ранее установленными

// в район размещения зонами загрязнения.

// Метод возвращает false, если пересечение обнаружено

static boolean SourceCoordinates() { boolean RESULT = true;

// testX, testY—координаты вершин текущей 33 testX = source Polygon.xpoints; testY = source Polygon.ypoints;

int x1, x2, y1, y2; double a = 0.0, b = 0.0;

// Цикл действует для всех вершинных точек 33 for (int i=0; i<8; i++) { int iL = (i+1)%8;

x1 = testX[i]; y1 = testY[i];

x2 = testX[iL]; y2 = testY[iL];

int xMin = Math.min(x1,x2);

int xMax = Math.max(x1,x2);

int yMin = Math.min(y1,y2);

int yMax = Math.max(y1,y2);

// Обработка ситуации, когда участок границы 33 представлен горизонтальной линией

if (x1==x2) {

for (int j=yMin; j<yMax; j++)

{

for (Enumeration e =

sourceCollection.elements(); e.hasMoreElements();) {

e.nextElement(); return false;

Polygon current = (Polygon) if (current.contains(x1,j)) }

}

}

else

// Обработка ситуации, когда участок границы 33 представлен вертикальной линией

if (y1==y2) {

for (intj=xMin;j<xMax; j++)

{

for (Enumeration e =

sourceCollection.elements(); e.hasMoreElements();) {

Polygon current

= (Polygon) e.nextElement();

if (current.contains(j,y1))

return false;

}

}

}

else {

// Обработка ситуации, когда участок границы 33 представлен линейной функцией

a = (double) (y1-y2)/(x1-x2);

b = (double)(x1*y2-y1*x2)/(x1-x2);

for (int j=xMin; j<xMax; j++) {

118

РИ, 1999, № 4

int k = (int) (a*j+b);

for (Enumeration e = sourceCollection.elements(); e.hasMoreElements();) {

Polygon current = (Polygon)

e.nextElement();

if (current.contains(j,k)) return false; }

}

}

}

return RESULT;

}// Завершение метода SourceCoordinates()

В результате выполнения процедуры сканирования РР формируется годограф функции плотного размещения. Согласно критерию 3 зона загрязнения должна быть установлена как можно ближе к центру тяжести РР. Так как PotentialCoordinates к моменту завершения метода сканирования представляет собой неупорядоченный массив, то алгоритм установки ЗЗ должен выполнить сортировку массива расстояний от центра тяжести до точки потенциально возможного размещения зоны загрязнения.

После выполнения сортировки центр ЗЗ устанавливается в ту точку, расстояние от которой до центра тяжести РР является минимальным, и заносится в вектор состояния района размещения.

4. Выводы

Разработана программа размещения источников загрязнения, которая позволяет решать поставленную

задачу для геометрических объектов любых размеров, имеющих форму восьмиугольников. При этом объектно-ориентированный подход програм-мирова-ния позволяет осуществлять решение задачи для ЗЗ любой геометрии и без каких-либо ограничений на форму границы РР.

Ввиду относительно большого потребления машинного времени некоторыми реализациями разработанного алгоритма, созданная нами программа позволяет пользователю самому выбирать ту или иную стратегию решения задачи, исходя из конкретно возникающей ситуации. Кроме того, программа позволяет создавать базы данных промышленных объектов с привязкой их расположения к конкретной местности и конкретным требованиям к предельно допустимым уровням выбросов загрязнения.

Литература: 1. Гослинг Д, Арнольд К. Язык программирования Java: Пер. с англ. СПб.: Питер, 1997. 304 с. 2. Флэнэген Д Java in a Nutshell: Пер. с англ., Киев.: Изд. группа BHV, 1998. 720 с. 3. Стоян Ю.Г., Путятин В.П. Оптимизация технических систем с источниками физических полей. К.: Наук. думка, 1988. 189 с. 4. Мазур И.И., Молдованов О.И., Шишов В.Н. Инженерная экология. М.: Высш. шк., 1996. Т. 2. 654 с.

Поступила в редколлегию 20.12.99

Рецензент: д-р техн. наук Путятин В.П.

Резникова Светлана Юльевна, аспирантка кафедры информатики ХГТУСА. Научные интересы: разработка объектно-ориентированных систем. Адрес: Украина, 61002, Харьков, ул. Сумская, 40, тел. 40-29-25.

Шевченко Людмила Петровна, канд. физ.-мат. наук, доцент, заведующая кафедрой информатики ХГТУСА. Научные интересы: разработка объектно-ориентированных систем. Адрес: Украина, 61002, Харьков, ул. Сумская, 40, тел. 40-29-25.

УДК 658.012.011.56

ПРИНЦИПЫ ПРЕДВАРИТЕЛЬНОЙ ОЦЕНКИ ЭФФЕКТИВНОСТИ ЛОГИСТИЧЕСКОЙ ИНФОРМАЦИОННОЙ УПРАВЛЯЮЩЕЙ СИСТЕМЫ

ЕВЛАНОВ М.В., ПУШКАРЕВ А.Н., АЛЬ-САЛАЙМЕХ С.А.

Рассматриваются основные оценки эффективности автоматизации управления, выявляются их достоинства и недостатки. На основании проведенного анализа предлагаются основные принципы оценивания экономической эффективности логистической ИУС, определяются главные направления и основные трудности проведения такого оценивания.

В условиях рыночной экономики одним из наиболее важных факторов, влияющих на решения о производстве любых изделий, является экономический фактор. Под таким фактором в дальнейшем будем понимать совокупность экономических (технико-

экономических) показателей, определяющих целесообразность изготовления и сбыта изделий. Использование таких показателей позволяет также связать воедино различные представления одного и того же изделия, т. е. именно экономика является основой диалога между разработчиком изделия и его заказчиком (пользователем).

Сказанное выше в полной мере относится к логистическим информационным управляющим системам (ЛИУС), которые являются наукоемкими и сложными в изготовлении изделиями с весьма ограниченным сбытом. В то же время необходимо учитывать, что ЛИУС — это прежде всего системы управления экономикой предприятия, ориентированные на достижение таких целей, как снижение затрат или повышение прибылей от закупки, хранения, производства и сбыта продукции предприятия [1]. Это означает, что именно совокупность экономических показателей должна определять цель функционирования ЛИУС в целом, которая в дальнейшем трансформируется в цель создания отдельных элементов функциональной и обеспечивающей частей [2], к которым относятся ЛИУС.

РИ, 1999, № 4

iНе можете найти то, что вам нужно? Попробуйте сервис подбора литературы.

119

i Надоели баннеры? Вы всегда можете отключить рекламу.