Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 21.12.2008, 16:26   #1
Kvax
 
Регистрация: 21.12.2008
Сообщений: 5
По умолчанию "Поиск оптимального пути движения снегоочистительных машин с учетом приоритета дорог" Пролог

Доброго времени суток...
Помогите решить задачку на Visual Prolog, если есть возможность...

D общем ситуация следующая есть прорамма которая ищет максимальный путь и считает длину пути, это я сумел сделать но мне сказали что нужно программу
"Поиск оптимального пути движения снегоочистительных машин с учетом приоритета дорог"
Другими словами есть набор дорог, бусть это будет граф, у каждой дороги есть приоритет, вот надо сначала почистить дороги с максимальным приоритетом, потом меньшим, потом еще меньшим и самый маелнький. Как решить эту задачу не знаю, вот что смог сделать...

Таким образом я пытался пройти по всем вершинам графа, как реализовать остальное не знаю ((. Буду очень признателен любой помощи...


DOMAINS
список=symbol* %Символьный список
список1=integer*
PREDICATES
nondeterm принадлежит (symbol, symbol,integer,список,список1)
nondeterm смежные (symbol, symbol,integer,список, список1)
nondeterm граф (список)
nondeterm время (список1)
nondeterm путь (symbol, symbol, список, integer,integer)
nondeterm путь1 (symbol, список,integer,список, список1,список, integer,integer)
%nondeterm оптимальный_путь (symbol,список,integer,integer)
%nondeterm список(список, integer)
%nondeterm путь_короче (symbol,symbol,integer,integer)

CLAUSES

%Отыскание ветви в направленном графе
%принадлежит (Y,Z,[Y,Z|_]).
%принадлежит (Y,Z,[_,_|Хвост]):-принадлежит (Y,Z,Хвост).

граф ([a,b, b,d, b,c, c,e, e,d, b,e, e,a]). %факт1

время ([3, 5, 6, 4, 3, 5, 6]). %факт2

путь (A,Z,Путь,Номер,Итог_время):- граф(Граф),
время(Время),
путь1 (A,[Z],0,Граф,Время,Путь,Номер,Итог_время ). %правило1

путь1 (A,[A|Путь1],Итог_время,_,_,Путь1,7,Итог_время) . %факт3
путь1 (A,[Z|Путь1],Время_пути1,Граф,Время,Путь,Номер, Итог_время):- Номер<7,
смежные (Y,Z,Время_ветви,Граф,Время),
not (принадлежит(Z, Y,_, Путь1,_)),
not (принадлежит(Y, Z,_, Путь1,_)),
Номер1=Номер+1,
Время_пути=Время_пути1+Время_ветви,
путь1 (A,[Y,Y,Z|Путь1],Время_пути,Граф,Время,Путь,Номер1, Итог_время). %правило2

принадлежит (Y,Z,Время_ветви,[Y,Z|_], [Время_ветви|_]). %факт4
принадлежит (Y,Z,Время_ветви,[_,_|Хвост1],[_|Хвост2]):- принадлежит (Y,Z,Время_ветви,Хвост1,Хвост2). %правило3

смежные (Y,Z,Время_ветви,A,Время):- принадлежит (Y,Z,Время_ветви,A,Время);
принадлежит (Z,Y,Время_ветви,A,Время). %правило4

%оптимальный_путь (A,Путь,Номер,Итоговое_время):- путь (A,A,Путь,Номер,Итоговое_время).
%оптимальный_путь (A,Путь,Номер,Итоговое_время):- путь (A,A,Путь,Номер,Итоговое_время),
%Номер=0.
%not(путь_короче(A,A,Номер,Итоговое _время)),
%список(_, Путь, Счётчик).

%список(Ф,[Ф|_], Счётчик). % факт1
%список([_|Хвост], Счётчик):- список(Хвост, Счётчик), Счётчик=Счётчик+1. % правило1

%путь_короче (A,Z,Номер,Итоговое_время):-путь (A,Z,_,Номер,Итоговое_время1),Итого вое_время1<Итоговое_время.

GOAL

%Отыскание ветви в направленном графе
%принадлежит (Y,Z, [a,b, b,d, b,c, c,d, c,e, e,d, b,e, e,a]).
%принадлежит (Y,e, [a,b, b,d, b,c, c,d, c,e, e,d, b,e, e,a]).
%смежные (a,b, [a,b, b,d, b,c, c,d, c,e, e,d, b,e, e,a]).

путь (a,a,Путь,0,_).

%оптимальный_путь (a,Путь,0,_).
Kvax вне форума Ответить с цитированием
Старый 21.12.2008, 16:32   #2
Virtson
Владимир М.
Участник клуба
 
Аватар для Virtson
 
Регистрация: 30.10.2006
Сообщений: 1,289
По умолчанию

условие задачи неполное.
что есть почиcтить ?
повторное прохождение по ребру допустимо ?
Берегите друг друга!
Virtson вне форума Ответить с цитированием
Старый 21.12.2008, 21:15   #3
Kvax
 
Регистрация: 21.12.2008
Сообщений: 5
По умолчанию

Почистить это значит занести ребро в список чищенных дорог, если после чистки дороги зашли в тупик то реализовать возможность вернуться по этой дороге обратно чтобы чистить другую дорогу, но сначала я хотел сделать чтобы пройти по всем вершинам графа и занести их в список почищенных дорог в порядке их приоритета.
По дорогаям можно просто проезжать сколько угодно раз чтобы попасть к нечищенной дороге...
Kvax вне форума Ответить с цитированием
Старый 21.12.2008, 21:26   #4
Kvax
 
Регистрация: 21.12.2008
Сообщений: 5
По умолчанию

Сначала я написал вообще другую программу, но думаю для реализации новой поставленной задачи проще написать новую, чем переделать старую (. Забыл сказать количество приоритетов 4 шт.
Kvax вне форума Ответить с цитированием
Старый 21.12.2008, 22:18   #5
Kvax
 
Регистрация: 21.12.2008
Сообщений: 5
По умолчанию Описание условия задачи на примере

Есть список дорог Пример.jpg Нужно создать список очищенных дорог в который будут входить дороги сначала с приоритетом 1, потом 2 и т.д....,
По завершению очистки вернуться в точку, начала движения.
По чищенным и нечищенным дорогам можно ездить сколько угодно раз, чтобы добраться до нечищенной дороги...
Изображения
Тип файла: jpg Пример.jpg (6.6 Кб, 141 просмотров)
Kvax вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Поиск пути в лабиринте - Пролог yulia Помощь студентам 15 21.08.2010 00:14
если пользователь наберет какой-то другой символ не "y" или "n" и нажмет enter, программа проигнорирует skobets Общие вопросы C/C++ 2 03.06.2008 06:51
Excel файл открывается не "до конца" (странички "не показываются" только серое поле) Dorvir Microsoft Office Excel 2 28.03.2008 10:03
"Транспортная задача", "Поиск решения" Perroman Microsoft Office Excel 3 12.12.2007 17:12
Создаю диаграмму "Bar". Подскажите как убрать растояние между "столбами" MAcK Компоненты Delphi 11 24.10.2007 10:49