UNPKG

simple-ps

Version:

A Simple Implementation of Production System.

57 lines (52 loc) 1.91 kB
<!DOCTYPE html> <html> <head> <meta charset="utf-8"> <title>test</title> </head> <body> <h1>test</h1> <div id="maze_container"></div> <!-- <script src="https://cdn.jsdelivr.net/npm/simple-ps@latest/dist/simple-ps.js"></script> --> <script src="../dist/simple-ps.js"></script> <script src="./test03.js"></script> <script> // ES2017でsleep const sleep = msec => new Promise(resolve => setTimeout(resolve, msec)); // 迷路を埋め込む場所をCSSセレクタで指定して迷路を生成 const maze = new Maze("#maze_container"); const ruleStr = `/* 迷路を自動で解くルール. */ 1: seq(右壁 "なし") > result("右旋回,前進") ; 1: seq(前壁 "あり") seq(右壁 "あり") > result("左旋回") ; 1: seq(前壁 "なし") > result("前進") ; `; async function main() { const engine = new SimplePS.Engine(ruleStr); while (true) { const status = maze.getStatusOfAI(); console.log("status=",status); // statusの中身はコンソール見て engine.setInfoToWM(status); // 以下、1ステップだけ推論実行して結果を待つ。 // (タイムアウト10秒。実際には一瞬だけど) const resStr = await engine.inferOneStepAndWait(10000); console.log("resStr=",resStr); // resStrの中身はコンソール見て const res = resStr.split(","); for (let i=0;i<res.length;i++) { switch(res[i]) { case "前進": maze.goForward(); break; case "左旋回": maze.turnLeft(); break; case "右旋回": maze.turnRight(); break; } await sleep(1000); // 速すぎるので } if (maze.reachedTheGoal()) { console.log("ゴール!"); break; } } } main(); </script> </body> </html>