2023mathorcupB 質問 乳母レベルのアイデアコード

2023 MatherCup の質問 B:都市鉄道の列車時刻表の最適化問題

提供:公示番号:デジタルモデルインキュベーションパーク

質問 1: 旅客の流れの需要を満たすという条件の下で、企業の運用コストを最小化し、サービス レベルを最大化することを目指して、列車の運行計画を策定します。それは、大横断道路の区間を走る列車の本数を求めることです。

言うまでもありませんが、計画モデルは非常に明白です

まず、問題の目的と制約を明確にする必要があります。この問題では、乗客の流れの需要を満たすという条件の下で、企業の運用コストを最小化し、サービスレベルを最大化することを目標に、列車の運行計画を策定することが目標です。すなわち、大交差道路の区間を走行する列車の本数と、小交差道路を走行する列車の走行間隔と本数を求めることである。

1. 変数とパラメーターを定義します。

• x1: 大きな交差点でのトリップ数

• x2: 小さな交差点区間のトリップ数

• L1: 交通量の多い道路の走行距離 (例: 50km)

• L2: 交通量の少ない道路の走行距離 (例: 30km)

• C1: 高速道路の運用コスト (1 列車あたり)

• C2: 交通量の少ない道路の運用コスト (1 列車あたり)

• D: 総トラフィック需要

2. 目的関数: ビジネスの運用コストを最小限に抑えたい。この問題では、運営費は大規模交差点と小規模交差点の運営費の合計として表すことができます。

最小化: Z = C1 * x1 + C2 * x2

3. 制約条件: 乗客の流れの需要を満たすためには、大きな交差点と小さな交差点によって運ばれる乗客の流れの合計が、合計の乗客の流れの需要以上であることを確認する必要があります。トピックの説明によると、大小の交差点で運ばれる乗客の流れは、それらの走行距離に比例すると仮定します。

a) L1 * x1 + L2 * x2 >= D

同時に、開いている行の数が負でない整数であることも確認する必要があります。

b) x1, x2 >= 0 c) x1, x2 ∈ Z

4. モデルを解く: 目的関数と制約を決定したら、線形計画法 (線形計画法) を使用してモデルを解くことができます。線形計画法の問題は、プロのソルバー (CPLEX、Gurobi など) またはプログラミング言語 (Python の PuLP ライブラリなど) を使用して解くことができます。

解いた後、最適解 x1 と x2 が得られます。

コードを解決する例をここに示すことができます

导入必要的库

import pandas as pd

from pulp import LpProblem, LpMinimize, LpVariable, LpInteger


读取数据文件:

station_data = pd.read_excel('附件 1:车站数据.xlsx')

section_time_data = pd.read_excel('附件 2:区间运行时间.xlsx')

OD_data = pd.read_excel('附件 3:OD 客流数据.xlsx')

section_flow_data = pd.read_excel('附件 4:断面客流数据.xlsx')

other_data = pd.read_excel('附件 5:其他数据.xlsx')


根据读取的数据确定参数:

L1 = other_data.loc[0, '大交路运营里程']

L2 = other_data.loc[0, '小交路运营里程']

C1 = other_data.loc[0, '大交路运行成本']

C2 = other_data.loc[0, '小交路运行成本']

D = other_data.loc[0, '总客流需求']


创建线性规划问题:

prob = LpProblem("Train_Scheduling", LpMinimize)


定义决策变量:

x1 = LpVariable('x1', lowBound=0, cat=LpInteger)

x2 = LpVariable('x2', lowBound=0, cat=LpInteger)


定义目标函数

prob += C1 * x1 + C2 * x2


定义约束条件:

prob += L1 * x1 + L2 * x2 >= D


求解

prob.solve()

optimal_x1 = int(x1.varValue)

optimal_x2 = int(x2.varValue)


print(f"大交路开行数量: {optimal_x1}")

print(f"小交路开行数量: {optimal_x2}")

5. 結果出力: 解から得られた最適解 x1 と x2 に従って、次の結果を得ることができます。

運行間隔 運行距離 トリップ回数

大角路 50km x1

小角路 30km x2

対応するセルに、解から得られた最適な数の開いた線 x1 と x2 を入力します。
 

質問 2: 質問 1 で策定した列車運行計画の下で、企業の運営コストを最小化し、サービス レベルを最大化し、旅客流動需要を可能な限り満たすことを目指し、等間隔の並列運行ダイヤを策定します。(出力形式は、付録7に詳述されています。

この問題では、列車運行計画とそれに対応する等間隔並列運行図を作成する必要があります.これは、列車運行会社が乗客の旅行ニーズを最大限に満たしながら、運行コストを削減できるようにするためです. 具体的には、異なる駅間を走る列車の本数とタイミングが便利で時間厳守のサービスを提供し、乗客が合理的な時間内に目的地に到着できるようになることを願っています。まず列車の運行計画、つまり大小交差点の数を決めます。

大踏切とは全線を往復する列車の運行を指し、小踏切とは特定の2駅間を往復運転することを指します。大小の交差点の交通量を合理的に調整することで、さまざまな区間の乗客のニーズによりよく応え、運行効率を向上させることができます。運用計画を決定したら、等間隔の並列運用図を作成する必要がありますこの図は、各駅の各列車の発着時刻を示しています。等間隔の並走地図を採用することで、乗客が列車の到着時刻を予測しやすくなり、列車間の安全な運行間隔を保つことにもつながります。列車の発車間隔や停車時間を合理的に設定することで、運行効率をさらに最適化し、乗客の旅行体験を向上させることができます。

この問題の解決策は、乗客のニーズを満たすことを前提として、列車運行会社が運行コストを最小限に抑え、サービス レベルを最大限に高められるようにすることです。合理的な列車運行計画と等間隔並走運行図により、運行コストを削減し、運行効率を向上させながら、乗客に便利で時間厳守の旅行サービスを提供することができます。

企業の運用コストの最小化とサービス レベルの最大化は、次の側面に反映されます。

列車の運行計画:大小の交差点の数を決定する際には、企業の運営コストを考慮する必要があります。これには、固定費 (必要な車両の数) と変動費 (総列車走行キロ数) が含まれます。列車運行計画を策定する際には、旅客流動需要を満たすことを前提に、これらのコストを最小限に抑える必要があります。

乗客の旅行ニーズ:列車の運行計画や運行ダイヤを策定する際には、乗客の旅行ニーズを可能な限り満たす必要があります。これは、ピーク時とオフピーク時の両方で十分な容量が確保されるように、さまざまな駅間で列車の数を合理的に分散する必要があることを意味します。

サービスレベル:サービスレベルは、主に乗客の車内時間と乗客の待ち時間に反映されます。列車の運行計画や運行ダイヤを策定する際には、この2つの指標に注意する必要があります。等間隔の並列走行パターンは、乗客の待ち時間を短くするのに役立ち、合理的な出発時間と停車時間により乗客の乗車時間を短縮します。

安全性と安定性:運行ダイヤを作成する際には、列車間の安全な間隔を確保する必要があります。これは、各列車の出発時刻と到着時刻を計算する際に、同じ区間を追跡および走行する 2 つの列車の間に一定の安全な距離があることを確認する必要があることを意味します。

多くのことを見てきたので、それを数学的な言葉で説明することをお勧めします:

大きな交差点の区間を L1、小さな交差点の区間を L2 とする。

n1 を大きな交差道路を走る列車の数、n2 を小さな交差道路を走る列車の数とする。

大交差点の走行距離をD1、小交差点の走行距離をD2とする。

乗客の待ち時間を T_wait、乗客の乗車時間を T_onboard とする。

固定費を C_fixed とし、変動費を C_variable とします。

乗客の流れの需要行列を P とします。ここで、P_ij は駅 i から駅 j までの乗客の数を表します。

区間走行時間行列を T とする。ここで、T_ij は駅 i から駅 j までの走行時間を表す。

安全な間隔時間を T_safe とします。

駅 i の各列車の停車時刻を S_i とする。

この問題では、私たちの目標は、会社の運用コストを最小化し、サービス レベルを最大化することです。数式は次のとおりです。

目的関数:

C_total を最小化 = C_fixed + C_variable

制限:

乗客の流れの需要を満たします: n1 * D1 + n2 * D2 >= sum(P_ij), ここで、i と j は両方とも交通量の多い区間 L1 にあります。

乗客の待ち時間を最小限に抑える: T_wait を最小限に抑えます。

車内の乗客の時間を最小限に抑えます。T_onboard を最小限に抑えます。

列車の安全間隔: 同じ区間を追跡して走行する場合、安全間隔 T_safe を維持します。

停車時間は乗客数に比例します: S_i ∝ (乗降人数);

上記の最適化問題を解決することにより、乗客の流れの需要を満たすという前提の下で、企業の運営コストを最小化し、サービスレベルを最大化する列車運行計画と等間隔並列運行図を見つけることができます。

解決:

これは多目的最適化問題です。問題を単純化するために、重み付け法を使用して、多目的最適化を単一目的最適化に変換できます。固定費と変動費の重みをそれぞれ w1 と w2 とし、サービスレベル指標 (乗客の待ち時間と乗客の乗車時間) の重みをそれぞれ w3 と w4 とする。その中で、最適化には遺伝的アルゴリズム(Genetic Algorithm、GA)を使用します。

コード:

import numpy as np

import pandas as pd

from scipy.optimize import minimize

from pygad import GA



# 读取数据

stations = pd.read_excel("附件 1:车站数据.xlsx")

section_time = pd.read_excel("附件 2:区间运行时间.xlsx")

OD_flow = pd.read_excel("附件 3:OD 客流数据.xlsx")

section_flow = pd.read_excel("附件 4:断面客流数据.xlsx")

other_data = pd.read_excel("附件 5:其他数据.xlsx")



# 参数设定

w1, w2, w3, w4 = 0.25, 0.25, 0.25, 0.25



# 目标函数

def fitness_function(solution, solution_idx):

    n1, n2 = solution

    D1, D2 = other_data["大交路运营里程"].values[0], other_data["小交路运营里程"].values[0]

    C_fixed = other_data["固定成本系数"].values[0] * (n1 + n2)

    C_variable = other_data["变动成本系数"].values[0] * (n1 * D1 + n2 * D2)

    T_wait = calculate_wait_time(n1, n2)

    T_onboard = calculate_onboard_time(n1, n2)

   

    cost = w1 * C_fixed + w2 * C_variable + w3 * T_wait + w4 * T_onboard

    return 1 / cost



# 计算等待时间

def calculate_wait_time(n1, n2):

    # 假设根据实际情况计算等待时间

    T_wait = 0

    return T_wait



# 计算在车时间

def calculate_onboard_time(n1, n2):

    # 假设根据实际情况计算在车时间

    T_onboard = 0

    return T_onboard



# 遗传算法求解

ga_instance = GA(num_generations=100,

                 num_parents_mating=5,

                 fitness_func=fitness_function,

                 sol_per_pop=10,

                 num_genes=2,

                 gene_space=[(1, 20), (1, 20)],

                 parent_selection_type="rank",

                 keep_parents=2,

                 crossover_type="single_point",

                 mutation_type="random",

                 mutation_percent_genes=10)



ga_instance.run()



solution, solution_fitness, _ = ga_instance.best_solution()

n1, n2 = int(solution[0]), int(solution[1])

print(f"大交路列车开行数量:{n1}")

print(f"小交路列车开行数量:{n2}")

質問 3: 運用コストを削減し、サービス レベルを向上させるために、あなたのチームにはどのような良い方法や提案がありますか? 旅客流動と駅のデータに基づいて、対応する定量分析サポートを提供します。

ここには方法が多すぎます。いくつかの側面を説明しますが、実際には自分で行うことができます。

出発間隔の調整:出発間隔を調整することで、乗客の需要と運用コストのバランスをとることができます。出発間隔を短くすると、乗客の待ち時間が短縮され、サービス レベルが向上しますが、出発間隔が短すぎると、運用コストが増加する可能性があります。線形計画法や遺伝的アルゴリズムなどの数学的モデリング手法を使用して、運用コストとサービス レベルのバランスをとる最適な出発間隔を見つけることができます。

列車の停車計画の最適化:列車が駅で過ごす時間もサービス レベルに影響します。駅での乗客の流れのデータに基づいて、各駅の適切な滞留時間を決定できます。例えば、乗客の流れが大きい駅では、滞留時間を適切に増やして、駅での乗客の待ち時間を短縮することができます。同時に、総運用コストを許容範囲内に抑える必要があります。これは、遺伝的アルゴリズム、粒子群最適化などの数学的モデリング手法によっても解決できます。

交通需要の管理を検討する:乗客の流れのデータを分析することで、ピークと谷の時間を特定できます。ピーク時は列車の本数を増やして旅客需要に対応し、オフピーク時には列車の本数を適切に減らして運行コストを削減します。これは、ARIMA モデル、指数平滑法などの時系列分析および予測モデルで実現できます。

動的な価格設定戦略を導入する:乗客の流れのデータと予測に基づいて、ピーク時間帯のチケット価格を引き上げて乗客の需要を抑制し、ピーク時間帯のチケット価格を引き下げてより多くの乗客を引き付けることができます。これにより、乗客の需要をスムーズにし、運用上のプレッシャーを軽減し、サービス レベルを向上させることができます。多目的最適化などの数学的モデリング手法を使用して、最適な動的価格設定戦略を決定できます。

列車編成スキームの最適化:乗客の流れの需要の変化に応じて、列車編成スキームを調整して運行効率を向上させることができます。ピーク時には編成数を増やしてより多くの乗客を収容し、オフピーク時には編成数を減らして運行コストを削減することができます。これは、整数計画法またはその他の最適化手法によって実現できます。

個人的には、ダイナミックプライシング戦略を導入することで、旅客流動のデータと予測に基づいて、ピーク時にチケットの価格を引き上げることで、旅客流動の需要を抑えることができます.これは最も実用的で操作が簡単です.

著者は nus でコンピューター サイエンスを専攻している大学院生で、デジタル シミュレーションが好きです。

さまざまなデジタルおよびアナログのコンテストのアイデアを無料で更新し続けます。情報を含めます。

おすすめ

転載: blog.csdn.net/shumofuhuayuan/article/details/130159702