निरंतरता ट्यूटोरियल मैं निश्चित लंबाई निरंतरता पर हैं पा सकते हैं सब के सब (यानी आंकड़ा संरचना मदों की एक ज्ञात संख्या के रूप में यह चल जा रहा है हैपरिसर निरंतरता
मैं DepthFirstSearch Negamax (लागू करने कर रहा हूँ http: // en .wikipedia.org/wiki/Negamax) और जब तक कोड काम करता है, मैं निरंतरता
का उपयोग कर कोड को फिर से लिखने के लिए करना चाहतेकोड रहा है के रूप में
let naiveDFS driver depth game side =
List.map (fun x ->
//- negamax depth-1 childnode opposite side
(x, -(snd (driver (depth-1) (update game x) -side))))
(game.AvailableMoves.Force())
|> List.maxBy snd
let onPlay game = match game.Turn with
| Black -> -1
| White -> 1
///naive depth first search using depth limiter
let DepthFirstSearch (depth:int) (eval:Evaluator<_>) (game:GameState) : (Move * Score) =
let myTurn = onPlay game
let rec searcher depth game side =
match depth with
//terminal Node
| x when x = 0 || (isTerminal game) -> let movescore = (eval ((),game)) |> fst
(((-1,-1),(-1,-1)),(movescore * side))
//the max of the child moves, each child move gets mapped to
//it's associated score
| _ -> naiveDFS searcher depth game side
जहां अद्यतन के साथ एक साथ एक gamestate अद्यतन करता है इस प्रकार है एक दिया गया कदम, eval खेल राज्य और आर मूल्यांकन करता है वृद्धिशील मूल्यांकन के लिए एक incrementer (वर्तमान में अप्रयुक्त) eturns और टर्मिनल मूल्यांकन करता है कि स्थिति एक अंत स्थिति है या नहीं।
समस्या यह है कि मुझे निरंतरता के लिए अज्ञात संख्याओं (प्रत्येक शेष सूची.मैप पुनरावृत्ति) को साइन अप करना होगा, और मैं वास्तव में ऐसा करने का एक प्रभावी तरीका नहीं समझ सकता।
चूंकि यह एक घातीय एल्गोरिथ्म है, मैं स्पष्ट रूप से (, हालांकि मेरे मस्तिष्क यह हमारी लगाने की कोशिश कर दर्द होता है तो मैं एक कुशल एक से जवाब अधिक चाहते हैं) यह संभव के रूप में कुशल रखने के लिए देख रहा हूँ
धन्यवाद