【发布时间】:2018-04-17 18:51:13
【问题描述】:
我尝试使用维基百科中的伪代码对 Alpha-beta 进行编码。程序到达(EQ depth 0) 后,它会返回启发式值,但深度会继续减小,从而导致循环。现在我的代码如下所示:
(defun ab(tab node depth a b)
(cond ((EQ depth 0) (calculaH tab))
((eq (mod depth 2) 0) (setq v -999999) (setq movimiento (sigMov depth node tab)) (loop while (not(null movimiento))
do (setq v (max v (ab (nth 3 movimiento) movimiento (- depth 1) a b)))
(setq a (max a v))
(cond((<= b a) (break))
(t (setq movimiento (sigMov depth movimiento tab))))) (return v))
(t (setq v 999999) (setq movimiento (sigMov depth node tab)) (loop while (not(null movimiento))
do (setq v (min v (ab (nth 3 movimiento) movimiento (- depth 1) a b)))
(setq a (min b v))
(cond((<= b a) (break))
(t (setq movimiento (sigMov depth movimiento tab))))) (return v))))
我应该在代码中的某处增加深度值吗?为什么递归不自己增加值?
【问题讨论】:
-
Jorge:问题在于您的代码难以阅读和理解。它的格式不可读,并且充满了未定义的变量。谁知道它在做什么以及为什么以及何时会偶然起作用。
-
也许您想使用Portacle ?它是一个多平台和可移植的 CL 环境(包含 Emacs、SBCL、Slime、Quicklisp 和 Git),因此它会自动正确缩进您的代码。
-
欢迎来到 StackOverflow。请按照您创建此帐户时的建议阅读并遵循帮助文档中的发布指南。 Minimal, complete, verifiable example 适用于此。在您发布 MCVE 代码并准确描述问题之前,我们无法有效地帮助您。我们应该能够将您发布的代码粘贴到文本文件中并重现您描述的问题。
标签: artificial-intelligence common-lisp minimax alpha-beta-pruning