단일 차선에서 교통 정체의 개별 이벤트 시뮬레이션을 만들려고합니다. 차선은 통과하는 각 차량의 "너비"인 10 개의 세그먼트로 나누어집니다. 이 세그먼트들은 모두 1 단위의 시간이 걸립니다. 나의 현재의 설정은 차가 같은 속도로오고 있지만 더 느리게 움직이는 차가 더 오래 걸리고 교통 혼잡을 일으킬 수 있도록 차를 바꿀 것이다. 도로의 각 세그먼트는 현재 사용중인 경우 request() 함수의 영향을받는 리소스입니다.Simpy 교통 시뮬레이션의 AttributeError 및 구문
저는 python에서 simpy를 사용하고 있습니다. 파이썬에 대한 경험이 거의 없다는 것을 명심하십시오. 여기 내 코드입니다 : 나는이 개 질문이
AttributeError: 'function' object has no attribute 'request'
:
import simpy
import numpy
inter_ArrivalTime = 2
car_Speed = 1
c = 1
simpy.seg1 = simpy.Resource(env, 1)
simpy.seg2 = simpy.Resource(env, 1)
simpy.seg3 = simpy.Resource(env, 1)
simpy.seg4 = simpy.Resource(env, 1)
simpy.seg5 = simpy.Resource(env, 1)
simpy.seg6 = simpy.Resource(env, 1)
simpy.seg7 = simpy.Resource(env, 1)
simpy.seg8 = simpy.Resource(env, 1)
simpy.seg9 = simpy.Resource(env, 1)
simpy.seg10 = simpy.Resource(env, 1)
SIM_LOG = []
class Street(object):
def __init__(self, env, carSpeed):
self.env = env
self.carSpeed = carSpeed
def seg1(self, car):
yield self.env.timeout(car_Speed)
def seg2(self, car):
yield self.env.timeout(car_Speed)
def seg3(self, car):
yield self.env.timeout(car_Speed)
def seg4(self, car):
yield self.env.timeout(car_Speed)
def seg5(self, car):
yield self.env.timeout(car_Speed)
def seg6(self, car):
yield self.env.timeout(car_Speed)
def seg7(self, car):
yield self.env.timeout(car_Speed)
def seg8(self, car):
yield self.env.timeout(car_Speed)
def seg9(self, car):
yield self.env.timeout(car_Speed)
def seg10(self, car):
yield self.env.timeout(car_Speed)
def car(env, name, Street):
with Street.seg1.request() as req:
yield req
print("%s enters road at %.2f" % (name, env.now))
SIM_LOG.append([name, "enters road", env.now])
yield env.process(Street.seg1(name))
with Street.seg2.request() as req:
yield req
SIM_LOG.append([name, "segment 2", env.now])
yield env.process(Street.seg2(name))
with Street.seg3.request() as req:
yield req
SIM_LOG.append([name, "segment 3", env.now])
yield env.process(Street.seg3(name))
with Street.seg4.request() as req:
yield req
SIM_LOG.append([name, "segment 4", env.now])
yield env.process(Street.seg4(name))
with Street.seg5.request() as req:
yield req
SIM_LOG.append([name, "segment 5", env.now])
yield env.process(Street.seg5(name))
with Street.seg6.request() as req:
yield req
SIM_LOG.append([name, "segment 6", env.now])
yield env.process(Street.seg6(name))
with Street.seg7.request() as req:
yield req
SIM_LOG.append([name, "segment 7", env.now])
yield env.process(Street.seg7(name))
with Street.seg8.request() as req:
yield req
SIM_LOG.append([name, "segment 8", env.now])
yield env.process(Street.seg8(name))
with Street.seg9.request() as req:
yield req
SIM_LOG.append([name, "segment 9", env.now])
yield env.process(Street.seg9(name))
with Street.seg10.request() as req:
yield req
print("%s left the road at %.2f" % (name, env.now))
SIM_LOG.append([name, "segment 10", env.now])
yield env.process(Street.seg10(name))
def setup(env, carSpeed, interArrivalTime, c):
street = Street(env, carSpeed)
yield env.timeout(interArrivalTime)
c += 1
env.process(car(env, c, street))
#random.seed(30)
env = simpy.Environment()
env.process(setup(env, car_Speed, inter_ArrivalTime, c))
env.run(until=60)
이 나에게 다음과 같은 오류를 제공 실행 1)이 오류의 원인이 무엇입니까? 이 문제를 수정하면 내 코드가 작동합니까? 2) simpy로 이런 종류의 시뮬레이션을 작성하는 더 좋은 방법이 있습니까? - 특히 동일한 코드가 반복적으로 반복되는 도로 구간.
완전한 스택 추적이 도움이되었을 것입니다. –