我试图用基于agent的仿真来解决stagecoach问题。我正在尝试将状态添加到Panda的数据帧中。但是,当我这样做的时候,我得到了一个错误“TypeError:add_state()正好接受4个参数(给定3个)。”我查看了Stackoverflow上的其他问题并尝试了解决方案,但是有一点我遗漏了。在
有人能给我一些建议或提示,为什么我总是得到这个错误?谢谢你抽出时间。在
from __future__ import division
import random
import pandas as pd
class stagecoach():
current_state = "A"
home_state = "J"
cost = 0
index = range(1,20,1)
columns = ["Current", "Choices", "Cost"]
states = pd.DataFrame(columns=columns, index=index)
counter = 1
def add_state(self, s_current, s_choices, s_cost):
self.states.loc[self.counter] = [s_current, s_choices, s_cost]
self.counter += 1
add_state("A", "B", 2)
add_state("A", "C", 4)
add_state("A", "D", 3)
add_state("B", "E", 7)
add_state("B", "F", 4)
add_state("B", "G", 6)
add_state("C", "E", 3)
add_state("C", "F", 2)
add_state("C", "G", 4)
add_state("D", "E", 4)
add_state("D", "F", 1)
add_state("D", "G", 5)
add_state("E", "H", 1)
add_state("E", "I", 4)
add_state("F", "H", 6)
add_state("F", "I", 3)
add_state("G", "H", 3)
add_state("G", "I", 3)
add_state("H", "J", 3)
add_state("I", "J", 4)
def choose(self,state):
states_to_choose = self.states[self.states.Current == state]
random_path = random.randint(0,len(states_to_choose))
current_state = states_to_choose[random_path]
def run(self):
while self.current_state != self.home_state:
print(self.states)
self.choose(self.current_state)
print(self.current_state)
self.cost += 1
game = stagecoach()
game.run()
缺少的参数是第一个,通常称为
self
,当您在类的实例上调用方法时,它将自动传递。但是您并不是在一个实例上调用add_state()
:您是作为一个普通函数调用它,并且必须传递所有四个参数。你不能这样做,因为你没有类的任何实例,因为你还在定义它。在您需要编写一个
__init__()
方法,该方法执行add_state()
调用以及当前类主体中的所有其他操作。这样,就会有一个实例调用add.state()
!像这样:相关问题 更多 >
编程相关推荐