Cube API and how to automate a repetitive procedure in cube

Recently we are working on a research project that requires rank the links in a transportation network based on the network performance loss if a certain link is removed. We are using Tampa Bay Area Regional Planning Model for the project.

The method we are using for the ranking is as follows.

  • We remove a link from the network and run the travel demand model

  • We measure the network performance and compare it to the performance of unchanged network. Degradation in performance measures indicate the performance loss due to link removal.

  • We repeat this procedure for another link and in this way we apply this method for all the links in the network one by one.

As you can imagine, removing links from the network one by one and running the simulation every time is an enormous task and consume a lot of time. Especially it is a city level network and includes several thousands links.

In this circumstance, we were wondering if there is a way to automate the procedure. The ideal procedure should be something like the following,

  • We can write a script or code in CUBE API that can work within cube application flow to manipulate the input network file and remove the links one by one

  • In the next step the code will command the application manager to run the whole application group

  • In the end it will automatically store the required output files

If you can give us any direction towards how to do this or which platform can be used as CUBE API we would be grateful. Also can we write a script in CUBE or does cube has any built in application package that can perform such task? Answer to these question will be of great help.

Thanks

Hi
I’ve implemented a procedure similar to yours for studying that classifies the connections of a network according to their importance in maintaining adequate connectivity between all the pairs origin-destination. The aim of the work was to answer the following question: which are the most critical links for a mountainous road network? The network model includes all roads except local roads and is composed of 1,607 nodes (of which 293 represent centroids, 726 junctions, and 588 represent a
change in the road geometric features) and 3,500 bi-directional links.
Going into more detail, link flows have been first simulated for the base scenario
(undamaged network) to calculate
total-trip cost for the undamaged network. The software then allowed me to re-run the assignment procedure, each time removing a bidirectional
link j, calculating link flows and total-trip cost for the damaged network; in
the case where the link j was a cut link, the software also provided the unassigned
demand. The specific link was not phisically removed but simply add to a Group excluded from essingment.

main steps of procedure:

  1. create a LOOP app

the loop variable name is id_loop and varies from 1 to the max link number (in my case 3500)
in the input network each link has been coded with an ID number and a field namend CLOSED1. ID number
and CLOSED1 must be the same wtin non interval between links.

  1. the highway script is the following and permit to close one link at time and assing:

UN PGM=HIGHWAY PRNFILE=“E:\lavori\2010\0310 - prov di bz\CUBE\BASE\EX_MULTI_ASSEGNAZIONE_DUE\DAM_TON\MAHWY00D.PRN” MSG=‘due Highway Assignment’
FILEI NETI = …RC_VUL.NET"
FILEI MATI[1] = …\POST_STIMA_F_R1.MAT"
FILEO NETO = …DAM_DUE.NET"
FILEO MATO[1] = …COST.MAT",
MO=1-3 NAME=COST_TOT TIME DISTANCE
TURNS N=1-99999
PARAMETERS MAXITERS = 99 GAP=.00001
PARAMETERS COMBINE = EQUI, GAP = 0.001, maxiters=99
PARAMETERS COMBINE = EQUI, GAP = 0.01, maxiters=99
PROCESS PHASE=LINKREAD
; USE THE USER SUPPLIED ALPHA AND BETA FOR THE BPR CURVE
; LW.ALPHA={alpha}
; LW.BETA={beta}
;distance=li.distance/1000
LINKCLASS=LI.CURVA
C=LI.CAPACITY
T0=li.distance/li.speed60
;time=li.time
If (LI.CLOSED1=@ID_LOOP@) ADDTOGROUP=1
ENDPROCESS
PROCESS PHASE=ILOOP
PATHLOAD PATH = TIME VOL[1]=MI.1.1, EXCLUDEGROUP=1, MW[2]=PATHTRACE(TIME), MW[3]=PATHTRACE(LI.DISTANCE), MW[11]=MW[2]MI.1.1
MW[11][I]= 0
MW[1] = MW[11]
MW[2][I] = 0
MW[3][I] = 0
ENDPROCESS
PROCESS PHASE=ADJUST
FUNCTION TC[1]=T0
FUNCTION TC[2]=T0
(1+1
((V/10)/©)^3) ; congested time equation
FUNCTION TC[3]=T0
(1+3
((V/10)/©)^6) ; congested time equation
ENDPROCESS
ENDRUN**

  1. Matrix was used to calculate total_cost and demand not assigned for each assignement end write in record file
    (matrix#3-5)

  2. before the end of each loop, wrote the total_cost into and not assigned demand into a specific network field (network #5)

  3. at the end of loop you will have 3500 network assignend and you can aggregate into one using
    a new ILOOP procedure. Final network will be the first “undamaged” with 2 new field contaning total_cost and not assigned demand related to the specific link

i hope this cal help you, procedure is really complex but it vary fast and powerful. I have tryied with other software but only cube allows this approch. If you like
you can read results of my works here:

The Evaluation of Road Network Vulnerability in Mountainous Areas: A Case Study
Federico Rupi, Silvia Bernardi, Guido Rossi & Antonio Danesi
Networks and Spatial Economics A Journal of Infrastructure Modeling and Computation
ISSN 1566-113X

2 Likes

Thanks a lot for the reply. I will definitely try your instruction and get back to you with whatever result I get. I did read the article you mentioned and benefitted from your findings. Thanks again for such quick reply.