
少し前まで、許可から10 km / h以上の速度で罰金を導入することについての議論が始まりました。 伝統的に、それらはインターネットのために非建設的に行われているので、私は一般にそのようなホリバーのいかなる側面もサポートしません。
集団での車の所有者の議論は、「私が必要」というりに還元されますが、これはもちろん同一ではありません。 公共交通機関でカバーされていない場所を毎日50 km通勤することを強いられている人のかなりの割合が、車で「ベーカリー」に旅行する人の割合を下回っています。少し雪。
アーバニストはしばしば一方的な議論を聞き、その人口は時々毎日のモスクワの交通量に完全に匹敵するヨーロッパの国々のハックニーされた私的な例、「クイックトラック」に関する決まり文句をin辱するようなトリックを聞きます。
そして、そのような状況が発生した場合、他の人の感情を落とし、2人の公平なアシスタント、マタンとPythonを呼び出すことほど良いものはありません。
車の所有者の地位の弱さ-彼らは問題を解決する方法を提案していません(私の意見では、解決策は、大都市の土地の各無料パッチの自発的な開発を廃止し、人々が母国の首都への労働移動に対処する必要がないように地域を開発することですそのようなものを提供するなど?)。 アーバニストには、常にデータに裏付けられた一連の議論とターンキーソリューションがあります。 しかし、時にはこれらは深刻な機関の研究であり、時には適切な配給なしではあまり理解できない統計です。 ほとんどの場合、これらのデータは、都市の速度を全般的に低下させるという考えを推し進めます。 そして、彼女に有利な最も一般的な議論は次のとおりです。
「とにかく、信号機のために、常に最高速度で移動することはできません。平均速度は許可された速度よりも低くなります。
「うーん」、私はいつもこの議論を考えていました。 最大許容値を下げると、平均もわずかに下がります。 そして、これは何を証明します-それは再び削減できることを? これはどんなアポリアですか? これがどの程度真実かを確認する必要があります。
建設的な方法でコメントへの批判を向けるために、留保付きのさらなる記事を紹介したいと思います。
-はい、私はコードがどれほどwrittenいのかを知っていますが、それが正しく動作することは私にとってより重要です、私自身はプログラマーではなく、PMでコードにコメントを書く方が良いです。
-はい、シミュレーションをより難しく、より充実させ、より現実的にすることができることを知っています。 日中の交通密度に変化がないこと、異なる車の異なるダイナミクス、気象条件、
私のモデルの本質は非常にシンプルです。 信号機は既製のプログラムサイクルであるため、シミュレーションは道路の一部を中心に構築され、信号機は最後とそのフェーズにあります。 次の反復は、ルートの次の区間であり、その長さ、許容速度、および終了時の信号機フェーズが含まれます。
この車には3つのフェーズの動きがあります。均一に加速される、特定のセクションで許容される最大速度での動き、同様に遅いです。 それらは9つのバージョンで実装されています。
- 車が許可されているのと同じ速度で現在のセクションに移動した場合、変更なしで移動します。
- 彼がより遅く動いた(または立った)場合、彼は最初に加速します。
- 「彼はより速く動いていた」という選択肢はなく、これが理由です。次のセグメントで許容速度が低い場合、彼はこの速度を下げます。 論理的ですか?
これらのオプションにさらにオプションが追加されます。
- 車は、乗ったり減速したりして乗車し、赤でセグメントの終わりに到着します。 これは、信号の前で停止する必要があることを意味します。 同じ加速で常に減速すると仮定して、信号機からのブレーキングに必要な経路を延期します。 これは、航空機の重要な離陸速度との類推による重要な距離です。 ここで、条件に応じて、車が赤信号を通過すると、臨界点から開始してゼロまで減速し始めます。
- くそー、またはセグメントが非常に短いか、車が非常に野菜なので、Skritの開始前に最大速度を拾う時間がありませんか? そして、プログラムバガネット、それを分散し続けていますが、彼が信号機の前で減速する時が来ましたか? これが発生した場合、ポイントScritで到達した速度を超えないように強制し、オプションの1つを実装します。 結果は次のとおりです。
そして、これをコードで実装する必要があります。 これは私がそれをやった方法で、詳細なコメントを提供します:
ヒンズー教のパターン
import random import math # : redlight = ("100", "10", "90", "1", # "-" . . 1 "1") # 1 , 0. . . # : greenlight = ("30", "120", "30", "1", "1") # : distance = ("400", "400", "250", "500", "500") # velocity = ("60", "60", "60", "60", "40") #- r=0 g=0 d=0 v=0 # : vcurrent=float(0) # : t=0 # : gtime=0 #, 100 / 15 . # : accel=float(100/(3.6*15)) #, . # : decel = float(accel*2) # , ( , 0): while r<=2: red=float(redlight[r]) grn=float(greenlight[g]) dis=float(distance[d]) vel=float(float(velocity[v])/3.6) vnext=float(float(velocity[v+1])/3.6) # accel : #saccel = float(((vcurrent*vel-vcurrent)/accel) + ((vel-vcurrent)*((vel-vcurrent)/(2*accel) saccel = float((vcurrent*(vel-vcurrent)/accel) + (vel-vcurrent)*(vel-vcurrent)/(2*accel)) # : , decel: scrit = float(dis-(vel/decel) - (vel*vel)/(2*decel)) # , . # : startingred = random.randint(0, (int(grn)-1)) print ("startingred= ", startingred) # , __ - : if vcurrent == vel: # , , : if vnext>= vcurrent: t = int (dis/vel) # , : if (t+startingred)%(red+grn)<=red: t = int (scrit/vel + (vel/decel) + red-((t+startingred)%(red+grn))) ### 2 vcurrent = 0 print (" , ") # , : else: t = int (dis/vel)### 1 vcurrent = vel print (" , ", " v=", vcurrent) # , , scrit: else: t = int ((scrit/vel) + (vcurrent - (vnext)/((vcurrent*(vcurrent - (vnext/(dis-scrit))- ((vcurrent - vnext)*(vcurrent - vnext)/(2*(dis-scrit)))))))) # , : if (t+startingred)%(red+grn)<=red: t = int (scrit/vel + (vel/decel)+ red-((t+startingred)%(red+grn)))### 2 vcurrent = 0 print (" , ") # - , , scrit : else: t = int (scrit/vel + (vcurrent - vnext)/((vcurrent*(vcurrent - (vnext/(dis-scrit))- ((vcurrent - vnext)*(vcurrent - vnext)/(2*(dis-scrit)))))))### 3 vcurrent = float(vnext/3.6) print (" , ", " v=", vcurrent) # , __ - : elif vcurrent < vel: # , scrit: vcrit=math.sqrt(2*accel*scrit+vcurrent*vcurrent) # scrit, scrit, vcrit , : if saccel >= scrit: # - , if vnext >= vcrit: t = int(((vcrit-vcurrent)/ accel) + (dis-scrit)/vcrit) # , : if (t+startingred)%(red+grn)<=red: t = int(((vcrit-vcurrent)/ accel) + ((dis-scrit)*2/vcrit) + red-((t+startingred)%(red+grn)))### 8 vcurrent = 0 print (" , , ") # , : else: t = int(((vcrit-vcurrent)/ accel) + (dis-scrit)/vcrit) ### 7 vcurrent = vcrit print (" , , ", " v=", vcurrent) # - else: t = int(((vcrit-vcurrent)/ accel) + (vcrit - vnext)/((vcrit*(vcrit - vnext)/(dis-scrit))- ((vcrit - vnext)*(vcrit - vnext)/(2*(dis-scrit))))) # , : if (t+startingred)%(red+grn)<=red: t = int(((vcrit-vcurrent)/ accel) + ((dis-scrit)*2/vcrit) + red-((t+startingred)%(red+grn)) ) ### 8 vcurrent = 0 print (" , , ") # - , , scrit : else: t = int(((vcrit-vcurrent)/ accel) + (vcrit - vnext)/((vcrit*(vcrit - vnext)/(dis-scrit))- ((vcrit - vnext)*(vcrit - vnext)/(2*(dis-scrit))))) ### 9 vcurrent = vnext print (" , , ", " v=", vcurrent) # scrit, , : else: # , , : if vnext>= vel: t = int(((vel- vcurrent)/accel) + (dis-saccel)/vel) # , : if (t+startingred)%(red+grn)<=red: t = int (((vel- vcurrent)/accel) + (scrit-saccel)/vel + (vel/decel)+ red-((t+startingred)%(red+grn)))### 5 vcurrent = 0 print (" , ") # , : else: t = int (((vel- vcurrent)/accel) + (dis-saccel)/vel)### 4 vcurrent = vel print (" , ", " v=", vcurrent) else: # , : if (t+startingred)%(red+grn)<=red: t = int (((vel- vcurrent)/accel) + (scrit-saccel)/vel + (vel/decel)+ red-((t+startingred)%(red+grn)))### 5 vcurrent = 0 print (" , ") # - , , scrit : else: print ("scrit ", scrit) print ("vcurrent ", vcurrent) t = int (((vel- vcurrent)/accel) +(scrit-saccel)/vel + (vel - vnext)/((vel*(vel - vnext)/(dis-scrit))-((vel - vnext)*(vel - vnext)/(2*(dis-scrit))))) ### 6 vcurrent = vnext print (" , ", " v=", vcurrent) # , __ - , : else: print ("ERROR: v current > v next") print (t) r+=1 g+=1 d+=1 v+=1 gtime+=t print (gtime)
.
0 100 15 , . , — , .
, , , . , — , . , 3-5 . , , — , . …
, . , . . — .
, . , , , . , : , . — ( ). , , :
t = int (scrit/vel + (vel/decel) + red-((t+startingred)%(red+grn)) <b>+ (red+grn)</b>)
- ? , , , . . , , / .
, , ? .
, . , . , , , , .

. , , , , 10000 :
import random import math n=0 overalltime=0 while n<=10000: redlight = ("100", "10", "90", "20", "60", "20", "20", "20", "20", "60", "20", "20", "90", "90", "100", "60", "100", "80", "80", "60", "90", "60", "120", "60", "80", "60", "1", "1") greenlight = ("30", "120", "30", "120", "40", "120", "120", "120", "120", "40", "120", "120", "40", "15", "20", "20", "20", "20", "20", "40", "30", "20", "40", "40", "20", "40", "1", "1") distance = ("400", "400", "250", "250", "250", "450", "300", "650", "1000", "450", "500", "900", "450", "400", "1100", "900", "600", "1000", "450", "450", "400", "450", "200", "500", "350", "400", "500", "500") velocity = ("80", "80", "80", "80", "80", "80", "60", "80", "80", "80", "80", "80", "80", "80", "80", "80", "80", "60", "80", "80", "80", "80", "80", "60", "80", "80", "80", "40") r=0 g=0 d=0 v=0 vcurrent=float(0) t=0 gtime=0 accel=float(100/(3.6*15)) decel = float(accel*2) while r<=26: red=float(redlight[r]) grn=float(greenlight[g]) dis=float(distance[d]) vel=float(float(velocity[v])/3.6) vnext=float(float(velocity[v+1])/3.6) saccel = float((vcurrent*(vel-vcurrent)/accel) + (vel-vcurrent)*(vel-vcurrent)/(2*accel)) scrit = float(dis-(vel/decel) - (vel*vel)/(2*decel)) startingred = random.randint(0, (int(grn)-1)) if vcurrent == vel: if vnext>= vcurrent: t = int (dis/vel) if (t+startingred)%(red+grn)<=red: t = int (scrit/vel + (vel/decel) + red-((t+startingred)%(red+grn))) ### 2 vcurrent = 0 else: t = int (dis/vel)### 1 vcurrent = vel else: t = int ((scrit/vel) + (vcurrent - (vnext)/((vcurrent*(vcurrent - (vnext/(dis-scrit))- ((vcurrent - vnext)*(vcurrent - vnext)/(2*(dis-scrit)))))))) if (t+startingred)%(red+grn)<=red: t = int (scrit/vel + (vel/decel)+ red-((t+startingred)%(red+grn)))### 2 vcurrent = 0 else: t = int (scrit/vel + (vcurrent - vnext)/((vcurrent*(vcurrent - (vnext/(dis-scrit))- ((vcurrent - vnext)*(vcurrent - vnext)/(2*(dis-scrit)))))))### 3 vcurrent = float(vnext/3.6) elif vcurrent < vel: vcrit=math.sqrt(2*accel*scrit+vcurrent*vcurrent) if saccel >= scrit: if vnext >= vcrit: t = int(((vcrit-vcurrent)/ accel) + (dis-scrit)/vcrit) if (t+startingred)%(red+grn)<=red: t = int(((vcrit-vcurrent)/ accel) + ((dis-scrit)*2/vcrit) + red-((t+startingred)%(red+grn)))### 8 vcurrent = 0 else: t = int(((vcrit-vcurrent)/ accel) + (dis-scrit)/vcrit) ### 7 vcurrent = vcrit else: t = int(((vcrit-vcurrent)/ accel) + (vcrit - vnext)/((vcrit*(vcrit - vnext)/(dis-scrit))- ((vcrit - vnext)*(vcrit - vnext)/(2*(dis-scrit))))) if (t+startingred)%(red+grn)<=red: t = int(((vcrit-vcurrent)/ accel) + ((dis-scrit)*2/vcrit) + red-((t+startingred)%(red+grn)) ) ### 8 vcurrent = 0 else: t = int(((vcrit-vcurrent)/ accel) + (vcrit - vnext)/((vcrit*(vcrit - vnext)/(dis-scrit))- ((vcrit - vnext)*(vcrit - vnext)/(2*(dis-scrit))))) ### 9 vcurrent = vnext else: if vnext>= vel: t = int(((vel- vcurrent)/accel) + (dis-saccel)/vel) if (t+startingred)%(red+grn)<=red: t = int (((vel- vcurrent)/accel) + (scrit-saccel)/vel + (vel/decel)+ red-((t+startingred)%(red+grn)))### 5 vcurrent = 0 else: t = int (((vel- vcurrent)/accel) + (dis-saccel)/vel)### 4 vcurrent = vel else: if (t+startingred)%(red+grn)<=red: t = int (((vel- vcurrent)/accel) + (scrit-saccel)/vel + (vel/decel)+ red-((t+startingred)%(red+grn)))### 5 vcurrent = 0 else: t = int (((vel- vcurrent)/accel) +(scrit-saccel)/vel + (vel - vnext)/((vel*(vel - vnext)/(dis-scrit))-((vel - vnext)*(vel - vnext)/(2*(dis-scrit))))) ### 6 vcurrent = vnext else: print ("ERROR: v current > v next") #print (t) r+=1 g+=1 d+=1 v+=1 gtime+=t dev=(1476-gtime)*(1476-gtime) #print (gtime) n+=1 dev+=dev overalltime+=gtime print ("mean= ", overalltime/n) print ("deviation= ", math.sqrt(dev/n))
« » — , .
: 10 /, , 50 /.
10 000 , raw data:
(, /; , ; ):
90 1466,6 0,5 80 1475,6 0,4 70 1479,7 0,9 60 1593,7 0,8 50 1701,3 0,5 40 1869,8 0,6

. , , Y , .
. -, . - 70 / . -, , 8% 13% « ». , , , . , , «» 10% .
, (, ), — .