Skip to content

Commit

Permalink
Merge pull request #339 from ueckoken/#302-only_local_train
Browse files Browse the repository at this point in the history
#302-ダイヤがうまく回らないのでとりあえず各停のみで走れるauto_operationを作る
  • Loading branch information
csenet authored Nov 18, 2022
2 parents 3b46a38 + 76c77f0 commit 68ae6db
Show file tree
Hide file tree
Showing 2 changed files with 79 additions and 78 deletions.
155 changes: 78 additions & 77 deletions backend/auto_operation/DiaPlanner.py
Original file line number Diff line number Diff line change
Expand Up @@ -44,7 +44,7 @@ def __init__(self, state: State) -> None:

# ダイヤ自動更新の初期値を記述
def setup(self) -> None:
# 初期値として、列車0は八王子経由の特急とする
# 初期値として、列車0は八王子経由の特急とする→各停に変更
self.setDia(0, "shinjuku_down", False, 5, "shinjuku_b2", "shinjuku_b1")
self.setDia(0, "sakurajosui_down", False, 0, "sakurajosui_b2", "sakurajosui_b5")
self.setDia(0, "chofu_down", False, 5, "chofu_b2", "chofu_b4")
Expand All @@ -56,15 +56,15 @@ def setup(self) -> None:

# 初期値として、列車1は八王子経由の普通とする
self.setDia(1, "shinjuku_down", False, 5, "shinjuku_b2", "shinjuku_b1")
self.setDia(1, "sakurajosui_down", True, 5, "sakurajosui_b1", "sakurajosui_b5")
self.setDia(1, "sakurajosui_down", False, 5, "sakurajosui_b2", "sakurajosui_b5")
self.setDia(1, "chofu_down", False, 5, "chofu_b2", "chofu_b4")
self.setDia(1, "hachioji_down", False, 5, "chofu_b4", "hachioji_b1")
self.setDia(1, "hachioji_up", False, 5, "hachioji_b1", "hachioji_b2")
self.setDia(1, "chofu_up", False, 5, "hachioji_b2", "chofu_b5")
self.setDia(1, "sakurajosui_up", True, 5, "sakurajosui_b4", "sakurajosui_b6")
self.setDia(1, "sakurajosui_up", False, 5, "sakurajosui_b3", "sakurajosui_b6")
self.setDia(1, "shinjuku_up", False, 5, "sakurajosui_b6", "shinjuku_b2")

# 初期値として、列車2は橋本経由の特急とする
# 初期値として、列車2は橋本経由の特急とする→各停に変更
self.setDia(2, "shinjuku_down", False, 5, "shinjuku_b2", "shinjuku_b1")
self.setDia(2, "sakurajosui_down", False, 0, "sakurajosui_b2", "sakurajosui_b5")
self.setDia(2, "chofu_down", False, 5, "chofu_b1", "chofu_b3")
Expand All @@ -76,12 +76,12 @@ def setup(self) -> None:

# 初期値として、列車3は橋本経由の普通とする
self.setDia(3, "shinjuku_down", False, 5, "shinjuku_b2", "shinjuku_b1")
self.setDia(3, "sakurajosui_down", True, 5, "sakurajosui_b1", "sakurajosui_b5")
self.setDia(3, "sakurajosui_down", False, 5, "sakurajosui_b2", "sakurajosui_b5")
self.setDia(3, "chofu_down", False, 5, "chofu_b1", "chofu_b3")
self.setDia(3, "hashimoto_down", False, 5, "chofu_b3", "hashimoto_b1")
self.setDia(3, "hashimoto_up", False, 5, "hashimoto_b1", "hashimoto_b2")
self.setDia(3, "chofu_up", False, 5, "hashimoto_b2", "chofu_b5")
self.setDia(3, "sakurajosui_up", True, 5, "sakurajosui_b4", "sakurajosui_b6")
self.setDia(3, "sakurajosui_up", False, 5, "sakurajosui_b3", "sakurajosui_b6")
self.setDia(3, "shinjuku_up", False, 5, "sakurajosui_b6", "shinjuku_b2")

# ダイヤ自動更新のルールを記述. 毎update時によぶ
Expand All @@ -104,77 +104,78 @@ def update(self) -> None:
# self.setDia(1, 1, False, 0, 2, 4)
# print("[DiaPlanner.update] wait flag switched!")

# 桜上水下り線で退避していた列車の退避終了処理
waitingTrain = self.__state.getTrainInSection(
self.__state.getSectionById("sakurajosui_b1")
) # 桜上水下り退避線にいる列車
if waitingTrain is not None and self.getDia(waitingTrain.id, "sakurajosui_down").wait:
for train in self.__state.trainList:
# sectionが変化した瞬間だけ、mileageがprevmileageより小さくなることを利用し、桜上水を出発した下り列車がいるか判断。いれば、追い抜きに成功したので、退避していたほうの退避フラグをリセット
if (
train.currentSection.id == "sakurajosui_b5"
and train.mileage < train.prevMileage
):
self.setDia(
waitingTrain.id,
"sakurajosui_down",
False,
5,
"sakurajosui_b1",
"sakurajosui_b5",
)
print(f"[DiaPlanner.update] train {waitingTrain.id} wait finish!")
# 退避を終えて出発した各停列車の退避フラグを再びTrueに戻す
sakurajosuiDepartedTrain = self.__state.getTrainInSection(
self.__state.getSectionById("sakurajosui_b5")
) # 桜上水下りを出発後の列車を取得
if sakurajosuiDepartedTrain is not None and (
sakurajosuiDepartedTrain.id == 1 or sakurajosuiDepartedTrain.id == 3
): # 各停列車なら
self.setDia(
sakurajosuiDepartedTrain.id,
"sakurajosui_down",
True,
5,
"sakurajosui_b1",
"sakurajosui_b5",
)

# 桜上水上り線で退避していた列車の退避終了処理
waitingTrain = self.__state.getTrainInSection(
self.__state.getSectionById("sakurajosui_b4")
) # 桜上水上り退避線にいる列車
if waitingTrain is not None and self.getDia(waitingTrain.id, "sakurajosui_up").wait:
for train in self.__state.trainList:
# sectionが変化した瞬間だけ、mileageがprevmileageより小さくなることを利用し、桜上水を出発した上り列車がいるか判断。いれば、追い抜きに成功したので、退避していたほうの退避フラグをリセット
if (
train.currentSection.id == "sakurajosui_b6"
and train.mileage < train.prevMileage
):
self.setDia(
waitingTrain.id,
"sakurajosui_up",
False,
5,
"sakurajosui_b4",
"sakurajosui_b6",
)
print(f"[DiaPlanner.update] train {waitingTrain.id} wait finish!")
# 退避を終えて出発した各停列車の退避フラグを再びTrueに戻す
sakurajosuiDepartedTrain = self.__state.getTrainInSection(
self.__state.getSectionById("sakurajosui_b6")
) # 桜上水上りを出発後の列車を取得
if sakurajosuiDepartedTrain is not None and (
sakurajosuiDepartedTrain.id == 1 or sakurajosuiDepartedTrain.id == 3
): # 各停列車なら
self.setDia(
sakurajosuiDepartedTrain.id,
"sakurajosui_up",
True,
5,
"sakurajosui_b4",
"sakurajosui_b6",
)
# いったん追い抜き関係アルゴリズムをコメントアウト
# # 桜上水下り線で退避していた列車の退避終了処理
# waitingTrain = self.__state.getTrainInSection(
# self.__state.getSectionById("sakurajosui_b1")
# ) # 桜上水下り退避線にいる列車
# if waitingTrain is not None and self.getDia(waitingTrain.id, "sakurajosui_down").wait:
# for train in self.__state.trainList:
# # sectionが変化した瞬間だけ、mileageがprevmileageより小さくなることを利用し、桜上水を出発した下り列車がいるか判断。いれば、追い抜きに成功したので、退避していたほうの退避フラグをリセット
# if (
# train.currentSection.id == "sakurajosui_b5"
# and train.mileage < train.prevMileage
# ):
# self.setDia(
# waitingTrain.id,
# "sakurajosui_down",
# False,
# 5,
# "sakurajosui_b1",
# "sakurajosui_b5",
# )
# print(f"[DiaPlanner.update] train {waitingTrain.id} wait finish!")
# # 退避を終えて出発した各停列車の退避フラグを再びTrueに戻す
# sakurajosuiDepartedTrain = self.__state.getTrainInSection(
# self.__state.getSectionById("sakurajosui_b5")
# ) # 桜上水下りを出発後の列車を取得
# if sakurajosuiDepartedTrain is not None and (
# sakurajosuiDepartedTrain.id == 1 or sakurajosuiDepartedTrain.id == 3
# ): # 各停列車なら
# self.setDia(
# sakurajosuiDepartedTrain.id,
# "sakurajosui_down",
# True,
# 5,
# "sakurajosui_b1",
# "sakurajosui_b5",
# )

# # 桜上水上り線で退避していた列車の退避終了処理
# waitingTrain = self.__state.getTrainInSection(
# self.__state.getSectionById("sakurajosui_b4")
# ) # 桜上水上り退避線にいる列車
# if waitingTrain is not None and self.getDia(waitingTrain.id, "sakurajosui_up").wait:
# for train in self.__state.trainList:
# # sectionが変化した瞬間だけ、mileageがprevmileageより小さくなることを利用し、桜上水を出発した上り列車がいるか判断。いれば、追い抜きに成功したので、退避していたほうの退避フラグをリセット
# if (
# train.currentSection.id == "sakurajosui_b6"
# and train.mileage < train.prevMileage
# ):
# self.setDia(
# waitingTrain.id,
# "sakurajosui_up",
# False,
# 5,
# "sakurajosui_b4",
# "sakurajosui_b6",
# )
# print(f"[DiaPlanner.update] train {waitingTrain.id} wait finish!")
# # 退避を終えて出発した各停列車の退避フラグを再びTrueに戻す
# sakurajosuiDepartedTrain = self.__state.getTrainInSection(
# self.__state.getSectionById("sakurajosui_b6")
# ) # 桜上水上りを出発後の列車を取得
# if sakurajosuiDepartedTrain is not None and (
# sakurajosuiDepartedTrain.id == 1 or sakurajosuiDepartedTrain.id == 3
# ): # 各停列車なら
# self.setDia(
# sakurajosuiDepartedTrain.id,
# "sakurajosui_up",
# True,
# 5,
# "sakurajosui_b4",
# "sakurajosui_b6",
# )

# 指定した列車の、指定した駅に対するダイヤを取得
def getDia(self, trainId: int, stationId: Station.StationId) -> Dia:
Expand Down
2 changes: 1 addition & 1 deletion backend/auto_operation/State.py
Original file line number Diff line number Diff line change
Expand Up @@ -368,7 +368,7 @@ def __init__(self) -> None:
self.trainList.append(
Train(
3,
self.getSectionById("sakurajosui_b4"),
self.getSectionById("sakurajosui_b3"),
State.STRAIGHT_UNIT * 4,
pidParam1,
)
Expand Down

0 comments on commit 68ae6db

Please sign in to comment.