На главную
ПРАВИЛА FAQ Помощь Участники Календарь Избранное DigiMania RSS
msm.ru
! ПРАВИЛА РАЗДЕЛА · FAQ раздела Delphi · Книги по Delphi
Пожалуйста, выделяйте текст программы тегом [сode=pas] ... [/сode]. Для этого используйте кнопку [code=pas] в форме ответа или комбобокс, если нужно вставить код на языке, отличном от Дельфи/Паскаля.
Следующие вопросы задаются очень часто, подробно разобраны в FAQ и, поэтому, будут безжалостно удаляться:
1. Преобразовать переменную типа String в тип PChar (PAnsiChar)
2. Как "свернуть" программу в трей.
3. Как "скрыться" от Ctrl + Alt + Del (заблокировать их и т.п.)
4. Как прочитать список файлов, поддиректорий в директории?
5. Как запустить программу/файл?
... (продолжение следует) ...

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


Внимание
Попытки открытия обсуждений реализации вредоносного ПО, включая различные интерпретации спам-ботов, наказывается предупреждением на 30 дней.
Повторная попытка - 60 дней. Последующие попытки бан.
Мат в разделе - бан на три месяца...
Модераторы: jack128, D[u]fa, Shaggy, Rouse_
  
> Метод отжига, Не понимаю как именно нужно использовать данный метод для получения решения.
    Всем привет!

    Пред пред предисловие: :)
    Я сделал поиск по данной теме
    Вот текст моего запроса: "метод отжига delphi"
    и Гугл меня не очень обрадовал результатами.
    Две темы и ничего конкретного в одной нет ответа, в другой ссылка без разбора и продолжения не было.
    Если Вам скучно, проходите мимо. Не стоит писать что-то вроде Баян... и т. д.
    Присылайте конкретные ссылки где эта тема обсуждалась и пришла к решению.

    Предисловие:
    Долго думал, стоит ли создавать данную тему, взвесив за и против решил, что нужно. ;)

    Предыстория:
    Метод отжига показался мне интересным для получения решения задач требующих полного перебора (что долго).
    У меня в задаче есть множество точек по которым мне необходимо строить маршрут, я пока не придумал как
    сгенерировать данное множество не сложно.
    Поэтому хотелось бы посмотреть действие "метода отжига" на чем-то уже простом и понятном
    можно найти описание на методе "Коммивояжёра".

    Основная:
    Вот вторая из двух ссылок, те что "дал Гугл".
    programmersforum
    Вот нашлось. Вроде бы смотри и радуйся.

    Цитата
    Pavia дает ссылку.

    Этих методов оптимизации вагон и маленькая тележка.
    Вот поискал вот код:
    http://surface.syr.edu/cgi/viewcontent.cgi...ecs_techreports
    __________________
    Хорошо поставленный вопрос это уже половина ответа. | Каков вопрос, таков ответ.
    У дзен программиста программа делает то что он хотел, а не то что он написал .


    Но на второй вкладке elf01 признает
    что ничего не может сделать
    так
    Цитата elf01;1591197
    Вы вообще о чем, я решить то сам могу, вы видели что я написал? там нет функций generate и swap, хотя в коде они присутствуют. Вам ли ж бы написать, вы хоть документ открывал, что добрый человек кинул? Там все цифры для примера есть.


    Итак пробую добавить недостающее
    generate
    ExpandedWrap disabled
      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
    на него не ругалось, поэтому просто
    сделал так
    ExpandedWrap disabled
      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)
    ExpandedWrap disabled
      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
    user posted image
    Здесь, то что без особых усилий можно выудить из документа.
    Прикреплённый файлПрикреплённый файлMetod_Otjiga.7z (8,57 Кбайт, скачиваний: 9)
    Вопрос: Как мне получить результат
    в тоже виде, что и у автора статьи
    то есть путь из связанных точек? :blush: :-?

    Заранее спасибо) :thanks:
    Сообщение отредактировано: RusSun -
    плохо, когда уверенность
    в своей правоте ограничивает видимость
    собственным носом
      RusSun
      Тебе свет клином сошелся на той статье?

      Загугли фразу:
      https://www.google.com/search?ei=5swWW_veJs...1.0.xiU94fZ7gc4

      Добавлено
      Цитата RusSun @
       N := a[Index1];

      А ничего что tour это массив и как ты можешь целому массиву присвоить элемент массива?

      Попробуй так:
      ExpandedWrap disabled
        procedure Swap(var Index1, Index2: tour);
        var
           N:tour;
        begin
           N[1] := a[Index1];
           a[Index1] := a[Index2];
           a[Index2] := N[1];
        end;


      И вообще ты бы привел код целиком, а тот будем как с Fester ты мне про Фаму я про Ерему.
      "Воля - это то, что заставляет тебя побеждать, когда твой рассудок говорит тебе, что ты повержен" Карлос Кастанеда
        Цитата ^D^ima @
        И вообще ты бы привел код целиком, а тот будем как с Fester ты мне про Фаму я про Ерему.

        Цитата RusSun @
        Здесь, то что без особых усилий можно выудить из документа.
        Прикреплённый файлMetod_Otjiga.7z (8,57 Кбайт, скачиваний: 0)
        плохо, когда уверенность
        в своей правоте ограничивает видимость
        собственным носом
          swap должна менять местами элементы массива который ты ей передаешь. Передаешь ты ей массив из локальной переменной процедуры, а свап ничего не возвращает взамен. Или сделай глобальную переменную, или из свап функцию или в процедуре свап возвращай значение.
          "Воля - это то, что заставляет тебя побеждать, когда твой рассудок говорит тебе, что ты повержен" Карлос Кастанеда
            Цитата ^D^ima @
            swap должна менять местами элементы массива который ты ей передаешь. Передаешь ты ей массив из локальной переменной процедуры, а свап ничего не возвращает взамен. Или сделай глобальную переменную, или из свап функцию или в процедуре свап возвращай значение.

            Написал, что просто сделал напрямую, тем более там три строки.
            ExpandedWrap disabled
              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 раза. :blink: :jokingly:

            Но вопрос мой не в этом. ;) :)
            Автор статьи получает какие-то результаты, которые интерпретирует например так
            user posted image

            Вопрос: Как мне получить результат
            в тоже виде, что и у автора статьи или хотя бы похожий результат,
            то есть чтобы из полученных точек можно было построить "путь из связанных точек"
            То есть что не так с примером :-?
            плохо, когда уверенность
            в своей правоте ограничивает видимость
            собственным носом
              Цитата RusSun @
              в тоже виде, что и у автора статьи или хотя бы похожий результат,
              то есть чтобы из полученных точек можно было построить "путь из связанных точек"
              То есть что не так с примером

              А в чем трудности? Берёшь и как есть выводишь. Разве, что масштаб увеличить.
              Да смещение подобрать.

              ExpandedWrap disabled
                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;
              Сообщение отредактировано: Pavia -
              Правильный обед должен состоять из 5 блюд приготовленных из 33 ингредиентов.
                https://yadi.sk/i/yZ6d3SLC3YTAvA

                Вот так? :)
                Прикреплённый файлПрикреплённый файлMetod_Otjiga1.rar (10,45 Кбайт, скачиваний: 6)
                Сообщение отредактировано: RusSun -
                плохо, когда уверенность
                в своей правоте ограничивает видимость
                собственным носом
                  RusSun
                  У вас там много ошибок. По парочки в каждой функции. Я поправил оснавные.

                  user posted image

                  :dance: Прикреплённый файлПрикреплённый файлMetod_Otjiga1.5.zip (321,82 Кбайт, скачиваний: 8)
                  Сообщение отредактировано: Pavia -
                  Правильный обед должен состоять из 5 блюд приготовленных из 33 ингредиентов.
                    :thanks: Надеюсь, тема будет полезна не только мне :)

                    В картинке у Вас включена была зеленая серия.
                    А в конечном варианте осталась только красная.
                    Зеленая использовалась для теста?
                    Сообщение отредактировано: RusSun -
                    плохо, когда уверенность
                    в своей правоте ограничивает видимость
                    собственным носом
                      Да там видео слиплось вначале идёт кусок с тестом там цвет зелёный. А потом убрал лишнее осталось красная.
                      Правильный обед должен состоять из 5 блюд приготовленных из 33 ингредиентов.
                      1 пользователей читают эту тему (1 гостей и 0 скрытых пользователей)
                      0 пользователей:


                      Рейтинг@Mail.ru
                      [ Script Execution time: 0,1210 ]   [ 19 queries used ]   [ Generated: 23.07.18, 16:55 GMT ]