Наши проекты:
Журнал · Discuz!ML · Wiki · DRKB · Помощь проекту |
||
ПРАВИЛА | FAQ | Помощь | Поиск | Участники | Календарь | Избранное | RSS |
[18.190.217.134] |
|
Сообщ.
#1
,
|
|
|
Всем привет!
Пред пред предисловие: Я сделал поиск по данной теме Вот текст моего запроса: "метод отжига delphi" и Гугл меня не очень обрадовал результатами. Две темы и ничего конкретного в одной нет ответа, в другой ссылка без разбора и продолжения не было. Если Вам скучно, проходите мимо. Не стоит писать что-то вроде Баян... и т. д. Присылайте конкретные ссылки где эта тема обсуждалась и пришла к решению. Предисловие: Долго думал, стоит ли создавать данную тему, взвесив за и против решил, что нужно. Предыстория: Метод отжига показался мне интересным для получения решения задач требующих полного перебора (что долго). У меня в задаче есть множество точек по которым мне необходимо строить маршрут, я пока не придумал как сгенерировать данное множество не сложно. Поэтому хотелось бы посмотреть действие "метода отжига" на чем-то уже простом и понятном можно найти описание на методе "Коммивояжёра". Основная: Вот вторая из двух ссылок, те что "дал Гугл". programmersforum Вот нашлось. Вроде бы смотри и радуйся. Цитата Pavia дает ссылку. Этих методов оптимизации вагон и маленькая тележка. Вот поискал вот код: http://surface.syr.edu/cgi/viewcontent.cgi...ecs_techreports __________________ Хорошо поставленный вопрос это уже половина ответа. | Каков вопрос, таков ответ. У дзен программиста программа делает то что он хотел, а не то что он написал . Но на второй вкладке elf01 признает что ничего не может сделать так Цитата elf01;1591197 Вы вообще о чем, я решить то сам могу, вы видели что я написал? там нет функций generate и swap, хотя в коде они присутствуют. Вам ли ж бы написать, вы хоть документ открывал, что добрый человек кинул? Там все цифры для примера есть. Итак пробую добавить недостающее generate procedure generate(var i, j: integer); begin randomize; i:= random(10); j:= random(10); if (i=0) or (j=0) then begin i:= 1; j:= 1; end; if i=j then generate(i,j); end; и swap Со swap я не смог его сделать, без того чтобы delphi на него не ругалось, поэтому просто сделал так begin b[1]:= a[(i + k - 2) mod n + 1]; a[(i + k - 2) mod n + 1]:=a[(j - k + n) mod n + I]; a[(j - k + n) mod n + I]:=b[1]; end; Хотя должно быть что-то ... но не робит (думаю потому, что var Index1, Index2: tour "не равны" локальному N:tour) procedure Swap(var Index1, Index2: tour); var N:tour; begin N := a[Index1]; a[Index1] := a[Index2]; a[Index2] := N; end; Но вопрос мой не в этом. Автор статьи получает какие-то результаты, которые интерпретирует например так https://yadi.sk/i/VKENa_bg3XAirk Здесь, то что без особых усилий можно выудить из документа. Прикреплённый файлMetod_Otjiga.7z (8,57 Кбайт, скачиваний: 122) Вопрос: Как мне получить результат в тоже виде, что и у автора статьи то есть путь из связанных точек? Заранее спасибо) |
Сообщ.
#2
,
|
|
|
RusSun
Тебе свет клином сошелся на той статье? Загугли фразу: https://www.google.com/search?ei=5swWW_veJs...1.0.xiU94fZ7gc4 Добавлено Цитата RusSun @ N := a[Index1]; А ничего что tour это массив и как ты можешь целому массиву присвоить элемент массива? Попробуй так: procedure Swap(var Index1, Index2: tour); var N:tour; begin N[1] := a[Index1]; a[Index1] := a[Index2]; a[Index2] := N[1]; end; И вообще ты бы привел код целиком, а тот будем как с Fester ты мне про Фаму я про Ерему. |
Сообщ.
#3
,
|
|
|
Цитата ^D^ima @ И вообще ты бы привел код целиком, а тот будем как с Fester ты мне про Фаму я про Ерему. Цитата RusSun @ Здесь, то что без особых усилий можно выудить из документа. Прикреплённый файлMetod_Otjiga.7z (8,57 Кбайт, скачиваний: 0) |
Сообщ.
#4
,
|
|
|
swap должна менять местами элементы массива который ты ей передаешь. Передаешь ты ей массив из локальной переменной процедуры, а свап ничего не возвращает взамен. Или сделай глобальную переменную, или из свап функцию или в процедуре свап возвращай значение.
|
Сообщ.
#5
,
|
|
|
Цитата ^D^ima @ swap должна менять местами элементы массива который ты ей передаешь. Передаешь ты ей массив из локальной переменной процедуры, а свап ничего не возвращает взамен. Или сделай глобальную переменную, или из свап функцию или в процедуре свап возвращай значение. Написал, что просто сделал напрямую, тем более там три строки. b[1]:= a[(i + k - 2) mod n + 1]; a[(i + k - 2) mod n + 1]:=a[(j - k + n) mod n + I]; a[(j - k + n) mod n + I]:=b[1]; Если так сильно хотите, то код тестового примера был прикреплен к теме и скачан 4 раза. Но вопрос мой не в этом. Автор статьи получает какие-то результаты, которые интерпретирует например так Вопрос: Как мне получить результат в тоже виде, что и у автора статьи или хотя бы похожий результат, то есть чтобы из полученных точек можно было построить "путь из связанных точек" То есть что не так с примером |
Сообщ.
#6
,
|
|
|
Цитата RusSun @ в тоже виде, что и у автора статьи или хотя бы похожий результат, то есть чтобы из полученных точек можно было построить "путь из связанных точек" То есть что не так с примером А в чем трудности? Берёшь и как есть выводишь. Разве, что масштаб увеличить. Да смещение подобрать. var Path:tour; i:Integer; begin Canvas.MoveTo(Round(Path[0].x),Round(Path[0].y)); for i:=0 to Length(Path)-1 do Canvas.LineTo(Round(Path[i].x),Round(Path[i].y)); Canvas.LineTo(Round(Path[0].x),Round(Path[0].y)); end; |
Сообщ.
#7
,
|
|
|
https://yadi.sk/i/yZ6d3SLC3YTAvA
Вот так? Прикреплённый файлMetod_Otjiga1.rar (10,45 Кбайт, скачиваний: 117) |
Сообщ.
#8
,
|
|
|
RusSun
У вас там много ошибок. По парочки в каждой функции. Я поправил оснавные. Прикреплённый файлMetod_Otjiga1.5.zip (321,82 Кбайт, скачиваний: 135) |
Сообщ.
#9
,
|
|
|
Надеюсь, тема будет полезна не только мне
В картинке у Вас включена была зеленая серия. А в конечном варианте осталась только красная. Зеленая использовалась для теста? |
Сообщ.
#10
,
|
|
|
Да там видео слиплось вначале идёт кусок с тестом там цвет зелёный. А потом убрал лишнее осталось красная.
|