You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Prolog中实现带锁门的寻宝搜索游戏?

Prolog实现寻宝搜索问题

我正在用Prolog开发一个寻宝搜索问题,智能体的目标是找到宝藏。每个时间步中,智能体可通过无向图结构的门在房间间移动,但部分门处于锁定状态,必须获取对应钥匙才能通行。

目前代码生成的动作序列为Actions = [move(0, 1), move(1, 3), move(3, 4), move(4, 2), move(2, 5), move(5, 6)],与预期动作序列一致。

代码如下:

initial(0).

door(0,1).
door(0,2).
door(1,2).
door(1,3).
door(2,4).

locked_door(2,5,red).
locked_door(5,6,blue).

key(3,red).
key(4,blue).

treasure(6).

initial_state(state(Pos, noKey, noKey)) :- % 初始位置无钥匙
    initial(Pos).

% 不拾取或使用钥匙的移动
take_action(state(A, RedKey, BlueKey), move(A,B), state(B, RedKey, BlueKey)) :- 
    door(A,B).
take_action(state(A, RedKey, BlueKey), move(A,B), state(B, RedKey, BlueKey)) :- 
    door(B,A).


% 拾取红色钥匙
take_action(state(A, noKey, noKey), move(A,B), state(B, hasKey(red), noKey)) :- 
    door(A,B),
    key(B, red).


% 拾取蓝色钥匙
take_action(state(A, hasKey(red), noKey), move(A,B), state(B, hasKey(red), hasKey(blue))) :- 
    door(A,B),
    key(B, blue).


% 打开锁着的门
take_action(state(A, hasKey(red), hasKey(blue)), move(A,B), state(B, hasKey(red), hasKey(blue))) :- 
    locked_door(A,B,blue).
take_action(state(A, hasKey(red), hasKey(blue)), move(A,B), state(B, hasKey(red), hasKey(blue))) :- 
    locked_door(B,A,blue).
take_action(state(A, hasKey(red), hasKey(blue)), move(A,B), state(B, hasKey(red), hasKey(blue))) :- 
    locked_door(A,B,red).
take_action(state(A, hasKey(red), hasKey(blue)), move(A,B), state(B, hasKey(red), hasKey(blue))) :- 
    locked_door(B,A,red).

final_state(state(Pos, _, _)) :- treasure(Pos).

take_steps(S0, [Action], S1) :- take_action(S0, Action, S1).
take_steps(S0, [Action | Rest], SFinal) :- 
    take_action(S0, Action, SNew),
    take_steps(SNew, Rest, SFinal).

search(Actions) :- 
    initial_state(S0),
    length(Actions, _), 
    take_steps(S0, Actions, SFinal),
    final_state(SFinal), !.

内容的提问来源于stack exchange,提问作者Yosef

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.27 03:26:04