Скачиваний:
12
Добавлен:
01.05.2014
Размер:
26.11 Кб
Скачать

Программа вычисления вероятности события методом MONTE-CARLO

prinadl(Z,[Z|_]).

prinadl(Z,[_|X]):-

prinadl(Z,X).

vvod_ver:-

nl,write('Введите список событий ... '),read(Sob),ver_sob(Sob),

nl,write('Введите случайные факты ... '),read(Fakt),ver_fakt(Fakt).

ver_sob(Sob):-

prinadl(Sob1,Sob),

nl,write('Укажите вероятность события <'),write(Sob1),write('> '),

read(Ver1),asserta(psob(Sob1,Ver1)),fail.

ver_sob(_):-!.

ver_fakt(Fakt):-

prinadl(Fakt1,Fakt),

nl,write('Укажите вероятность факта <'),write(Fakt1),write('> '),

read(Ver1),asserta(pfakt(Fakt1,Ver1)),fail.

ver_fakt(_):-!.

vvod_zeli(Zel):-

nl,write('Введите цель ... '),read(Zel),!.

tek_sob:-

psob(Sob,Ver),Rand is random,

ifthen(Rand>Ver,asserta((sob(Sob):-!,fail))),fail.

tek_sob:-!.

tek_fakt:-

pfakt(Fakt,Ver),Rand is random,

ifthen(Rand<Ver,asserta(fakt(Fakt))),fail.

tek_fakt:-!.

dokazat(Zel):-

call(Zel),

retract(uspechi(N)),N1 is N+1,asserta(uspechi(N1)),!.

dokazat(_):-!.

chistka_tek:-

repeat,not(retract((sob(_):-!,fail))),not(retract(fakt(_))).

chistka_tek:-!.

chistka_base:-

chistka_tek,

repeat,not(retract(psob(_,_))),not(retract(pfakt(_,_))).

chistka_base:-!.

start:-

vvod_ver,vvod_zeli(Zel),asserta(uspechi(0)),

write('Количество испытаний = '),read(N),asserta(tek_num(0)),

repeat,

chistka_tek,tek_sob,tek_fakt,

retract(tek_num(N1)),N2 is N1+1,asserta(tek_num(N2)),

dokazat(Zel),N2==N,retract(uspechi(N_usp)),P is N_usp/N,

nl,write('Вероятность = '),write(P),chistka_base.

sdal:- not(sob('проспал')),sob('готов').

sdal:- sob('повезло').

sob('проспал'):- fakt('давно не спал'),fakt('поздно лег'),

fakt('сломан будильник').

sob('готов'):- fakt('читал'),fakt('написал шпоргалки').

sob('готов'):- fakt('зубрило').

sob('повезло'):- fakt('везунчик').

sob('повезло'):- fakt('молился на ночь').

Тестовый пример:

?- start.

Введите список событий ... ['проспал','готов','повезло'].

Укажите вероятность события <проспал> 0.4.

Укажите вероятность события <готов> 0.95.

Укажите вероятность события <повезло> 0.8.

Введите случайные факты ... ['давно не спал','поздно лег','сломан будильник',

'читал','написал шпоргалки','зубрило','везунчик','молился на ночь'].

Укажите вероятность факта <давно не спал> 0.3.

Укажите вероятность факта <поздно лег> 0.7.

Укажите вероятность факта <сломан будильник> 0.05.

Укажите вероятность факта <читал> 0.95.

Укажите вероятность факта <написал шпоргалки> 0.5.

Укажите вероятность факта <зубрило> 0.2.

Укажите вероятность факта <везунчик> 0.6.

Укажите вероятность факта <молился на ночь> 0.1.

Введите цель ... sdal.

Количество испытаний = 1000.

Вероятность = 0.783

yes

Соседние файлы в папке ARI_DOC