Nazarovx - Высшая школа экономики

advertisement
SWorld – 18-29 June
2013
http://www.sworld.com.ua/index.php/ru/conference/the-content-of-conferences/archives-of-individual-conferences/june-2013
MODERN PROBLEMS AND WAYS OF THEIR SOLUTION IN SCIENCE, TRANSPORT, PRODUCTION AND EDUCATION 2013
Доклад/Технические науки – Информатика, вычислительная техника и автоматизация
УДК: 681.3.06
Назаров С.В.
АРХИТЕКТУРНЫЕ ПРЕДСТАВЛЕНИЯ ПРОГРАММНЫХ СИСТЕМ
Московский Национальный исследовательский университет
Высшая школа экономики, Москва, Кирпичная 33, 105187
UDC 681.3.06
Nazarov S.V.
ARCHITECTURAL REPRESENTATIONS OF PROGRAM SYSTEMS
Moscow National Research University
The higher school of economy, Moscow, Kirpichnaya 33, 105187
В работе дается формальное представление некоторых архитектурных
видов (представлений) программных систем и их оптимизация.
Ключевые слова: архитектурный вид, программная система, формальное
представление, оптимизация.
A formal idea of some architectural forms of program systems and their
optimization is given. Keywords: architectural form, program system, formal
representation, optimization.
1. Введение.
При
проектировании
любая
программная
система
(ПС)
может
рассматриваться с разных точек зрения: поведенческой (динамической),
структурной (статической), логической (удовлетворение функциональным
требованиям),
физической
(распределенность),
реализации
(как
детали
архитектуры представляются в коде) и т.п. [1]. Эти различные архитектурные
представления или виды (view) в совокупности дают полную информацию об
архитектуре ПС. При этом каждое отдельное архитектурное представление
может быть определено, как частный аспект программной архитектуры,
1
представляющий специфические свойства программной системы, наиболее
интересные для конкретного заинтересованного лица.
Таким образом, можно говорить о том, что каждое архитектурное
представление ПС A
i
описывает некоторую сторону частного решения по
архитектуре ПС. В совокупности можно считать, что полное
решение по
определению архитектуры AS ПС представляется объединением вида
AS =  A i , i = 1, 2, …, n,
где n – число различных представлений архитектуры ПС.
Стандарт
IEEE
1471
определяет
представление
архитектуры
как
согласованный набор документов, описывающий архитектуру с точки зрения
определенной группы заинтересованных лиц с помощью набора моделей.
Стандарт рекомендует для каждого представления фиксировать отраженные в
нем взгляды и интересы, роли лиц, которые заинтересованы в таком взгляде на
систему, причины, обусловливающие необходимость такого рассмотрения
системы, несоответствия между элементами одного представления или между
различными представлениями, а также различную служебную информацию об
источниках информации, датах создания документов и пр.
Заметим, что каждое архитектурное представление ПС Ai может иметь
множество возможных и допустимых вариантов, и задача архитектора
заключается в нахождении такого варианта Vi архитектурного представления
Ai , которое является оптимальным по некоторому частному показателю при
условии непротиворечивости решений Vj
представлениям Aj , j  i,
по другим архитектурным
i, j = 1, 2, …, n. Это условие можно записать
следующим соотношением
Vi  Vj = , j  i, i, j = 1, 2, …, n.
Далее в данной статье рассматриваются некоторые виды архитектурных
представлений ПС, предлагаются методы формализации возможных вариантов
решений и определения оптимальных решений.
2. Архитектурный вид – размещение. Этот архитектурный вид отражает
распределение компонентов ПС между элементами аппаратной обработки
2
(компьютеры, аппаратура передачи данных и каналы связи). Известно, что в
корпоративных системах широко распространен архитектурный стиль клиентсервер. Рассмотрим один из возможных вариантов определения оптимального
размещения компонентов ПС в двухуровневой системе клиент-сервер [2]. В
решении подобной задачи заинтересован системный архитектор.
2.1. Постановка задачи. Пусть на предприятии внедряется программная
система (ПС), разработанная в архитектурном стиле клиент-сервер. ПС
содержит следующие компоненты (функциональные части – ФП):
F1 – интерфейс пользователя (представление данных и логика сценария
работы);
F2 – логика приложения и обращения к базе данных (БД);
F3 – операции базы данных;
F4 – файловые операции.
Рассматриваются
три
возможные
архитектуры
распределения
функциональных частей приложения на основе двухуровневой схемы (рис. 1).
На всех приведенных ниже вариантах символами КК обозначены клиентские
компьютеры, а символами СК – серверные компьютеры. Каждый вариант
характеризуется своим способом размещения функциональных частей ПС.
А. Схема с “тонким” клиентом. В этом случае клиентский компьютер
обладает незначительной вычислительной мощностью и имеет небольшой
объем оперативной памяти, а внешней вообще может и не быть. В общем
случае под термином тонкий клиент подразумевается достаточно широкий с
точки зрения системной архитектуры набор устройств и программ, которые
объединяются общим свойством: возможность работы в терминальном режиме.
Таким образом, для работы тонкого клиента необходим терминальный сервер.
Рис. 1 А
3
В. Схема с “толстым” клиентом. Толстый или Rich-клиент в архитектуре
клиент-сервер – это приложение, обеспечивающее (в противовес тонкому
клиенту) расширенную функциональность независимо от центрального
сервера. Часто сервер в этом случае является лишь хранилищем данных
(файловым сервером), а вся работа по обработке и представлению этих данных
переносится на машину клиента.
Рис. 1 В
С. Схема с “обычным” клиентом. Для расширения функциональности
тонкого клиента прибегают к его «утолщению», например, добавляют
возможности автономной работы, сохраняя главное отличие – работу в сессии с
терминальным сервером. Когда в клиенте появляются подвижные детали
(жёсткие диски), появляются возможности автономной работы, он перестаёт
быть тонким клиентом в чистом виде, а становится универсальным клиентом.
Рис. 1 С
Во всех схемах используются предварительно выбранные компьютеры КК
и СК (одни и те же). Известна загрузка этих компьютеров и аппаратуры и
каналов связи для каждого варианта системы.
Для расчетного примера, который рассматривается ниже, установлено, что
предположительно оператор КК обращается к приложению с интенсивностью
10 обращений в час (конкретное числовое значение, как и используемые далее)
в данном случае несущественны, так как от этого методика решения задачи не
меняется. Такая работа загружает клиентский компьютер (за счет F1) на 6%, а
аппаратуру и канал связи при работе по схеме А на 1%. Реализация компонента
4
F2 клиентский компьютер на 5%, а в случае реализации F2 на СК последний
загружается на 2,5 %.
При выполнении компонента F3 (схема В) на клиентском компьютере с
сервера поступают полные копии файлов, над которыми производятся
операции базы данных, поэтому загрузка аппаратуры связи и каналов связи
возрастает до 2%. При назначении компонента F3 (операции БД) на КК он
загружается на 15% (хотя это толстый клиент, но все-таки не сервер!).
Выполнение F3 на сервере загружает его на 5%. Реализация файловых
операций F4 возможна только на сервере, и один набор таких операций
загружает СК на 1%.
Все приведенные значения относятся к случаю работы одного КК. При
увеличении числа работающих клиентских компьютеров загрузка элементов
системы возрастает примерно пропорционально. Очевидно, что есть некоторое
предельное число КК, при котором система работает нормально, без
перегрузки.
Требуется выбрать оптимальное распределение компонентов программной
системы (а, следовательно, и схему системы) по компьютерам, при котором
обеспечивается нормальная работа без перегрузки системы.
2.2. Формализация задачи. Для формализации задачи можно использовать
понятие двудольного графа. Граф G = (V, E) называется двудольным графом
(биграфом), если множество V его вершин допускает разбиение на 2
непересекающихся подмножества V1 и V2 (две доли). Причем каждое ребро
графа соединяет вершины из различных долей. Двудольный граф с долями V1 и
V2 обозначается через G = (V1,V2, E). В нашей задаче доля V1 представляется
как V1 = {F1, F2, F3, F4}, а доля V2 соответственно V2 = {KK, CK} (рис. 2).
Ребрами в таком графе будем обозначать возможную реализацию
некоторого компонента ПС на одном из возможных компьютеров системы.
Пунктирное изображение ребра показывает на возможный вариант реализации,
сплошное изображение ребра означает выбранный (по исходным условиям) или
определенный при решении задачи вариант.
5
Поставим каждому ребру в соответствие некоторую переменную x i . В
нашем случае удобно считать, что такая переменная принимает два значения (0
или 1), т.е. xi {0, 1}. При этом значение переменной, равное 1, говорит о том,
что выбирается соответствующее решение (ребро сплошное). Значение
переменной,
равное
нулю,
свидетельствует
о
том,
что
в
решении
соответствующее ребро отсутствует. Таким образом, решение задачи можно
представить двоичным вектором X = (x1 , x2 , x3, x4, x5, x6).
Определим для нашего случая исходные значения переменных и
ограничения на их значения, накладываемые спецификой задачи.
Значение x1 = 1, поскольку F1 всегда реализуется на КК.
Значение x2 = 1, если F2 выполняется на КК, и x2 = 0 – в противном случае.
Значение x3 = 1, если F2 выполняется на СК, и x3 = 0, если F2 не
выполняется на СК.
Значение x4 = 1, если F3 выполняется на КК, и x4 = 0, если F3 не
выполняется на КК.
Значение x5 = 1, если F3 выполняется на СК, и x5 = 0 – в противном случае.
Значение x6 = 1, поскольку файловые операции (F4) могут быть
реализованы только на СК.
К перечисленным переменным необходимо добавить еще одну, с помощью
которой
учитывается
в
системе
количество
возможных
клиентских
компьютеров – x7 . Это целочисленная переменная, от которой зависит загрузка
аппаратных элементов системы, в том чикле, аппаратуры и каналов связи.
6
Следует обратить внимание на тот факт. Что в нашей задаче четыре
булевых переменных (x2 , x3, x4, x5) определяют 16 возможных топологий
двудольного графа, представленного на рис. 2. Однако возможных вариантов
ПС, как следует из рис. 1, только три. Анализ структуры графа (рис. 2)
позволяет легко дописать дополнительные ограничения следующего вида:
x2 + x3 = 1 и x4 + x5 = 1.
Данные соотношения следуют из того факта, что компоненты F2 и F3
могут быть реализованы только или на КК или СК. Кроме того, внимательное
рассмотрение возможных вариантов структур системы (рис. 1) позволяет
сделать вывод, что не может быть допустимым размещение F3 на КК (x 4 = 1)
при размещении F2 на СК (x3 = 1). Таким образом, должно выполняться
ограничение x3 . x4 = 0. Также отметим еще ограничение: если F2 размещается
на СК, то и F3 должен размещаться на СК, т.е. должно выполняться
соотношение x3 . x5 = 1.
Теперь рассмотрим вопрос о выборе целевой функции (ЦФ). Что может
служить в нашей задаче целевой функцией? Может быть несколько вариантов.
В
частности,
максимальная
загрузка
СК,
поскольку
это
определяет
максимальное число клиентских компьютеров, которые могут быть обслужены
системой при допустимой загрузке аппаратуры и каналов связи. С другой
стороны, возможно ограничение числа КК со стороны аппаратуры и каналов
связи, и тогда следует выбрать в качестве ЦФ максимум загрузки аппаратуры и
каналов связи при допустимой загрузке СК. Если в результате решении задачи
в первой постановке окажется, что загрузка аппаратуры связи окажется
значительно ниже допустимой, то это свидетельствует о том, что число КК в
системе ограничивается СК.
Если в результате решения задачи во второй постановке окажется, что СК
загружен ниже допустимого значения, то это говорит о том, что число КК
ограничивается аппаратурой связи.
Введем обозначения для загрузки элементов аппаратной системы, которая
обусловлена работой оператора одного клиентского компьютера:
7
z1k – загрузка КК компонентом F1;
z2k – загрузка КК компонентом F2;
z3k – загрузка КК компонентом F3;
z2c – загрузка CК компонентом F2;
z3c – загрузка CК компонентом F3;
z4c – загрузка CК компонентом F4;
z1cв – загрузка аппаратуры и КС при работе по схеме 1 А;
z2cв – загрузка аппаратуры и КС при работе по схеме 1 В;
z3cв – загрузка аппаратуры и КС при работе по схеме 1 С.
Построим функции загрузки элементов аппаратной системы.
1. Загрузка сервера:
Zc = (z2c . x3 + z3c . x5 + z4c . x6 ) x7;
2. Загрузка КК:
Zk = z1k. x1 + z2k . x2 + z3k . x4 ;
3. Загрузка аппаратуры и каналов связи:
Zcв = (z1cв . x3 + z2cв . x4 + z3cв . x2 ) x7.
Оптимальное распределение компонентов ПС по аппаратуре системы
может иметь своей целью максимизацию числа клиентских компьютеров в
системе при условии, что загрузка всех аппаратных элементов системы не
превышает допустимую (т.е.  1). В этом случае целевая функция оптимизации
распределения компонентов ПС по аппаратуре системы может иметь
следующий вид:
x7 = 1/(z2c . x3 + z3c . x5 + z4c . x6).
Таким
образом,
оптимального
в
условиях
распределения
(1)
сформулированной
компонентов
задачи
программной
выбор
системы
по
аппаратным средствам системы сводится к отысканию такого решения
Xopt = (x1 , x2 , x3, x4, x5, x6), при котором достигается максимальное
значение функции (1), т.е.
max x7 = 1/(z2c . x3 + z3c . x5 + z4c . x6) (2)
при условии выполнения следующих ограничений:
8
z1k. x1 + z2k . x2 + z3k . x4  1;
(3)
(Загрузка КК)
(z1cв . x3 + z2cв . x4 + z3cв . x2) x7  1;
(4)
(Загрузка КС)
i
(5)
xi  {0, 1}, i = 1, 2, …, 6;
x2 + x3 = 1;
(6)
x4 + x5 = 1;
(7)
x2 . x4 = 1;
(8)
x3 . x5 = 1;
(9)
x7  0.
(10)
Заметим, что в такой постановке задачи от максимизации целевой функции
(2) можно перейти к минимизации выражения, стоящего в знаменателе, т.е. к
отысканию
min (z2c . x3 + z3c . x5 + z4c . x6) при тех же ограничениях (3) – (10).
Физический смысл решения задачи в такой постановке означает поиск такого
решения, при котором загрузка сервера от одного клиентского компьютера
минимальна.
2.3. Решение задачи. Сформулированная задача относится к классу задач
линейного программирования с булевыми переменными. В данном случае в
связи с малой размерностью задачи ее можно легко решить полным перебором
допустимых наборов переменных (x1 , x2 , x3, x4, x5, x6), представляющих
допустимые решения в условиях принятых ограничений.
Заметим, что во всех возможных решениях x1 = x6 =1, что дополнительно
упрощает
поиск
решения.
Однако,
кроме
простого
решения
задачи,
представляет интерес анализ возможных вариантов схем, приведенных на рис.
1 с целью получения ответа вида “что будет, если?”. Другими словами, хорошо
было бы иметь модель, которая помогла бы детально исследовать возможные
варианты архитектур ПС. Такую модель легко построить, используя
электронные таблицы, например, Excel современной редакции. Для этого
следует воспользоваться возможностями надстройки Поиск решения.
На рис. 3 показано возможное представление
задачи со значениями
исходных данных, приведенными в начале статьи. Здесь всем переменным
произвольно назначено единичное значение. На результат решения задачи это
9
никак не влияет. Решение задачи производится, как это обычно, для
электронных таблиц. Результат решения представлен на рис. 4. Полученный
вектор решения имеет следующий вид: Xopt = (1, 0, 1, 0, 1, 1). Это
соответствует архитектура распределения компонентов ПС в соответствии с
графом, представленном на рис. 5. Такой граф соответствует структуре
системы, в которой на сервере размещаются компоненты F2, F3 и F4 (рис. 1-А).
Анализ полученных результатов для назначенных исходных данных
позволяет сделать вывод, что аппаратура и каналы связи имеют запас по
производительности (загрузка 0,706 < 1), а сервер загружен полностью. Точнее,
его загрузка немного меньше единичного значения, если округлить число
клиентских компьютеров до ближайшего меньшего значения – 11.
Рис. 3
Рис. 4
10
Предложенный
подход
решения
задачи
определения
оптимальной
архитектуры распределения компонентов программных систем по аппаратуре
компьютерной системы может быть с успехом использован для трехуровневых
систем типа клиент-сервер, а также более сложных топологий распределенных
систем, содержащих несколько серверов приложений и баз данных. Возможно
построение подобных табличных моделей для анализа и оптимизации
многослойных программных систем и систем с параллелизмом.
3. Размещение программной системы, основанной на потоках данных.
Эти архитектуры являются современным вариантом архитектур, управляемых
портами сообщений. При использовании механизма портов программная
система делится на несколько подсистем, каждая из которых может иметь один
или несколько входных портов (очередей). Порт – это текущий список входных
сообщений
для подсистемы. Каждая подсистема рассматривается как
асинхронный процесс, т.е. все подсистемы работают параллельно. Если одна из
них хочет передать некоторые данные другой, она посылает их во входной порт
этой другой подсистемы. Если подсистема готова обрабатывать какие-то
данные, она читает их из своих входных портов. Для организации такой связи
используются операции ПОСЛАТЬ и ПОЛУЧИТЬ.
В общем случае архитектуры, основанные на потоках данных, представляются
как совокупность процессов, каждый из которых принимает данные из
различных источников, а также возвращает данные в другие источники или
хранилища данных. Процессы проектируются независимо друг от друга.
11
3.1.
Постановка задачи. Пусть имеется некоторая программная система
(ПС), состоящая из нескольких асинхронно выполняющихся программных
процессов P = {pi | i = 1, 2, …, n}. В компьютерной системе имеется m
числителей, на которых предполагается выполнение процессов P. Обозначим
эти вычислители множеством V = {vj | j = 1, 2, …, m}. Известна загрузка
вычислителей каждым процессом, заданная матрицей Z = || zij || , i = 1, 2, …, n; j
= 1, 2, …, m.
Требуется выбрать оптимальное распределение компонентов программной
системы по вычислителям, при котором обеспечивается нормальная работа без
перегрузки системы.
3.2. Формализация задачи. Размещение компонентов ПС по вычислителям
удобно представить двудольным графом вида G = (P, V, E), где Е – множество
дуг, отображающих размещение процессов Р по вычислителям. Если
ограничений на размещений компонентов Р по вычислителям нет, то в таком
графе каждая вершина pi  P соединена дугами со всеми вершинами V (рис 6).
Рис. 6
Поставим в соответствие дугам Е графа G множество переменных X = {x ij |
i = 1, 2, …, n; j = 1, 2, …, m}. Каждая переменная x ij образуется по правилу xij =
1, если будет принято решение выполнять процесс p i на вычислителе vj . В
противном случае xij = 0.
Требуется так распределить множество процессов Р по вычислителям V,
чтобы суммарная загрузка вычислителей была минимальной при условии того,
12
что допустимая загрузка каждого вычислителя ≤ 1 и все процессы Р
выполняются. Применительно к графовой интерпретации задача сводится к
отысканию частичного графа Gо = (P, V, Eо), где Eо  E. При этом множество
найденных дуг Eо определит значение булевых переменных Xo = {xij | i = 1, 2,
…, n; j = 1, 2, …, m}.
Целевая функция в этом случае имеет следующий вид:
C = ∑ ∑ zij xij  min, i = 1, 2,…, n; j = 1, 2,…, m.
(1)
Определим ограничения задачи. Первая группа ограничений связана с тем
фактом, что каждый процесс pi в результате решения задачи должен быть
назначен только на один вычислитель. Это условие записывается следующим
соотношением:
 i ∑ xij = 1;
i = 1, 2, …, n; j = 1, 2,…, m.
(2)
Поскольку все переменные задачи – двоичные, вторая группа ограничений
имеет следующий вид:
 xij  {0, 1}.
i = 1, 2, …, n; j = 1, 2,…, m.
(3)
Третья группа ограничений связана с допустимой загрузкой каждого
вычислителя. Как отмечено выше, она не должна превышать единичного
значения:
 j zj = ∑ zij ≤ 1, j = 1, 2, …, m.
i
3.3. Решение задачи.
(4)
Сформулированная задача (1) – (4) относится к
классу задач линейного программирования с булевыми переменными. При
малой размерности задачу можно легко решить полным перебором наборов
переменных X = {xij | i = 1, 2, …, n; j = 1, 2, …, m}, представляющих
допустимые решения в условиях принятых ограничений. Однако уже пяти
процессах и пяти вычислителях количество возможных вариантов равно 55 , что
приведет к более чем 3000 переборов. Однако возможности современных
электронных таблиц позволяют решать подобные задачи значительно большей
размерности.
13
Приведем пример решения. Пусть задана загрузка пяти вычислителей
каждым из пяти процессов матрицей Z = || zij || , i = 1, 2, …, n; j = 1, 2, …, m,
которая приведена ниже (рис. 7).
Полностью набранные исходные данные в электронной таблице, например,
могут иметь следующий вид (рис. 8).
Рис. 7
Рис. 8
Здесь всем переменным произвольно назначено единичное значение (на
результат решения задачи это не влияет). Решение задачи производится, как это
обычно, для электронных таблиц. Ввод необходимых данных (целевой ячейки,
переменных и ограничений) для решения задачи представлен на рис. 9.
14
Рис. 9
Результат решения задачи показан на рис. 10. По полученному результату
легко определяется искомый частичный граф, иллюстрирующий распределение
процессов по вычислителям. Исходный граф показан на рис. 11, а решение – на
рис. 12
Рис. 10
15
4.
Распределение
функций.
Этот
архитектурный
вид
отражает
распределение обязанностей по реализации и интеграции модулей между
соответствующими группами разработчиков. Наличие в составе архитектуры
структуры распределения функций делает очевидным, что при принятии
соответствующих
решений
учитывались
как
архитектурные,
так
и
организационные факторы. Руководителю должно быть известно, какие именно
навыки требуются от разных групп разработчиков.
4.1. Постановка задачи. Пусть в организации-разработчике имеются
следующие группы специалистов: аналитики; архитекторы; кодировщики;
тестировщики; интеграторы.
В
организации
выполняется
несколько
проектов
по
созданию
программных продуктов. На начало текущего года сложился следующий
перечень работ, требующих выполнения:
по проекту № 1 – анализ и разработка требований;
по проекту № 2 – разработка спецификаций;
по проекту № 3 – разработка архитектуры;
по проекту № 4 – разработка программного кода;
по проекту № 5 – тестирование;
по проекту № 6 – анализ и разработка требований;
по проекту № 7 – разработка архитектуры.
Таким образом, имеется 5 групп специалистов и 7 проектов, над которыми
требуется работать. Поручить по одной работе каждой группе невозможно.
Какие-то группы должны работать над более чем одним проектом.
Руководитель из опыта предыдущих работ примерно может оценить
трудозатраты (например, в человеко-часах) каждой группы на выполнение
предстоящих работ. Например, он построил таблицу возможных трудозатрат по
предстоящим работам с учетом квалификации и опыта исполнителей (табл. 1).
16
Табл. 1
Требуется
выбрать
оптимальное
распределение
специалистов
по
предстоящим работам. Очевидно, оптимальным будет такое распределение, при
котором все работы будут выполнены при минимальных затратах рабочего
времени. При этом возможно такое решение, что одному исполнителю будет
назначено более одной работы.
4.2. Формализация задачи. Для формализации задачи можно использовать
понятие двудольного графа. В таком графе множество V его вершин допускает
разбиение на 2 непересекающихся подмножества V1 и V2 (две доли).
Двудольный граф с долями V1 и V2 обозначается через G = (V1,V2, E). В
нашем случае V1 – это множество работ, а V2 – множество исполнителей
работ. Ребрами в таком графе будем обозначать возможное назначение i-ой
работы (i = 1, 2, …,7) для выполнения j-ой группой специалистов (j = 1, 2, …,5).
Максимальное число ребер в таком графе можно определить из выражения E
=  V1 *  V2 . Однако, анализируя табл. 1, можно увидеть, что реально
количество ребер меньше, так как есть исполнители, которые не могут
выполнять все работы. Для поставленной задачи граф имеет вид, показанный на
рис. 13.
17
Поставим в соответствие дугам Е графа G множество переменных X = {x ij
| i = 1, 2, …, n; j = 1, 2, …, m}. Здесь n – число работ, а m – количество
исполнителей. Каждая переменная xij образуется по правилу x ij = 1, если будет
принято решение выполнять проект i группой j. В противном случае xij = 0.
Требуется так распределить множество проектов V1 по исполнителям V2,
чтобы суммарная загрузка исполнителей была минимальной при условии того,
что все проекты выполняются. Применительно к графовой интерпретации
задача сводится к отысканию частичного графа Gо = (V1, V2, Eо), где Eо  E.
При этом множество найденных дуг Eо определит значение булевых
переменных Xo = {xij | i = 1, 2, …, n; j = 1, 2, …, m}.
Обозначим трудоемкость выполнения i-ой работы j – м исполнителем
через zij . В этом случае пустая клетка в табл. 1 должна иметь достаточно
большое значение, чтобы соответствующее значение не могло войти в решение.
Целевая функция в этом случае имеет следующий вид:
C = ∑ ∑ zij xij  min,
i = 1, 2, …, n; j = 1, 2, …, m.
(1)
Определим ограничения задачи. Первая группа ограничений связана с тем
фактом, что каждый проект в результате решения задачи должен выполняться
только
одним
исполнителем.
Это
условие
записывается
следующими
соотношениями:
 i ∑ xij = 1;
j = 1, 2, …, m.
(2)
Поскольку все переменные задачи – двоичные, вторая группа ограничений
имеет следующий вид:
18
 xij  {0, 1}, i = 1, 2, …,n; j = 1, 2, …, m.
(3)
Заметим, что решение задачи должно допускать исполнение нескольких
работ одной группой при условии, что ее загрузка не превышает ресурс
рабочего времени. Поэтому третья группа ограничений может быть записана
следующим образом:
 j ∑ zij xij ≤ zj;
i = 1, 2, …, n,
(4)
где zj - допустимый ресурс рабочего времени j – й группы.
4.3. Решение задачи.
Сформулированная задача (1) – (4) относится к
классу задач линейного программирования с булевыми переменными. При
малой размерности задачу можно легко решить полным перебором наборов
переменных X = {xij | i = 1, 2, …, n; j = 1, 2, …, m}, представляющих
допустимые решения в условиях принятых ограничений. Однако возможности
современных электронных таблиц позволяют решать подобные задачи
значительно большей размерности.
Приведем пример решения. Пусть задана таблица трудозатрат по
предстоящим работам с учетом квалификации и опыта исполнителей (таб. 1).
Заданы также ограничения на ресурс рабочего времени исполнителей,
например, в количестве 150 человеко-часов по каждой группе исполнителей.
Сформированные данные для решения задачи в электронной таблице Excel
представлены на рис. 14.
Рис. 14
19
Заполненные данные для поиска решения в форме электронной таблице
Excel приведены на рис. 15 и 16 .
Рис. 15
Рис. 16
Найденное решение показано на рис. 17.
20
Заключение. Как показано на примерах рассмотрения архитектурных
представлений программных систем, каждое архитектурное представление
может иметь множество допустимых вариантов, среди которых есть лучший по
некоторому критерию. Задача архитектора заключается в такой формализации
возможных вариантов, которая позволит известными методами и достаточно
простыми инструментальными средствами выбрать оптимальный вариант в
каждом архитектурном представлении программной системы. Рассмотренные в
статье примеры решения подобных задач являются подтверждением того
факта, что в ряде случаев можно эффективно использовать известные подходы
исследования операций для формализации задачи и электронные таблицы для
ее решения.
Литература
1. Фаулер М. Архитектура корпоративных программных приложений.
приложений.: Пер. с англ. – М.: Издательский дом "Вильяме", 2006. –
544 с.
2. Назаров С.В., Широков А.И. Современные операционные системы.
М.: Интуит, 2013. – 376 с.
References:
1. Fowler M. Architecture of corporate program applications. appendices. :
The lane with English – M: Publishing house "William", 2006. – 544 pages.
2. Nazarov S. V., Shirokov A.I. Modern operating systems. M: Intuit, 2013. –
376 pages.
21
Download