Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

Prolog программа-планировщик для манипулирования фотокамерой

44K
10 декабря 2008 года
Aksi0ma
1 / / 10.12.2008
Задание:

Написать на языке Prolog программу-планировщик для манипулирования фотокамерой. Речь идет о подготовке фотокамеры к работе, т. е. вставке новой пленки и замене аккумулятора в случае необходимости.

План вставки новой пленки состоит в следующем:
1) открыть футляр
2) вынуть фотокамеру
3) перемотать старую пленку
4) открыть отсек для пленки
5) вынуть старую пленку
6) вставить новую пленку
7) закрыть отсек для пленки
8) закрыть футляр, убрать фотокамеру
План замены аккумулятора аналогичен.

Указания к выполнению:

Какое-либо заданное состояние объекта может быть достигнуто путем выполнения тех или иных действий над объектом. Действие над объектом вызывает его переход в новое состояние. Задачей планировщика является выбор наиболее приемлемой последовательности действий для достижения конечного результата.

Каждое возможное действие определяют: предпосылки, список добавления – условия, которые становятся истинными после выполнения этого действия, список удаления – список связей, разрушаемых в результате данного действия.

Предпосылки определим отношением can(Action, Cond) , которое дает информацию о том, что действие Action может быть выполнено в ситуации, когда истинно условие Cond.

Результаты действий определим отношениями adds(Action, AddRels) и deletes(Action, DelRels), где AddRels – список добавления, DelRels – список удаления.

Например действие «открыть футляр» для фотокамеры можно представить следующим образом:

can(open_case,[camera_in_case]). /* open_case – открыть футляр;
camera_in_case – камера в футляре */
adds(open_case,[camera_outside_case]).
deletes(open_case,[camera_in_case]).
Аналогично определяется действие «закрыть футляр», при этом необходимо, чтобы выполнялись условия:

1) камера находится вне футляра;
2) отсек для пленки закрыт;
3) отсек для батарей закрыт.
Таким же образом определяются все остальные действия.

Состояние, в котором пленка израсходована, а аккумулятор разряжен, можно описать как:

state1([camera_in_case,slot_closed(film), slot_closed(battery), in(film),film_at_end, in(battery)]


Состояние, в котором камера готова для получения снимков:

[slot_closed(film), slot_closed(battery), in(film),film_at_start, film_unused, in(battery),ok(battery)]
slot_closed(film/ battery) – отсек для пленки/батарей закрыт;
in(film/ battery) - пленка/батарея вставлены;
ok(battery) – батарея заряжена;
film_at_start – пленка готова к работе;
film_unused – пленка не закончилась.
Для нахождения оптимального плана действий по подготовке фотокамеры необходимо составить планировщик, основанный, например, на принципе анализа целей и средств.



Чтобы найти в состоянии State решение для списка целей Goals, ведущее в состояние FinalState, необходимо применить процедуру:

если все цели Goals в состоянии State истинны, то FinalState=State

plan( State, Goals, [], State) :-
satisfied( State, Goals).


, иначе:

1) выбрать в списке Goals цель Goal, для которой не найдено решение

select( State, Goals, Goal1) :-
member( Goal1, Goals),
not( member( Goal1, State)).


2) найти действие Action, которое добавляет цельGoal к текущему состоянию

achieves( Action, Goal1) :-
adds( Action, Goals),
member( Goal1, Goals).
3) обеспечить возможность выполнения действия Action, решив задачу создания предпосылок Condition действию Action, что приводит к промежуточному состоянию MidState1

4) применить действие Action к состоянию MidState1 и получить состояние MidState2 (цель Goal является истинной)

apply( State, Action, NewState) :-
deletes( Action, DelList),
delete_all( State, DelList, State1), !,
adds( Action, AddList),
conc(AddList, State1, NewState).
5) найти решение для целей в списке Goals в состоянии MidState2, что приведет к состоянию FinalState.

plan( State, Goals, Plan, FinalState) :-
conc(Plan,_,_),
conc( PrePlan, [Action | PostPlan], Plan),
select( State, Goals, Goal1),
achieves( Action, Goal1),
can( Action, Condition).

PS никакого теоретического обучения по данной дисциплине не было,дали только установочный файл и Программно-методический комплекс. Я в растерянности,не могу понять что и куда,синктаксис языка так вообще не понимаю.
Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог