Interdependent Network Design Problem (INDP)#
Description
This analysis takes a decentralized approach to solve the Interdependent Network Design Problem (INDP), a family of centralized Mixed-Integer Programming (MIP) models, which find the optimal restoration strategy of disrupted networked systems subject to budget and operational constraints.
Contributors
Implementation: Hesam Talebiyan, Chen Wang, and NCSA IN-CORE Dev Team
Related publications
Talebiyan, Hesam. “Interdependent Restoration of Infrastructure Networks with Humans in the Loop: decentralized and strategic decision processes.” (2021) Diss., Rice University. https://hdl.handle.net/1911/111232
Input parameters
key name |
type |
name |
description |
---|---|---|---|
|
|
Network Type |
Type of the network, which is set to |
|
|
MAGS |
The earthquake return period. |
|
|
Sample Range |
The range of sample scenarios to be analyzed. |
|
|
Dislocation Data Type |
Dislocation Data Type. |
|
|
Return Model |
Type of the model for the return of the dislocated population. Options: step_function and linear. |
|
|
Testbed Name |
Sets the name of the testbed in analysis. |
|
|
Extra Commodity |
Multi-commodity parameters dictionary. |
|
|
Resource Caps |
List of resource caps or the number of available resources in each step of the analysis. Each item of the list is a dictionary whose items show the type of resource and the available number of that type of resource. For example: * If |
|
|
Layers |
List of layers in the analysis. |
|
|
Method |
There are two choices of method: 1. |
|
|
Time steps |
Number of time steps of the analysis. |
|
|
Time Resource |
If time resource is True, then the repair time for each element is considered in devising the restoration plans. |
|
|
Save Model |
If the optimization model should be saved to file. The default is False. |
|
|
Solver Engine |
Solver to use for optimization model. Default to use SCIP solver. |
|
|
Solver Engine Path |
Executable Path to the Solver to use for optimization model. Default to SCIP solver. |
|
|
Solve Time Limit |
Solving time limit in seconds. |
Input datasets
key name |
type |
name |
description |
---|---|---|---|
|
Water Facility Repair Cost |
Repair cost for each water facility. |
|
|
Water Facility Repair Time |
Repair time at certain functionality recovery for each class and limit state. |
|
|
Electric Power Facility Repair Cost |
Repair cost for each electric power facility. |
|
|
Electric Power Facility Repair Time |
Repair time at certain functionality recovery for each class and limit state. |
|
|
Water Pipeline Repair Cost |
Repair cost for each water pipeline. |
|
|
Water Pipeline Resotarting Time |
Pipeline restoration times. |
|
|
Electric Power Network Dataset |
Electric power network dataset. |
|
|
Water Network Dataset |
Water network dataset. |
|
|
Powerline Supply Demand Info |
Supply and demand information for powerlines. |
|
|
Electric Power Facility Supply Demand Info |
Supply and demand information for electric power facilities. |
|
|
Water Facility Supply Demand Info |
Supply and demand information for water facilities. |
|
|
Water Pipeline Supply Demand Info |
Supply and demand information for water pipelines. |
|
|
Interdependency |
Interdepenency between water and electric power facilities. |
|
|
Water Facility Failure State |
MCS failure state of water facilities. |
|
|
Water Facility Damage State |
MCS damage state of water facilities. |
|
|
Water Pipeline Failure State |
Failure state of pipeline from pipeline functionality analysis. |
|
|
Electric Power Facility Failure State |
MCS failure state of electric power facilities. |
|
|
Electric Power Facility Damage State |
MCS damage state of electric power facilities |
|
|
Population Dislocation |
Population dislocation. |
|
|
Dislocation time parameters |
Parameters for population dislocation time. |
|
|
Building To Electric Power Facility |
Relation between building and electric power facility. |
|
|
Building To Water Facility |
Relation between building and water facility. |
Output datasets
key name |
type |
parent key |
name |
description |
---|---|---|---|---|
|
Action |
Restoration action plans. |
||
|
Cost |
Restoration cost plans |
||
|
Run Time |
Run time duration (in second) to execute computations for each time step |
(* required)
Execution
code snippet:
indp_analysis = INDP(client)
indp_analysis.set_parameter("network_type", "from_csv")
indp_analysis.set_parameter("MAGS", [1000])
indp_analysis.set_parameter("sample_range", sample_range)
indp_analysis.set_parameter("dislocation_data_type", "incore")
indp_analysis.set_parameter("return_model", "step_function")
indp_analysis.set_parameter("testbed_name", "seaside")
indp_analysis.set_parameter("extra_commodity", {1: ["PW"], 3: []})
indp_analysis.set_parameter("RC", [{"budget": 240000, "time": 700}, {"budget": 300000, "time": 600}])
indp_analysis.set_parameter("layers", [1, 3])
indp_analysis.set_parameter("method", "INDP")
# indp_analysis.set_parameter("method", "TDINDP")
indp_analysis.set_parameter("t_steps", 10)
indp_analysis.set_parameter("time_resource", True)
indp_analysis.set_parameter("save_model", False)
# indp_analysis.set_parameter("save_model", True)
# scip
indp_analysis.set_parameter("solver_engine", "scip")
indp_analysis.set_parameter("solver_path", "/usr/local/bin/scip")
# glpk
# indp_analysis.set_parameter("solver_engine", "glpk")
# indp_analysis.set_parameter("solver_path", "/usr/local/bin/glpsol")
# cbc
# indp_analysis.set_parameter("solver_engine", "cbc")
# indp_analysis.set_parameter("solver_path", "/usr/local/bin/cbc")
# gurobi
# indp_analysis.set_parameter("solver_engine", "gurobi")
indp_analysis.set_parameter("solver_time_limit", 3600) # if not set default to never timeout
indp_analysis.set_input_dataset("wf_restoration_time", wf_restoration_time)
indp_analysis.set_input_dataset("wf_repair_cost", wf_repair_cost_result)
indp_analysis.set_input_dataset("epf_restoration_time", epf_restoration_time)
indp_analysis.set_input_dataset("epf_repair_cost", epf_repair_cost_result)
indp_analysis.set_input_dataset("pipeline_restoration_time", pipeline_restoration_time)
indp_analysis.set_input_dataset("pipeline_repair_cost", pipeline_repair_cost_result)
indp_analysis.set_input_dataset("power_network", power_network_dataset)
indp_analysis.set_input_dataset("water_network", water_network_dataset) # with distribution noes
indp_analysis.load_remote_input_dataset("powerline_supply_demand_info", powerline_supply_demand_info_id)
indp_analysis.load_remote_input_dataset("epf_supply_demand_info", epf_supply_demand_info_id)
indp_analysis.load_remote_input_dataset("wf_supply_demand_info", wf_supply_demand_info_id)
indp_analysis.load_remote_input_dataset("pipeline_supply_demand_info", pipeline_supply_demand_info_id)
indp_analysis.load_remote_input_dataset("interdep", interdep_id)
indp_analysis.set_input_dataset("wf_failure_state", wterfclty_sample_failure_state)
indp_analysis.set_input_dataset("wf_damage_state", wterfclty_sample_damage_states)
indp_analysis.set_input_dataset("pipeline_failure_state", pipeline_sample_failure_state)
indp_analysis.set_input_dataset("epf_failure_state", epf_sample_failure_state)
indp_analysis.set_input_dataset("epf_damage_state", epf_sample_damage_states)
indp_analysis.set_input_dataset("pop_dislocation", pop_dislocation_result)
# # optional inputs
# indp_analysis.load_remote_input_dataset("bldgs2elec", bldgs2elec_id)
# indp_analysis.load_remote_input_dataset("bldgs2wter", bldgs2wter_id)
# Run Analysis
indp_analysis.run_analysis()
full analysis: indp.ipynb