#6. Поиск минимальных маршрутов в графе | Генетические алгоритмы на Python

Поділитися
Вставка
  • Опубліковано 22 лис 2024

КОМЕНТАРІ • 23

  • @gens845
    @gens845 3 роки тому +3

    Ваш канал очен интересен и доходчив, вы молодец, по больше таких видео!

  • @friend1cat
    @friend1cat 3 роки тому +3

    Спасибо, Сергей!

  • @dmitryutkin9864
    @dmitryutkin9864 Рік тому +1

    Очень круто!

  • @yaroslavpyrih5187
    @yaroslavpyrih5187 9 місяців тому +2

    Привет! Большое спасибо за курс. Есть вопросы на счет видео 6 и 7. Как модифицировать программу, чтобы найти кратчайшее расстояние между двумя любыми вершинами. Будет ли работать программа, если количество вершин увеличить до 50, например. Большое спасибо за ответ.

  • @archyt88
    @archyt88 3 роки тому +1

    Вот вариант как можно сохранить данные по модели:
    В конце файла добавляем
    cp = dict(population=population, halloffame=hof,
    logbook=logbook, rndstate=random.getstate())
    with open("checkpoint_name.pkl", "wb") as cp_file:
    pickle.dump(cp, cp_file)
    А в месте где стартует цикл, добавляем это:
    if checkpoint():
    cp = pd.read_pickle(r'checkpoint_name.pkl')
    population = cp["population"]
    hof = cp["halloffame"]
    logbook = cp["logbook"]
    random.setstate(cp["rndstate"])
    population, logbook = algorithms.eaSimple(population, toolbox,
    cxpb=P_CROSSOVER/LENGTH_D,
    mutpb=P_MUTATION/LENGTH_D,
    ngen=MAX_GENERATIONS,
    halloffame=hof,
    stats=stats,
    verbose=True)
    else:
    population, logbook = algorithms.eaSimple(population, toolbox,
    cxpb=P_CROSSOVER/LENGTH_D,
    mutpb=P_MUTATION/LENGTH_D,
    ngen=MAX_GENERATIONS,
    halloffame=hof,
    stats=stats,
    verbose=True)
    В начале же нужно добавить checkpoint = False (при первом старте), при последующих = True. Тогда поколения будут начинать обучения с первого прогона. И так можно до бесконечности усложнять алгоритм

  • @Apeko67
    @Apeko67 Рік тому +1

    На больших графах, например от 10 вершин, работает очень медленно, даже с изменениями параметров. Другие алгоритмы и на ста вершинах за секунду минимальные пути находят. Подскажите, это проблема именно генетического алгоритма, или реализации? На питоне ясно немного медленнее работает, чем на си например.

    • @selfedu_rus
      @selfedu_rus  Рік тому

      Это, конечно, учебный пример. Данную задачу нет смысла решать с помощью ГА, есть гораздо более эффективные другие подходы. Вообще ГА целесообразно использовать в трудноформализуемых или вообще не формализуемых математически задачах. Например, научить ходить виртуальное существо в виртуальном мире. И тому подобное.

  • @waydao4958
    @waydao4958 3 роки тому +2

    👍

  • @MartinIden-hn7ld
    @MartinIden-hn7ld 6 місяців тому +1

    Понимаю, что это всего лишь учебный пример для демонстрации, но возникает следующий вопрос.
    Насколько применим генетический алгоритм для поиска оптимального пути в графе? (та же задача коммивояжера)
    Ведь иногда гораздо "дешевле" зайти из первой вершины во вторую, из второй вернуться в первую и уже из первой в третью
    Размерности каждой хромосомы будут разными попросту потому, что обойти весь граф можно за большее кол-во вершин и при этом за меньшую стоимость и наоборот.
    Возможно я что то упустил, буду рад если поправите

    • @matthewgiovannini2360
      @matthewgiovannini2360 15 днів тому

      Что-то мне подсказывает, что можно длину хромосомы сделать равной количеству вершин (не думаю, что большая длина целесообразна). А дальше конец хромосомы заполнять нулями.

  • @MartinIden-hn7ld
    @MartinIden-hn7ld 6 місяців тому +2

    А почему списки в хромосомах представлены именно таким образом?
    Из нуля в ноль - ноль
    Из нуля в 1 - 1
    Из нуля в два - также одно ребро
    Из нуля в три - также одно ребро, но магическим образом ставим в списке ноль

  • @archyt88
    @archyt88 3 роки тому +2

    Замечательно! А если этот алгоритм скормить на другой граф. Что, будет доучиваться? Возможно ли его доучить до того, чтобы он решал любые графы? Судя по теории из ранних видео -- да. Интересно, как "геном" такой будет выглядеть технически.

    • @selfedu_rus
      @selfedu_rus  3 роки тому

      Доучивать можно, на вход подаете недооптимизированный граф и оптимизируете дальше )

  • @АлександрБойцов-с3ю

    Сергей, объясните пожалуйста 2:39 зачем мы заходим в 0 сначала в 4список(из 0 в 3),если в других так не делаем,и как мы вы проставили остальные цифры, по какой логике ?

    • @New-vk6ks
      @New-vk6ks 2 роки тому

      Я не Сергей, но отвечу. Он их раскидал случайным образом. Ведь именно случайным образом эти данные будут генерироваться.

  • @gens845
    @gens845 3 роки тому

    Сергей, можете проконсультировать? Если есть цыфровая карта местности N строк на M столбцов. В каждой ячейке матрицы записана высота. Можно ли представить эту матрицу в виде графа, где вес ребер будут определять высоты, а вершины номера ячеек матрицы. Чтоб можно было вычислить кратчайший маршрут движения на минимальной высоте?Спасибо за ранее. Не знаю, как автоматизировать построеие матрицы смежности для данной задачи.

    • @selfedu_rus
      @selfedu_rus  3 роки тому

      Матрица связности, наверное будет достаточно. А задачу возможно лучше решить алгоритмом Дейкстры с некоторой модификацией с учетом высоты.

  • @Дизельэлектроника
    @Дизельэлектроника 2 роки тому +1

    Так и не понял по какому принципу пронумерованы маршруты и как таблица смежности все это отображает и как потом все это понимает компьютер?
    Почему маршруты 3 и 4 повторяются дважды, и как потом машина понимает что это разные маршруты?
    П.С. Как саму таблицу смежности ввели в компьютер мне понятно (как матрицу).

  • @denisbasov70
    @denisbasov70 3 роки тому +1

    Если задать начальную вершину startV=2, например, то show_graph выдаёт странный график.

    • @selfedu_rus
      @selfedu_rus  3 роки тому +1

      Да, там в graph_show также нужно этот параметр установить в 2, не обратил на это внимание. Как доп. задание могу посоветовать сделать это через параметр функции graph_show.

    • @denisbasov70
      @denisbasov70 3 роки тому +1

      @@selfedu_rus Спасибо за Урок и ДЗ. Жду новых.

  • @waydao4958
    @waydao4958 3 роки тому +4

    Неудобно воспринимать, 0 это 1, 1 это 2....

    • @selfedu_rus
      @selfedu_rus  3 роки тому +1

      не хотел из-за этого усложнять программу