Модераторы: Poseidon
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> [Delphi] Задача коммивояжера 
:(
    Опции темы
batraz
  Дата 2.5.2013, 08:23 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 2
Регистрация: 2.5.2013

Репутация: нет
Всего: нет



Помогите, пожалуйста, с задачей.
Найти на взвешенном ориентированном графе локально оптимальное решение разомкнутой задачи коммивояжера методом Монте-Карло. 
PM MAIL   Вверх
Poseidon
Дата 6.5.2013, 11:47 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Delphi developer
****


Профиль
Группа: Комодератор
Сообщений: 5273
Регистрация: 4.2.2005
Где: Гомель, Беларусь

Репутация: 5
Всего: 133



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


--------------------
Если хочешь, что бы что-то работало - используй написанное, 
если хочешь что-то понять - пиши сам...
PM MAIL ICQ   Вверх
MetalFan
Дата 7.5.2013, 10:25 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Аццкий Сотона
****


Профиль
Группа: Комодератор
Сообщений: 3815
Регистрация: 2.10.2006
Где: Moscow

Репутация: нет
Всего: 128



Для домашних заданий, курсовых, существует "Центр Помощи".

Тема перенесена! 


--------------------
There are always someone smarter than you...
PM MAIL   Вверх
Governor
Дата 19.2.2015, 19:15 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 45
Регистрация: 13.4.2005
Где: Москва

Репутация: нет
Всего: нет



Решение методом Монте-Карло:

1. Матрицу весов графа загнать в массив matrix
2. Вывод результатов в Memo1


Код

procedure TForm1.Button6Click(Sender: TObject);
var bestplancost: double; // стоимость оптимального маршрута

     ss:string;  // оптимальный маршрут (для вывода)
     pln,optplan:array[1..5] of byte; // тестовый и оптимальный маршруты

    i,j,k,l,m: byte; // счётчики
    s: array [1..5] of double; // массив случайных чисел
    nn:longint; // число испытаний
    bf:double; buf: byte; // буферные переменные

begin
  reloadmatrix; // загрузка матрицы связей
  nn:=StrToInt(Edit1.text); // число испытаний
  bestplancost:=1e10; // стоимость оптимального плана - первое приближение        
 Ti1:=Time; // засекаем время счёта
  randomize; // перезапуск генератора случайных чисел
 for j:=1 to 5 do pln[j]:=j; // первое приближение маршрута
  for i:=1 to nn do
        begin
        for j:=1 to 5 do s[j]:=random;  // генерируем случайные маршруты
        for j:=1 to 5-1 do
         for k:=j+1 to 5 do
          if s[j]>s[k] then
          begin
           bf:=s[j]; s[j]:=s[k]; s[k]:=bf;
           buf:=pln[j]; pln[j]:=pln[k]; pln[k]:=buf;
          end;


        cost:=0;  // подсчёт стоимости случайного маршрута
        for m:=1 to 5 do cost:=cost+matrix[pln[m],pln[m+1]];
        if cost<bestplancost then  // запоминаем лучший случайный маршрут
        begin
         bestplancost:=cost;
         for m:=1 to 5 do optplan[m]:=pln[m];
        end;
       end;

        Ti2:=Time;  // останавливаем секундомер
        tt:=(Ti2-Ti1)*86400; // считаем время
      Memo1.Lines.Add('Обработано вариантов: '+floattostr(nn));
      Memo1.Lines.Add('Время счёта: '+floattostr(tt));
      Memo1.Lines.Add('Стоимость оптимального маршрута (по Монте-Карло): '+floattostr(bestplancost));
      Memo1.Lines.Add('Оптимальный план');  ss:='';
      for m:=1 to 5 do
      begin
       ss:=ss+inttostr(optplan[m])+'>';
      end;
      Memo1.Lines.Add(ss); // выводим оптимальный маршрут


end;



Народ! А кто поделится решением для метода ветвей и границ?

Это сообщение отредактировал(а) Governor - 19.2.2015, 19:33
PM MAIL ICQ   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Центр помощи"

ВНИМАНИЕ! Прежде чем создавать темы, или писать сообщения в данный раздел, ознакомьтесь, пожалуйста, с Правилами форума и конкретно этого раздела.
Несоблюдение правил может повлечь за собой самые строгие меры от закрытия/удаления темы до бана пользователя!


  • Название темы должно отражать её суть! (Не следует добавлять туда слова "помогите", "срочно" и т.п.)
  • При создании темы, первым делом в квадратных скобках укажите область, из которой исходит вопрос (язык, дисциплина, диплом). Пример: [C++].
  • В названии темы не нужно указывать происхождение задачи (например "школьная задача", "задача из учебника" и т.п.), не нужно указывать ее сложность ("простая задача", "легкий вопрос" и т.п.). Все это можно писать в тексте самой задачи.
  • Если Вы ошиблись при вводе названия темы, отправьте письмо любому из модераторов раздела (через личные сообщения или report).
  • Для подсветки кода пользуйтесь тегами [code][/code] (выделяйте код и нажимаете на кнопку "Код"). Не забывайте выбирать при этом соответствующий язык.
  • Помните: один топик - один вопрос!
  • В данном разделе запрещено поднимать темы, т.е. при отсутствии ответов на Ваш вопрос добавлять новые ответы к теме, тем самым поднимая тему на верх списка.
  • Если вы хотите, чтобы вашу проблему решили при помощи определенного алгоритма, то не забудьте описать его!
  • Если вопрос решён, то воспользуйтесь ссылкой "Пометить как решённый", которая находится под кнопками создания темы или специальным флажком при ответе.

Более подробно с правилами данного раздела Вы можете ознакомится в этой теме.

Если Вам помогли и атмосфера форума Вам понравилась, то заходите к нам чаще! С уважением, Poseidon, Rodman

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Центр помощи | Следующая тема »


 




[ Время генерации скрипта: 0.0432 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.