simple-ps
Version:
A Simple Implementation of Production System.
57 lines (52 loc) • 1.91 kB
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>