
منذ وقت ليس ببعيد ، بدأت المناقشات حول إدخال غرامة لتسريع أكثر من 10 كم / ساعة من المسموح به. تقليديًا ، يتم إجراؤها بطريقة
غير بناءة على الإنترنت ، لذلك أنا عمومًا لا أؤيد أي جانب من هذه holivars.
يتم تقليل حجج أصحاب السيارات في الكتلة إلى الزمجرة "أحتاج" ، والتي ، بالطبع ، ليست متطابقة. نسبة كبيرة من الأشخاص الذين يضطرون إلى القيادة مسافة 50 كم للعمل كل يوم عبر مواقع لا تغطيها وسائل النقل العام لا تقل عن حصة الأشخاص الذين يسافرون بالسيارة إلى "المخابز" ، والتي يمكن رؤيتها بوضوح من قبل هذه الآلات ذاتها التي غادرت في الصباح في البداية القليل من الثلج.
غالباً ما يسمع المتحضرون حججاً أحادية الجانب ، وأمثلة خاصة مخترقة عن البلدان الأوروبية ، التي يكون سكانها في بعض الأحيان مشابهين تمامًا لحركة المرور اليومية في موسكو ، مثل الحيل مثل إهانة الكليشيهات حول "النقل بالشاحنات السريع".
وعندما يحدث مثل هذا الموقف ، لا يوجد شيء أفضل من إسقاط مشاعر الآخرين ودعوة اثنين من المساعدين المحايدين - ماتان وبيثون.
ضعف موقف أصحاب السيارات - إنهم لا يطرحون طرقًا لحل مشاكلهم (في رأيي ، سيكون الحل هو إلغاء التطوير التلقائي لكل قطعة أرض خالية في المدن الكبيرة وتطوير المناطق حتى لا يضطر الناس للتعامل مع هجرة اليد العاملة إلى العاصمة في وطنهم الأم ، لكن من أنا مثل لتقديم مثل هذه الأشياء؟). الحضريون دائمًا لديهم مجموعة من الحجج والحلول الجاهزة المدعومة بالبيانات. لكن في بعض الأحيان تكون هذه دراسات عن مؤسسات جادة ، وأحيانًا لا تكون إحصاءات واضحة للغاية دون تقنين مناسب. تدفع هذه البيانات في معظم الحالات فكرة حدوث انخفاض عام في السرعة في المدن. والحجة الأكثر شيوعا في صالحها هي:
"على أي حال ، نظرًا لإشارات المرور ، لا يمكنك التحرك بأقصى سرعة طوال الوقت ، فلسوف يكون متوسط سرعتك أقل من المسموح به ، فلماذا لا تخفض من المسموح به قليلاً؟""هممم" ، فكرت دائمًا في هذه الحجة. إذا قمت بخفض الحد الأقصى المسموح به ، فسوف ينخفض المتوسط أيضًا بشكل طفيف. وما الذي يثبت ذلك - أنه يمكن تخفيضه مرة أخرى؟ أي نوع من
aporia هذا؟ تحتاج إلى التحقق من مدى صحة هذا.
أود أن أقدم لكم مقالة أخرى مع تحفظات من أجل توجيه انتقاداتها في التعليقات بطريقة بناءة:
- نعم ، أنا أعرف مدى كتابة الرمز القبيح ، لكن من المهم بالنسبة لي أن أعمل بشكل صحيح ، لست مبرمجًا بنفسي ، أكتب تعليقات على الكود في PM.
- نعم ، أعرف أن المحاكاة يمكن أن تكون أكثر صعوبة وأكمل وأكثر واقعية. لكنني لن أقبل اللوم على أنه لا يوجد تغيير في كثافة حركة المرور خلال اليوم ، وديناميات مختلفة من السيارات المختلفة ، والظروف الجوية ،
ومراحل القمر ، والدة المؤلف ، ولكن الملاحظات المعقولة ، ومؤشرات العيوب الخوارزمية ، والتعديلات النموذجية لأية مواقف لم يتم النظر فيها. في فهمي ، يكفي أن نجيب على سؤال بسيط من وجهة نظر الرياضيات:
نظرًا لحسن تقدير الحركة بسبب إشارات المرور ، هل يؤثر الانخفاض في الحد الأقصى للسرعة المسموح بها في الأقسام الفردية بشكل كبير على وقت السفر؟جوهر نموذجي بسيط للغاية. نظرًا لأن إشارة المرور هي دورة برنامج جاهزة ، تم بناء المحاكاة حول جزء من الطريق مع وجود إشارة مرور في النهاية ومراحله. التكرار التالي هو المحطة التالية من المسار بطولها وسرعتها المسموح بها ومرحلة إشارة المرور في النهاية.
تحتوي السيارة على ثلاث مراحل للحركة: تسارع منتظم ، حركة بأقصى سرعة مسموح بها لقسم معين ، بطيئة على قدم المساواة. يتم تنفيذها في 9 إصدارات.
- إذا انتقلت السيارة إلى القسم الحالي بنفس السرعة المسموح بها ، فإنها تتحرك بدون تغييرات ؛
- إذا تحرك أبطأ (أو وقفت) - ثم تسارع لأول مرة ؛
- لا يوجد خيار "كان يتحرك بشكل أسرع" ، وهذا هو السبب: إذا كانت السرعة المسموح بها أقل في الجزء التالي ، فهو يقلل من السرعة في هذا. هل هو منطقي؟
تتم إضافة المزيد من الخيارات إلى هذه الخيارات:
- ركوب السيارة أثناء ركبها أو تباطؤها ، ووصولها إلى نهاية القطعة باللون الأحمر. هذا يعني أنك بحاجة إلى التوقف أمام إشارة المرور. على افتراض أنه يتباطأ دائمًا بنفس التسارع ، فإننا نؤجل المسار الضروري للفرامل من إشارة المرور. هذه هي المسافة الحرجة ، عن طريق القياس مع سرعة الإقلاع الحرجة للطائرة. الآن ، إذا ، وفقًا للظروف ، تمر السيارة عبر ضوء أحمر ، فيجب أن تبدأ في التباطؤ إلى الصفر ، بدءًا من النقطة الحرجة ؛
- لعنة ، أو ربما الجزء قصير جداً أو السيارة نباتية لدرجة أنه لا يوجد لديها وقت لالتقاط أقصى سرعة قبل بداية Skrit؟ و baganet البرنامج ، ومواصلة تفريقه ، على الرغم من أن الوقت قد حان له أن يتباطأ أمام إشارة المرور؟ إذا حدث هذا ، فسوف نجبره على عدم زيادة السرعة عن السرعة التي تحققت عند نقطة Scrit ، ومن ثم سننفذ أحد الخيارات. هذه هي النتيجة:

ثم تحتاج إلى تنفيذ هذا في التعليمات البرمجية. هكذا فعلت ذلك ، مع تقديم تعليقات مفصلة:
نمط الهندوسية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% .
, (, ), — .