Телефон: 8-800-350-22-65
WhatsApp: 8-800-350-22-65
Telegram: sibac
Прием заявок круглосуточно
График работы офиса: с 9.00 до 18.00 Нск (5.00 - 14.00 Мск)

Статья опубликована в рамках: XXVII Международной научно-практической конференции «Научное сообщество студентов XXI столетия. ТЕХНИЧЕСКИЕ НАУКИ» (Россия, г. Новосибирск, 16 декабря 2014 г.)

Наука: Математика

Скачать книгу(-и): Сборник статей конференции

Библиографическое описание:
Зенг В.А. РЕШЕНИЕ ЗАДАЧИ КОММИВОЯЖЁРА МЕТОДОМ МОНТЕ-КАРЛО // Научное сообщество студентов XXI столетия. ТЕХНИЧЕСКИЕ НАУКИ: сб. ст. по мат. XXVII междунар. студ. науч.-практ. конф. № 12(26). URL: https://sibac.info/archive/technic/12(26).pdf (дата обращения: 25.11.2024)
Проголосовать за статью
Конференция завершена
Эта статья набрала 0 голосов
Дипломы участников
У данной статьи нет
дипломов

РЕШЕНИЕ  ЗАДАЧИ  КОММИВОЯЖЁРА  МЕТОДОМ  МОНТЕ-КАРЛО

Зенг  Валерия  Андреевна

студент  3  курса,  кафедра  «Дизайн  и  технологии  медиа  индустрии»  ОмГТУ,  РФ,  г.  Омск

E -mailvaleriyazeng@mail.ru

Степанов  Владимир  Николаевич

научный  руководитель,  канд.  физ.-мат.  наук,  доцент  каф.  «Высшая  математика»  ОмГТУ,  РФ,  г.  Омск

 

Задача  коммивояжёра  является  классической  задачей  дискретной  оптимизации  и  имеет  многочисленные  приложения:  транспортные  задачи,  задачи  соединения  пунктов  линией  электропередач  и  т.  д.  Задача  коммивояжера  состоит  в  следующем:  он  должен  объехать  ряд  населенных  пунктов,  пробыв  в  каждом  пункте  только  один  раз  и  вернуться  в  исходный  пункт.  Какой  маршрут  должен  выбрать  коммивояжёр,  чтобы  пройденный  путь  был  наименьшей  длины?  [1,  с.  59].

Решение  задачи  коммивояжера  методом  Монте-Карло  строится  на  случайном  выборе  каждого  следующего  города,  через  который  будет  проходить  путь.  При  использовании  программы  ответ  носит  вероятностный  характер  и  может  сильно  отличаться  от  правильного  решения  задачи  коммивояжера.  Но  при  увеличении  числа  испытаний  погрешность  ответа  уменьшается  [2,  с.  395].

 

Рисунок  1  Внешний  вид  программы

 

Пусть  имеется  полный  граф  с  n  вершинами,  заданный  матрицей  расстояний  С  =  ||сij||.  Вершину  v1  примем  за  начальную  и  случайным  образом  выберем  остальные  вершины  [1,  с.  80].  В  программе  это  выглядит  так: 

public  partial  class  Form1  :  Form

  {

  int  N;

  public  Form1()

  {

  InitializeComponent();

  }

private  void  numericUpDown1_ValueChanged(object  sender,  EventArgs  e)

  {

  N  =  (int)numericUpDown1.Value;

  dataGridView1.RowCount  =  N;

  dataGridView1.ColumnCount  =  N;

  for  (int  i  =  0;  i  <  N;  i++)

  {

  dataGridView1.Rows[i].HeaderCell.Value  =  ""  +  (i  +  1);

  dataGridView1.Columns[i].HeaderText  =  ""  +  (i  +  1);

  }

  }

private  void  button1_Click(object  sender,  EventArgs  e)

{

  Random  r  =  new  Random();

  for  (int  i  =  0;  i  <  N;  i++)

  for  (int  j  =  0;  j  <  N;  j++)

  dataGridView1[i,  j].Value  =  r.Next(0,  10);

  }

private  void  button2_Click(object  sender,  EventArgs  e)

  {

  double[,]  A  =  new  double[N,  N];

  for  (int  i  =  0;  i  <  N;  i++)

  for  (int  j  =  0;  j  <  N;  j++)

  A[i,j]  =  Convert.ToDouble(dataGridView1[j,  i].Value);

 

  textBox1.Text  =  "";

  Random  r  =  new  Random();

  int  M  =  (int)numericUpDown2.Value;

  progressBar1.Maximum  =  M-1;

  double  sumbest  =  double.PositiveInfinity;

  int[]  pbest  =  new  int[N];

  for  (int  m  =  0;  m  <  M;  m++)

{

  int[]  p  =  new  int[N];

  for  (int  i  =  0;  i  <  N;  i++)

  p[i]  =  i;

for  (int  i  =  1;  i  <  N;  i++)

  {

  int  j  =  r.Next(1,  N);

  int  t  =  p[i];

  p[i]  =  p[j];

  p[j]  =  t;

  }

Предположим,  что  остальные  вершины  появились  в  порядке  i1  i2  i3  in  где  ik  —  номер  вершины  при  k-ом  выборе.  Получим  гамильтонов  контур:

 

 

Посчитаем  длину  этого  контура  и  запомним  ее.  Повторим  эту  процедуру  еще  раз  и  сравним  полученные  результаты,  выбрав  наименьший,  и  запомним  только  его  [1,  с.  80].  В  нашей  программе  это  выглядит  так:

if  (sum  <  sumbest)

  {

  sumbest  =  sum;

  pbest  =  p;

  }

progressBar1.Value  =  m;

  }

  textBox1.Text  =  textBox1.Text  +  "Минимальный  путь:  1";

  for  (int  i  =  1;  i  <  N;  i++)

  textBox1.Text  =  textBox1.Text  +  "->"  +  (pbest[i]  +  1);

  textBox1.Text  =  textBox1.Text  +  "\r\nСуммарное  расстояние:  "  +  sumbest  +  "\r\n";

  }

private  void  Form1_Load(object  sender,  EventArgs  e)

  {

  numericUpDown1_ValueChanged(sender,  e);

  button1_Click(sender,  e);

  }

  } 

  double  sum  =  0;

  for  (int  i  =  0;  i  <  N  -  1;  i++)

  if  (A[p[i],  p[i  +  1]]  ==  0  ||  sum  >  sumbest)

  {

  sum  =  double.PositiveInfinity;

  break;

  }

  else

  sum  =  sum  +  A[p[i],  p[i  +  1]];

if  (A[p[N  -  1],  p[0]]  ==  0)

  sum  =  double.PositiveInfinity;

  else

  sum  =  sum  +  A[p[N  -  1],  p[0]];

  if  (sum  <  sumbest)

  {

  sumbest  =  sum;

  pbest  =  p;

  }

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

Данные  занесены  в  таблицу: 

Таблица  1.

Результаты  тестирования  алгоритма

Номер  варианта

Количество  городов

Количество  попыток

Количество  правильных  ответов,  %

1

6

10

9

100

48

1000

100

2

10

8

100

65

1000

100

3

10

11

100

63

1000

100

 

Основываясь  на  результатах,  представленных  в  таблице,  можно  сделать  вывод  о  том,  что  применение  метода  Монте-Карло  дает  оптимальное  решение  в  большинстве  случаев,  если  количество  попыток  превосходит  1000. 

 

Список  литературы:

1.Акимов  О.Е.  Дискретная  математика.  Логика,  группы,  графы.  М.:  Лаборатория  базовых  знаний,  2003.  —  376  с.

2.Степанов  В.Н.  Дискретная  математика:  графы  и  алгоритмы  на  графах.  Омск:  Издательство  ОмГТУ,  2010.  —  116  с. 

Проголосовать за статью
Конференция завершена
Эта статья набрала 0 голосов
Дипломы участников
У данной статьи нет
дипломов

Оставить комментарий

Форма обратной связи о взаимодействии с сайтом
CAPTCHA
Этот вопрос задается для того, чтобы выяснить, являетесь ли Вы человеком или представляете из себя автоматическую спам-рассылку.