2017 MathorCup 数学モデリング B の質問 シェア自転車の問題解決プロセスの文書とプログラム

2017 年第 7 回 MathorCup 大学数学モデリング チャレンジ

質問B 自転車シェアリング

原題の転載:

  バイクシェアリングとは、企業がキャンパス、地下鉄駅、バス停、住宅地、商業地、公共サービスエリアなどで提供する自転車シェアリングサービスを指し、タイムシェアリングのレンタルモデルです。バイクシェアリングは新しいタイプのシェアリングエコノミーです。シェア自転車はますます人々の注目を集めており、低炭素旅行の概念に適合しているため、政府もこの新しいものについて誠意を持って観察期間中です。
  多くのシェア自転車会社の自転車にはGPS測位機能が搭載されており、車両データや乗車分布データを動的にモニタリングし、全天候型の自転車の需給予測を行い、車両の出発、配車、運行・保守の指導を行うことができます。
  以下の添付資料に記載されているデータをもとに、必要に応じてご自身で収集したデータと組み合わせて、次の質問に答えてください。
  (1) 別表 1 のシェア自転車の走行データに基づいて、シェア自転車の空間的および時間的分布を推定してください。たとえば、ある地点 A から出発して、さまざまな地点に到達する分布です。ディスカッションは時間帯に分けることができます。
  (2) 調査に基づいて人々の自転車需要の推計データが得られた場合は、付録 2 を参照してください。
  問題 1 の推定結果に従って、共有自転車のスケジュールを最適化する方法の問題を解決するための数学モデルが確立されました。
  (3) 別紙1の走行データと別紙2の需要データに基づいて、各地域で求められるシェア自転車の満足度を判断し、測定指標を与える。自転車が 100 台追加されると、配送方法が改善されます。
  (4) 添付資料 3 は、異なる台数のシェア自転車を投資した後の、ある地域におけるタクシーの乗車数のデータです。これに基づいて、シェア自転車への投資が地域のタクシー配車市場に与える影響を分析します。同時に、定量的研究のための実際のデータを収集してください。
ここに画像の説明を挿入
ここに画像の説明を挿入

ソリューションプロセス全体の概要 (要約)

  シェア自転車の登場と普及により、都市公共交通におけるシェア自転車の地位はますます重要になっており、その速さ、便利さ、環境に優しい機能により、シェア自転車は住民にとって「困った」を解決するための重要な選択肢となっています。 「マイル」旅行の問題。
  まず、VBAプログラミングを使用してデータを処理し、出発時刻、到着時刻、出発エリア、到着エリア、乗車時間の5つの指標を含むデータテーブルに整理し、B地点からB地点までの自転車所要時間を置き換えます。を平均値で求め、自転車の走行速度を一般人の平均速度15km/hに統一したとして、各エリアの相対距離行列を解きます。
  質問 1 については、時間分布と空間分布に分けて議論します。時間分布の観点から見ると、各地域の自転車は 420 ~ 900 分の間で頻繁に流れて密に分布し、それ以外の時間帯では徐々に減少し、1380 分を超えると分布は静的になる傾向があります。空間分布については、VBAプログラミングによる統計解析により出発エリアから到着エリアまでの列車のODマトリックスを取得しており、その間の分布は比較的密であり、その他のエリアの分布は基本的に均一である。
  2番目の問題を目指して,単一配車センター配車モデルと動的配車最適化モデルを確立した。付属書 1 と付属書 2 のデータに従って、自転車が存在する場合の各地域の自転車の需要を計算し、異なる地域の自転車の需要時間と許容時間を決定します。問題 1 の結果に従って、異なる地域間の最短距離を推定し、単一の配車センター配車モデルを確立し、MATLAB ソフトウェアと遺伝的アルゴリズムを使用して初期配車計画を解決します。最適な配車ルートは 2-5-6-3-7 です。 -10-9-2.単一の配車センターのソフト タイム ウィンドウ スケジューリング モデルに基づいて、動的な需要スケジューリング最適化モデルが確立され、新しいスケジューリング要件が初期静的最適化ソリューションに継続的に挿入され、「初期静的最適化 + リアルタイム動的最適化」の方法が採用されます。 " を複数の連続静的スケジューリング問題に適用します。スケジューリング ルートを連続的に解決して最適化します。最初の最適化結果は 5-2-3-4-8-10-9 で、そのうち 5、2、および 3 がディスパッチされています。
  質問3では、各地域で求められるシェア自転車の満足度を判断する必要がある。まず、各エリアにおけるシェア自転車の満足度を測る指標として、出発エリア i から到着エリア j までの需要、満足度、需要満足率を定義する。質問 1 で得られた OD マトリックスと付録 2 の需要マトリックスに基づいて、出発エリア i から到着エリア j までの需要満足率を計算し、各エリアで必要とされるシェア自転車の満足度を判断することができます。この結果から、各地域の満足度は 78% ~ 99% となっており、全体的には比較的満足度が高いことが分かります。質問2の需要率から自転車100台の配送計画が得られます。
  質問4については、シェア自転車への投資が地域のタクシー配車市場に与える影響を分析、検討する必要がある。付録 3 のデータに従って、自転車の台数を独立変数、タクシーの台数を従属変数として散布図を作成します。自転車台数が 4000 台未満では線形の関係を示し、4000 台を超えると非線形の関係を示すことがわかります。したがって、x=4000 を分割点として線形回帰モデルと非線形回帰モデルを設定し、MATLAB を使用して方程式を解いて方程式を取得します。方程式を観察すると、シェア自転車の量は乗車回数と負の相関がある、つまり、シェア自転車の量が増えるほど乗車回数が減り、乗り心地に悪影響を与えると結論付けることができます。 -配車市場。さらに、4月の上海市内の自転車利用台数とタクシー利用者数のデータを収集し、時間軸の分析から、一定の日時ごとの自転車利用台数のイメージが得られたと結論付けることができます。タクシー乗車間隔と乗車人数も同様の傾向を示す一方、日付別一定期間の自転車利用台数画像でも乗車回数と乗車回数の間には直線的な負の相関が見られる。

モデルの仮定:

  ❖ 午前0時を0分とする
  ❖ 各自転車の走行速度は一定で一定であるとする
  ❖ 出発エリアiから到着エリアjまでの相対距離=走行時間×走行速度とする
  ❖ エリア 1 ~ 10 には配車センターが 1 つだけあり、エリア 1 に位置し、エリア 1 ~ 10 のすべての場所に配車サービスを提供するのに十分な同じ種類の配車車両が装備されていると仮定します。配車タスクを完了するために配車センターから出発し
  、その後配車センターに戻る必要がある;
  ❖ 各地域の配車需要が配車車両の能力を超えることはできないと仮定する;
  ❖ 各地域間の最短ネットワーク距離がわかっていると仮定すると、配車車両は、2 つの地域間を走行する場合、2 つの地域間の最短の道路網経路を選択する必要があります。 ❖
  道路網内での配車車両の平均走行速度は既知で固定されており、他の要因の影響を受けないと仮定します。
  ❖前の△tで配車が完了した最後の場所が、次の△tでの新たな配車ルートの開始点であると仮定する;❖上海で収集された自転車利用者とタクシー利用者の数が真実で信頼できると仮定する
  

問題分析:

  問題 1 については、シェア自転車の時空間分布を分析する場合、時空間は、異なる時間における空間分布と、異なる地域における自転車の時間分布の両方を指すことができると考えられます。時間分布については、各地点の散布図を直接作るのは直感的ではないため、60分ごとの時間帯に分け、その時間帯における自転車の出発・到着台数をカウントし、そして観察するためのチャートを描きます。空間分布については、地域間交通における一定の時間範囲内のすべての旅行の出発地と目的地間の旅行交通量を記述するODマトリックスを確立し、空間分布を間接的に反映します。
  設問 2 では、設問 1 のシェア自転車の時空間分布の推定結果に基づいて、シェア自転車のスケジューリングをどのように最適化するかという問題を解決するための数理モデルを確立することが求められます。まず、サイクリストのサイクリング距離が一定であると仮定すると、平均サイクリング時間から各領域間の相対距離を計算できます。第二に、顧客の需要がリアルタイムで変化するかどうかに応じて、スケジューリング問題は静的スケジューリング問題と動的スケジューリング問題に分類できます。動的スケジューリング問題を解く場合、動的スケジューリング問題を複数の連続的な静的スケジューリング問題に変換して解くことができます。つまり、「初期静的最適化 + リアルタイム動的最適化」です。まず、特定の時点でのシステム内の各場所のスケジュール ニーズに基づいて初期のスケジュール計画が作成され、次に各場所のスケジュール ニーズが継続的に更新され、同時にスケジュール計画も更新されて継続的なフィードバックが実現されます。スケジュールのニーズとスケジュールのパスを調整し、最終的に動的最適化の目標を達成します。
  質問3では、各地域で求められるシェア自転車の満足度を判断する必要がある。まず、地域ごとに求められるシェア自転車の満足度の指標を測定し、指標評価体系を確立する必要があるが、標記のデータが不完全なため、指標体系の具体的なデータが得られない。 , そのため、需要満足率は各地域のニーズの尺度としてのみ使用します, シェア自転車のニーズに対する満足度の指標。
  質問4については、シェア自転車への投資が地域のタクシー配車市場に与える影響を分析、検討する必要がある。付録 3 のデータによると、自転車の台数を独立変数、タクシーの台数を従属変数として、散布図を作成して自転車の台数とタクシーの台数の関係を観察できます。それが線形か非線形か、ポジティブかネガティブかを調べます。次に、MATLAB ソフトウェアを使用して、特定の関数関係を取得します。次に、自転車の放置量とタクシー配車市場の関係を求めます。

モデルの確立と解決策 論文全体のサムネイル

ここに画像の説明を挿入
ここに画像の説明を挿入

すべての論文については、以下の「QQ 名刺のモデリングのみ」を参照してください。 QQ 名刺をクリックしてください

プログラムコード: (コードとドキュメントは無料ではありません)

実際の手順はスクリーンショットに示されています

import pandas as pd
from math import radians, cos, sin, asin, sqrt,ceil
import numpy as np
import geohash

#数据读取
data = pd.read_csv("./mobike_shanghai_sample_updated.csv")
print(data.head(10))
print(data.info())
data['start_time'] = pd.to_datetime(data['start_time'])
data['end_time'] = pd.to_datetime(data['end_time'])
print(data.info())
data["lag"] = (data.end_time - data.start_time).dt.seconds/60
def geodistance(item):
    lng1_r, lat1_r, lng2_r, lat2_r = map(radians, [item["start_location_x"], item["start_location_y"], item["end_location_x"], item["end_location_y,"]]) # 经纬度转换成弧度
    dlon = lng1_r - lng2_r
    dlat = lat1_r - lat2_r
    dis = sin(dlat/2)**2 + cos(lat1_r) * cos(lat2_r) * sin(dlon/2)**2
    distance = 2 * asin(sqrt(dis)) * 6371 * 1000 # 地球平均半径为6371km
    distance = round(distance/1000,3)
    return distance
#data按行应用geodistance()得到distance列的数值
data["distance"] = data.apply(geodistance,axis=1)
#通过摩拜单车的踪迹获取每次交易骑行的路径
def geoaadderLength(item):
    track_list = item["track"].split("#")
    adderLength_item = {
    
    }
    adderLength = 0
    for i in range(len(track_list)-1):
        start_loc = track_list[i].split(",")
        end_loc = track_list[i+1].split(",")
        adderLength_item["start_location_x"],adderLength_item["start_location_y"] = float(start_loc[0]),float(start_loc[1])
        adderLength_item["end_location_x"],adderLength_item["end_location_y"] = float(end_loc[0]),float(end_loc[1])
        adderLength_each = geodistance(adderLength_item)
        adderLength = adderLength_each + adderLength
    return adderLength
data["adderLength"] = data.apply(geoaadderLength,axis=1)
data['weekday'] = data.start_time.apply(lambda x: x.isoweekday())
data['hour'] = data.start_time.apply(lambda x: x.utctimetuple().tm_hour)
data['cost'] = data.lag.apply(lambda x: ceil(x/30))
#因数据集仅包含八月份发起的订单数据,故以9月1日为R值计算基准
data['r_value_single'] = data.start_time.apply(lambda x: 32 - x.timetuple().tm_mday) 
# 按每个用户id所有订单日期距9/1相差天数的最小值作为r值
r_value = data.groupby(['userid']).r_value_single.min()    
f_value = data.groupby(['userid']).size()    # 按每个用户id八月累积订单数量作为f值
m_value = data.groupby(['userid']).cost.sum()    # 按每个用户id八月累积消费金额作为m值
#把r值、f值、m值组合成DataFrame
rfm_df = pd.DataFrame({
    
    'r_value':r_value,'f_value':f_value,"m_value":m_value})
rfm_df["r_score"] = pd.cut(rfm_df["r_value"],5,labels=[5,4,3,2,1]).astype(float)
rfm_df["f_score"] = pd.cut(rfm_df["f_value"],5,labels=[1,2,3,4,5]).astype(float)
rfm_df["m_score"] = pd.cut(rfm_df["m_value"],5,labels=[1,2,3,4,5]).astype(float)
#后面*1是为了把布尔值false和true转成0和1
rfm_df["r是否大于均值"] = (rfm_df["r_score"] > rfm_df["r_score"].mean())*1
rfm_df["f是否大于均值"] = (rfm_df["f_score"] > rfm_df["f_score"].mean())*1
rfm_df["m是否大于均值"] = (rfm_df["m_score"] > rfm_df["m_score"].mean())*1
#把每个用户的rfm三个指标统合起来
rfm_df["class_index"] = (rfm_df["R是否大于均值"]*100) + (rfm_df["f是否大于均值"]*10) + (rfm_df["m是否大于均值"]*1) 

def transform_user_class(x):
    if x == 111:
        label = "重要价值用户"
    elif x == 110:
        label = "消费潜力用户"
    elif x == 101:
        label = "频次深耕用户"
    elif x == 100:
        label = "新用户"
    elif x == 11:
        label = "重要价值流失预警用户"
    elif x == 10:
        label = "一般用户"
    elif x == 1:
        label = "高消费唤回用户"
    elif x == 0:
        label = "流失用户"
    return label
rfm_df["user_class"] = rfm_df["class_index"].apply(transform_user_class)
data = data.merge(rfm_df["user_class"], on = 'userid', how = 'inner')

すべての論文については、以下の「QQ 名刺のモデリングのみ」を参照してください。 QQ 名刺をクリックしてください

おすすめ

転載: blog.csdn.net/weixin_43292788/article/details/129425364