В ходе проделанной работы была решена крупная научная проблема, имеющая важное хозяйственное значение и предполагающая, на основе анализа существующих технологий фиксированных сетей доступа и математических методов решения транспортной задачи на основе теории графов, создание автоматизированной системы оптимизации, процесса проектирования сетей DWDM.
Достигнута основная цель исследований, заключающаяся в повышении эффективности процессов проектирования, оптимизации и развития волоконно-оптических сетей связи, за счёт разработки автоматизированного комплекса проектирования сетей DWDM.
Для достижения поставленной цели были решены следующие задачи:
− Проведен анализ существующих технологий широкополосного доступа к сети Ethernet;
− Проведен анализ математических методов решения транспортной задачи на основе теории графов, а так же приведены обоснования выбора метода решения задачи нахождения кратчайшего пути.
− Разработан алгоритм оптимизации процесса проектирования сетей DWDM и подбора оборудования сети с заданными техническими характеристиками;
− Разработан прототип системы автоматизированного проектирования сетей DWDM;
− Предложенный алгоритм и прототип программного средства реализованы в автоматизированной системе проектирования сетей DWDM.
Для решения поставленных задач в магистерской диссертации применялись методы теорий вероятностей, систем, графов, эффективности, динамического программирования, принятия решений.
Разработанные в магистерской диссертации теоретические положения по исследованию процессов функционирования и оптимизации проектирования сетей DWDM содержат следующие новые научно-обоснованные результаты:
− Анализ существующих технологий широкополосного доступа к сети Ethernet, а так же методов оптимизации задач на графах;
− Новые методы исследования, и проектирования сетей DWDM, обеспечивающие учёт специфики их функционирования (распределённая архитектура построения, передача разнородной информации, ограниченность сетевых ресурсов, необходимость обеспечения устойчивости) и связанные с этим способы управления качеством обслуживания;
− Алгоритм оптимизации процесса проектирования сетей DWDM и подбора оборудования сети с заданными техническими характеристиками;
− Прототип системы автоматизированного проектирования сетей DWDM;
− Расчеты и анализ полученных результатов;
− Разработана автоматизированной технологической и информационной среды проектирования сетей DWDM с оптимизацией затрат на эксплуатационные расходы.
Полученные решения позволят повысить эффективность деятельности проектных организаций, а также автоматизировать процессы проектирования сетей DWDM (как общего пользования, так и специального назначения, корпоративных) и оптимизировать затраты на эксплуатационные расходы.
1. Головин С.Л. Технологии мультисервисных сетей. //СЮ, 2005. №10.-с. 31 -36.
2. Концептуальные положения по построению мультисервисных сетей на ВСС России. М.: ДЭС Минсвязи России, 2001. - 32с.
3. Гилязов Р.Л., Столбов В.Ю. Моделирование распределительного уровня цифровой сети передачи данных с учетом социальных предпочтений. // Вестник ПГТУ. Прикладная математика и механика. Пермь: Изд-во ПГТУ, 2007.-е. 91-102.
4. Гилязов Р.Л., Столбов В.Ю. Моделирование цифровой сети передачи данных с учетом случайных потребностей в доставке информации: сб. тр. XXXIV Междунар. конф. «IT-S&E'07». Украина, г. Гурзуф, 2007-с.84-86.
5. Лихгциндер Б.Я., Кузякин М.А., Росляков А.В., Фомичев С.М. Интеллектуальные сети связи. -М.: ЭКО ТРЕНДЗ, 2000. - 205с.
6. Давыдов Г.Б. Информатизация и сети связи. М.: Наука, 1984.128с.
7. Филип Б.П. Методы анализа структурной надежности сетей связи.ч- М.:Радио и связь, 1988. 204с.
8. Стеколышков Ю.И. Живучесть систем. Теоретические основы. — СПб.: Политехника, 2002. 155с.
9. Нечипоренко В.И. Структурный анализ систем (эффективность и надёжность). -М.: Сов. радио, 1977. -214с.
10. Нетес В.А. Надежность сетей связи: тенденции последнего десятилетия //Электросвязь, 1998. №1. - с. 41 - 45.
11. McDonald J.С. Public network dependable? //IEEE Communications Mag.-1992.-№4,- P.110-112.
12. РТМ. Принципы построения местных мультисервисных сетей электросвязи. -М.:ДЭС Минсвязи России. 2005. -48с.
13. Гольдштейн Б. С., Пинчук А. В., Суховицкий A. JI. IP-телефония. -М.: Радио и связь, 2001. 336с.
14. Электроннвй сборник статей по информационным технологиям hypercomp.ru. http://www.hypercomp.ru/articlcs/IP-telephony-terms-and-basics/
15. Шварц М. Сети связи: протоколы, моделирование и анализ. В 2-х частях. Ч. 1. Пер. с англ. М.: Наука, 1992. - 336с.
16. Йенсен П.А., Барнес Д. Потоковое программирование. М.: Радио и связь, 1984. - 392с.
17. Йенсен П.А., Барнес Д. Потоковое программирование. М.: Радио и связь, 1984. - 392с.
18. Ху Т. Целочисленное программирование и потоки в сетях. М.: Мир, 1974.-519с.
19. Данциг Д.Б. Линейное программирование, его применение и обобщение. М.: Прогресс, 1966.- 599с.
20. Васильева Е. М. Левит Б.Ю. Лившиц B.Ii. Нелинейные транспортные задачи в сетях. М.: Финансы и статистика, 1981. -104с.
21. Раскин Л.Г., Кириченко И.О. Многоиндексные задачи линейного программирования. М.: Радио и связь, 1982. - 260с.
22. Ишмамедов К.В. Мультисервисная технологическая сеть связи// Автоматика, связь, информатика,- 2006.- №7.-С. 31-33.
23. Сычев К.И. Многокритериальное проектирование мультисервисных сетей связи. //Телекоммуникации. 2007. - №9. - С. 2-7.
24. Бурков В.II. Основы математической теории активных систем. — М.: Наука, 1977.-255с.
25. Новиков Д.А. Теория управления организационными системами. — М.: Издательство физико-математической литературы, 2007. 584с.
26. Губко М.В. Математические модели оптимизации иерархических структур. М.: ЛЕНАНД, 2006. - 264с.
27. Микони С.В. Теория и практика рационального выбора. М.: Маршрут, 2004. - 463с.
28. Бурков В.Н., Заложнев А.Ю., Новиков Д.А. Теория графов в управлении организационными системами. М.: Синтег, 2001. - 124с.
29. Фролов В.II., Львович Я.Е., Подвальный С.Л. Проблема оптимального выбора в прикладных задачах. Воронеж: Изд-во Воронежского университета, 1980. - 139с.
30. Цыганов В.В, Бородин В. А., Шишкин Г.Б. Интеллектуальное предприятие: механизмы овладения капиталом и властью (теория и практика управления эволюцией организации). М.: Университетская книга. - 2004 -768с.
31. Давыдов Г.Б., Рогинский В.Н., Толчан А .Я. Сети электросвязи. -М.: Связь, 1977.-360с.
32. Соколов Н.А. Телекоммуникационные сети. М.: Альварес Паблишинг, 2003. - 192с.
33. Введение в математическое моделирование: Учебное пособие /Под ред. П.В. Трусова. М.: Логос, 2005. - 440с.
34. Нетес В.А. Выбор обобщенных показателей надежности сетей связи. //Электросвязь. -1981. №5. - С. 24 -27.
35. Надежность технических систем/ Под ред. И. А. Ушакова. М.: Радио и связь, 1985. - 608с.
36. Мизин И. А., Богатырев В. А., Кулешов А. П. Сети коммутации пакетов/ Под ред. В. С. Семенихина.— М.: Радио и связь, 1986. — 408с.
37. Методика выбора показателей для оценки надежности сложных технических систем. М.: Стандарты, 1977. - 44с.
38. Гилязов Р.Л., Гитман М.Б., Столбов В.Ю. Управление транспортными сетями электросвязи с учетом нечетких предпочтений // Проблемы управления. 2008. - №1. - С.62-67.
39. Клейнрок Л. Теория массового обслуживания. М.: Машиностроение, 1979. - 426с.
40. Гилязов Р.Л., Гитман М.Б., Столбов В.Ю. Построение обобщенного критерия оптимальности при заданной нечеткой иерархическойструктуре частных критериев // Труды XXXV Междунар. конф. «1Т-8&Е'08», Украина, г. Гурзуф, 2008.- С.207-210.
41. Котов С.С., Кузнецов В.В., Столбов В.Ю. Применение имитационного подхода в управлении системами массового обслуживания //Теор. и прикл. аспекты инф. технологий. Сб-к науч. тр. ГосНИИУМС.-Пермь, 2006. Вып. 55. С. 160-168.
42. Смолянский М.Е. Проектирование линейных сооружений ГТС. -М: Радио и Связь, 1989. 180с.
43. Бесслер Р., Дойч А.Проектирование сетей связи. М: Радио и связь, 1988. - 272с.
44. Гужавин С.А., Драмашко И.А., Кокорип А.Б., Коломо-ец В.В., Хабаров АЛО. Статистический регрессионный анализ БД АСУ учета линейных сооружений сети основа для принятия управленческих решений // Зв'язок, 2001, №2,- С. 59-64.
45. Гилязов Р.Л., Столбов В.Ю. Проектирование распределительного уровня мультисервисной сети связи с учетом конфликтных интересов различных групп пользователей. /Телекоммуникации. 2008. №11. - С.15-21.
46. Гилязов Р.Л. Оптимизация сетей электросвязи // Математическое моделирование в естественных науках. Тезисы докладов 11-й всероссийской конференции молодых ученых. Пермь, 2002. С. 60-61.
(обязательное)
Текст программы
import java.util.HashSet;
import java.util.TreeSet;
import java.util.Vector;
/**
* Created with IntelliJ IDEA.
* User: napster
* Date: 4/27/13
* Time: 10:42 PM
* To change this template use File | Settings | File Templates.
*/
class EdgeForKruskal implements Comparable<EdgeForKruskal> {
int vertexA, vertexB;
double weight;
public EdgeForKruskal(int vertexA, int vertexB, double weight) {
this.vertexA = vertexA;
this.vertexB = vertexB;
this.weight = weight;
}
public int getVertexA() {
return vertexA;
}
public int getVertexB() {
return vertexB;
}
public double getWeight() {
return weight;
}
@Override
public String toString() {
return "(" + vertexA + ", " + vertexB + ") : Weight = " + weight;
}
public int compareTo(EdgeForKruskal edge) {
//== is not compared so that duplicate values are not eliminated.
return (this.weight < edge.weight) ? -1 : 1;
}
}
public class KruskalEdges {
Vector<HashSet<Integer>> vertexGroups = new Vector<HashSet<Integer>>();
TreeSet<EdgeForKruskal> kruskalEdges = new TreeSet<EdgeForKruskal>();
public TreeSet<EdgeForKruskal> getEdges() {
return kruskalEdges;
}
HashSet<Integer> getVertexGroup(int vertex) {
for (HashSet<Integer> vertexGroup : vertexGroups) {
if (vertexGroup.contains(vertex)) {
return vertexGroup;
}
}
return null;
}
public void insertEdge(EdgeForKruskal edge) {
int vertexA = edge.getVertexA();
int vertexB = edge.getVertexB();
HashSet<Integer> vertexGroupA = getVertexGroup(vertexA);
HashSet<Integer> vertexGroupB = getVertexGroup(vertexB);
if (vertexGroupA == null) {
kruskalEdges.add(edge);
if (vertexGroupB == null) {
HashSet<Integer> htNewVertexGroup = new HashSet<Integer>();
htNewVertexGroup.add(vertexA);
htNewVertexGroup.add(vertexB);
vertexGroups.add(htNewVertexGroup);
} else {
vertexGroupB.add(vertexA);
}
} else {
if (vertexGroupB == null) {
vertexGroupA.add(vertexB);
kruskalEdges.add(edge);
} else if (vertexGroupA != vertexGroupB) {
vertexGroupA.addAll(vertexGroupB);
vertexGroups.remove(vertexGroupB);
kruskalEdges.add(edge);
}
}
}
}
import java.awt.*;
import java.util.*;
import java.util.List;
/**
* Created with IntelliJ IDEA.
* User: napster
* Date: 4/9/13
* Time: 3:42 PM
* To change this template use File | Settings | File Templates.
*/
public class pathSearcher {
private static int maxSock = 8;
private static int distMult = 2;
private static double dist, dist2;
private static RoadGraph nearest, nearestSocket;
private static int minDistance;
public static int getDistMult() {
return pathSearcher.distMult;
}
public static int getMaxSock() {
return pathSearcher.maxSock;
}
public static void searchSocks(){
JMaps.getSocketList().clear();
JMaps.getRoadGraphList().clear();
RoadGraphLoader.loadGraph();
for (Point arr: JMaps.getHousesList()){
//nearest point in graph
minDistance=Integer.MAX_VALUE;
nearest = null;
for (RoadGraph i: JMaps.getRoadGraphList()){
dist = Math.sqrt((i.getPoint().x - arr.x)*(i.getPoint().x - arr.x)+(i.getPoint().y - arr.y)*(i.getPoint().y - arr.y));
if (dist < minDistance){
minDistance = (int)dist;
nearest = i;
}
}
//add first socket from the nearest point ^
nearestSocket = null;
if (JMaps.getSocketList().isEmpty()){
nearest.setSocketState(true);
JMaps.getSocketList().add(new RoadGraph(nearest.getNumber(), nearest.getPoint(), nearest.getList()));
JMaps.getSocketList().get(JMaps.getSocketList().size()-1).setSocketState(true);
JMaps.getSocketList().get(JMaps.getSocketList().size()-1).incSocketConnetions();
JMaps.getSocketList().get(JMaps.getSocketList().size() - 1).addHouseInEachSock(arr);
} else {
//finding the nearest socket
minDistance = Integer.MAX_VALUE;
for (RoadGraph i: JMaps.getSocketList()){
if (i.isSocket() && i.getSocketConnections() < maxSock){
dist = Math.sqrt((i.getPoint().x - arr.x)*(i.getPoint().x - arr.x)+(i.getPoint().y - arr.y)*(i.getPoint().y - arr.y));
if (dist < minDistance){
minDistance = (int)dist;
nearestSocket = i;
}
}
}
// if (nearestSocket == null){
// nearest.setSocketState(true);
// JMaps.getSocketList().add(new RoadGraph(nearest.getNumber(), nearest.getPoint(), nearest.getList()));
// JMaps.getSocketList().get(JMaps.getSocketList().size()-1).setSocketState(true);
// JMaps.getSocketList().get(JMaps.getSocketList().size() - 1).addHouseInEachSock(arr);
// nearestSocket = JMaps.getSocketList().get(JMaps.getSocketList().size()-1);
// }
// minDistance = Integer.MAX_VALUE;
// for (RoadGraph i: JMaps.getSocketList()){
// dist = Math.sqrt((i.getPoint().x - arr.x)*(i.getPoint().x - arr.x)+(i.getPoint().y - arr.y)*(i.getPoint().y - arr.y));
// if ((dist < minDistance) && (i.getSocketConnections() < maxSock)){
// minDistance = (int)dist;
// nearestSocket = i;
// }
// }
dist = Math.sqrt(
(nearest.getPoint().x - arr.x)*((nearest.getPoint().x - arr.x))
+
(nearest.getPoint().y - arr.y)*((nearest.getPoint().y - arr.y))
);
dist2 = Math.sqrt(
(nearestSocket.getPoint().x - arr.x)*((nearestSocket.getPoint().x - arr.x))
+
(nearestSocket.getPoint().y - arr.y)*((nearestSocket.getPoint().y - arr.y))
);
//if socket is closer - inc connections
if (dist2 <= distMult*dist){
for (RoadGraph i: JMaps.getSocketList())
if (i.getNumber() == nearestSocket.getNumber()) {
i.incSocketConnetions();
i.addHouseInEachSock(arr);
break;
}
}
//else add new socket
else {
nearest.setSocketState(true);
JMaps.getSocketList().add(new RoadGraph(nearest.getNumber(), nearest.getPoint(), nearest.getList()));
for (RoadGraph i: JMaps.getSocketList())
if (i.getNumber() == nearest.getNumber()) {
i.setSocketState(true);
i.incSocketConnetions();
i.addHouseInEachSock(arr);
break;
}
}
}
}
}
public static RoadGraph findNearestForStation(Point p) {
RoadGraph nearestPoint = null;
double minDistance = Double.POSITIVE_INFINITY;
double dist;
for (RoadGraph i : JMaps.getRoadGraphList()) {
dist = Math.sqrt((i.getPoint().x - p.x) * (i.getPoint().x - p.x) + (i.getPoint().y - p.y) * (i.getPoint().y - p.y));
if (dist < minDistance) {
minDistance = (int) dist;
nearestPoint = i;
i.setImportant(true);
}
}
return nearestPoint;
}
public static double getCost(RoadGraph from, RoadGraph to) {
ArrayList<Vertex> temp = getPathVertex(from, to);
return temp.get(0).minDistance;
}
public static ArrayList<RoadGraph> getPath(RoadGraph from, RoadGraph to) {
ArrayList<RoadGraph> path = new ArrayList<RoadGraph>();
ArrayList<Vertex> vertexArrayList = new ArrayList<Vertex>();
path.clear();
vertexArrayList.clear();
Vertex vertex1;
for (RoadGraph i : JMaps.getRoadGraphList()) {
vertex1 = new Vertex(i.getNumber());
vertexArrayList.add(vertex1);
}
for (Vertex vertexarr : vertexArrayList) {
RoadGraph rg = null;
for (RoadGraph x : JMaps.getRoadGraphList()) {
if (vertexarr.name == x.getNumber()) {
rg = x;
break;
}
}
for (Integer list : rg.getList()) {
RoadGraph rg2 = null;
for (RoadGraph x : JMaps.getRoadGraphList()) {
if (list == x.getNumber()) {
rg2 = x;
break;
}
}
double temp = (
(rg2.getPoint().x
- rg.getPoint().x)
*
(rg2.getPoint().x
- rg.getPoint().x)
+
(rg2.getPoint().y
- rg.getPoint().y)
*
(rg2.getPoint().y
- rg.getPoint().y)
);
Vertex rg3 = null;
for (Vertex x : vertexArrayList) {
if (list == x.name) {
rg3 = x;
break;
}
}
vertexarr.adjacencies.add(new Edge(rg3, temp));
}
}
for (int item = 0; item < JMaps.getRoadGraphList().size() - 1; item++)
if (JMaps.getRoadGraphList().get(item).getNumber() == from.getNumber())
computePaths(vertexArrayList.get(item));
List<Vertex> temppath;
for (int item = 0; item < JMaps.getRoadGraphList().size() - 1; item++)
if (JMaps.getRoadGraphList().get(item).getNumber() == to.getNumber()) {
temppath = getShortestPathTo(vertexArrayList.get(item));
for (Vertex temp : temppath) {
for (RoadGraph i : JMaps.getRoadGraphList()) {
if (i.getNumber() == temp.name) {
path.add(i);
break;
}
}
}
}
return path;
}
public static ArrayList<Vertex> getPathVertex(RoadGraph from, RoadGraph to) {
ArrayList<RoadGraph> path = new ArrayList<RoadGraph>();
ArrayList<Vertex> vertexArrayList = new ArrayList<Vertex>();
path.clear();
vertexArrayList.clear();
Vertex vertex1;
for (RoadGraph i : JMaps.getRoadGraphList()) {
vertex1 = new Vertex(i.getNumber());
vertexArrayList.add(vertex1);
}
for (Vertex vertexarr : vertexArrayList) {
RoadGraph rg = null;
for (RoadGraph x : JMaps.getRoadGraphList()) {
if (vertexarr.name == x.getNumber()) {
rg = x;
break;
}
}
for (Integer list : rg.getList()) {
RoadGraph rg2 = null;
for (RoadGraph x : JMaps.getRoadGraphList()) {
if (list == x.getNumber()) {
rg2 = x;
break;
}
}
double temp = (
(rg2.getPoint().x
- rg.getPoint().x)
*
(rg2.getPoint().x
- rg.getPoint().x)
+
(rg2.getPoint().y
- rg.getPoint().y)
*
(rg2.getPoint().y
- rg.getPoint().y)
);
Vertex rg3 = null;
for (Vertex x : vertexArrayList) {
if (list == x.name) {
rg3 = x;
break;
}
}
vertexarr.adjacencies.add(new Edge(rg3, temp));
}
}
for (int item = 0; item < JMaps.getRoadGraphList().size() - 1; item++)
if (JMaps.getRoadGraphList().get(item).getNumber() == from.getNumber())
computePaths(vertexArrayList.get(item));
Vertex ae = null;
for (Vertex u : vertexArrayList)
if (u.name == to.getNumber())
ae = u;
return getShortestPathTo(ae);
}
private static void computePaths(Vertex source) {
source.minDistance = 0;
PriorityQueue<Vertex> vertexQueue = new PriorityQueue<Vertex>();
vertexQueue.add(source);
while (!vertexQueue.isEmpty()) {
Vertex u = vertexQueue.poll();
for (Edge e : u.adjacencies) {
Vertex v = e.target;
double weight = e.weight;
double distanceThroughU = u.minDistance + weight;
if (distanceThroughU < v.minDistance) {
vertexQueue.remove(v);
v.minDistance = distanceThroughU;
v.previous = u;
vertexQueue.add(v);
}
}
}
}
private static ArrayList<Vertex> getShortestPathTo(Vertex target) {
ArrayList<Vertex> path = new ArrayList<Vertex>();
for (Vertex vertex = target; vertex != null; vertex = vertex.previous)
path.add(vertex);
// Collections.reverse(path);
return path;
}
}
class Vertex implements Comparable<Vertex> {
public final int name;
public ArrayList<Edge> adjacencies = new ArrayList<Edge>();
public double minDistance = Double.POSITIVE_INFINITY;
public Vertex previous;
public Vertex(int argName) {
name = argName;
}
public int compareTo(Vertex other) {
return Double.compare(minDistance, other.minDistance);
}
}
class Edge {
public final Vertex target;
public final double weight;
public Edge(Vertex argTarget, double argWeight) {
target = argTarget;
weight = argWeight;
}
}
Скачать: