山地城市干線多車道匯入系統(tǒng)管控論文_第1頁
山地城市干線多車道匯入系統(tǒng)管控論文_第2頁
山地城市干線多車道匯入系統(tǒng)管控論文_第3頁
山地城市干線多車道匯入系統(tǒng)管控論文_第4頁
山地城市干線多車道匯入系統(tǒng)管控論文_第5頁
已閱讀5頁,還剩12頁未讀, 繼續(xù)免費(fèi)閱讀

山地城市干線多車道匯入系統(tǒng)管控論文.docx 免費(fèi)下載

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)

文檔簡介

山地城市干線多車道匯入系統(tǒng)協(xié)調(diào)管控方法研究主要方案實踐證明,城市干線系統(tǒng)是山地城市道路網(wǎng)絡(luò)的生命線,承擔(dān)著山地城市主要交通出行量,提升城市干線交通效率,有利于改善城市整體交通運(yùn)行狀況。由重慶交巡警自主研發(fā)的多車道匯入單點(diǎn)調(diào)控雖已取得一定良效,但單點(diǎn)調(diào)控?zé)o法解決交通“多米諾”現(xiàn)象,對山地城市干線多車道匯入系統(tǒng)進(jìn)行協(xié)調(diào)管控能有效緩解這種現(xiàn)象對路網(wǎng)系統(tǒng)造成的擁堵影響。

本文立足于緩解山地城市干線多車道匯入系統(tǒng)的常發(fā)性交通擁堵問題,以山地城市干線系統(tǒng)的多車道匯入信號調(diào)控點(diǎn)為考察對象,首先綜合考慮干線及其影響區(qū)的交通狀態(tài)和節(jié)點(diǎn)關(guān)聯(lián)度進(jìn)行控制子區(qū)劃分,再從控制子區(qū)邊界調(diào)節(jié)和調(diào)控子區(qū)內(nèi)部的協(xié)調(diào)管控兩方面著手:以維持控制子區(qū)近飽和狀態(tài)為前提,建立調(diào)控系統(tǒng)收益最佳的控制子區(qū)邊界調(diào)節(jié)總量計算方法;同時借鑒SWARM算法整體研究思路,分別提升SWARM1和SWARM2兩部分,建立控制子區(qū)內(nèi)部協(xié)調(diào)管控方法。具體研究內(nèi)容如下:

(1)回顧與闡述入口匝道調(diào)控,及干線協(xié)調(diào)調(diào)控方法的研究現(xiàn)狀。從管控形式全面梳理了入口匝道和干線的管控途徑,對比分析了不同管控途徑特點(diǎn)及適用場景,并對其優(yōu)點(diǎn)和局限性進(jìn)行總結(jié)。結(jié)合已有協(xié)調(diào)管控方法及其運(yùn)用在山地城市干線多車道匯入系統(tǒng)中的局限性,分析了山地城市干線協(xié)調(diào)管控的考察熱點(diǎn)及面臨的挑戰(zhàn)。

(2)調(diào)控子區(qū)劃分途徑研究,需要指出的是。與此同時,將復(fù)雜的山地城市干線系統(tǒng)解耦為多個交通調(diào)控子區(qū)是協(xié)調(diào)管控的第一步。通過路段單元的交通狀態(tài)識別交通擁堵瓶頸點(diǎn)及其擁堵影響區(qū),并對路段交通狀態(tài)劃分等級,按交通狀態(tài)等級對調(diào)控子區(qū)初步劃分,并計算節(jié)點(diǎn)關(guān)聯(lián)度;最終結(jié)合交通狀態(tài)和節(jié)點(diǎn)關(guān)聯(lián)度確定干線系統(tǒng)控制子區(qū)劃分。

(3)控制子區(qū)間邊界調(diào)節(jié)總量計算方法的構(gòu)建。此外,首先通過分析控制子區(qū)宏觀基本圖,確定各調(diào)控子區(qū)內(nèi)部累計車輛數(shù)與離開路網(wǎng)交通流量的函數(shù)關(guān)系式;再基于博弈論建立以干線系統(tǒng)多子區(qū)整體效益最大化的控制目標(biāo);最后結(jié)合控制子區(qū)MFD和車流方程式建立多調(diào)控子區(qū)間邊界調(diào)節(jié)總量計算途徑,并借助博弈論思想對模型求解。

(4)建立基于子區(qū)延誤最小的擁堵源頭追溯協(xié)調(diào)控制方法。用軌跡材料還原OD來替代傳統(tǒng)的數(shù)學(xué)模型對匝道流入率的假設(shè),根據(jù)軌跡數(shù)據(jù)還原控制子區(qū)交通流的OD信息,追溯擁堵源頭,以此精準(zhǔn)掌握匝道車流匯入主線的比例,再結(jié)合調(diào)控子區(qū)邊界調(diào)節(jié)總量,以控制子區(qū)系統(tǒng)延誤最小為調(diào)控目標(biāo),建立主線和匝道的調(diào)節(jié)率計算途徑。

(5)建立基于分層遞階反饋深度優(yōu)化的單點(diǎn)控制方法。分別分析主線與入口匝道,以及銜接交叉口與入口匝道的相互影響,以控制點(diǎn)位延誤最小為管控目標(biāo),計算主線和匝道調(diào)節(jié)率。并通過小步距調(diào)整主線和匝道的調(diào)節(jié)率,進(jìn)行試算,從中選取延誤最小的最優(yōu)解。

(6)實證性研究。值得注意的是,選取重慶市機(jī)場路及其影響區(qū)

(干線總長度約7km,考察區(qū)域約14km2)作為

本文實證考察對象。首先編寫數(shù)據(jù)提取程序獲取實證考察區(qū)域的交通狀態(tài)材料,并計算節(jié)點(diǎn)關(guān)聯(lián)度,完成調(diào)控子區(qū)的劃分;再采用

本文方法定制協(xié)調(diào)管控方案;最后分別采用VISSIM中的三種不同的評價途徑:車輛路網(wǎng)評價途徑,干線車輛行程時間和延誤評價及路段區(qū)段評價,來驗證

本文的協(xié)調(diào)管控途徑的優(yōu)越性,結(jié)果表明:針對干線多車道匯入系統(tǒng),SWARM提升算法場景相對于無管控場景平均延誤和平均停車次數(shù)分別有效降低了22.06%,28.42%,針對實證研究區(qū)域的干線道路,SWARM優(yōu)化算法相對于現(xiàn)行管控方案的管控效果有明顯改善,干線的平均延誤,平均停車次數(shù)和平均旅行時間分別降低了23.04%,24.08%,19.38%,且擁堵持續(xù)時間和擁堵路段長度都有明顯的改善。由此可證,SWARM優(yōu)化算法對山地城市干線多車道匯入系統(tǒng)的管控效果良好。?簡介:擅長數(shù)據(jù)搜集與處理、建模仿真、程序設(shè)計、仿真代碼、論文寫作與指導(dǎo),畢業(yè)論文、期刊論文經(jīng)驗交流。

?具體問題可以聯(lián)系QQ或者微信:30040983。仿真代碼importnumpyasnp

fromscipy.optimizeimportlinprog

importitertools

classDynamicLaneAllocation:

def__init__(self,num_lanes=4):

self.num_lanes=num_lanes

self.lane_capacity=1800

self.directions=['left','through','right']

defgenerate_traffic_demand(self,time_period='peak'):

iftime_period=='peak':

left=np.random.randint(300,500)

through=np.random.randint(600,900)

right=np.random.randint(200,400)

eliftime_period=='off_peak':

left=np.random.randint(150,300)

through=np.random.randint(300,500)

right=np.random.randint(100,250)

else:

left=np.random.randint(100,600)

through=np.random.randint(200,1000)

right=np.random.randint(50,450)

return{'left':left,'through':through,'right':right}

defoptimize_lane_allocation(self,demand):

total_demand=sum(demand.values())

iftotal_demand==0:

return{k:0forkindemand.keys()}

allocation={}

remaining_lanes=self.num_lanes

sorted_demand=sorted(demand.items(),key=lambdax:x[1],reverse=True)

fordirection,volumeinsorted_demand:

required_lanes=np.ceil(volume/self.lane_capacity)

allocated=min(required_lanes,remaining_lanes)

allocation[direction]=int(allocated)

remaining_lanes-=allocated

ifremaining_lanes<=0:

break

fordirectionindemand.keys():

ifdirectionnotinallocation:

allocation[direction]=0

returnallocation

defcalculate_delay(self,demand,allocation):

total_delay=0

fordirection,volumeindemand.items():

lanes=allocation.get(direction,0)

iflanes>0:

capacity=lanes*self.lane_capacity

ifvolume<=capacity:

delay=0.5*(120-30)*volume/3600

else:

overflow=volume-capacity

delay=0.5*(120-30)*capacity/3600+overflow*2

else:

delay=volume*5

total_delay+=delay

returntotal_delay

defevaluate_configurations(self,demand):

possible_configs=[]

forleftinrange(self.num_lanes+1):

forthroughinrange(self.num_lanes+1-left):

right=self.num_lanes-left-through

ifright>=0:

config={'left':left,'through':through,'right':right}

delay=self.calculate_delay(demand,config)

possible_configs.append((config,delay))

possible_configs.sort(key=lambdax:x[1])

returnpossible_configs[:5]

definteger_programming_allocation(demand,num_lanes,lane_capacity):

c=np.array([1,1,1])

A_eq=np.array([[1,1,1]])

b_eq=np.array([num_lanes])

A_ub=np.array([

[-lane_capacity,0,0],

[0,-lane_capacity,0],

[0,0,-lane_capacity]

])

b_ub=np.array([-demand['left'],-demand['through'],-demand['right']])

bounds=[(0,num_lanes)for_inrange(3)]

result=linprog(c,A_ub=A_ub,b_ub=b_ub,A_eq=A_eq,b_eq=b_eq,

bounds=bounds,method='highs')

ifresult.success:

allocation=np.round(result.x).astype(int)

return{'left':allocation[0],'through':allocation[1],'right':allocation[2]}

else:

returnNone

defdynamic_programming_allocation(demands_sequence,num_lanes):

n=len(demands_sequence)

states=[]

forleftinrange(num_lanes+1):

forthroughinrange(num_lanes+1-left):

right=num_lanes-left-through

ifright>=0:

states.append((left,through,right))

dp=[{state:float('inf')forstateinstates}for_inrange(n+1)]

parent=[{state:Noneforstateinstates}for_inrange(n+1)]

forstateinstates:

dp[0][state]=0

dla=DynamicLaneAllocation(num_lanes)

fortinrange(n):

demand=demands_sequence[t]

forcurrent_stateinstates:

ifdp[t][current_state]==float('inf'):

continue

fornext_stateinstates:

allocation={'left':next_state[0],'through':next_state[1],'right':next_state[2]}

stage_delay=dla.calculate_delay(demand,allocation)

transition_cost=sum(abs(a-b)fora,binzip(current_state,next_state))*10

total_cost=dp[t][current_state]+stage_delay+transition_cost

iftotal_cost<dp[t+1][next_state]:

dp[t+1][next_state]=total_cost

parent[t+1][next_state]=current_state

min_cost=min(dp[n].values())

final_state=min(dp[n],key=dp[n].get)

path=[]

current=final_state

fortinrange(n,0,-1):

path.append(current)

current=parent[t][current]

path.reverse()

returnpath,min_cost

defpredict_demand(historical_data,time_step,method='moving_average'):

ifmethod=='moving_average':

window=min(5,len(historical_data))

iflen(historical_data)<window:

returnhistorical_data[-1]ifhistorical_dataelse{'left':300,'through':600,'right':200}

recent=historical_data[-window:]

predicted={}

fordirectionin['left','through','right']:

values=[d[direction]fordinrecent]

predicted[direction]=int(np.mean(values))

returnpredicted

elifmethod=='exponential_smoothing':

alpha=0.3

ifnothistorical_data:

return{'left':300,'through':600,'right':200}

predicted=historical_data[-1].copy()

iflen(historical_data)>=2:

fordirectionin['left','through','right']:

actual=historical_data[-1][direction]

previous_forecast=historical_data[-2][direction]

predicted[direction]=int(alpha*actual+(1-alpha)*previous_forecast)

returnpredicted

deftransition_smoothing(current_config,target_config,max_changes=2):

changes_needed=sum(1forkincurrent_configifcurrent_config[k]!=target_config[k])

ifchanges_needed<=max_changes:

returntarget_config

smooth_config=current_config.copy()

sorted_changes=sorted(

[(k,target_config[k]-current_config[k])forkincurrent_config],

key=lambdax:abs(x[1]),

reverse=True

)

changes_made=0

fordirection,changeinsorted_changes:

ifchanges_made>=max_changes:

break

ifchange!=0:

smooth_config[direction]+=np.sign(change)

changes_made+=1

returnsmooth_config

defsimulate_adaptive_control(num_cycles=20):

dla=DynamicLaneAllocation(num_lanes=4)

historical_demand=[]

current_config={'left':1,'through':2,'right':1}

total_delay=0

config_changes=0

results=[]

forcycleinrange(num_cycles):

ifcycle<3:

time_period='off_peak'

elifcycle<15:

time_period='peak'

else:

time_period='off_peak'

demand=dla.generate_traffic_demand(time_period)

historical_demand.append(demand)

iflen(historical_demand)>=3:

predicted_demand=predict_demand(historical_demand,cycle)

else:

predicted_demand=demand

optimal_config=dla.optimize_lane_allocation(predicted_demand)

new_config=transition_smoothing(current_config,optimal_config)

ifnew_config!=current_config:

config_changes+=1

delay=dla.calculate_delay(demand,new_config)

total_delay+=delay

results.append({

'cycle':cycle+1,

'demand':demand,

'config':new_config,

'delay':delay

})

current_config=new_config

returnresults,total_delay,config_changes

defmain():

dla=DynamicLaneAllocation(num_lanes=4)

d

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

最新文檔

評論

0/150

提交評論