⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 strips.pro

📁 prolog开发工具
💻 PRO
字号:
                       /* STRIPS-WORLD */
            /* HOW TO SOLVE IT, Problem 76, p. 104 */

add(climboff(B),     onfloor).
add(climbon(B),      on(robot,B)).
add(gothru(D,R1,R2), inroom(robot,R2)).
add(goto1(P,R),      at(robot,P)).
add(goto2(X,R),      nextto(robot,X)).
add(pushto(X,Y,R),   nextto(X,Y)).
add(pushto(X,Y,R),   nextto(Y,X)).
add(turnon(S),       status(S,on)).

del(Action, at(X,Z)) :-
    moved(X,Action).
del(Action, nextto(Z,robot)) :-
    !,
    del(Action, nextto(robot,Z)).
del(pushto(X,Y,R), nextto(robot,X)) :-
    !,
    fail.
del(climbon(B),nextto(robot,B)) :-
    !,
    fail.
del(climboff(B),nextto(robot,B)) :-
    !,
    fail.
del(Action, nextto(X,Z)) :-
    moved(X, Action).
del(Action, nextto(Z,X)) :-
    moved(X, Action).
del(Action, on(X,Z)) :-
    moved(X, Action).
del(climbon(B),onfloor).
del(gothru(B,R1,R2),inroom(robot,Z)).
del(turnon(S),status(S,Z)).

moved(robot,goto1(P,R)).
moved(robot,goto2(X,R)).
moved(robot,pushto(X,Y,R)).
moved(X,    pushto(X,Y,R)).
moved(robot,climbon(B)).
moved(robot,climboff(B)).
moved(robot,gothru(D,R1,R2)).

precond(goto1(P,R),       [ locinroom(P,R),
                            inroom(robot,R),
                            onfloor ]).

precond(goto2(X,R),       [ inroom(X,R),
                            inroom(robot,R),
                            onfloor ]).

precond(pushto(X,Y,R),    [ pushable(X),
                            inroom(Y,R),
                            inroom(X,R),
                            nextto(robot,X),
                            onfloor ]).

precond(turnon(lightswitch(S)),
                          [ on(robot,box(1)),
                            nextto(box(1),
                            lightswitch(S)) ]).

precond(climbon(box(B)),  [ nextto(robot,box(B)),
                            onfloor ]).

precond(climboff(box(B)), [ on(robot,box(B)) ]).

precond(gothru(D,R1,R2),  [ connects(D,R1,R2),
                            inroom(robot,R1),
                            nextto(robot,D),
                            onfloor ]).

always(connects(D,R1,R2)) :-
    connects1(D,R1,R2).
always(connects(D,R2,R1)) :-
    connects1(D,R1,R2).
/*                                       How to Solve It:
always(inroom(D,R1)) :-
    always(connects1(D,R0,R1)).
*/
always(inroom(D,R1)) :-                  /* Polish */
    always(connects(D,R1,R2)).
always(pushable(box(N))).
always(locinroom(point(N),room(1))) :-   /* Polish */
    range(N,1,5).
always(locinroom(point(6),room(4))).
always(inroom(lightswitch(1),room(1))).
always(at(lightswitch(1),point(4))).

connects1(door(N),room(N),room(5)) :-
    range(N,1,4).

range(M,M,_).
range(M,L,N) :-
    L < N,             /* HOW TO SOLVE IT: not_equal(L,N) */
    L1 is L + 1,
    range(M,L1,N).



given_list([ at(box(1),point(1)),
             at(box(2),point(2)),
             at(box(3),point(3)),
             at(robot, point(5)),
             inroom(box(1),room(1)),
             inroom(box(2),room(1)),
             inroom(box(3),room(1)),
             inroom(robot,room(1)),
             onfloor,
             status(lightswitch(1),off) ]).


run1 :-
    given_list(Start),
    warplan(Start,[status(lightswitch(1),on)]).

run2 :-
    given_list(Start),
    warplan(Start,[ nextto(box(1),box(2)),
            nextto(box(2),box(3)) ]).

run3 :-
    given_list(Start),
    warplan(Start,[at(robot,point(6))]).

run4 :-
    given_list(Start),
    warplan(Start,[ nextto(box(2),box(3)),
            nextto(box(3),door(1)),
            status(lightswitch(1),on),
            nextto(box(1),box(2)),
            inroom(robot,room(2)) ]).

restrips :-
    reconsult(strips).








⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -