tensorflow.js实现一个人工智能神经网络进化学习自主打游戏代码
代码语言:html
所属分类:游戏
代码描述:tensorflow.js实现一个人工智能神经网络进化学习自主打游戏代码,用随机神经网络生成一个agent群体,代理人的数量在不断增加,探员们试图穿过这些空隙,在所有特工都死后(灰色描绘),选出前两名,以较小的突变概率,通过杂交繁殖前两个种群,产生新种群进行循环。
下面为部分代码预览,完整代码请点击下载或在bfwstudio webide中打开
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <style> @import url('https://fonts.googleapis.com/css?family=Roboto:400,700'); body { background-color: #444f56; color: #dde1e4; font-family: 'Roboto'; line-height: 1.6; } canvas { display: block; height: auto; max-width: 100%; background-color: #f8fafc; box-shadow: 0 0 0.5rem rgba(0, 0, 0, 0.125); } dt { display: inline-block; font-weight: 700; } dt::after { content: ':'; } dd { display: inline-block; padding: 0; margin: 0; } h1, h2, h3, h4, h5, h6 { font-weight: 700; line-height: 1.2; } .container { max-width: 512px; padding-left: 1rem; padding-right: 1rem; margin-left: auto; margin-right: auto; } </style> </head> <bod> <div class="container"> <h1>神经进化</h1> <p>见证AI如何学习打游戏通过缝隙</p> × <canvas id="canvas"></canvas> <dl> <div> <dt>Generation</dt> <dd id="param-generation">0</dd> </div> <div> <dt>Highscore</dt> <dd id="param-highscore">0</dd> </div> <div> <dt>Agents (alive)</dt> <dd id="param-agents-alive">0</dd> </div> </dl> <ol> <li> 用随机神经网络生成一个agent群体</li> <li>代理人的数量在不断增加</li> <li> 探员们试图穿过这些空隙 <ol> <li>在所有特工都死后(灰色描绘),选出前两名</li> <li>以较小的突变概率,通过杂交繁殖前两个种群,产生新种群</li> <li>转至步骤2</li> </ol> </li> </ol> </div> <script type="text/javascript" src="//repo.bfw.wiki/bfwrepo/js/tf.2.0.js"></script> <script> const MathUtils = { lerp(a, b, t) { return a + t * (b - a); } }; class Agent { constructor( brain = new NeuralNetwork( null, new NeuralNetworkLayer(2), new NeuralNetworkLayer(2), new NeuralNetworkLayer(1))) { this.boundingBox = new Rectangle(); this.brain = brain; this.isAlive = true; this.position = new Vector2(); this.score = 0; } dispose() { this.brain.dispose(); } kill() { this.isAlive = false; } render(context) { context.save(); context.globalCompositeOperation = 'darken'; context.fillStyle = this.isAlive ? '#ea2d2d' : '#dde1e4'; context.fillRect( this.boundingBox.left, this.boundingBox.top, this.boundingBox.width, this.boundingBox.height); context.restore(); } update(context, target) { const { width } = context.canvas; const sizeHalf = 0.5 * Agent.SIZE; const output = this.brain.predict([this.position.x, target]). dataSync(); this.position.x += Agent.SPEED * output[0]; this.position.x = Math.max(sizeHalf, Math.min(width - sizeHalf, this.position.x)); this.updateBoundingBox(); } updateBoundingBox() { const sizeHalf = 0.5 * Agent.SIZE; this.boundingBox.left = this.position.x - sizeHalf; this.boundingBox.right = this.position.x + sizeHalf; this.boundingBox.top = this.position.y - sizeHalf; this.boundingBox.bottom = this.position.y + sizeHalf; } static get SIZE() { return 8; } static get SPEED() { return 64; } static fromParents(a, b) { return new Agent(NeuralNetwork.fromParents(a.brain, b.brain)); }} class NeuralNetwork { constructor(weights, ...layers) { this.inputLayerSize = layers[0].size; this.layers = layers; .........完整代码请登录后点击上方下载按钮下载查看
网友评论0