0

以下のスクリプトを Python で作成し、それを相撲に実装して、車線内の 60 秒ごとに 2 つの誘導ループ間の車両数を取得しました。しかし、これは毎秒を与えます。

   #!/usr/bin/env python
   # -*-coding:Latin-1 -*
   import os, sys
   import optparse
   import subprocess
   import random
   import threading
   import time

   SUMO_HOME = "/home/khadija/Téléchargements/sumo-0.25.0"

   try:
      sys.path.append(os.path.join(SUMO_HOME, "tools"))
      from sumolib import checkBinary
   except ImportError:
       sys.exit("please declare environment variable 'SUMO_HOME' as the root directory of your sumo installation (it should contain folders 'bin', 'tools' and 'docs')")

   import traci
   routeFile="data2/cross.rou.xml"
   PORT = 8873

   #SIGN CONFIGURATIONS : NESW
   NSgreen = "GrGr"
   EWgreen = "rGrG"
   PROGRAM = (NSgreen,EWgreen)


   def nbr_veh_entr_indloop(i,o):
  # i et j se sont les inductions loop input et output
       threading.Timer(60.0, nbr_veh_entr_indloop).start()
       x = traci.inductionloop.getLastStepMeanLength(i) -  traci.inductionloop.getLastStepMeanLength(o)
       return x 
   def run():
       steps = open("data2/step.txt","w")
       traci.init(int(PORT))
       step = 0
       while step < 7200 :
             a = nbr_veh_entr_indloop("4i","40")
             k=str(a)
             print >> steps , "nombre des veh : " + k  #concaténation 
             traci.simulationStep() 
             step +=1



       steps.close()
       traci.close()
       sys.stdout.flush()


   def get_options():
       optParser = optparse.OptionParser()
       optParser.add_option("--nogui", action="store_true",
                     default=False, help="run the commandline version of sumo")
       options, args = optParser.parse_args()
       return options


# this is the main entry point of this script
   if __name__ == "__main__":
      options = get_options()

# this script has been called from the command line. It will start sumo as a
# server, then connect and run
      if options.nogui:
         sumoBinary = checkBinary('sumo')
      else:
          sumoBinary = checkBinary('sumo-gui')


     # this is the normal way of using traci. sumo is   started as a
     # subprocess and then the python script connects and runs
      sumoProcess = subprocess.Popen([sumoBinary, "-c",  "data2/cross.sumocfg", "--tripinfo-output","tripinfo.xml", "--remote-port",  str(PORT)], stdout=sys.stdout, stderr=sys.stderr)
      run()
      sumoProcess.wait()

事前に助けてくれてありがとう。

よろしく、

4

1 に答える 1

0

おそらく、ウォールクロックの 60 秒ごとではなく、シミュレーションの 60 秒ごとに値を取得したいので、ここではタイマーは無意味です。60 のシミュレーション ステップの後に値を尋ねるだけです (sumo のデフォルトのステップ長である 1 秒を使用すると仮定します)。したがって、次のように書くことができます。

     if step % 60 == 0:
         print >> steps , "nombre des veh : " + k

これにより、最後のステップの値が 60 ステップごとに出力されます。直前の値が必要な場合は、自分で集計 (合計) する必要があります。

于 2016-07-18T21:23:06.090 に答える