【问题标题】:popular 'vaccumCleaner' toy problem solution using simple reflex agent使用简单反射剂的流行“真空吸尘器”玩具问题解决方案
【发布时间】:2020-02-13 18:46:52
【问题描述】:

我是 bscs 的学生,正在学习“人工智能”。

这是一个简单的反射代理程序,它在“Python”上工作,但我也在 p5.js (JavaScript) 上尝试过同样的事情来制作 UI。

但是我得到了这个错误,谁能告诉我为什么 this.currentRoom 没有得到 this.room1??

I'm adding error screenshot over here

或者您可以直接复制它并在在线编辑器上了解实际发生的情况。

对不起,如果我问得不好,实际上这是我第一次在 stackoverflow 上提问。

function setup(){
   createCanvas(600,400);
    vc = new VAgent();
    twoRooms = new VEnvironment(vc);
    twoRooms.executeStep(6);

}
function draw(){
    background(0);
}

class Room{
    constructor(location,status){
        this.location=location;
        this.status=status;
    }
    getAll(){
        console.log(this.location);
        console.log(this.status);
    }
}

class VEnvironment{
    contructor(agent){
        this.agent=agent;
        this.room1=new Room('a','Dirty');
        this.room2=new Room('b','Dirty');
        this.currentRoom=this.room1;
        this.actionStatus='';
        this.step=0;

    }

    executeStep(n){
        for(var i=0;i<n;i++){
            this.displayPerception();
            this.agent.sense(this);
            var res = this.agent.action();
            if(res=='clean'){
               this.currentRoom.status=='clean'
            }else if(res=='Right'){
               this.currentRoom=this.room2;
            }else{
                this.currentRoom=this.room1;
            }
            this.displayAction();
            this.step++;
        }
    }
    displayPerception(){
        console.log('Agent is Present At Room '+this.currentRoom.location+' And The Status For Room Is '+this.currentRoom.status);
    }
    displayAction(){
        console.log('Agent took at'+this.step+' And Action was ... '+this.currentRoom+'...');
    }
}


class VAgent{
    constructor(){

    }

    sense(currentEnv){
        this.en=currentEnv;
    }
    action(){
        if(this.en.currentRoom.status=='dirty'){
           return 'Clean'
        }else if(this.en.currentRoom.location=='a'){
           return 'Left'
        }else{
            return 'Right'
        }
    }
}

【问题讨论】:

    标签: javascript artificial-intelligence undefined p5.js agent


    【解决方案1】:

    当你有一段复杂的代码你不理解时,你能做的最好的事情就是将你的问题缩小到simplified example program

    例如,您可以将问题隔离到以下代码中:

    function setup() {
      createCanvas(600, 400);
    
      const myContainer = new Container();
      myContainer.displayValue();
    }
    
    function draw() {
      background(0);
    }
    
    class Value {
      constructor() {
        this.x = 42;
      }
    }
    
    class Container {
      contructor() {
        this.value = new Value();
        this.currentvalue = this.value;
        console.log('constructor value: ' + this.currentValue);
      }
    
      displayValue() {
        console.log('display value: ' + this.value.x);
      }
    }
    

    此代码显示与您的代码相同的问题,没有任何与您的问题无关的额外代码。

    如果您运行此代码,您会注意到constructor value print 语句从未被触发。这是更仔细地查看构造函数的线索。

    您的问题是一个错字:您使用的是contructor 而不是constructor

    【讨论】:

    • 非常感谢您的关注。这真的很有帮助。
    • 我明白你想说什么我会按照你的方式去做,你说的完全正确,它不会触发。实际上它并没有到达那里,在此之前它已被调用。我所做的是,做一些我想达到的必须执行(存在)的事情。非常感谢。这真的很有帮助。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-01-25
    • 1970-01-01
    • 2021-08-05
    相关资源
    最近更新 更多