Как GenAI трансформирует поле цифровой дидактики: различия между версиями
Материал из Поле цифровой дидактики
Patarakin (обсуждение | вклад) |
Patarakin (обсуждение | вклад) |
||
Строка 244: | Строка 244: | ||
</syntaxhighlight> | </syntaxhighlight> | ||
---- | |||
; [[ChatGTP]]: | |||
: Для решения данной задачи на Prolog можно использовать [[алгоритм Дейкстры]]. Вот пример кода | |||
<syntaxhighlight lang="Prolog"> | |||
% Предикат для нахождения кратчайшего пути между двумя вершинами | |||
% Входные параметры: начальная вершина, конечная вершина, граф | |||
% Выходные параметры: кратчайший путь и его длина | |||
shortest_path(Start, End, Graph, Path, Length) :- | |||
% Инициализация списка расстояний до каждой вершины | |||
init_distances(Graph, Start, Distances), | |||
% Инициализация списка посещенных вершин | |||
init_visited(Graph, Visited), | |||
% Запуск алгоритма Дейкстры | |||
dijkstra(Graph, Start, End, Distances, Visited, [], Path, Length). | |||
% Предикат для инициализации списка расстояний до каждой вершины | |||
% Входные параметры: граф, начальная вершина | |||
% Выходные параметры: список расстояний до каждой вершины | |||
init_distances(Graph, Start, Distances) :- | |||
% Создание списка расстояний до каждой вершины | |||
findall(distance(Node, Inf), member(Node, Graph), Distances), | |||
% Установка расстояния до начальной вершины равным 0 | |||
replace_distance(Start, 0, Distances, Distances). | |||
% Предикат для инициализации списка посещенных вершин | |||
% Входные параметры: граф | |||
% Выходные параметры: список посещенных вершин | |||
init_visited(Graph, Visited) :- | |||
% Создание списка посещенных вершин | |||
findall(visited(Node, false), member(Node, Graph), Visited). | |||
% Предикат для замены расстояния до вершины в списке расстояний | |||
% Входные параметры: вершина, новое расстояние, список расстояний, новый список расстояний | |||
replace_distance(Node, NewDistance, [distance(Node, _)|T], [distance(Node, NewDistance)|T]). | |||
replace_distance(Node, NewDistance, [H|T], [H|T1]) :- | |||
replace_distance(Node, NewDistance, T, T1). | |||
% Предикат для поиска вершины с минимальным расстоянием из списка расстояний | |||
% Входные параметры: список расстояний, список посещенных вершин, вершина с минимальным расстоянием | |||
% Выходные параметры: список расстояний, список посещенных вершин, вершина с минимальным расстоянием | |||
find_min_distance([], _, _) :- fail. | |||
find_min_distance([distance(Node, Distance)|T], Visited, MinNode) :- | |||
% Если вершина еще не посещена и ее расстояние меньше текущего минимального | |||
(member(visited(Node, false), Visited), Distance < MinDistance -> | |||
% Обновляем минимальное расстояние и вершину | |||
MinDistance = Distance, MinNode = Node; | |||
true), | |||
% Рекурсивный вызов для оставшихся вершин | |||
find_min_distance(T, Visited, MinNode). | |||
% Предикат для обновления списка расстояний до соседних вершин | |||
% Входные параметры: текущая вершина, список расстояний, список посещенных вершин, граф | |||
% Выходные параметры: новый список расстояний | |||
update_distances(Node, Distances, Visited, Graph, NewDistances) :- | |||
% Получаем список соседних вершин | |||
findall(Neighbor, member(edge(Node, Neighbor, _), Graph), Neighbors), | |||
% Обновляем расстояния до соседних вершин | |||
update_distances(Neighbors, Node, Distances, Visited, Graph, [], NewDistances). | |||
% Предикат для обновления списка расстояний до соседних вершин (рекурсивный вызов) | |||
% Входные параметры: список соседних вершин, текущая вершина, список расстояний, список посещенных вершин, граф, | |||
% новый список расстояний | |||
% Выходные параметры: новый список расстояний | |||
update_distances([], _, Distances, _, _, NewDistances, NewDistances). | |||
update_distances([Neighbor|T], Node, Distances, Visited, Graph, AccDistances, NewDistances) :- | |||
% Получаем расстояние до соседней вершины | |||
member(distance(Neighbor, Distance), Distances), | |||
% Получаем расстояние до текущей вершины | |||
member(distance(Node, CurrentDistance), Distances), | |||
% Получаем вес ребра между текущей и соседней вершинами | |||
member(edge(Node, Neighbor, Weight), Graph), | |||
% Если новое расстояние меньше текущего | |||
(NewDistance is CurrentDistance + Weight, NewDistance < Distance -> | |||
% Обновляем расстояние до соседней вершины | |||
replace_distance(Neighbor, NewDistance, Distances, NewDistances1), | |||
% Добавляем соседнюю вершину в список посещенных | |||
replace_visited(Neighbor, true, Visited, NewVisited), | |||
% Добавляем соседнюю вершину в список расстояний для обновления расстояний до ее соседей | |||
append(AccDistances, [distance(Neighbor, NewDistance)], AccDistances1); | |||
% Иначе оставляем все без изменений | |||
NewDistances1 = Distances, NewVisited = Visited, AccDistances1 = AccDistances), | |||
% Рекурсивный вызов для оставшихся соседних вершин | |||
update_distances(T, Node, NewDistances1, NewVisited, Graph, AccDistances1, NewDistances). | |||
% Предикат для замены посещенности вершины в списке посещенных вершин | |||
% Входные параметры: вершина, новое значение посещенности, список посещенных вершин, новый список посещенных вершин | |||
replace_visited(Node, NewVisited, [visited(Node, _)|T], [visited(Node, NewVisited)|T]). | |||
replace_visited(Node, NewVisited, [H|T], [H|T1]) :- | |||
replace_visited(Node, NewVisited, T, T1). | |||
% Предикат для запуска алгоритма Дейкстры | |||
% Входные параметры: граф, начальная вершина, конечная вершина, список расстояний, список посещенных вершин, | |||
% текущий путь, кратчайший путь, длина кратчайшего пути | |||
% Выходные параметры: кратчайший путь и его длина | |||
dijkstra(_, End, End, _, _, Path, Path, 0). | |||
dijkstra(Graph, Start, End, Distances, Visited, Path, ShortestPath, ShortestLength) :- | |||
% Находим вершину с минимальным расстоянием | |||
find_min_distance(Distances, Visited, Node), | |||
% Если все вершины посещены, то путь не найден | |||
(Node = End -> | |||
% Возвращаем кратчайший путь и его длину | |||
reverse(Path, ShortestPath), member(distance(End, ShortestLength), Distances); | |||
% Иначе обновляем список расстояний до соседних вершин и запускаем алгоритм Дейкстры рекурсивно | |||
update_distances(Node, Distances, Visited, Graph, NewDistances), | |||
replace_visited(Node, true, Visited, NewVisited), | |||
dijkstra(Graph, Start, End, NewDistances, NewVisited, [Node|Path], ShortestPath, ShortestLength)). | |||
</syntaxhighlight> | |||
---- | ---- | ||
[[Category:Demo]] | [[Category:Demo]] |
Версия 16:52, 19 апреля 2023
- Доклад в рамках секции «Актуальные вопросы развития методики обучения информатике, STEM-образования и робототехники»
- 19.04.2023 17.00
- Патаракин Е.Д., д.пед.наук, доцент, профессор ИЦО МГПУ
Вычислительная дидактика
Описание | Область дидактики, рассматривающая новые дидактические отношения, когда обучающая машина учит другую обучаемую машину, когда обучающая машина учит человека или когда обучающий человек учит обучаемую программу или обучаемого агента. |
---|---|
Область знаний | Информатика, Педагогика |
Авторы | Papert |
Поясняющее видео | |
Близкие понятия | Дидактика, Вычислительная наука |
Среды и средства для освоения понятия | Semantic MediaWiki, Snap!, Scratch |
В процесс обучения, взаимодействия и построения знаний в современном мире вовлекаются не только люди, но и вычислительные машины. К привычным дидактическим отношениям, когда обучающий человек учит обучаемого человека, добавляются новые дидактические отношения, когда обучающая машина учит другую обучаемую машину, когда обучающая машина учит человека или когда обучающий человек учит обучаемую программу или обучаемого агента.
Человек | Компьютерный агент | |
---|---|---|
Человек | Традиционный дизайн, когда обучающий человек учит обучаемого человека, дополненный возможностями вычислительной техники | Конструкционизм, когда человек учится в процессе обучения программных агентов правилам поведения в цифровой среде. |
Компьютерный агент | Искусственные обучающие системы, когда компьютерная программа выступает в роли учителя для обучаемого человека. | Метапрограммирование и машинное обучение, когда одна компьютерная программа обучает другую программу. |
Литература
- Патаракин, Е.Д., 2023. Трансформация Вычислительной Дидактики Под Воздействием Генеративного Искусственного Интеллекта. БОЛЬШАЯ КОНФЕРЕНЦИЯ МГПУ сборник тезисов : в 3 т.. Том 1. Московский городской педагогический университет. Москва, 2023 Издательство: Издательство ПАРАДИГМА (Москва) 1, 14–17.
- Патаракин, Е.Д., 2022. Игровое поле вычислительной дидактики, in: Современная “цифровая” дидактика. Общество с ограниченной ответственностью “ГринПринт,” Москва, pp. 35–70.
- Patarakin, E., Burov, V., Yarmakhov, B., 2019. Computational Pedagogy: Thinking, Participation, Reflection, in: Väljataga, T., Laanpere, M. (Eds.), Digital Turn in Schools—Research, Policy, Practice, Lecture Notes in Educational Technology. Springer, Singapore, pp. 123–137. https://doi.org/10.1007/978-981-13-7361-9_9
Генеративный искусственный интеллект
Описание | Генеративный искусственный интеллект — это метод машинного обучения, при котором нейросеть изучает массив данных и на основании этих данных создаёт собственный контент. |
---|---|
Область знаний | Информатика, Физика, Химия, Образование, Искусственный интеллект |
Авторы | Weizenbaum, Goodfellow |
Поясняющее видео | https://www.youtube.com/watch?v=D5PqeC00PJU&t=1940s |
Близкие понятия | Искусственный интеллект |
Среды и средства для освоения понятия | ChatGPT, Snap! |
- GenAI Snap!GPT - Make a Text & Music Generator
Инструменты с использованием GenAI
Description | Website | |
---|---|---|
ABM Constructor | Конструктор использования многоагентого моделирования - позволяет конструировать структуру учебных курсов из готовых блоков и включать в состав материалов многоагентные модели для экспериментов и дальнейшей модификации. | http://digida.mgpu.ru/index.php?title=ABM Constructor |
Artbreeder | Средство генерации изображений | https://www.artbreeder.com/ |
Audionotes | Средства перевода из голоса в текст и улучшения качества текста. | https://audionotes.ai/en/ |
ChatGPT | ChatGPT — это прототип чат-бота с искусственным интеллектом, разработанный OpenAI и специализирующийся на диалогах. ChatGPT — большая языковая модель, отлаженная как с помощью методов обучения с учителем, так и с подкреплением. The acronym stands for Generative Pre-trained Transformer. | https://chat.openai.com/chat |
Connectedpapers | Connected Papers - это визуальный инструмент, помогающий исследователям и находить и изучать документы, относящиеся к их сфере деятельности. Пользователь может ввести название статьи или URL-адрес и получить график, показывающий ее контекст и релевантность. Это может помочь открыть новые направления исследований, сравнить разные подходы и следить за актуальными темами. | https://www.connectedpapers.com/ |
Craiyon | Средство для генерации изображений по заданному тексту.
| https://www.craiyon.com/ |
DreamAI | Создание изображений по описанию Трансформация готовых изображений под нужные параметры. | https://dream.ai/create |
Face generator | Создание лиц несуществующих людей.
| https://this-person-does-not-exist.com/en |
GigaChat | https://developers.sber.ru/portal/products/gigachat?attempt=1 | |
Google Colab | Google Colab — сервис, созданный Google, который предоставляет возможность работать с кодом на языке Python через Jupyter Notebook, не устанавливая на свой компьютер дополнительных программ. | https://colab.research.google.com/ |
Google Collab | Google Colaboratory — среда, чтобы писать код аналогично jupyter notebook. | https://colab.research.google.com/ |
Humata | Поддержка в написании текстов статей 60 страниц. Помощник берет готовый pdf документ и позволяет с ним работать, улучшать, дополнять, находить заимствования | https://www.humata.ai/ |
Hypotenuse AI | Превращает несколько ключевых слов в оригинальные, проницательные статьи, описания продуктов и копию социальных сетей с помощью копирайтинга ИИ - всего за несколько минут. | https://hypotenuse.ai/ |
Jamovi | https://www.jamovi.org/ | |
Jupyter | Jupyter — интерактивный блокнот, ориентированным на работу со множеством сред выполнения Python, но и R, Julia, Scala и ряда других. | https://jupyter.org/about |
Kandinsky 2.1 | Генеративная модель, создающая изображения по описанию.
| https://rudalle.ru/ |
LangChain | LangChain – это инструмент, основанный на нейросетевых моделях, который способен анализировать естественный язык и автоматически формировать структурированные SQL-запросы. – это мощная платформа, помогающая разработчикам создавать комплексные приложения. используя языковые модели. Он предлагает набор инструментов, компонентов и интерфейсов, которые упрощают процесс создания приложений на основе больших языковых моделей (LLM) и моделей чата. LangChain позволяет легко управлять взаимодействием с языковыми моделями, объединять несколько компонентов и интегрировать дополнительные ресурсы, такие как API и базы данных. | https://js.langchain.com/docs/ |
Logseq | Logseq - это локальный структурный редактор (аутлайнер) с открытым исходным кодом, который работает с использованием локальных текстовых файлов Markdown и Org-mode. Подходит для базы знаний, организации мыслей, ведения списка дел. Распространёнными назначениями в использовании таких программ могут быть организация идей, задач, многоуровневые чек-листы и управление проектами. | https://logseq.com/ |
Mc tutor bot | Телеграм-бот МГПУ, использующий возможности генеративного ИИ. | https://t.me/mcu tutor bot |
Merlin ChatGPT App | Merlin — это приложение ChatGPT для Chrome, позволяющее получить бесплатный доступ к чату GPT 4, обобщателю блогов и YouTube, автору ИИ для Gmail, Twitter и LinkedIn.
| https://chrome.google.com/webstore/detail/chatgpt-app-for-chrome-me/camppjleccjaphfdbohjdohecfnoikec |
Midjourney | Midjourney — программное обеспечение, создающее изображения по текстовым описаниям | https://discord.com/invite/midjourney |
Notion | Notion — приложение для ведения, планирования рабочих и личных дел. Оно одно может заменить сразу несколько популярных инструментов, в том числе Evernote, Trello и Google Docs. | https://www.notion.so/ |
OpenAI Codex | OpenAI Codex — это модель искусственного интеллекта, разработанная OpenAI. Он анализирует естественный язык и генерирует код в ответ. Codex разработан на основе GPT-3, известной модели естественного языка от OpenAI. Инструмент обучен на миллиардах строк кода, а также письменного текста — именно это позволяет ему переводить человеческий язык в компьютерный. | https://platform.openai.com/docs/guides/code |
Ora | Инструмент для создания собственных ботов на основе chatGPT
| https://ora.ai/ |
PaperBrain | Собирает статьи по тематике и помогает их читать - можно задавать вопросы по статье. | https://www.paperbrain.study/ |
Papercup | Перевод исходного видео на любой (30*) язык + профессиональная ИИ озвучка различными голосами. | https://www.papercup.com/ |
PerplexityAI | Perplexity — чат-бот с искусственным интеллектом для поиска информации и генерации текста. Perplexity использует информацию из современного интернета, а не образца 2021 года. Страница с ответом состоит из трёх блоков: сам ответ, источники информации, «вопросы по теме» и поле для дополнительных запросов. | https://www.perplexity.ai/ |
Poe | Приложение с искусственным интеллектом Poe позволяет создавать собственных чат-ботов с помощью подсказок. Пользователь может переключаться между Sage, ChatGPT, GPT‑4, Claude Instant и Claude+. Платформа доступна через браузер. | https://poe.com/ |
Roam research | Хранение и организация заметок в виде огромного списка с перекрёстными ссылками. интеграция с ChatGPT позволяет делегировать задачи внутри - переформулируй текст, запиши краткое содержание статьи по ссылке | https://roamresearch.com/ |
Rytr | Написать статью в блог, рекламное сообщение, электронное письмо и много всего другого. Бесплатный план позволяет писать тексты длинной до 5000 в символов в месяц. | https://rytr.me/ |
Spin Rewriter 13 | Spin Rewriter - это одно из самых продвинутых средств рерайтинга. Это также один из лучших инструментов для создания статей с алгоритмом обработки естественного языка, который позволяет создавать высококачественные тексты, удобочитаемые и не содержащие плагиата. | https://www.spinrewriter.com/free/june-sale |
TutorAI | Пользователь задаёт тему и система показывает учебные материалы по этой теме, разбитые на учебные модули. | https://www.tutorai.me/ |
WolframAlpha | Объединение выразительных возможностей языка Wolfram + ChatGPT. | |
YandexGPT | Нейросеть Яндекса, доступна через голосовой помощник Алису и в окне браузера | https://ya.ru/ |
Элиза (чат-бот) | Eliza — первый чат-бот, разработанный в Массачусетском технологическом институте. Элиза (англ. ELIZA) — виртуальный собеседник, компьютерная программа Джозефа Вейценбаума, написанная им в 1966 году, которая пародирует диалог с психотерапевтом, реализуя технику активного слушания. Программа была названа в честь Элизы Дулитл, героини из пьесы «Пигмалион» Бернарда Шоу, которую обучали языку «язык Шекспира, Мильтона и Библии». |
Воздействие на поле вычислительной дидактики
- Какие статьи вики созданы с использованием GenAI?
Классы объектов | Воздействие GenAI |
---|---|
Понятия | Определение и пояснение понятий текстовыми GenAI |
Писатели |
|
Языки программирования | Появление обучающих языков, созданных GenAI - имитируемых GenAI. Например, имитация Boxer. Скрещивание с Wolfram |
Схемы и диаграммы | Генерация диаграмм, математических, химических, фармакологических формул и схем |
Датасеты | Выращивание и предобработка данных |
Цифровые средства |
Обучающие средства и средства совместной деятельности, дополненные и усиленные GenAI |
Сетевые сообщества |
Изменение UGC сообществ на сообщества, где создание пользовательского контента будет дополнено или замещено контентом GenAI |
Видео игры |
Сюжеты, элементы игровых и обучающих миров, обучающие видео игры полностью созданные GenAI |
Роботы и робототехника |
Алгоритмы для управление роботами будут создаваться GenAI |
Паттерны поведения агентов в цифровой среде | Паттерны поведения, имитируемы в играх сохранятся |
Компетенции | Появление перечня компетенций, необходимых для использования GenAI |
Руководства - рецепты | Руководства по использованию GenAI для генерации контента |
Стандарты | Появление образовательных стандартов, регламентирующих отношения учеников и GenAI |
Кейсы использования GenAI в STEM образовании
Робототехника
- Приведи 50 примеров задач по робототехнике для щкольников
- Создание робота-манипулятора, который может поднимать и перемещать предметы.
- Разработка робота-пылесоса, который может автоматически убирать помещение.
- Создание робота-маяка, который может помочь в поиске людей в случае чрезвычайной ситуации.
- Разработка робота-помощника для людей с ограниченными возможностями.
- Предложи схему алгоритма для робота-геолога. Представь эту схему на языке graphviz
- digraph G {
rankdir=TB; size="12,12"; node [shape=rectangle]; Start [label="Начало"]; End [label="Конец"]; node [shape=diamond]; MineralCheck [label="Проверка наличия минералов"]; node [shape=rectangle]; MoveForward [label="Движение вперед"]; CollectSample [label="Сбор образцов"]; node [shape=diamond]; BatteryCheck [label="Проверка заряда батареи"]; node [shape=rectangle]; RechargeBattery [label="Зарядка батареи"]; node [shape=diamond]; ObstacleCheck [label="Проверка наличия препятствий"]; node [shape=rectangle]; MoveAroundObstacle [label="Обход препятствия"]; node [shape=diamond]; EndOfAreaCheck [label="Проверка конца исследуемой области"]; node [shape=rectangle]; ReturnToStart [label="Возвращение на стартовую позицию"]; Start -> MineralCheck; MineralCheck -> MoveForward [label="да"]; MineralCheck -> End [label="нет"]; MoveForward -> CollectSample; CollectSample -> BatteryCheck; BatteryCheck -> RechargeBattery [label="заряд 20%"]; BatteryCheck -> ObstacleCheck [label="заряд >= 20%"]; ObstacleCheck -> MoveAroundObstacle [label="есть препятствие"]; ObstacleCheck -> EndOfAreaCheck [label="нет препятствия"]; MoveAroundObstacle -> EndOfAreaCheck; EndOfAreaCheck -> ReturnToStart [label="да"]; EndOfAreaCheck -> MoveForward [label="нет"];
}
- Сделай такую же схему на языке Mermaid
Предложи схему алгоритма для робота-геолога. Представь эту схему на языке mermaid
```mermaid graph TD A(Начало) --> B(Движение к точке) B --> C(Определение типа грунта) C --> D(Сбор образца грунта) D --> E(Анализ образца) E --> F(Принятие решения о продолжении работы) F --> G{Робот продолжает работу?} G -- Да --> B G -- Нет --> H(Завершение работы) ```
- Представьте алгоритм робота-геолога на языке Oberon
Алгоритм робота-геолога на языке Oberon может выглядеть следующим образом:
- Импортировать необходимые библиотеки для работы с датчиками и двигателями робота.
MODULE RobotGeologistIMPORT Math, Sensors, Motors;
CONST
MAX_DEPTH = 100; (* максимальная глубина, на которую может опуститься робот *)
MAX_ANGLE = 45; (* максимальный угол, на который может повернуться робот *)
VAR
depth: INTEGER; (* текущая глубина *)
angle: INTEGER; (* текущий угол *)
PROCEDURE Main;
VAR
i: INTEGER;
BEGIN
(* инициализация датчиков и моторов *)
Sensors.Init;
Motors.Init;
(* начальное положение робота *)
depth := 0;
angle := 0;
(* цикл работы робота *)
FOR i := 1 TO 10 DO
(* опускаемся на случайную глубину *)
depth := Math.Random(MAX_DEPTH);
Motors.MoveDown(depth);
(* поворачиваемся на случайный угол *)
angle := Math.Random(MAX_ANGLE);
IF Math.Random(2) = 0 THEN
angle := -angle; (* случайно выбираем направление поворота *)
END;
Motors.Turn(angle);
(* снимаем данные с датчиков *)
Sensors.Read;
(* обработка данных *)
IF Sensors.IsObstacle THEN
(* если обнаружено препятствие, то поворачиваемся на 180 градусов *)
Motors.Turn(180);
ELSIF Sensors.IsMineral THEN
(* если обнаружена полезная руда, то поднимаемся на поверхность *)
Motors.MoveUp(depth);
EXIT; (* завершаем работу робота *)
END;
(* поднимаемся на ту же глубину *)
Motors.MoveUp(depth);
END;
END Main;
BEGIN
Main;
END RobotGeologist.
Программирование
- Приведи примеры команд к породам черепах
- In NetLogo, you can create breeds to group similar agents together. Here are some commands for working with breeds:
- breed [name] - Creates a new breed with the given name.
- create-[name] [count] - Creates a specified number of agents of the given breed.
- ask [breed] - Runs a command on all agents of the specified breed.
- ask [breed] [command] - Runs a command on all agents of the specified breed.
- ask [breed] with [condition] - Runs a command on all agents of the specified breed that meet the specified condition.
- show [breed] - Displays a list of all agents of the specified breed in the Command Center.
- count [breed] - Returns the number of agents of the specified breed currently in the model.
- create-turtles [count] [set breed [name]] - Creates a specified number of turtles and assigns them to the specified breed.
- Приведи пример выбора решений на Scratch
when green flag clicked forever if <touching color [#ff0000]> then say [I touched red!] else say [I didn't touch red.] end
when green flag clicked forever if <touching color [#ff0000]> then say [I touched red!] else say [I didn't touch red.] end
- Код программы на Prolog, которая находит кратчайший путь в графе между двумя заданными вершинами.
- Poe - Вот пример кода Prolog, который может использоваться для поиска кратчайшего пути между двумя заданными вершинами графа:
shortest_path(Start, End, Path) :-
travel(Start, End, [Start], Q),
reverse(Q, Path).
travel(Start, End, Path, [End|Path]) :-
connected(Start, End).
travel(Start, End, Visited, Path) :-
connected(Start, X),
X \== End,
\+member(X, Visited),
travel(X, End, [X|Visited], Path).
- ChatGTP
- Для решения данной задачи на Prolog можно использовать алгоритм Дейкстры. Вот пример кода
% Предикат для нахождения кратчайшего пути между двумя вершинами
% Входные параметры: начальная вершина, конечная вершина, граф
% Выходные параметры: кратчайший путь и его длина
shortest_path(Start, End, Graph, Path, Length) :-
% Инициализация списка расстояний до каждой вершины
init_distances(Graph, Start, Distances),
% Инициализация списка посещенных вершин
init_visited(Graph, Visited),
% Запуск алгоритма Дейкстры
dijkstra(Graph, Start, End, Distances, Visited, [], Path, Length).
% Предикат для инициализации списка расстояний до каждой вершины
% Входные параметры: граф, начальная вершина
% Выходные параметры: список расстояний до каждой вершины
init_distances(Graph, Start, Distances) :-
% Создание списка расстояний до каждой вершины
findall(distance(Node, Inf), member(Node, Graph), Distances),
% Установка расстояния до начальной вершины равным 0
replace_distance(Start, 0, Distances, Distances).
% Предикат для инициализации списка посещенных вершин
% Входные параметры: граф
% Выходные параметры: список посещенных вершин
init_visited(Graph, Visited) :-
% Создание списка посещенных вершин
findall(visited(Node, false), member(Node, Graph), Visited).
% Предикат для замены расстояния до вершины в списке расстояний
% Входные параметры: вершина, новое расстояние, список расстояний, новый список расстояний
replace_distance(Node, NewDistance, [distance(Node, _)|T], [distance(Node, NewDistance)|T]).
replace_distance(Node, NewDistance, [H|T], [H|T1]) :-
replace_distance(Node, NewDistance, T, T1).
% Предикат для поиска вершины с минимальным расстоянием из списка расстояний
% Входные параметры: список расстояний, список посещенных вершин, вершина с минимальным расстоянием
% Выходные параметры: список расстояний, список посещенных вершин, вершина с минимальным расстоянием
find_min_distance([], _, _) :- fail.
find_min_distance([distance(Node, Distance)|T], Visited, MinNode) :-
% Если вершина еще не посещена и ее расстояние меньше текущего минимального
(member(visited(Node, false), Visited), Distance < MinDistance ->
% Обновляем минимальное расстояние и вершину
MinDistance = Distance, MinNode = Node;
true),
% Рекурсивный вызов для оставшихся вершин
find_min_distance(T, Visited, MinNode).
% Предикат для обновления списка расстояний до соседних вершин
% Входные параметры: текущая вершина, список расстояний, список посещенных вершин, граф
% Выходные параметры: новый список расстояний
update_distances(Node, Distances, Visited, Graph, NewDistances) :-
% Получаем список соседних вершин
findall(Neighbor, member(edge(Node, Neighbor, _), Graph), Neighbors),
% Обновляем расстояния до соседних вершин
update_distances(Neighbors, Node, Distances, Visited, Graph, [], NewDistances).
% Предикат для обновления списка расстояний до соседних вершин (рекурсивный вызов)
% Входные параметры: список соседних вершин, текущая вершина, список расстояний, список посещенных вершин, граф,
% новый список расстояний
% Выходные параметры: новый список расстояний
update_distances([], _, Distances, _, _, NewDistances, NewDistances).
update_distances([Neighbor|T], Node, Distances, Visited, Graph, AccDistances, NewDistances) :-
% Получаем расстояние до соседней вершины
member(distance(Neighbor, Distance), Distances),
% Получаем расстояние до текущей вершины
member(distance(Node, CurrentDistance), Distances),
% Получаем вес ребра между текущей и соседней вершинами
member(edge(Node, Neighbor, Weight), Graph),
% Если новое расстояние меньше текущего
(NewDistance is CurrentDistance + Weight, NewDistance < Distance ->
% Обновляем расстояние до соседней вершины
replace_distance(Neighbor, NewDistance, Distances, NewDistances1),
% Добавляем соседнюю вершину в список посещенных
replace_visited(Neighbor, true, Visited, NewVisited),
% Добавляем соседнюю вершину в список расстояний для обновления расстояний до ее соседей
append(AccDistances, [distance(Neighbor, NewDistance)], AccDistances1);
% Иначе оставляем все без изменений
NewDistances1 = Distances, NewVisited = Visited, AccDistances1 = AccDistances),
% Рекурсивный вызов для оставшихся соседних вершин
update_distances(T, Node, NewDistances1, NewVisited, Graph, AccDistances1, NewDistances).
% Предикат для замены посещенности вершины в списке посещенных вершин
% Входные параметры: вершина, новое значение посещенности, список посещенных вершин, новый список посещенных вершин
replace_visited(Node, NewVisited, [visited(Node, _)|T], [visited(Node, NewVisited)|T]).
replace_visited(Node, NewVisited, [H|T], [H|T1]) :-
replace_visited(Node, NewVisited, T, T1).
% Предикат для запуска алгоритма Дейкстры
% Входные параметры: граф, начальная вершина, конечная вершина, список расстояний, список посещенных вершин,
% текущий путь, кратчайший путь, длина кратчайшего пути
% Выходные параметры: кратчайший путь и его длина
dijkstra(_, End, End, _, _, Path, Path, 0).
dijkstra(Graph, Start, End, Distances, Visited, Path, ShortestPath, ShortestLength) :-
% Находим вершину с минимальным расстоянием
find_min_distance(Distances, Visited, Node),
% Если все вершины посещены, то путь не найден
(Node = End ->
% Возвращаем кратчайший путь и его длину
reverse(Path, ShortestPath), member(distance(End, ShortestLength), Distances);
% Иначе обновляем список расстояний до соседних вершин и запускаем алгоритм Дейкстры рекурсивно
update_distances(Node, Distances, Visited, Graph, NewDistances),
replace_visited(Node, true, Visited, NewVisited),
dijkstra(Graph, Start, End, NewDistances, NewVisited, [Node|Path], ShortestPath, ShortestLength)).