Agent的张量流模型演化问题

时间:2019-07-16 08:32:52

标签: javascript tensorflow genetic-algorithm

我是学习的最后一年的学生,我想创建一个包含我的项目的网站,向未来的雇主展示我的技能。 我的一个项目有问题:

我试图编写一个AI来解决飞扬的小鸟游戏

所以我用tensorflow js中的模型创建了代理,然后应用了进化算法来训练它们并使它们按照我想要的方式进化。我的问题如下: 我的算法无法正确选择我的代理,并且在必须对其进行操作(新一代的选择,突变和重新分配)时无法识别模型

它是如何工作的: -我创建了一堆代理商 -我让他们玩(tf模型预测他是否必须上升) -当它们死后,我会按顺序存储它们(最差) -当每个经纪人迷路时,我会选择他们中最好的 -我让它们变异(我在tf模型上应用变异) -我将新模型放到了新一代代理商中 -然后我们再次开始,直到进化为我们提供了一种能够正确玩游戏的模型

我试图以不同的方式定义模型,但似乎没有一个起作用。 在一种情况下,浏览器返回下一代时会返回错误: “无法读取未定义的属性'副本'” 我试图用另一种方式定义它,并且有效!但是出现了另一个问题,我的代理人似乎世代相传(显然,这并不是最好的代理人)

我不知道我的问题来自哪里: -我的算法与此特定情况(或其他任何情况)不符 -我没有正确设置代理,并且功能未正确将其更改应用于代理 -选择是有效的,但我对最佳代理商的计算是错误的,因此选择有偏见

我已经考虑了几天,却找不到答案

//我的选择功能

function pickOne() {
  let index = 0;
  let r = Math.random(1);
  while (r > 0) {
    r = r - savedBirds[index].fitness;
    index++;
  }
  index--;
  let bird = savedBirds[index];
  let child = new flappy(bird.brain);
  child.mutate();
  return child;
}

//创建新一代,但返回“无法读取未定义的属性'copy'”

function nextGeneration() {
  console.log('next generation');
  //console.log(agents);
  calculateFitness();
  for (let i = 0; i < number; i++) {
    console.log(agents[i]);
    agents[i] = pickOne();
  }
  for (let i = 0; i < number; i++) {
    savedBirds[i].dispose();
  }
  savedBirds = [];
}

//我的张量流神经网络的复制功能

copy() {
    return tf.tidy(() => {
      const modelCopy = this.createModel();
      const weights = this.model.getWeights();
      const weightCopies = [];
      for (let i = 0; i < weights.length; i++) {
        weightCopies[i] = weights[i].clone();
      }
      modelCopy.setWeights(weightCopies);
      return new NeuralNetwork(modelCopy, this.input_nodes, this.hidden_nodes, this.output_nodes);
    });
  }

通常,选择和变异会在几代之后给我们带来结果,但是即使我尝试了200代,每个特工都是一样的,而且他们确实能够玩这个游戏

希望我足够精确,如果您想了解更多信息,请询问:)

0 个答案:

没有答案
相关问题