Поиск:

Ответ в темуСоздание новой темы Создание опроса
> проблема с реализацией задачи о коммивояжере, конвертация из Turbo в SWI 
:(
    Опции темы
alt1111111
Дата 11.11.2010, 23:53 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 19
Регистрация: 11.11.2010

Репутация: нет
Всего: нет



Есть код решающий задачу о коммивояжере, взял я его с одного форума, но он написан на Turbo Prolog, а я более менее разбираюсь в SWI.
Уважаемые специалисты помогите правильно сконвертировать текст, что бы он заработал под SWI. До чего я сам дошел так это проблема с предварительной инициализацией структуры "оценка" в разделе database, в SWI я незнаю как провести первичную инициализацию, поскольку при выполнении выдает ошибку
ERROR: маршруты/4: Undefined procedure: оценка/2
она появляется на втором методе маршруты(_,_,Маршрут,Длина)

Возможно причина неисправности в другом, если есть какие либо мысли, пишите.
Привожу и сам код. Заранее благодарен!


************************************************** ************
Коммивояжёр. Поиск в глубину. 
************************************************** ************/
domains ss = string*
database - путь 
путь(string,integer,string)
оценка(ss,integer)
predicates
оптим_маршрут(ss,integer)
nondeterm маршруты(string,integer,ss,integer)
nondeterm вариант(string,integer,string,ss,integer)
nondeterm участок(string,integer,string)
уник(ss,ss,integer)
удалить(string,ss,ss)
принадлеж(string,ss)
goal
оптим_маршрут(Маршрут,Длина).
clauses
оптим_маршрут(Маршрут,Длина):-
* путь(Начало,_,_),!,
* findall(Город,путь(Город,_,_),Города),
* уник(Города,_,Количество),
* маршруты(Начало,Количество,Маршрут,Длина),!.

маршруты(Начало,Количество,_,_):-
* вариант(Начало,Количество,Начало,[Начало],0),fail.
маршруты(_,_,Маршрут,Длина):-
* оценка(Маршрут,Длина).

вариант(Начало,0,От,Маршрут,Длина):-
* участок(От,Участок,Начало),
* Длина1=Длина+Участок,
* not(оценка(_,_)),
* assert(оценка([Начало|Маршрут],Длина1)).
вариант(Начало,0,От,Маршрут,Длина):-
* участок(От,Участок,Начало),
* Длина1=Длина+Участок,
* оценка(_,Длина0),Длина1<Длина0,
* retract(оценка(_,Длина0)),
* assert(оценка([Начало|Маршрут],Длина1)).
вариант(Начало,К,От,Маршрут,Длина):-К>0,
* участок(От,Участок,До),
* not(принадлеж(До,Маршрут)),
* Длина1=Участок+Длина, К1=К-1,
* вариант(Начало,К1,До,[До|Маршрут],Длина1).

уник([Э|Х],[Э|Х2],Число):-удалить(Э,Х,Х1),!,
* уник(Х1,Х2,Число1),Число = Число1+1.
уник([],[],0).
удалить(Э,[Э|Х],Х1):-!,удалить(Э,Х,Х1).
удалить(Э,[А|Х],[А|Х1]):-!,удалить(Э,Х,Х1).
удалить(_,[],[]).****

участок(От,Длин,До):-путь(От,Длин,До).
участок(От,Длин,До):-путь(До,Длин,От).

принадлеж(Город,[Город|_]):-!.
принадлеж(Город,[_|Города]):-принадлеж(Город,Города).

путь("Курск",12,"Орёл").
путь("Курск",120,"Магадан").
путь("Курск",40,"Азов").
путь("Магадан",110,"Орёл").
путь("Магадан",52,"Колыма").
путь("Орёл",32,"Азов").
путь("Орёл",105,"Колыма").
путь("Азов",112,"Колыма").[/code]
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума Prolog
Void
  • Пожалуйста, создавайте темы с содержательными названиями.
  • Уважаемые учащиеся, здесь всегда рады помочь Вам, но не делать за Вас вашу работу. У вас гораздо больше шансов получить помощь, если Вы приложите усилия и поделитесь с нами проблемами и результатами. В противном случае добро пожаловать в раздел Центр Помощи.
  • Получив ответ на интересующий Вас вопрос, не забудьте пометить его как решённый.

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Void.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Prolog | Следующая тема »


 




[ Время генерации скрипта: 0.0541 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.