Министерство образования и науки Российской Федерации МОСКОВСКИЙ ФИЗИКО-ТЕХНИЧЕСКИЙ ИНСТИТУТ (государственный университет) ФАКУЛЬТЕТ РАДИОТЕХНИКИ И КИБЕРНЕТИКИ Кафедра Инфокоммуникационных Систем и Сетей РАЗРАБОТКА И ИССЛЕДОВАНИЕ БЕСПРОВОДНОЙ ГИБРИДНОЙ ТЕЛЕКОММУНИКАЦИОННОЙ СИСТЕМЫ НА БАЗЕ ЛАЗЕРНОЙ И РАДИО- ТЕХНОЛОГИЙ Магистерская диссертация студента 417 группы Головина Алексея Владимировича Научный руководитель Вишневский В.М., д.т.н. г. Москва 2010 Содержание 1. Введение .............................................................................................. 3 1.1. Технология АОЛС......................................................................................... 3 1.2. Обзор современного рынка FSO-оборудования ........................................ 6 1.3. Гибридное радио-оптическое оборудование............................................ 10 2. Постановка задачи и описание модели ....................................................... 14 2.1. Постановка задачи ...................................................................................... 14 2.2. Описание модели гибридной радио-оптической телекоммуникационной системы ..................................................................... 15 3. Математическое моделирование ................................................................. 18 3.1. Стационарное распределение вероятностей состояний системы .......... 18 3.2. Матрично-аналитический метод вычисления стационарных вероятностей ....................................................................................................... 25 3.3. Условие существования стационарного режима ..................................... 30 3.4. Характеристики производительности системы ....................................... 32 3.5. Алгоритм и компьютерная программа расчёта ....................................... 35 3.6. Примеры численных расчётов ................................................................... 38 4. Имитационное моделирование ..................................................................... 47 4.1. Описание имитационной модели и компьютерной программы ............ 47 4.2. Примеры численных расчётов ................................................................... 49 5. Заключение ....................................................................................................... 53 Список использовавшихся источников ......................................................... 55 Приложение 1. Список интернет-источников, использовавшихся при обзоре рынка FSO-оборудования ..................................................................... 56 Приложение 2. Java-код программы расчёта ................................................ 57 2 1. Бурное развитие Введение телекоммуникационного рынка требует высокоскоростных линий передачи данных. Однако внедрение проводных технологий (например, прокладка оптического волокна) подразумевает солидные инвестиции, да и в принципе не всегда возможна. Естественной альтернативой в этом случае являются беспроводные линии связи. На сегодняшний день существует несколько основных беспроводных решений – это использование широкополосных радиоканалов WiFi / WiMax, радиорелейных линий (РРЛС) или атмосферных оптических линий связи (АОЛС). Однако беспроводная связь в радиодиапазоне ограничена перегруженностью и дефицитом частотного диапазона, недостаточной скрытностью, подверженностью помехам (в том числе и преднамеренным, и с соседних каналов), повышенным энергопотреблением. Кроме того, при эксплуатации РРЛС приходится решать вопросы, связанные с получением разрешений на использование рабочих частот, что на сегодняшний день представляет большую проблему. В тоже время применение лазерных средств снимает эти сложные вопросы. Поэтому сегодня без преувеличения можно говорить о взрывном росте интереса к беспроводной оптике. 1.1. Технология АОЛС Сама технология АОЛС (в разных источниках также встречаются аббревиатуры FSO – Free Space Optics, АОСП – Атмосферные Оптические Системы Передачи данных, БОКС – Беспроводные Оптические Каналы Связи, ЛАЛ – Лазерные Атмосферные Линии) основывается на передаче данных модулированным излучением в инфракрасной (или видимой) части спектра через атмосферу и их последующим детектированием оптическим фотоприёмным устройством. При этом в качестве излучателя обычно используются инфракрасные лазеры класса 1 или 1M (к лазерам 1-го класса 3 относят полностью безопасные лазеры, выходное коллимированное излучение которых не представляет опасности при облучении глаз и кожи), для низкоскоростных коммуникаций на небольшие расстояния могут использоваться светодиоды. В качестве приёмника используются лавинные или кремниевые фотодиоды. К основным преимуществам атмосферных оптических линий связи можно отнести: ● Высокая пропускная способность и качество цифровой связи. Современные FSO-решения могут обеспечить скорость передачи цифровых потоков до 10 Гбит/с при показателе битовых ошибок (BER – bit error rate) всего 10-12, что невозможно достичь при использовании любых других беспроводных технологий. ● Не требуется получать разрешение на использование частотного диапазона. Т.к. FSO-системы используют инфракрасный диапазон электромагнитного спектра далеко за границей 400 ГГц (определенной как верхняя граница для радиочастотного регулирования на территории РФ), то никаких лицензий и специальных разрешений не требуется. ● Высокая защищённость канала от несанкционированного доступа и скрытность. Ни одна беспроводная технология передачи не может предложить такую конфиденциальность связи как лазерная. Перехватить сигнал можно только установив сканеры-приемники непосредственно в узкий луч от передатчиков. Реальная сложность выполнения этого требования делает перехват практически невозможным. А отсутствие ярко выраженных внешних признаков (в основном, это электромагнитное излучение) позволяет скрыть не только передаваемую информацию, но и сам факт информационного обмена. Поэтому лазерные системы применяются для разнообразных приложений, где требуется высокая конфиденциальность передачи данных, включая финансовые, медицинские и военные организации. 4 ● Высокий уровень помехоустойчивости и помехозащищенности. FSO-оборудование невосприимчиво к радиопомехам и само их не создаёт. ● Возможность установить лазерную атмосферную линию там, где затруднительно проложить проводную линию связи. Например, в плотной городской застройке, через железную дорогу или автомагистраль, через природные преграды (реки, озёра, горную местность и т.д.). ● Скорость и простота развёртывания FSO-сети. Наряду с основными достоинствами беспроводных оптических систем хорошо известны и их главные недостатки: ● зависимость доступности канала связи от погодных условий (такие погодные условия как туман, дождь, снег значительно снижают эффективный диапазон работы FSO-систем); ● необходимость обеспечения прямой видимости между излучателем и приёмником; ● ограниченная дальность связи. Благодаря своим преимуществам АОЛС-технология позволяет решать проблемы «последней мили», развивать городские сети передачи данных и голоса, осуществлять подключение домашних сетей или офисов к сети Интернет, а также организовывать резервные каналы связи или расширять существующие каналы при высокой степени защищённости. Кроме того, технология используется для коммуникаций аппаратами. 5 между космическими 1.2. Обзор современного рынка FSO-оборудования В настоящее время на рынке телекоммуникационного оборудования существует несколько ведущих компаний, выпускающих лазерные атмосферные системы связи. Из отечественных производителей это: Мостком (Рязань), Оптические ТелеСистемы (Санкт-Петербург), Лазер Ай-Ти-Си (Екатеринбург). Среди зарубежных компаний, работающих в данном сегменте рынка, стоит уделить внимание следующим: fSONA (Канада), LightPointe (США), Canon (США), MRV (США), CBL (Германия), PAV Data Systems (Великобритания), CableFree (Великобритания), Terabeam Wireless (США), AirLinx (США). Среди моделей, выпускаемых данными компаниями, можно увидеть FSO-системы с пропускной способностью от 2 Мбит/с до 10 Гбит/c, и с максимальной рабочей дистанцией от 200 до 7500 метров. При этом, говоря о тенденциях развития рынка АОЛС-оборудования, стоит отметить, что, разрабатывая и выпуская новые модели, производители стремятся к следующему: ● Увеличение пропускной способности канала связи. И здесь, несомненно, лидирует американская компания «MRV», которая в этом году выпустила модель TereScope10GE (см. рис. 1) с максимальной 6 скоростью передачи данных 10 Гбит/с. Пока это единственное подобное FSO-решение на рынке.1 Рис. 1: 10-Гбитная FSO-система TereScope10GE (MRV) ● Увеличение максимальной рабочей дистанции. В этой области преуспела компания «fSONA» (Канада). Она выпускает FSO-системы с максимальной рабочей дистанцией 7.7 километра при скорости передачи данных 52 Мбит/с, 6.4 километра при 155 Мбит/с, и 5.3 километра при скорости канала 1250 Мбит/с.2 ● Выпуск более дешёвых моделей для использования в корпоративных сетях небольших организаций. Например, компания «LightPointe» выпускает несколько серий относительно недорогих моделей, имеющих небольшие рабочие дистанции и предназначенных для корпоративных локальных сетей (продуктовые линейки AireLite, FlightLite).3 Источник: http://www.mrv.com/product/MRV-TS-TS10GE Источник: http://fsona.com/product.php?sec=models_overview 3 Источник: http://www.lightpointe.com/products/al_100.cfm 1 2 7 ● Увеличение коэффициента доступности канала и повышение надёжности связи. Для достижения этого производители используют такие методы как: – выпуск оборудования с несколькими параллельно работающими излучающими лазерами (обеспечивает защиту от пролетающих птиц, снегопада). Например, компании «fSONA», «LightPointe» и «CBL» производят модели с четырьмя излучающими лазерами; – использование систем пространственной стабилизации (также называемых как системы автотрекинга – auto tracking systems), которые автоматически поддерживают направление оптической связи в пространстве (отказы оптической линии из-за её разъюстировки зачастую превышают время неработоспособности вследствие плохих погодных условий). Введение автотрекинга позволяет устанавливать приёмо-передающие модули на нестабильных основаниях – деревянных крышах, вышках сотовой связи и т.д., сохраняя при этом надёжность линии связи. Системы автотрекинга реализованы в оборудовании от компаний «Мостком», «LightPointe», «Canon»; – реализация в FSO-системах резервного радиоканала, что позволяет не прерывать передачу данных при плохих погодных условиях (сильный туман, снегопад и т.д.). Системы с резервным радиоканалом выпускают компании «Мостком», «Лазер Ай-ТиСи», «LightPointe», «MRV», «CBL», «AirLinx». Ниже приведена сравнительная таблица с обзором технических характеристик FSO-оборудования разных производителей – для каждой компании-производителя рассмотрен весь модельный ряд, представленный на рынке на момент написания данной работы (полный список интернетисточников, использовавшихся при составлении данного обзора, приведён в Приложении 1). 8 Макс. скорость передачи Производитель Торговая марка Мостком Artolink Оптические ТелеСистемы БОКС (ЛАНтастИКа) 8 – 1000 Мбит/с Лазер Ай-Ти-Си ОСС fSONA SONAbeam Макс. Кол-во Авторабочая излуч. трекинг дистанция лазеров 100 – 1000 400 – 7000 м Мбит/с Резерв. радиоканал 1–3 есть есть 600 – 1800 м 1–2 нет нет 2 – 1250 Мбит/с 400 – 2500 м 1 нет есть 50 – 1600 Мбит/с 2600 – 7700 м 2–4 нет нет 8 – 1485 Мбит/с 200 – 5600 м 1–4 есть есть FlightStrata, FlightLite, LightPointe AireLite, FlightExpress, FlightSpectrum Canon Canobeam 156 – 1485 500 – 2000 м Мбит/с 1 есть нет MRV TereScope 100 Мбит/с – 350 – 4000 м 10 Гбит/с 1–3 нет есть AirLaser, CBL LaserLink 8 – 1250 Мбит/с 300 – 2000 м 1–4 нет есть 2 – 1000 Мбит/с 200 – 4000 м 1 нет нет SkyCell, PAV Data Systems SkyNet, PAVLight, PAVExpress CableFree CableFree 100 – 1500 200 – 4000 м Мбит/с 1 нет нет Terabeam Wireless TeraOptic 125 Мбит/с 1000 м 1 нет нет AirLinx UniFSO 100 – 155 Мбит/с 250 – 3000 м 1 нет есть Таблица 1: Обзор FSO-оборудования разных производителей 9 1.3. Гибридное радио-оптическое оборудование Как известно, особые погодные условия, такие как дождь, снег, туман, а также песчаная пыль, городской смог и различные виды аэрозолей, могут значительно ухудшить видимость и таким образом снизить эффективный диапазон работы лазерных атмосферных линий связи. Так, затухание сигнала в оптическом канале при сильном тумане может доходить до критических 50100 дБ/км (см. рис. 2). Поэтому, чтобы достичь операторских (или хотя бы близких к ним) показателей надежности беспроводных оптических телекоммуникационных систем, необходимо прибегать к использованию гибридных решений. Рис. 2: Влияние погодных условий на дальность оптической связи Гибридные радио-оптические системы основываются на использовании резервного радиоканала в связке с оптическим каналом. В случае наступления неблагоприятных погодных условий (туман, снегопад и т.п.), когда атмосферный оптический канал становится недоступным (или уровень битовых ошибок в канале достигает критического значения), система переключается на резервный радиоканал и использует его до тех пор, пока оптический (основной) канал вновь не станет доступен. При этом в качестве технологии резервного канала обычно используются либо широкополосные 10 Wi-Fi сети (семейство стандартов IEEE 802.11), работающие в частотном диапазоне 2.4 – 5.8 ГГц, либо радиорелейные MMW-линии, работающие в миллиметровом диапазоне. Основное достоинство таких FSO-RF-систем передачи данных заключается в том, что это высокоскоростные беспроводные системы операторского класса, надежно функционирующие в любых погодных условиях (см. рис. 3). Рис. 3: Коэффициент доступности гибридного канала связи Среди рассмотренных в предыдущей части производителей лазерного телекоммуникационного оборудования шесть компаний имеют в своих продуктовых линейках модели гибридного типа (FSO-RF) – это «Мостком», «Лазер Ай-Ти-Си» (отечественные), «LightPointe», «MRV», «CBL» и «AirLinx» (зарубежные). В таблице ниже приведены технические характеристики существующих на данный момент на рынке моделей гибридного радиооптического оборудования: 11 Производитель Модель оборудования Скорость оптического канала Скорость радиоканала Тип радиоканала Макс. рабочая дистанция Мостком ARTOLINK M1 FE-R 100 Мбит/c 6 – 28 Мбит/c Wi-Fi (5.2 – 5.8 ГГц) 7000 м Лазер Ай-Ти-Си ОСС1-Ethernet 100 РОД 100 Мбит/c 100 Мбит/c MMW (75 ГГц) 2500 м LightPointe FlightStrata 100 XA 100 Мбит/c 72 Мбит/с (Half Duplex) Wi-Fi (5.47 – 5.85 ГГц) 5000 м MRV TereScope Fusion 100 Мбит/с 1000 Мбит/c 10 – 20 Мбит/c Wi-Fi (2.4 ГГц) 4000 м CBL AirLaser IP 100 125 Мбит/c 4.5 Мбит/c в спец-ции не указано 2000 м AirLinx UniFSO100/155 100 Мбит/c 155 Мбит/c 5 – 20 Мбит/c Wi-Fi 3000 м Таблица 2: Обзор представленных на рынке моделей гибридных FSO-RF-систем Из представленных выше гибридных решений наибольшую пропускную способность резервного радиоканала – 100 Мбит/c – имеет модель компании «Лазер Ай-Ти-Си». В то же время, ввиду использования миллиметрового радиодиапазона, данное решение имеет относительно небольшую для гибридов максимальную рабочую дистанцию – всего 2500 м, а его стоимость увеличивается (по сравнению с обычными FSO-системами) почти в два раза. При этом само оборудование представляет собой два раздельных устройства – отдельно оптический блок, и отдельно радиорелейный, что усложняет монтаж всей системы. Остальные же модели-гибриды, основанные на Wi-Fi технологии, имеют относительно невысокую скорость резервного канала, обычно не превосходящую 20 Мбит/c. Особого внимания заслуживает гибридная система ARTOLINK M1 FE-R производства компании «Мостком», в которой используется специально откалиброванное оборудование на базе 12 Wi-Fi радиомаршрутизаторов RAPIRA (диапазон 5.2 – 5.8 ГГц) со специализированным программным обеспечением. Такое решение обеспечивает полнодуплексную скорость передачи данных в резервном канале до 28 Мбит/с (при канальной скорости 108 Мбит/с), а также возможность плавного снижения скорости и практически отсутствующее время переключения между каналами. Но в любом случае таких пропускных способностей недостаточно для резервирования высокоскоростного (например, гигабитного) оптического канала связи, что делает проблематичным использование данных решений требовательными операторами связи. 13 2. Постановка задачи и описание модели 2.1. Постановка задачи Из всего сказанного выше можно сделать вывод, что, ввиду неоспоримых преимуществ использования гибридных радио-оптических систем передачи данных, разработка таких систем является весьма перспективным направлением в телекоммуникационном секторе – как с технической точки зрения, так и с точки зрения маркетинговой. Тем не менее, на данный момент на рынке представлено лишь небольшое количество моделей гибридного FSO-RF-оборудования, в то время как существующие модели не всегда могут продемонстрировать технические показатели операторского уровня – а именно высокую пропускную способность резервного канала при относительно больших рабочих дистанциях и коэффициенте доступности канала связи. Это открывает огромный простор для деятельности разработчиков и производителей телекоммуникационного оборудования (в том числе оборудования, основанного на АОЛС-технологии). Одним из первых этапов разработки любой системы передачи данных является модельное исследование этой системы с целью теоретического определения основных технических характеристик будущего телекоммуникационного оборудования. И данная работа затрагивает именно эту проблему. В работе предлагается описать и исследовать модель гибридной системы передачи данных, основанной на базе лазерной и радиотехнологий. При этом предлагается использовать два принципиально разных метода моделирования, а именно: ● математическое моделирование – с использованием методов теории массового обслуживания, а также известных алгоритмов из теории цепей Маркова; 14 ● имитационное (машинное) моделирование – посредством написания специализированной компьютерной программы, имитирующей информационные процессы, происходящие в телекоммуникационной системе. Целью данного моделирования является определение основных характеристик производительности исследуемой системы, таких как коэффициент доступности канала связи, средняя пропускная способность, доля времени использования резервного канала, средняя длина очереди и среднее время пребывания заявки (пакета данных) в системе, а также выявление зависимостей этих показателей от параметров модели. 2.2. Описание модели гибридной радио-оптической телекоммуникационной системы Исследуемая модель гибридной радио-оптической системы передачи данных представляет собой систему массового обслуживания (СМО) с двумя возможными скоростями обслуживания (см. рис. 4). Иными словами, система может использовать два режима работы: первый режим ( k 1 ) – когда передача данных осуществляется по оптическому (основному) каналу, и второй режим ( k 2 ) – передача данных осуществляется по резервному радиоканалу. Входящий поток заявок в систему – стационарный пуассоновский с параметром . Число мест для ожидания – неограниченно. При использовании k-й скорости (k-го режима) время обслуживания заявки распределено экспоненциально с параметром k , k 1,2 . При этом 1 2 , то есть пропускная способность оптического канала заведомо больше пропускной способности радиоканала. 15 Рис. 4: Модель гибридного канала связи Время использования k-режима определяется погодными условиями (а именно, метеорологической дальностью видимости – МДВ) в некоторой конкретной местности, телекоммуникационной где планируется системы. Далее установка будем полагать, исследуемой что время использования k-й скорости ограниченно и характеризуется абсолютно непрерывной величиной k , имеющей плотность распределения 1 2 Fk t pk k e k t 1 pk k e k t , 1 представляющего собой 2 частный случай гиперэкспоненциального распределения. Такая модель изменения погодных условий была предложена в [5] и основана на опытных наблюдениях, полученных после шести месяцев испытаний в реальных условиях гибридного радио-оптического оборудования модели ARTOLINK М1 FE-2А-R. (Конечно, такие условия, как дальность видимости, изменчивы, тем не менее, общие сезонные тенденции определяются климатической зоной, широтой и другими известными географическими параметрами местности, где планируется установка оборудования.) 16 Если время первого режима завершается (оптический канал становится недоступным), текущее обслуживание заявки (передача пакета) прерывается и система переходит на второй режим работы (использование резервного радиоканала). Сразу после перехода на второй режим обслуживания передача пакетов не производится. Система должна выждать время Q2 , и если за это время второй режим работы не завершился 2 Q2 , то по истечении времени Q2 начинается обслуживание заявки (передача пакета) на второй скорости (по обслуживание радиоканалу). При которой оптическому по этом предполагаем, каналу что было заявка, прервано, обслуживается заново. По истечении времени работы второго режима (оптический канал вновь становится доступным) система, продолжая обслуживать заявки во втором режиме (т.е. продолжая передавать пакеты по радиоканалу), отслеживает доступность оптического канала. И если оптический канал доступен в течение некоторого времени Q1 , то по завершении этого времени система начинает использовать первый режим (оптический канал). При этом заявка, в ходе обслуживания которой произошла смена режима, обслуживается заново на новой скорости. Описанная выше модель включает в себя следующие допущения: ● экспоненциально распределенное время передачи пакета; ● пакеты при переходе с оптического канала на радиоканал не теряются; ● при смене скорости передачи пакета (смене канала передачи данных) текущая передача пакета прерывается и стартует заново на новой скорости. Также следует отметить, что данная модель не предполагает выбора какой-то конкретной технологии радиопередачи для использования в резервном канале связи – это может быть, например, 802.11a, 802.11g, 802.11n, MMW-стандарты или любая другая технология передачи данных по радиотракту. 17 Математическое моделирование 3. В данной части предлагается построить и исследовать математическую модель, представляющую собой систему массового обслуживания типа M/M/1 с двумя возможными скоростями обслуживания и описывающую функционирование гибридного канала связи (см. рис. 2). Целью математического моделирования является разработка алгоритма вычисления таких характеристик производительности системы, как стационарное распределение и средняя длина очереди, среднее время ожидания обслуживания, среднее время пребывания заявки в системе. 3.1. Стационарное распределение вероятностей состояний системы Предположим, что система функционирует в стационарном режиме. Условия существования стационарного режима будут получены позже. Для упрощения дальнейших расчётов предположим также, что время перехода с радиоканала на оптический канал ( Q1 ) задаётся не фиксированным числом, а экспоненциально распределённой случайной величиной с параметром Q1 . Предполагаем, что обслуживающий прибор может находиться в четырех состояниях: 1 – работа в первом режиме (использование оптического канала); 1’ – переключение с первого режима на второй (с оптического на радиоканал); 2 – работа во втором режиме (использование радиоканала); 2’ – переключение со второго на первый режим (с радиоканала на оптический). Будем наблюдать поведение системы в моменты завершения обслуживания, а также моменты окончания и смены режимов работы. 18 Обозначим через tk – k-й такой момент, k 1 . Под состоянием системы в момент tk будем понимать вектор X k ik , mk , mk , где ik – число заявок в системе в момент времени tk 0 , mk – состояние обслуживающего прибора в момент tk 0 , mk – состояние обслуживающего прибора в момент tk 0 . Здесь мы полагаем, что состоянию i, m, m соответствует завершение обслуживания заявки, m 1,2,2 . Введем стационарные вероятности состояний системы: i, m, m lim P ik i, mk m, mk m , k i 0, m, m 1,1,2,2. Пусть также fi k t i t k t e e i! 0 p e k t 1 k 1 pk e 2 k t dt k – вероятность того, что за время обслуживания заявки в режиме k в систему поступят i заявок; k gi t e t e t k i! 0 p k 1 k k t 1 e 1 pk k e 2 2 k t dt – вероятность того, что за время обслуживания заявки в режиме k время использования режима истекает, т.е. оптический канал становится недоступным, если использовался режим 1 (k = 1), или доступным, если использовался режим 2 (k = 2); а за неполное время обслуживания в систему поступят i заявок; 1 hi Q2 0 t i! i 1 2 e t p2 2 e 2 t 1 p2 2 e 2 1 19 2 t dt – вероятность того, что время переключения с первого режима на второй меньше Q2 и за время переключения в систему поступят i заявок; 2 hi Q2 i 1 2 e Q2 p2e 2 Q2 1 p2 e 2 i! Q2 – вероятность того, что время переключения с первого режима на второй больше Q2 и за время переключения в систему поступят i заявок; ri t i e t eQ1t 2e 2t dt i! 0 – вероятность того, что за время обслуживания заявки при переключении со второго режима на первый в систему поступят i заявок; mi t 0 i! i e t e Q1t Q1e 2t dt – вероятность того, что за время обслуживания заявки при переключении со второго режима на первый это переключение завершается, и за неполное время обслуживания в систему поступят i заявок. 2 Эти вероятности (кроме hi , которые заданы явно) могут быть вычислены следующим образом: fi k k pk gi pk k i 1 k k k1 i 1 k k i 1 i 1 1 pk 1 pk 20 k i 2 k k k 2 i 2 k k i 1 , k 1,2; i 1 , k 1,2; hi k 1 i 2 Q2 2 p2 1 Q2m 1 e i 1 1 2 m 0 m! 2 2 1 i Q 2 2 i 1 p2 1 e i 2 2 2 2 2 2 2 i m ; i m 2 m 0 m! 2 i Q2m 2 i ri ; i 1 Q 1 2 mi Q1 i Q1 2 i 1 , i 0. Заметим, что за время переключения со второго режима на первый в систему как поступают заявки, так и уходят из нее. Поэтому для удобства будем полагать, что в каждый момент завершения такого переключения с вероятностью p1 11 1 1 Q1 1 p1 1 2 1 2 Q1 система начинает использовать первый режим работы, а с дополнительной вероятностью (1 ) – остается работать во втором режиме. Уточним, что величина есть вероятность того, что начавшееся время первого режима больше, чем время переключения, и таким образом, с этой вероятностью система может переключиться на первый режим работы. Далее, используя введенные выше вспомогательные вероятности, составим уравнения равновесия для стационарных вероятностей i, m, m состояний системы для i 0 : 21 i 1 i,1,1 k ,1,1 k ,2,1 k ,1,1 fi 1k1 k 1 0,1,1 0,2,1 0,1,1 s1 fi , (1) 1 i i,1,1 k ,1,1 k ,2,1 k ,1,1 gi1k k 1 0,1,1 0,2,1 0,1,1 vi , (2) 1 i i,1, r k ,1,1 hirk , r 1,2, (3) k 0 i 1 i,2,2 k ,2,2 k ,2,2 k ,1,2 fi 2k1 k 1 0,2,2 0,2,2 0,1,2 s2 f 2 , (4) 1 i gi2k i,2,2 k ,2,2 k ,2,2 k ,1,2 k 1 vi , 0,2,2 0,2,2 0,1,2 (5) 2 i 1 i,2,2 k ,2,2 k ,2,2 ri k 1 k 1 0,2,2 0,2,2 Q1 (6) ri , i i,2,1 k ,2,2 k ,2,2 mi k k 1 Q 0,2,2 0,2,2 mi 1 1 Ii 0 , Q1 Q1 22 (7) i i,2,1 k ,2,2 k ,2,2 mi k 1 k 1 Q 1 1 0,2,2 0,2,2 mi 1 1 Ii 0 , Q1 Q1 (8) где I A – функция-индикатор события A , sm pm 1 p , m m1 m 2 vi( m) sm gi(m1) I{i 0} 1 sm I{i 0} , m 1,2, i 0. Заметим, что из системы (1)–(7) можно непосредственно исключить равенства (3), таким образом получим: i 1 i 1 i,1,1 k ,1,1 k ,2,1 fi k 1 k ,1,1 fˆi 1k1 1 k 1 k 1 0,1,1 0,2,1 s1 fi 1 (9) 1 1 1 1 0,1,1 s1 fi fi 1 h0 fˆi 1 , i i i,1,1 k ,1,1 k ,2,1 gi k k ,1,1 gˆ i1k 1 k 1 k 1 0,1,1 0,2,1 vi (10) 1 1 1 1 1 1 0,1,1 gˆ i h0 gi vi h0 , i 1 i 1 i,2,2 k ,2,2 k ,2,2 fi k 1 k ,1,1 fˆi 2k1 2 k 1 2 0,2,2 0,2,2 s2 fi k 1 (11) 2 2 2 2 0,1,1 s2 fi fi 1 h0 fˆi 1 , 23 i 1 i i,2,1 k ,2,2 k ,2,2 gi k k ,1,1 gˆ i2k 2 k 1 0,2,2 0,2,2 vi k 1 (12) 2 2 2 2 2 2 0,1,1 gˆ i h0 gi vi h0 , i 1 i,2,2 k ,2,2 k ,2,2 ri k 1 k 1 0,2,2 0,2,2 Q1 (13) ri , i i,2,1 k ,2,2 k ,2,2 mi k k 1 Q 0,2,2 0,2,2 mi 1 1 Ii 0 , Q1 Q1 (14) i i,2,1 k ,2,2 k ,2,2 mi k 1 k 1 Q 1 1 0,2,2 0,2,2 mi 1 1 Ii 0 , Q1 Q1 где i fˆi ( m ) hk( m ) fi ( mk ) , k 0 gˆ i (m) i hk( m ) gi(mk) , 24 k 0 i 0, m 1,2. (15) 3.2. Матрично-аналитический метод вычисления стационарных вероятностей стационарных вероятностей Для вычисления (за исключением i,1, r , которые могут i, m, m , i 0, m, m1,1,2,2 быть легко вычислены по формулам (3)) применим матрично-аналитический подход, который основан на идее сенсорных цепей Маркова. Алгоритмы такого рода изложены в работах [6, 7]. Введем в рассмотрение векторы стационарных вероятностей i i,1,1 , i,1,1 , i,2,2 , i,2,2 , i,2,2 , i,2,1 , i,2,2 . Тогда систему уравнений равновесия можно переписать в векторноматричной форме: i 1 i k Pk ,i , i 0, (16) k 0 где матрицы Pi ,l , i 0, l min i 1,0 , имеют вид: Al P0, l O24 Cl f 01 1 fˆ0 0 Pi , i 1 0 0 ˆ 1 f0 0 0 O33 Bl O23 0 0 0 0 2 fˆ 0 0 0 0 2 fˆ0 0 0 0 0 0 r0 0 0 0 r0 0 0 2 fˆ 0 0 0 0 0 0 25 (17) 0 0 0 0 0 0 0 0 , i 1, 0 0 0 0 0 0 (18) и для l i : fl 1i1 1 fˆl i 1 0 Pi , l 0 0 1 fl i 1 0 gli 0 0 0 0 1 gˆ li 2 fˆl i 1 1 gˆ li 0 0 0 fl i 1 2 gli 0 0 0 0 0 rl i 1 ml i 0 0 0 rl i 1 ml i gli 0 0 0 0 0 fl i 1 gli 0 0 1 1 2 2 2 0 0 1 ml i , 1 ml i 0 0 0 (19) где sl fl 1 1 Al yl 0 vl 1 1 1 1 1 gˆ l h0 vl gl 0 yl rl Q 1 Bl rl Q1 Q1 ml 1 Q1 I Q1 l 0 Q ml 1 1 Il 0 Q1 Q1 s1 f l 1 Cl 0 2 s2 fl 0 vl 1 0 0 s1 fl 2 0 2 2 2 2 2 gˆ l h0 vl gl vl 2 , 1 Q 1 ml 1 1 Il 0 Q1 Q1 1 Q1 1 m I Q1 l 1 Q1 l 0 0 , 2 vl m m m m m yi sm fi fi 1 h0 fˆi 1 , , l 0, m 1,2, i 0. Отметим, что известные алгоритмы, основанные на идее сенсорных цепей Маркова, предполагают, что счетная компонента цепи Маркова, описывающей поведение системы (в нашем случае компонента ik цепи X k , k 1 ), совершает переход не более чем на единицу влево, за один шаг. 26 k , k 1 для цепи Сенсорная цепь Маркова X k , k 1 строится следующим образом. Значения счетной компоненты in ограничиваются некоторым фиксированным числом N * 0 . Состояние сенсорной цепи совпадает с состоянием цепи X k , k 1 , если in 0, N * . Когда состояние компоненты in цепи X k , k 1 становится больше, чем N * , компонента in сенсорной цепи принимает значение N * , а конечные компоненты этой цепи изменяют состояния так же, как и соответствующие компоненты цепи X k , k 1. Зафиксируем целое число N * 0 и для цепи Маркова X k , k 1 построим сенсорную цепь k , k 1 с пространством состояний 0,1,..., N * счетной компоненты in . Обозначим через N * Pi ,l , i, l 0, N * матрицы одношаговых вероятностей переходов сенсорной цепи k , k 1. Нетрудно видеть, что N * Pi ,l Pi ,l , i 0, N * , l 0, N * 1. Определим матрицы N * Pi ,l при l N * . Для этого необходимо проследить переходы исходной цепи X k , k 1 в области in N * от момента, когда значение компоненты in стало больше, чем N * , и до момента, когда in N * вновь вернется в состояние N * . Введем обозначение Pi , N * Pi , N * . Пусть G k есть матрица вероятностей переходов конечных компонент цепи Маркова X k , k 1 за время, в течение которого значение счетной компоненты уменьшится с k 1 до удовлетворяют соотношениям: 27 k, k 0 . Матрицы G , k 0 k G k Pk 1, k P i k 1 G G i 1 k 1, i i 2 G , k k 0. (20) Анализируя поведение цепи Маркова X k , k 1 от момента, когда значение компоненты in становится больше, чем N * , до момента первого возвращения этой компоненты в состояние N * , получаем равенства вида Pi , k Pi , k l k P G l k 1 i,l l n i 0, k , k 0 , (21) n 1 для матриц Pi , N * , i 0, N * , полагая в (21) k N * . Векторы стационарных вероятностей состояний сенсорной цепи k , k 1 и векторы i , i 0, N * удовлетворяют одной и той же системе алгебраических уравнений l 1 N* P l i i ,l , i 0 N* * P N i i,N* N * i 0 l 0, N * 1 (22) Эта система имеет ранг N * 1 H 1 и определяет векторы l , l 0, N * с точностью до константы, которая может быть определена из условия нормировки. Далее не будем считать число N * фиксированным и для исходной цепи Xk, k 1 последовательно построим сенсорные цепи с величиной N * 0,1,2,... . Используя для каждого N * уравнение для N * системы (22), с N * учетом обозначения Pi , N * Pi , N * нетрудно получить соотношения: k 0 k , k 1, 28 (23) где 0 I , k 1 k i Pi ,k I Pk ,k i 0 1 , k 1. (24) Система уравнений для вектора 0 составляется из последнего уравнения системы (22) при N * 0 и условия нормировки для равенств (23): I P0, 0 0, 0 i1 1. i 0 (25) В силу того, что матрицы Pi , l зависят лишь от разницы l i , то матрицы G k в (20) не зависят от k (будем полагать, что все G G ) и k определяются как решение матричного уравнения: G Pi , l G l i 1 (26) l i 1 Уравнение (26) решается итерационно, например, с помощью итерационной схемы: 1 G0 I , Gk I Pi , l Gkl 1i Pi , i 1 , l i а матрица G определяется как G lim Gk . k 29 k 1, (27) 3.3. Условие существования стационарного режима Для установления условий существования стационарного режима представим рассматриваемую систему как систему с отдыхами обслуживающего прибора, в которой под отдыхом прибора понимается время между моментами, когда завершился первый режим работы до следующего момента, когда система вновь переключилась на первый режим. Заметим, что дисциплина обслуживания заявок в системе – ограниченная (это значит, что время обслуживания очереди ограничено значением случайной величины 1 ). Для таких систем необходимое и достаточное условие существования стационарного режима получено в работе [8] и имеет вид: 1 V / G 1, где 1 / 1 , V – средняя длительность отдыха, G – среднее максимальное число заявок, которые могут быть обслужены в очереди между соседними отдыхами. Заметим, что поскольку для системы в [8] обслуживания заявок во время отдыха прибора не производится, а в нашем случае – наоборот, то условие существования стационарного режима будет достаточным. Величина G определяется как p1 1 p1 G 1 1 2 . 1 1 Найдем теперь среднюю длительность отдыха V: V 1V1,1 1 1 V1, 2 V2 V2 , где 1 1 p2e 1 2 Q2 2 1 p2 e 2 30 Q2 – вероятность того, что переключение с первого режима на второй завершилось переходом на второй режим; V1,1 p2 21 1 p2 2 2 – средняя длительность переключения с первого режима на второй, которое завершилось переходом на первый режим; V1,2 Q2 – средняя длительность переключения с первого режима на второй, которое завершилось переходом на второй режим; V2 p2 21 1 p2 2 2 – средняя длительность второго режима; V2 – средняя длительность переключения со второго режима на первый (с учетом возможных "возвратов" на второй режим), которое завершилось переходом на первый режим. Найдем величину V2 . С вероятностью имеем V2 1 . Напомним, Q1 что – вероятность того, что переключение со второго режима на первый завершается переходом на первый режим. С вероятностью 1 m1 за время от момента завершения второго режима до перехода на первый последует m 1 "возвратов" на второй режим, и на m-м переключении произойдет переход на первый режим, m 2 . Средняя длительность такого периода равна m m 1 m 1 V 1 , 2 Q m2 и таким образом V2 11 V 1 . Q 2 31 Далее получаем, что средняя длительность отдыха V определяется равенством: p 1 p 1 V V 1 12 2 2 1 1 Q2 2 . Q1 2 2 Таким образом, для существования стационарного режима в рассматриваемой системе достаточно, чтобы 1 p 1 p 1 1V 11 2 1 1. 1 1 3.4. Характеристики производительности системы Под состоянием системы в произвольный момент времени t 0 будем понимать состояние процесса X t it , mt , t 0 , где it – число заявок в системе в момент времени t, mt – состояние обслуживающего прибора, m 1,1,2,2 . Стационарное распределение вероятностей состояний системы в произвольный момент времени определяется как предельное распределение процесса X t , t 0 . На основании результатов работы [9] достаточным условием существования стационарных вероятностей p i, m lim P it i, mt m , i 0, m 1,1,2,2 t является существование стационарного распределения вложенной цепи Маркова X k , k 1 . Стационарные вероятности p i, m , i 0 состояний системы произвольный момент времени удовлетворяют следующим равенствам: 32 в p i, r 0, r , r 0,1, r 0,2, r pr Ii 0 1 pr Ii 0 sr fi 1 1 2 r r (28) i k , r , r k ,1, r k ,2, r f i k , k 0 при i 0, r 1,2, i p i, 1 k ,1,1 hi k , i0 (29) k 0 Ii 0 p i, 2 0,2 ,2 0,2,2 g Q i 1 Q 1 1 (30) i k ,2,2 k ,2,2 gi k , k 1 где fi r 0 hi Q2 0 t i i! t e t e t i r i! pr i 1 r r p2 i i 1 1 2 1 i 1 1 p2 2 1 p2 i 2 2 i 1 2 t 1 pr i e t p2e 2 t 1 p2 e 2 2 1 pr e r t 1 pr e r t 1 p2 2 2 r r m 33 , Q2 eQ e Q i m ! 2 m 0 2 i i 1 dt 1 m 0 2 i 2 dt i m 2 m 1 2 2 Q2 e Q e Q , i m ! i m 2 2 2 2 gi t 0 Вычислив i t 2t Q1t e e i! e стационарное dt i 2 Q1 распределение i 1 , i 0. вероятностей состояний системы в произвольный момент времени, находим характеристики производительности системы: ● Доля времени, в течение которого система работает в r-м режиме: qr p i, r , r 1,2. i 0 ● Средняя длина очереди, когда обслуживающий прибор находится в состоянии r: Lr ip i, r , . r 1,1,2,2 i 0 ● Средняя длина очереди в произвольный момент времени: L L1 L1 L2 L2 . ● Среднее время ожидания обслуживания в системе (вычисляется по формуле Литтла): W L/ . 34 3.5. Алгоритм и компьютерная программа расчёта На основе результатов, полученных выше, можно определить алгоритм вычисления стационарных вероятностей и основных характеристик производительности исследуемой системы: 1. Формируем матрицы Pi , l , i, l 0 , с помощью равенств (17)–(19). 2. Находим матрицу G как решение матричного уравнения (26) с помощью итерационной схемы (27). 3. Вычисляем матрицы Pi , k , k 0, i 0, k , из (21). 4. Находим вектор 0 как решение системы уравнений (22). 5. Вычисляем остальные векторы i , i 1 , из равенств (23)–(24). 6. По полученным стационарным вероятностям вычисляем характеристики производительности системы (среднюю длину очереди и среднее время ожидания в системе). Для реализации описанного алгоритма и производства численных вычислений в рамках данной работы была написана специальная компьютерная программа на языке программирования JAVA (JDK 1.5). При этом, с целью уменьшения времени исполнения программы (т.е. уменьшения количества процессорных операций), была произведена соответствующая оптимизация вычислительного алгоритма. Полный код программы приведён в Приложении 2. Ниже следует описание Java-классов: Main – управляющий класс, который инициализирует одиночный расчёт или серию расчётов, а также считывает входные параметры из файла и записывает результаты в выходной файл; 35 ScalarCalculator – класс, отвечающий за вычисление скалярных функций, необходимых для формирования матриц Pi , l ; MatrixCalculator – класс, реализующий алгоритмы вычисления матрицы G, матриц Pi , k , векторов стационарных вероятностей i , а также средней длины очереди L; Matrix – вспомогательный класс, используемый для хранения матриц (векторов) и выполнения математических операций над матрицами (умножение матриц, нахождение обратной матрицы и т.д.). Входные параметры рассчитываемой модели задаются в текстовом файле (по умолчанию, “input.txt”); среди них: интенсивность входного потока заявок ( ), интенсивность обслуживания заявок в оптическом и радиоканале ( 1 и 2 соответственно), время переключения между каналами ( Q1 и Q2 ), параметры гиперэкспоненциального распределения времени работы в каждом из режимов ( pk , k , k ), а также ещё два дополнительных 1 2 параметра, определяющих точность проводимых вычислений (а именно, точность вычисления матрицы G по итерационной схеме и точность вычисления средней длины очереди как суммы бесконечного количества элементов). Результаты работы программы (результаты промежуточных вычислений и искомые характеристики производительности) выводятся на экран и в текстовый файл (по умолчанию, “output.txt”). Стандартный вывод программы выглядит следующим образом: Calculating f[i], g[i], h[i], r[i], m[i]... f(1)=0 when i>104 f(2)=0 when i>154 g(1)=0 when i>101 g(2)=0 when i>151 r=0 when i>154 m=0 when i>152 h(1)=0 when i>127 h(2)=0 when i<0 h(2)=0 when i>689 36 Calculating v[i], f^[i], g^[i]... v(1)=0 when i>102 v(2)=0 when i>152 f^(1)=0 when i>229 f^(2)=0 when i>689 g^(1)=0 when i>226 g^(2)=0 when i>681 Calculating matrices P[i,l]... P[0,l] = O when l>688 P[1,l] = O when l>689 Stochastic property of SUM(P[i,l]): Line 1, elements sum = 1.0 Line 2, elements sum = 0.9999999999999956 Line 3, elements sum = 0.9999999999999998 Line 4, elements sum = 1.0 Line 5, elements sum = 1.0 Line 6, elements sum = 1.0 Line 7, elements sum = 0.9999999999999998 Calculating matrix G... Max k = 6 Stochastic property of G: Line 1, elements sum = 0.9999999999999981 Line 2, elements sum = 0.9999999999999916 Line 3, elements sum = 0.9999999999999998 Line 4, elements sum = 1.0000000000000002 Line 5, elements sum = 0.9999999999999999 Line 6, elements sum = 0.9999999999999982 Line 7, elements sum = 1.0 Calculating matrices Y[i,l]... Y[0,l] = O when l>688 Y[1,l] = O when l>689 Calculating vectors Pi[i]... pi[0] = 0.027140620633010815 2.8189088608862957E-5 2.817130381757086E-5 1.7141102077598734E-8 0.028189090568129096 0.9366204437986994 1.778674860092839E-8 pi[100] = 1.75867548165511E-12 1.0355484200499182E-21 8.17060670834796E-9 2.1838347373879208E-15 1.7123431644562498E-14 9.989897141992435E-23 1.58223649418794E-19 Max i = 126 SUM(pi[i])*1 = 0.9999999999729698 Calculating L value... L = 0.00814387402654322 Total calculation time: 1 sec. 37 3.6. Примеры численных расчётов В данном подразделе приводятся несколько серий расчётов характеристик производительности гибридной радио-оптической системы передачи данных, произведённых с помощью описанной выше программы. Рассчитывались такие характеристики, как средняя длина очереди и среднее время пребывания заявки (пакета данных) в системе. При проведении расчётов варьировались следующие параметры модели: пропускная способность оптического канала ( 1 ), пропускная способность резервного радиоканала ( 2 ), интенсивность входного потока ( ), время переключения с основного канала на резервный и обратно ( Q2 и Q1 соответственно). В то же время параметры модели, определяющие характер изменения погодных условий (иными словами, определяющие функции распределения для времени работы каждого из каналов), брались постоянными со следующими численными значениями: p1 0.65, 11 9.5E-5, 1 2 4.019E-6; p2 0.8, 21 3.72E-3, 2 2 1.684E-4. Такие значения были получены в результате шести месяцев испытаний в реальных условиях гибридного FSO-RF-оборудования (испытания проводила компания «Мостком»), и описывают приближённую модель изменения погодных условий в местности, где проводились данные испытания. Стоит также отметить, что таким коэффициентам гиперэкспоненциального распределения соответствуют следующие средние значения: tfso p1 1(1) 1 p1 1(2) 93928 с 26 часов 38 – среднее время непрерывной работы системы в первом режиме (когда оптический канал доступен); trf p2 2(1) 1 p2 2(2) 1403 с 23 минуты – среднее время непрерывной работы системы во втором режиме (когда оптический канал недоступен и передача данных ведётся по резервному радиоканалу). Ниже приводятся примеры расчётов характеристик производительности исследуемой системы при различных параметрах модели, с соответствующими таблицами и графиками. 1. Зависимость средней длины очереди и среднего времени ожидания от интенсивности входного потока. А) Возьмём пропускную способность оптического канала равной 125 Мбит/с, а пропускную способность радиоканала – 20 Мбит/с (такими характеристиками обладает гибридная система ARTOLINK M1 FE-R производства компании «Мостком»). Следовательно, 1 15260 пакетов в секунду, 2 2440 пакетов в секунду. Здесь и далее полагаем, что длина пакета фиксирована и равна 1024 байт. Возьмём Q1 0.1 с1 (т.е. среднее время переключения с радиоканала на оптический равно 10 секунд), Q2 1 с . Интенсивность входного потока ( ) варьируется от 100 до 2400 пакетов в секунду. Соответствующие расчёты приведены ниже (в таблице также указано время выполнения вычисления на компьютере). 39 , Выч. пак/с L, пак W, мс время,с 100 0,042 0,418 0 200 0,087 0,437 0 300 0,137 0,457 0 400 0,192 0,479 1 500 0,252 0,504 2 600 0,319 0,531 3 700 0,393 0,562 3 800 0,477 0,596 5 900 0,571 0,634 6 1000 0,678 0,678 7 1100 0,802 0,729 9 1200 0,945 0,787 10 , Выч. пак/с L, пак W, мс время,с 1300 1,113 0,856 11 1400 1,314 0,938 13 1500 1,557 1,038 14 1600 1,858 1,161 16 1700 2,241 1,318 19 1800 2,742 1,524 22 1900 3,430 1,805 23 2000 4,430 2,215 26 2100 6,019 2,866 29 2200 8,931 4,059 33 2300 16,002 6,958 40 2400 58,430 24,346 72 Таблица 3: Зависимость средней длины очереди и среднего времени ожидания от интенсивности входного потока (А) График 1: Средняя длина очереди (логарифмическая шкала) 40 График 2: Среднее время ожидания (логарифмическая шкала) Б) Пусть теперь пропускная способность оптического канала равна 1 Гбит/с, радиоканала – 100 Мбит/с (такую пропускную способность радиоканала возможно реализовать, используя, например, Wi-Fi оборудование стандарта IEEE 802.11n). Следовательно, 1 122070 пак/с, 2 12207 пак/с, Q1 0.1 с1 , Q2 1 с . Интенсивность входного потока ( ) варьируется от 1000 до 12000 пак/с. Соответствующие расчёты приведены ниже (в таблице также указано время выполнения вычисления на компьютере). , пак/с L, пак 1000 0,088 1200 0,107 1400 0,128 1600 0,149 1800 0,170 2000 0,193 2200 0,217 2400 0,241 2600 0,267 2800 0,293 3000 0,321 Выч. W, мс время,с 0,088 6 0,089 8 0,091 10 0,093 13 0,095 16 0,096 19 0,098 22 0,100 26 0,103 30 0,105 34 0,107 38 41 , пак/с L, пак 6600 1,158 6800 1,237 7000 1,323 7200 1,415 7400 1,514 7600 1,623 7800 1,741 8000 1,870 8200 2,013 8400 2,170 8600 2,345 Выч. W, мс время,с 0,175 162 0,182 172 0,189 179 0,196 189 0,205 199 0,214 209 0,223 221 0,234 230 0,245 241 0,258 253 0,273 268 3200 3400 3600 3800 4000 4200 4400 4600 4800 5000 5200 5400 5600 5800 6000 6200 6400 0,350 0,380 0,412 0,445 0,480 0,516 0,555 0,595 0,638 0,683 0,730 0,781 0,834 0,891 0,951 1,016 1,084 0,109 0,112 0,114 0,117 0,120 0,123 0,126 0,129 0,133 0,137 0,140 0,145 0,149 0,154 0,159 0,164 0,169 43 48 55 58 64 70 76 85 91 97 104 111 119 127 136 145 153 8800 9000 9200 9400 9600 9800 10000 10200 10400 10600 10800 11000 11200 11400 11600 11800 12000 2,540 2,759 3,008 3,292 3,620 4,003 4,454 4,996 5,657 6,483 7,544 8,957 10,930 13,882 18,779 28,488 56,959 0,289 0,307 0,327 0,350 0,377 0,408 0,445 0,490 0,544 0,612 0,699 0,814 0,976 1,218 1,619 2,414 4,747 277 289 302 315 329 345 360 412 386 405 420 437 456 478 504 614 614 Таблица 4: Зависимость средней длины очереди и среднего времени ожидания от интенсивности входного потока (Б) График 3: Средняя длина очереди (логарифмическая шкала) 42 График 4: Среднее время ожидания (логарифмическая шкала) 2. Зависимость средней длины очереди от пропускной способности радиоканала. Возьмём пропускную способность оптического канала равной 1 Гбит/с ( 1 122070 пак/с), Q1 0.1 с1 , Q2 1 с . Интенсивность входного потока – 2400 пак/с. Интенсивность обработки пакетов в радиоканале ( 2 ) варьируется от 2500 до 12000 пакетов в секунду (т.е. пропускная способность радиотракта варьируется от 20 Мбит/с до 100 Мбит/с). Соответствующие расчёты приведены ниже. 2 , пак/с 2500 2750 3000 3250 3500 3750 4000 4250 4500 4750 5000 2 , L, пак 23,372 6,680 3,898 2,752 2,127 1,734 1,463 1,266 1,116 0,997 0,902 пак/с 7500 7750 8000 8250 8500 8750 9000 9250 9500 9750 10000 43 L, пак 0,461 0,440 0,420 0,402 0,386 0,371 0,357 0,344 0,332 0,321 0,310 5250 5500 5750 6000 6250 6500 6750 7000 7250 0,823 0,757 0,700 0,652 0,610 0,573 0,540 0,511 0,485 10250 10500 10750 11000 11250 11500 11750 12000 0,300 0,291 0,283 0,274 0,267 0,260 0,253 0,246 Таблица 5: Зависимость средней длины очереди от пропускной способности радиоканала График 5: Средняя длина очереди (логарифмическая шкала) 3. Зависимость средней длины очереди от времени переключения с оптического канала на радиоканал. Возьмём пропускную способность оптического канала равной 125 Мбит/с ( 1 15260 пак/с), пропускную способность радиоканала – 20 Мбит/с ( 2 2440 пак/с), интенсивность входного потока – 2300 пак/с. Время переключения с оптического на радио- канал ( Q2 ) варьируется от 0 до 6.5 секунд, Q1 0.1 с1 . Соответствующие расчёты приведены ниже (в таблице также указано время выполнения вычисления на компьютере). 44 Q2 , с 0,0 0,1 0,2 0,3 0,4 0,5 0,6 0,7 0,8 0,9 1,0 1,1 1,2 1,3 1,4 1,5 1,6 1,7 1,8 1,9 2,0 2,1 2,2 L, пак 15,968 15,968 15,969 15,971 15,973 15,976 15,980 15,984 15,990 15,996 16,002 16,010 16,018 16,027 16,036 16,046 16,057 16,069 16,082 16,095 16,109 16,123 16,138 Выч. время,с 6 22 20 8 11 15 19 24 29 36 41 47 52 59 65 73 80 88 96 104 112 122 133 Q2 , с 2,3 2,4 2,5 2,6 2,7 2,8 2,9 3,0 3,1 3,2 3,3 3,4 3,5 3,6 3,7 3,8 3,9 4,0 4,5 5,0 5,5 6,0 6,5 L, пак 16,154 16,171 16,189 16,207 16,226 16,245 16,266 16,287 16,308 16,331 16,354 16,378 16,403 16,428 16,454 16,481 16,507 16,537 16,688 16,858 17,046 17,252 17,475 Выч. время,с 140 154 160 170 181 227 220 214 225 237 254 262 275 284 298 312 321 341 417 596 721 716 1132 Таблица 6: Зависимость средней длины очереди от времени переключения с оптического на радио- канал График 6: Средняя длина очереди 45 4. Зависимость средней длины очереди от времени переключения с радиоканала обратно на оптический канал. Значения параметров 1 , 2 , возьмём такие же, как и в предыдущем эксперименте. Параметр распределения времени переключения с радиона оптический канал ( Q1 ) варьируется от 0 до 10, Q2 1 с . Соответствующие расчёты приведены ниже. Q1 , с1 0,0 0,1 0,2 0,3 0,4 0,5 0,6 0,7 0,8 0,9 1,0 1,5 1 L, пак Q1 , с 16,4286 2,0 16,0023 2,5 16,2091 3,0 16,2808 3,5 16,3172 4,0 16,3392 4,5 16,3540 5,0 16,3645 6,0 16,3725 7,0 16,3787 8,0 16,3836 9,0 16,3986 10,0 L, пак 16,4061 16,4106 16,4136 16,4157 16,4173 16,4186 16,4196 16,4211 16,4222 16,4230 16,4236 16,4241 Таблица 7: Зависимость средней длины очереди от времени переключения с радио- на оптический канал График 7: Средняя длина очереди 46 4. Имитационное моделирование 4.1. Описание имитационной модели и компьютерной программы В предыдущей части методами математического моделирования были получены выражения для основных характеристик производительности гибридной радио-оптической системы передачи данных, описанной в разделе 2.2. Кроме этого, в данной работе предлагается исследовать такую систему, построив имитационную модель. Имитационное (машинное) моделирование реализуется посредством написания специализированной компьютерной программы, алгоритм работы которой имитирует информационные процессы, происходящие в исследуемой телекоммуникационной системе (получение входящих пакетов, передача пакетов на заданной скорости, переключение с оптического канала на радиоканал и обратно, и т.д.). Как и в случае с программой для расчёта математической модели, имитационная программа реализована на языке программирования JAVA (JDK 1.5). Основным преимуществом имитационной модели (по сравнению с математической моделью) является её гибкость – пользуясь имеющимися программными функциями и Javaклассами, можно осуществлять вычисления любых требуемых характеристик производительности системы посредством добавления в программный код несложных функций. Основным отличием от математической модели, представленной в данной работе, является то, что в случае имитационного моделирования: ● время переключения с резервного канала на основной ( Q1 ) задаётся фиксированным числом, а не экспоненциально распределённой случайной величиной; 47 ● время работы системы в каждом из режимов (передача данных по оптическому, либо по радио- каналу) задаётся не только гиперэкспоненциальным распределением (как описано в разделе 2.2), но также может браться из файла-журнала с записями об изменении погодных условий (метеорологической дальности видимости) в конкретной местности. Имеющаяся реализация имитационной программы позволяет вычислять следующие характеристики производительности гибридной системы передачи данных: ● средняя длина очереди; ● среднее время задержки пакета; ● максимальная длина очереди и максимальное время задержки пакета (для заданной длительности проведения имитационного эксперимента); ● средняя пропускная способность гибридного канала связи; ● коэффициент доступности / недоступности канала связи; ● среднее количество переключений между режимами (каналами) в день. В программе имеется возможность проводить как одиночные вычисления, так и серию вычислений в указанном диапазоне входных параметров. При этом параметры рассчитываемой модели и схема эксперимента задаются в текстовом файле (по умолчанию, “experiment.properties”), а результаты работы программы – расчётные значения характеристик производительности системы и скрипты для построения графиков в среде MatLab – записываются в текстовый файл (по умолчанию, “out.txt”). 48 4.2. Примеры численных расчётов Ниже приводятся производительности несколько исследуемой примеров расчётов характеристик телекоммуникационной системы (с соответствующими графиками), выполненных с помощью описанной выше программы. 1. Зависимость характеристик производительности системы от интенсивности входного потока. Определим следующие входные параметры модели: пропускная способность оптического канала равна 1 Гбит/с ( 1 122070 пак/с), пропускная способность радиоканала – 100 Мбит/с ( 2 12207 пак/с), время переключения с оптического на радио- канал – Q2 1 с , время переключения с радиоканала обратно на оптический – Q1 10 с . Интенсивность входного потока ( ) варьируется от 300 до 5000 пак/с. Период имитационного моделирования взят 10 лет. Соответствующие графики представлены ниже. График 8: Средняя длина очереди 49 График 9: Максимальная длина очереди График 10: Среднее время задержки пакета График 11: Максимальное время задержки пакета 50 2. Зависимость характеристик производительности системы от времени переключения между режимами (с одного канала на другой). Возьмём входной поток равным 2000 пак/с . Остальные параметры модели такие же, как и в предыдущем эксперименте. Время переключения с оптического канала на радиоканал ( Q2 ) варьируется от 0 до 3 секунд, время переключения с радиоканала на оптический ( Q1 ) – от 0 до 50 секунд. Период имитационного моделирования – Соответствующие графики представлены ниже. График 12: Пропускная способность гибридного канала График 13: Коэффициент недоступности канала 51 10 лет. График 14: Средняя длина очереди График 15: Среднее время задержки пакета 52 Заключение 5. Последние несколько лет технология атмосферных оптических линий связи активно развивается и завоёвывает всё большую популярность в телекоммуникационном секторе. К сожалению, в других странах мира продвижение её на рынок идёт существенно более быстрыми темпами, чем в России (причём это относится не только к таким технологически продвинутым регионам, как западная Европа и США, но и ко многим развивающимся странам). Основная причина востребованности этой технологии заключается в огромном потенциале передавать большие объемы данных на высоких скоростях в нелицензируемом диапазоне длин волн (свыше 400 ГГц), существенно снижая таким образом административные издержки. Среди всемирно известных операторов и разработчиков телекоммуникационных сетей, принявших на вооружение беспроводную оптическую технологию – Vodafone, Sprint, Nextel, Verizon, Вымпелком, Motorola, Siemens. Но кроме неоспоримых преимуществ технология FSO имеет и свои недостатки, главный из которых – зависимость доступности канала связи от погодных условий (а именно, от метеорологической дальности видимости). Решить эту проблему призваны беспроводные гибридные телекоммуникационные системы на базе лазерной и радио- технологий. На их основе как операторы связи, так и другие потребители могут создавать скоростные каналы связи с надежностью более 99,99% на трассах в несколько километров. Целью данной работы являлось создание научных методов исследования гибридных FSO-RF-систем передачи данных и определения их основных характеристик производительности, основываясь на принципах математического и имитационного моделирования. Следует отметить, что данная работа не предполагает выбора каких-то конкретных характеристик 53 телекоммуникационной системы, в том числе выбора какой-то определённой технологии радиопередачи для использования в резервном канале связи. В заключении стоит добавить, что экономическая целесообразность «гибридизации» оптической системы наступает только для продвинутых лазерных систем, которые сами по себе могут обеспечивать неплохую надежность на трассах в несколько километров. В случае системы со вторым каналом, построенным на технологии Wi-Fi, это позволяет минимизировать время работы радиоканала и тем самым увеличить среднюю пропускную скорость и скрытность гибридного канала. При использовании MMW требования к FSO также высоки, так как этот канал должен обеспечивать надежную работу системы в сильный дождь, когда не работает радиотракт. Можно с уверенностью сказать, что беспроводные гибридные радиооптические телекоммуникационные системы в силу своих преимуществ уже сейчас пользуются вниманием у операторов связи, и будут в значительной степени востребованы в ближайшем будущем. 54 Список использовавшихся источников 1. В.М.Вишневский, А.И.Ляхов, Широкополосные беспроводные сети передачи информации, «Техносфера», Москва, 2005. 2. В. Вишневский, С. Кузнецов, Д. Лаконцев, С. Поляков, Гибридное оборудование на базе радио– и лазерной технологий // Первая миля, 2007, № 1. 3. Поляков С.Ю., Кузнецов С.Н., Беспроводная связь – вопросы выбора // Технологии и средства связи, 2007, №3, часть 2. 4. Кирилл Дыхов, Андрей Максимов, АОЛС – технология будущего // Вестник связи № 2 / 2006 5. С.Кузнецов, Б.Огнев, С.Поляков, «4,5 километра FSO-соединения с операторской надёжностью. Практические результаты» // Технологии и средства связи, №6/2008. 6. Ramaswami V.A. A stable recursion for the steady state vector in Markov chains of M/G/1 type // Commun. Statist.-Stochastic Models. 1988. Vol.4. P. 183-188. 7. Семенова О.В. Устойчивый алгоритм расчета стационарного распределения системы обслуживания BMAP|SM|1 с марковским потоком сбоев и двумя режимами работы // Автоматика и вычислительная техника. 2004. №1. С. 75-84. 8. Fricker C., Jaibi R. Monotonicity and stability of periodic polling models // Queueing Systems. 1994. Vol. 15. P. 211-238. 9. Cinlar E. Introduction to stochastic processes. New Jersey: Prentice-Hall, 1975. 400 p. 10. Н.А. Вязовик, Программирование на Java – Курс лекций // Интернет-Университет Информационных технологий, Москва, 2003 11.Scott Bloom, Eric Korevaar, John Schuster, Heinz Willebrand, Принципы работы FSO-систем // June 2003 / Vol. 2, No. 6 / JON 12. Интернет-ресурсы, перечисленные в Приложении 1. 55 Приложение 1. Список интернет - источников, использовавшихся при обзоре рынка FSO-оборудования Производитель Мостком Полное название компании Интернет-источник ООО "МОСТКОМ" http://www.moctkom.ru/fsomdrus.htm Оптические ТелеСистемы “Оптические ТелеСистемы” http://www.optica.ru/?page=optica_21LAN2.htm http://www.optica.ru/?page=optica_21LAN3.htm Лазер Ай-Ти-Си ЗАО "Лазер АйТиСи" http://laseritc.ru/?id=50 http://laseritc.ru/?id=34&news_year=2009&new s_month=09&news_id=28 fSONA fSONA Networks Corp. http://fsona.com/product.php?sec=models_over view LightPointe LightPointe, Inc. http://www.lightpointe.com/products/default.cfm http://www.airlinx.com/products.cfm/product/19176-0.htm http://www.airlinx.com/products.cfm/product/19177-0.htm Canon Canon U.S.A., Inc. http://www.usa.canon.com/html/industrial_cano beam/canobeam/index.html MRV MRV Communications, Inc. http://www.mrvfso.com/ http://www.mrv.com/optical-transport/terescope/ CBL CBL GmbH http://www.cbl.de/englisch/free_space_optics/in dex.html PAV Data Systems http://www.pavdata.com/en/products/products.h tml PAV Data Systems http://www.pavdata.ru/catalog.php http://www.micromax.ru/catalog/catalog.shtml/re write/i/7 CableFree CableFree Solutions http://www.cablefree.co.uk/products_fso.htm Ltd. Terabeam Wireless Terabeam Wireless http://www.terabeam.com/solutions/p(Proxim Wireless) p/avara_fso.php AirLinx AIRLINX Communications, Inc. http://www.airlinx.com/products.cfm/product/19212-0.htm 56 Приложение 2. Java-код программы расчёта Класс “Main.java” package ru.mipt.golovin.fsorf.mathmodel; import java.io.*; public class Main { static final String INPUT_FILE = "input.txt"; static final String OUTPUT_FILE = "output.txt"; public static void main(String[] args) throws Exception { double[] ip = loadInputParams(); double lmb = ip[0]; double[] mu = {0, ip[1], ip[2]}; double[] Q = {0, ip[3], ip[4]}; double[] p = {0, ip[5], ip[6]}; double[] gm1 = {0, ip[7], ip[8]}; double[] gm2 = {0, ip[9], ip[10]}; double G_precision = ip[11]; double pi_precision = ip[12]; int maxIndex = (int) Math.round(lmb * 10); for (double lambda = 100; lambda <= 2500; lambda += 100) { doExperiment(lambda, mu, Q, p, gm1, gm2, G_precision, pi_precision, maxIndex); } } public static void doExperiment(double lmb, double[] mu, double[] Q, double[] p, double[] gm1, double[] gm2, double G_prec, double pi_prec, int maxIndex) throws Exception { String inputParams = lmb + ";" + mu[1] + ";" + mu[2] + ";" + Q[1] + ";" + Q[2] + ";" + G_prec + ";" + pi_prec + ";" + maxIndex; long startTime = System.currentTimeMillis(); ScalarCalculator scalc = new ScalarCalculator(lmb, mu, Q, p, gm1, gm2); scalc.doCalculations(maxIndex); MatrixCalculator mcalc = new MatrixCalculator(scalc); double L = mcalc. doCalculations(maxIndex, G_prec, pi_prec); long time = (System.currentTimeMillis() - startTime)/1000; System.out.println("Total calculation time: " + time + " sec." + "\n\n\n"); PrintWriter writer = new PrintWriter( new FileWriter(OUTPUT_FILE, true)); writer.println(inputParams + ";" + L + ";" + time); writer.close(); } public static double[] loadInputParams() throws IOException { BufferedReader reader = new BufferedReader( 57 new FileReader(INPUT_FILE)); double[] inputParams = new double[13]; String line; int i = 0; while (true) { line = reader.readLine(); if (line == null) break; if (line.equals("")) continue; inputParams[i] = Double.valueOf( line.split("\t")[0]); i++; } return inputParams; } } Класс “ScalarCalculator.java” package ru.mipt.golovin.fsorf.mathmodel; import java.math.BigDecimal; import java.math.MathContext; public class ScalarCalculator { private double lmb; private double[] mu; private double[] Q; private double[] p; private double[] gm1; private double[] gm2; public double alfa; public double[] s = new double[3]; public BigDecimal[] factorial; public public public public public double[][] f; double[][] g; double[][] h; double[] r; double[] m; public double[][] v; public double[][] fx; public double[][] gx; public ScalarCalculator(double lmb, double[] mu, double[] Q, double[] p, double[] gm1, double[] gm2) { this.lmb = lmb; this.mu = mu; this.Q = Q; this.p = p; this.gm1 = gm1; this.gm2 = gm2; alfa = p[1] * gm1[1] / (gm1[1] + Q[1]) + (1 - p[1]) * gm2[1] / (gm2[1] + Q[1]); s[1] = p[1] * lmb / (lmb + gm1[1]) + (1 - p[1]) * lmb / (lmb + gm2[1]); 58 s[2] = p[2] * lmb / (lmb + gm1[2]) + (1 - p[2]) * lmb / (lmb + gm2[2]); } public void doCalculations(int maxIndex) throws Exception { System.out.println( "Calculating f[i], g[i], h[i], r[i], m[i]..."); factorial = calcFactorials(maxIndex); f g r m = = = = calc_f(maxIndex); calc_g(maxIndex); calc_r(maxIndex); calc_m(maxIndex); h = new double[3][]; h[1] = calc_h1(maxIndex); h[2] = calc_h2(maxIndex); System.out.println(); System.out.println( "Calculating v[i], f^[i], g^[i]..."); v = calc_v(maxIndex); fx = calc_fx(maxIndex); gx = calc_gx(maxIndex); System.out.println(); } public double[][] calc_f(int maxIndex) throws Exception { double[][] array = new double[3][maxIndex + 1]; for (byte k=1; k <= 2; k++) { for (int i=0; i <= maxIndex; i++) { array[k][i] = checkVal(p[k] * mu[k] / (gm1[k] + mu[k] + lmb) * Math.pow(lmb / (gm1[k] + mu[k] + lmb), i) + (1 - p[k]) * mu[k] / (gm2[k] + mu[k] + lmb) * Math.pow(lmb / (gm2[k] + mu[k] + lmb), i), i); if (array[k][i] == 0) { System.out.println("f(" + k + ")=0 when i>" + (i-1)); break; } } } return array; } public double[][] calc_g(int maxIndex) throws Exception { double[][] array = new double[3][maxIndex + 1]; for (byte k=1; k <= 2; k++) { for (int i=0; i <= maxIndex; i++) { array[k][i] = checkVal(p[k] * gm1[k] / (gm1[k] + mu[k] + lmb) * Math.pow(lmb / (gm1[k] + mu[k] + lmb), i) + (1 - p[k]) * gm2[k] / (gm2[k] + mu[k] + lmb) * Math.pow(lmb / (gm2[k] + mu[k] + lmb), i), i); if (array[k][i] == 0) { System.out.println("g(" + k + ")=0 when i>" + (i-1)); break; } } } return array; 59 } public double[] calc_r(int maxIndex) throws Exception { double[] array = new double[maxIndex + 1]; for (int i=0; i <= maxIndex; i++) { array[i] = checkVal(mu[2] / (Q[1] + mu[2] + lmb) * Math.pow(lmb / (Q[1] + mu[2] + lmb), i), i); if (array[i] == 0) { System.out.println("r=0 when i>" + (i-1)); break; } } return array; } public double[] calc_m(int maxIndex) throws Exception { double[] array = new double[maxIndex + 2]; array[0] = 0; for (int i=0; i <= maxIndex; i++) { array[i+1] = checkVal(Q[1] / (Q[1] + mu[2] + lmb) * Math.pow(lmb / (Q[1] + mu[2] + lmb), i), i); if (array[i+1] == 0) { System.out.println("m=0 when i>" + (i-1)); break; } } return array; } public double[] calc_h1(int maxIndex) throws Exception { double[] array = new double[maxIndex + 1]; BigDecimal res1, res2; MathContext mc = new MathContext(20); BigDecimal BigDecimal BigDecimal BigDecimal argLmb argQ = arg1 = arg2 = = BigDecimal.valueOf(lmb); BigDecimal.valueOf(Q[2]); BigDecimal.valueOf(gm1[2] + lmb); BigDecimal.valueOf(gm2[2] + lmb); BigDecimal exp = new BigDecimal( "2.71828182845904523536"); BigDecimal exp1 = exp.pow((int) Math.round((gm1[2] + lmb) * Q[2]), mc); BigDecimal exp2 = exp.pow((int) Math.round((gm2[2] + lmb) * Q[2]), mc); BigDecimal sum1 = BigDecimal.ONE; BigDecimal sum2 = BigDecimal.ONE; for (int i=0; i <= maxIndex; i++) { if (i > 0) { sum1 = sum1.divide(arg1, mc). add(argQ.pow(i, mc). divide(factorial[i], mc), mc); sum2 = sum2.divide(arg2, mc). add(argQ.pow(i, mc). divide(factorial[i], mc), mc); } res1 = BigDecimal.ONE.divide( 60 arg1.pow(i, mc), mc); res1 = res1.subtract( sum1.divide(exp1, mc), mc); res1 = res1.multiply( argLmb.pow(i, mc), mc); res2 = BigDecimal.ONE.divide( arg2.pow(i, mc), mc); res2 = res2.subtract( sum2.divide(exp2, mc), mc); res2 = res2.multiply( argLmb.pow(i, mc), mc); array[i] = checkVal(res1.doubleValue() * gm1[2] * p[2] / (gm1[2] + lmb) + res2.doubleValue() * gm2[2] * (1 - p[2]) / (gm2[2] + lmb), i); if (array[i] <= 0) { System.out.println("h(1)=0 when i>" + (i-1)); array[i] = 0; break; } } return array; } public double[] calc_h2(int maxIndex) throws Exception { double[] array = new double[maxIndex + 1]; BigDecimal res; MathContext mc = new MathContext(20); boolean nullCheck = false; BigDecimal exp = new BigDecimal( "2.71828182845904523536"); exp = exp.pow((int) Math.round(lmb * Q[2]), mc); BigDecimal koef = BigDecimal.valueOf( p[2] * Math.exp(-gm1[2]*Q[2]) + (1 - p[2]) * Math.exp(-gm2[2]*Q[2])); koef = koef.divide(exp, mc); BigDecimal arg = BigDecimal. valueOf(lmb * Q[2]); for (int i=0; i <= maxIndex; i++) { res = arg.pow(i, mc); res = res.divide(factorial[i], mc); res = res.multiply(koef, mc); array[i] = checkVal( res.doubleValue(), i); if ((array[i] > 0) && (!nullCheck)) { System.out.println("h(2)=0 when i<" + i); nullCheck = true; } if ((array[i] == 0) && (nullCheck)) { System.out.println("h(2)=0 when i>" + (i-1)); break; } } return array; } 61 public double[][] calc_v(int maxIndex) throws Exception { double[][] array = new double[3][maxIndex + 1]; for (byte k=1; k <= 2; k++) { for (int i=0; i <= maxIndex; i++) { if (i > 0) array[k][i] = checkVal(s[k] * g[k][i-1], i); else array[k][i] = checkVal(1 - s[k], i); if (array[k][i] == 0) { System.out.println("v(" + k + ")=0 when i>" + (i-1)); break; } } } return array; } public double[][] calc_fx(int maxIndex) throws Exception { double[][] array = new double[3][maxIndex + 1]; double sum; for (byte k=1; k <= 2; k++) { boolean nullCheck = false; for (int i=0; i <= maxIndex; i++) { sum = 0; for (int l=0; l <= i; l++) { sum = sum + h[k][l] * f[k][i-l]; } array[k][i] = checkVal(sum, i); if ((array[k][i] > 0) && (!nullCheck)) { if (i != 0) System.out.println("f^(" + k + ")=0 when i<" + i); nullCheck = true; } if ((array[k][i] == 0) && (nullCheck)) { System.out.println("f^(" + k + ")=0 when i>" + (i-1)); break; } } } return array; } public double[][] calc_gx(int maxIndex) throws Exception { double[][] array = new double[3][maxIndex + 1]; double sum; for (byte k=1; k <= 2; k++) { boolean nullCheck = false; for (int i=0; i <= maxIndex; i++) { sum = 0; for (int l=0; l <= i; l++) { sum = sum + h[k][l] * g[k][i-l]; } array[k][i] = checkVal(sum, i); 62 if ((array[k][i] > 0) && (!nullCheck)) { if (i != 0) System.out.println("g^(" + k + ")=0 when i<" + i); nullCheck = true; } if ((array[k][i] == 0) && (nullCheck)) { System.out.println("g^(" + k + ")=0 when i>" + (i-1)); break; } } } return array; } public static BigDecimal[] calcFactorials(int maxIndex) { BigDecimal[] array = new BigDecimal[maxIndex + 1]; array[0] = BigDecimal.ONE; for (int i=1; i <= maxIndex; i++) { array[i] = array[i-1].multiply( BigDecimal.valueOf(i), new MathContext(20)); } return array; } public static byte I(boolean condition) { if (condition) return 1; else return 0; } public Matrix Pmatrix(int i, int l) { if (i == 0) return PmatrixCase1(l); else if (l == i-1) return PmatrixCase2(); else if (l >= i) return PmatrixCase3(l-i); else return null; } private Matrix PmatrixCase1(int i) { Matrix matrix = Matrix.getNullMatrix(7,7); matrix.el[0][0] matrix.el[0][1] matrix.el[1][0] matrix.el[1][1] matrix.el[1][2] matrix.el[1][3] matrix.el[2][2] matrix.el[2][3] = = = = = = = = s[1] * f[1][i]; v[1][i]; (s[1] * f[1][i] - f[1][i+1]) * h[1][0] +fx[1][i+1]; gx[1][i] + h[1][0] * (v[1][i] - g[1][i]); (s[2] * f[2][i] - f[2][i+1]) * h[2][0] +fx[2][i+1]; gx[2][i] + h[2][0] * (v[2][i] - g[2][i]); s[2] * f[2][i]; v[2][i]; matrix.el[3][4] = lmb / (lmb + Q[1]) * r[i]; matrix.el[3][5] = lmb * alfa / (lmb + Q[1]) * m[i-1+1] + Q[1] * alfa / (lmb + Q[1]) * I(i==0); matrix.el[3][6] = lmb * (1-alfa) / (lmb + Q[1]) * m[i-1+1] + Q[1] * (1-alfa) / (lmb + Q[1]) * I(i==0); matrix.el[4][4] = matrix.el[3][4]; matrix.el[4][5] = matrix.el[3][5]; matrix.el[4][6] = matrix.el[3][6]; 63 matrix.el[5][0] matrix.el[5][1] matrix.el[6][2] matrix.el[6][3] = = = = s[1] * f[1][i]; v[1][i]; s[1] * f[2][i]; v[2][i]; return matrix; } private Matrix PmatrixCase2() { Matrix matrix = Matrix.getNullMatrix(7,7); matrix.el[0][0] matrix.el[1][0] matrix.el[1][2] matrix.el[2][2] matrix.el[3][4] matrix.el[4][4] matrix.el[5][0] matrix.el[6][2] = = = = = = = = f[1][0]; fx[1][0]; fx[2][0]; f[2][0]; r[0]; r[0]; f[1][0]; f[2][0]; return matrix; } private Matrix PmatrixCase3(int i) { Matrix matrix = Matrix.getNullMatrix(7,7); matrix.el[0][0] matrix.el[0][1] matrix.el[1][0] matrix.el[1][1] matrix.el[1][2] matrix.el[1][3] matrix.el[2][2] matrix.el[2][3] matrix.el[3][4] matrix.el[3][5] matrix.el[3][6] matrix.el[4][4] matrix.el[4][5] matrix.el[4][6] matrix.el[5][0] matrix.el[5][1] matrix.el[6][2] matrix.el[6][3] = = = = = = = = = = = = = = = = = = f[1][i+1]; g[1][i]; fx[1][i+1]; gx[1][i]; fx[2][i+1]; gx[1][i]; f[2][i+1]; g[2][i]; r[i+1]; alfa * m[i+1]; (1 - alfa) * m[i+1]; r[i+1]; alfa * m[i+1]; (1 - alfa) * m[i+1]; f[1][i+1]; g[1][i]; f[2][i+1]; g[2][i]; return matrix; } private static double checkVal(double val, int i) throws Exception { if (Double.isNaN(val) || Double.isInfinite(val)) throw new Exception( "i=" + i + ", val=" + val); else return val; } } Класс “MatrixCalculator.java” package ru.mipt.golovin.fsorf.mathmodel; public class MatrixCalculator { private ScalarCalculator scalc; public Matrix[][] P; 64 public Matrix G; public Matrix[][] Y; public Matrix[] F; public Matrix[] pi; public MatrixCalculator(ScalarCalculator scalc) { this.scalc = scalc; } public double doCalculations(int maxIndex, double G_prec, double pi_prec) throws Exception { System.out.println( "Calculating matrices P[i,l]..."); P = calc_P(maxIndex); System.out.println("\n" + "Stochastic property of SUM(P[i,l]):"); Psum(1,0).printStochastics(0); System.out.println("\n" + "Calculating matrix G..."); G = calc_G(G_prec); System.out.println("\n" + "Stochastic property of G:"); G.printStochastics(0); System.out.println("\n" + "Calculating matrices Y[i,l]..."); Y = calc_Y(maxIndex); System.out.println("\n" + "Calculating vectors Pi[i]..."); Matrix pi0 = calc_pi0(); pi = calc_piVectors( pi0, maxIndex, pi_prec); System.out.println("\n" + "Calculating L value..."); double L = calc_L(); System.out.println("L = " + L); System.out.println(); return L; } public Matrix[][] calc_P(int maxIndex) { Matrix[][] P_array = new Matrix[2][maxIndex + 1]; for (int i = 0; i <= 1; i++) { for (int l=0; l < maxIndex + i; l++) { P_array[i][l] = scalc.Pmatrix(i,l); if (P_array[i][l].equals( Matrix.getNullMatrix(7,7))) { System.out.println( "P[" + i + ",l] = O when l>" + (l-1)); break; } } } return P_array; } public Matrix calc_G(double precision) throws Exception { Matrix prevG = 65 Matrix.getIdentityMatrix(7); Matrix nextG; for (int k=1; k <= Integer.MAX_VALUE; k++) { nextG = Matrix.getIdentityMatrix(7); nextG = nextG.subtractMatrix( PGsum(1, 1, prevG, 0)); nextG = nextG.getInverseMatrix(). multiplyByMatrix(P[1][0]); if (Matrix.diffPrecision( prevG, nextG) < precision) { System.out.println("\nMax k = " + k); return nextG; } if (k/10 == (double)k/10) System.out.print("."); prevG = nextG; } return null; } public Matrix[][] calc_Y(int maxIndex) throws Exception { Matrix[][] Y_array = new Matrix[2][maxIndex + 1]; boolean searchNotNull; for (int i = 0; i <= 1; i++) { searchNotNull = true; for (int l = maxIndex; l > i; l--) { if (P[i][l] == null) continue; if (searchNotNull) { Y_array[i][l] = P[i][l]; System.out.println( "Y[" + i + ",l] = O when l>" + (l-1)); searchNotNull = false; } Y_array[i][l-1] = Y_array[i][l]. multiplyByMatrix(G). addMatrix(P[i][l-1]); } } return Y_array; } public Matrix calc_pi0() throws Exception { Matrix pi0 = new Matrix(1,7); double[] stochFsum = Fsum().getStochastics(0); Matrix X = Matrix.getIdentityMatrix(7). subtractMatrix(Y[0][0]); for (byte k=0; k < 7; k++) { X.el[k][0] = stochFsum[k]; } X = X.getInverseMatrix(); pi0.el[0] = X.el[0]; System.out.print("pi[0] =" + pi0); return pi0; } 66 public Matrix[] calc_piVectors(Matrix pi0, int maxIndex, double precision) throws Exception { Matrix[] pi = new Matrix[maxIndex + 1]; pi[0] = pi0; double curElSum; double elSum = pi0.getStochastics(0)[0]; Matrix factor = Matrix.getIdentityMatrix(7). subtractMatrix(Y[1][1]). getInverseMatrix(); for (int i=1; i <= maxIndex; i++) { pi[i] = pi0. multiplyByMatrix( Fmatrix(i, factor)); curElSum = pi[i].getStochastics(0)[0]; elSum = elSum + curElSum; if (i/100 == (double)i/100) { System.out.print("\n" + "pi[" + i + "] =" + pi[i]); System.out.println( "SUM(pi[i])*1 = " + elSum); } if (curElSum < 0) { System.out.println("\nCalculation error: " + "pi[" + i + "]*1 < 0 !!!"); System.exit(1); } if (curElSum < precision) { System.out.println("\nMax i = " + i); System.out.println("SUM(pi[i])*1 = " + elSum); return pi; } } return pi; } public double calc_L() { double L = 0; double elSum; for (int i=1; i < pi.length; i++) { if (pi[i] == null) break; elSum = pi[i].getStochastics(0)[0]; L = L + (i * elSum); } return L; } public Matrix Psum(int i, int init_l) { Matrix Psum = Matrix.getNullMatrix(7,7); for (int l = init_l; l < P[i].length; l++) { if (P[i][l] != null) Psum = Psum.addMatrix(P[i][l]); else break; } 67 return Psum; } public Matrix PGsum(int i, int init_l, Matrix G, int init_Gpow) { Matrix PGsum = Matrix.getNullMatrix(7,7); Matrix powG = G.powerMatrix(init_Gpow); for (int l = init_l; l < P[i].length; l++) { if (l > init_l) powG = powG.multiplyByMatrix(G); if (P[i][l] != null) PGsum = PGsum.addMatrix( P[i][l].multiplyByMatrix(powG)); else break; } return PGsum; } public Matrix Ysum(int i) { Matrix Ysum = Matrix.getNullMatrix(7,7); for (int l=1; l < Y[i].length; l++) { if (Y[i][l] != null) Ysum = Ysum.addMatrix(Y[i][l]); else break; } return Ysum; } public Matrix Fsum() throws Exception { Matrix X, Fsum; X = Matrix.getIdentityMatrix(7). subtractMatrix(Ysum(1)). getInverseMatrix(); Fsum = Ysum(0). multiplyByMatrix(X). addMatrix(Matrix.getIdentityMatrix(7)); return Fsum; } public Matrix Fmatrix(int l, Matrix factor) throws Exception { if (F == null) { F = new Matrix[100000]; F[0] = Matrix.getIdentityMatrix(7); } F[l] = Matrix.getNullMatrix(7,7); Matrix curY; for (int i=0; i <= l-1; i++) { if ((i == 0) && (Y[0].length > l)) curY = Y[0][l]; else if ((i >= 1) && (Y[1].length > l-i+1)) curY = Y[1][l-i+1]; else curY = null; if (curY != null) F[l] = F[l].addMatrix( F[i].multiplyByMatrix(curY)); } F[l] = F[l]. multiplyByMatrix(factor); 68 return F[l]; } } Класс “Matrix.java” package ru.mipt.golovin.fsorf.mathmodel; /** * Created by IntelliJ IDEA. * User: LeLik * Date: 24.11.2009 * Time: 2:34:18 * To change this template use File | Settings | File Templates. */ public class Matrix { public int rows; public int cols; public double[][] el; public Matrix(int rows, int cols) { this.rows = rows; this.cols = cols; this.el = new double[rows][cols]; } public static Matrix getNullMatrix(int rows, int cols) { Matrix matrix = new Matrix(rows, cols); for (int i=0; i < rows; i++) { for (int k=0; k < cols; k++){ matrix.el[i][k] = 0; } } return matrix; } public static Matrix getIdentityMatrix(int size) { Matrix matrix = Matrix.getNullMatrix(size, size); for (int i=0; i < size; i++) { matrix.el[i][i] = 1; } return matrix; } public static double multiplyVectors(double[] v1, double[] v2) { double res = 0; for (int i=0; i < v1.length; i++) { res = res + v1[i] * v2[i]; } return res; } public static double multiplyVectors(double[] v1, Matrix m2, int col) { double res = 0; for (int i=0; i < v1.length; i++) { res = res + v1[i] * m2.el[i][col]; } 69 return res; } public static double diffPrecision(Matrix m1, Matrix m2) { Matrix diff = m2. subtractMatrix(m1); double max = 0; double ratio; for (int i=0; i < m1.rows; i++) { for (int k=0; k < m1.cols; k++) { if (m2.el[i][k] != 0) { ratio = Math.abs( diff.el[i][k] / m2.el[i][k]); max = Math.max(ratio, max); } } } return max; } public Matrix addMatrix(Matrix m2) { Matrix resMatrix = new Matrix(rows, cols); for (byte i=0; i < rows; i++) { for (byte k=0; k < cols; k++){ resMatrix.el[i][k] = this.el[i][k] + m2.el[i][k]; } } return resMatrix; } public Matrix subtractMatrix(Matrix m2) { Matrix resMatrix = new Matrix(rows, cols); for (byte i=0; i < rows; i++) { for (byte k=0; k < cols; k++){ resMatrix.el[i][k] = this.el[i][k] - m2.el[i][k]; } } return resMatrix; } public Matrix multiplyByIndex(double index) { Matrix resMatrix = new Matrix(rows, cols); for (byte i=0; i < rows; i++) { for (byte k=0; k < cols; k++){ resMatrix.el[i][k] = this.el[i][k] * index; } } return resMatrix; } public Matrix multiplyByMatrix(Matrix m2) { Matrix resMatrix = Matrix.getNullMatrix(rows, m2.cols); for (byte row=0; row < rows; row++) { 70 for (byte col=0; col < m2.cols; col++) { resMatrix.el[row][col] = multiplyVectors( this.el[row], m2, col); } } return resMatrix; } public Matrix powerMatrix(int power) { Matrix resMatrix = Matrix.getIdentityMatrix(rows); for (int i=1; i <= power; i++) { resMatrix = resMatrix. multiplyByMatrix(this); } return resMatrix; } public Matrix getInverseMatrix() throws Exception { Matrix A = this. multiplyByIndex(1); Matrix Inv = Matrix. getIdentityMatrix(rows); double diagEl, index; for (byte i=0; i < rows; i++) { swapMatrix(A, Inv, i); diagEl = A.el[i][i]; if (diagEl == 0) throw new Exception("Inverting matrix error"); for (byte k=0; k < cols; k++) { A.el[i][k] = A.el[i][k] / diagEl; Inv.el[i][k] = Inv.el[i][k] / diagEl; } for (byte k=0; k < rows; k++) { if (k == i) continue; index = A.el[k][i]; A.subtractLine(i, k, index); Inv.subtractLine(i, k, index); } } return Inv; } private void swapRows(int i, int j) { double x; for (int k=0; k < cols; k++) { x = this.el[i][k]; this.el[i][k] = this.el[j][k]; this.el[j][k] = x; } } private void swapCols(int i, int j) { double x; for (int k=0; k < rows; k++) { x = this.el[k][i]; this.el[k][i] = this.el[k][j]; this.el[k][j] = x; } } private void swapMatrix(Matrix A, Matrix Inv, int i) { 71 for (int i2 = i; i2 < rows; i2++) { for (int j2 = i; j2 < cols; j2++) { if (A.el[i2][j2] != 0) { A.swapRows(i, i2); A.swapCols(i, j2); Inv.swapRows(i, i2); Inv.swapCols(i, j2); return; } } } } private void subtractLine(int i, int k, double index) { for (int j=0; j < cols; j++) { this.el[k][j] = this.el[k][j] this.el[i][j] * index; } } public void printStochastics(int precision) { double sum; for (int i=0; i < rows; i++) { sum = 0; for (int k=0; k < cols; k++){ sum = sum + this.el[i][k]; } if (precision > 0) { sum = Math.round(sum * Math.pow(10, precision)); sum = sum / Math.pow(10, precision); } System.out.println("Line " + (i+1) + ", elements sum = " + sum); } } public double[] getStochastics(int precision) { double[] stoch = new double[rows]; double sum; for (int i=0; i < rows; i++) { sum = 0; for (int k=0; k < cols; k++){ sum = sum + this.el[i][k]; } if (precision > 0) { sum = Math.round(sum * Math.pow(10, precision)); sum = sum / Math.pow(10, precision); } stoch[i] = sum; } return stoch; } public boolean equals(Matrix matrix) { for (int i=0; i < rows; i++) { for (int k=0; k < cols; k++){ if (this.el[i][k] != matrix.el[i][k]) return false; } 72 } return true; } public String toString() { String res = ""; for (int i=0; i < for (int k=0; res = res + } rows; i++) { k < cols; k++){ + "\t" this.el[i][k]; res = res + "\n"; } return res; } } 73